diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 00000000000..3829daa7291
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,32 @@
+---
+name: Bug report
+about: Create a report to help us improve
+
+---
+
+NOTE: Before filing a ticket, please see the following URL:
+https://github.com/jamesagnew/hapi-fhir/wiki/Getting-Help
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Environment (please complete the following information):**
+ - HAPI FHIR Version
+ - OS: [e.g. iOS]
+ - Browser [e.g. chrome, safari]
+
+**Additional context**
+Add any other context about the problem here.
diff --git a/.travis.yml b/.travis.yml
index 72e6dd3adc5..52908fa3d78 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -19,11 +19,14 @@ cache:
 
 install: /bin/true
 
-# This seems to be required to get travis to set Xmx4g, per https://github.com/travis-ci/travis-ci/issues/3893
 before_script:
+# This seems to be required to get travis to set Xmx4g, per https://github.com/travis-ci/travis-ci/issues/3893
   - export MAVEN_SKIP_RC=true
+# Sometimes things get restored from the cache with bad permissions. See https://github.com/travis-ci/travis-ci/issues/9630
+  - sudo chmod -R 777 "$HOME/.m2/repository";
+  - sudo chown -R travis:travis "$HOME/.m2/repository";
 
 script:
 #  - mvn -e -B clean install && cd hapi-fhir-ra && mvn -e -B -DTRAVIS_JOB_ID=$TRAVIS_JOB_ID clean test jacoco:report coveralls:report
 #  - mvn -Dci=true -e -B -P ALLMODULES,NOPARALLEL,ERRORPRONE clean install && cd hapi-fhir-jacoco && mvn -e -B -DTRAVIS_JOB_ID=$TRAVIS_JOB_ID jacoco:report coveralls:report 
-  - mvn -Dci=true -e -B -P ALLMODULES,REDUCED_JPA_TESTS,ERRORPRONE,JACOCO clean install && cd hapi-fhir-jacoco && mvn -e -B -DTRAVIS_JOB_ID=$TRAVIS_JOB_ID jacoco:report coveralls:report
+  - mvn -Dci=true -e -B -P ALLMODULES,REDUCED_JPA_TESTS,ERRORPRONE,JACOCO clean install && cd hapi-fhir-jacoco && mvn -e -B -DTRAVIS_JOB_ID=$TRAVIS_JOB_ID jacoco:report coveralls:report;
diff --git a/README.md b/README.md
index ad66edaa9d7..d753df33492 100644
--- a/README.md
+++ b/README.md
@@ -17,3 +17,5 @@ A demonstration of this project is available here:
 http://hapi.fhir.org/
 
 This project is Open Source, licensed under the Apache Software License 2.0.
+
+Please see [this wiki page](https://github.com/jamesagnew/hapi-fhir/wiki/Getting-Help) for information on where to get help with HAPI FHIR. Please see [Smile CDR](https://smilecdr.com) for information on commercial support.
diff --git a/example-projects/hapi-fhir-jaxrs-sse/pom.xml b/example-projects/hapi-fhir-jaxrs-sse/pom.xml
index c4c26d8e718..d52505386c2 100644
--- a/example-projects/hapi-fhir-jaxrs-sse/pom.xml
+++ b/example-projects/hapi-fhir-jaxrs-sse/pom.xml
@@ -4,8 +4,8 @@
 	<parent>
 		<groupId>ca.uhn.hapi.fhir</groupId>
 		<artifactId>hapi-fhir</artifactId>
-		<version>2.3-SNAPSHOT</version>
-		<relativePath>../hapi-deployable-pom/pom.xml</relativePath>
+		<version>2.5-SNAPSHOT</version>
+		<relativePath>../../pom.xml</relativePath>
 	</parent>
 	<artifactId>hapi-fhir-jaxrs-sse</artifactId>
 	<build>
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/pom.xml b/example-projects/hapi-fhir-jpaserver-cds-example/pom.xml
index f2ff197e500..48cb3d5c7a3 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/pom.xml
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/pom.xml
@@ -31,12 +31,6 @@
 
 	<dependencies>
 
-		<dependency>
-			<groupId>org.opencds.cqf</groupId>
-			<artifactId>cqf-ruler</artifactId>
-			<version>0.1.0-SNAPSHOT</version>
-		</dependency>
-
 		<dependency>
 			<groupId>org.eclipse.jetty.websocket</groupId>
 			<artifactId>websocket-api</artifactId>
@@ -90,6 +84,12 @@
 			<scope>provided</scope>
 		</dependency>
 
+		<dependency>
+			<groupId>org.opencds.cqf</groupId>
+			<artifactId>cqf-ruler</artifactId>
+			<version>0.1.2-SNAPSHOT</version>
+		</dependency>
+
 		<!-- HAPI-FHIR uses Logback for logging support. The logback library is included automatically by Maven as a part of the hapi-fhir-base dependency, but you also need to include a logging library. Logback
 			is used here, but log4j would also be fine. -->
 		<dependency>
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/CdsHooksServerExample.java b/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/CdsHooksServerExample.java
index e17bc747437..67b3a399fd3 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/CdsHooksServerExample.java
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/CdsHooksServerExample.java
@@ -8,7 +8,7 @@ public class CdsHooksServerExample extends CdsServicesServlet {
 //	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 //		// Change how requests are handled
 //	}
-//
+
 //	@Override
 //	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 //		// Change discovery response
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/CdsServerExample.java b/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/CdsServerExample.java
index ed5e7185cd4..2031c6de0d7 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/CdsServerExample.java
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/CdsServerExample.java
@@ -1,165 +1,19 @@
-
 package ca.uhn.fhir.jpa.cds.example;
 
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.context.FhirVersionEnum;
-import ca.uhn.fhir.jpa.dao.DaoConfig;
-import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
-import ca.uhn.fhir.jpa.provider.dstu3.JpaConformanceProviderDstu3;
-import ca.uhn.fhir.jpa.provider.dstu3.JpaSystemProviderDstu3;
-import ca.uhn.fhir.jpa.provider.dstu3.TerminologyUploaderProviderDstu3;
-import ca.uhn.fhir.jpa.rp.dstu3.ActivityDefinitionResourceProvider;
-import ca.uhn.fhir.jpa.rp.dstu3.MeasureResourceProvider;
-import ca.uhn.fhir.jpa.rp.dstu3.PlanDefinitionResourceProvider;
-import ca.uhn.fhir.jpa.search.DatabaseBackedPagingProvider;
-import ca.uhn.fhir.narrative.DefaultThymeleafNarrativeGenerator;
-import ca.uhn.fhir.rest.api.EncodingEnum;
-import ca.uhn.fhir.rest.server.ETagSupportEnum;
-import ca.uhn.fhir.rest.server.IResourceProvider;
-import ca.uhn.fhir.rest.server.RestfulServer;
-import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
-import org.hl7.fhir.dstu3.model.Bundle;
-import org.hl7.fhir.dstu3.model.Meta;
-import org.opencds.cqf.providers.FHIRActivityDefinitionResourceProvider;
-import org.opencds.cqf.providers.FHIRMeasureResourceProvider;
-import org.opencds.cqf.providers.FHIRPlanDefinitionResourceProvider;
-import org.springframework.web.context.ContextLoaderListener;
-import org.springframework.web.context.WebApplicationContext;
+import org.opencds.cqf.servlet.BaseServlet;
 
 import javax.servlet.ServletException;
-import java.util.Collection;
-import java.util.List;
 
-public class CdsServerExample extends RestfulServer {
+public class CdsServerExample extends BaseServlet {
 
-	@SuppressWarnings("unchecked")
-	@Override
-	protected void initialize() throws ServletException {
-		super.initialize();
+    // Default setup - STU3 support only
+    // Source project location: https://github.com/DBCG/cqf-ruler
 
-		FhirVersionEnum fhirVersion = FhirVersionEnum.DSTU3;
-		setFhirContext(new FhirContext(fhirVersion));
+    @SuppressWarnings("unchecked")
+    @Override
+    protected void initialize() throws ServletException {
+        super.initialize();
 
-		// Get the spring context from the web container (it's declared in web.xml)
-		WebApplicationContext myAppCtx = ContextLoaderListener.getCurrentWebApplicationContext();
-
-		if (myAppCtx == null) {
-			throw new ServletException("Error retrieving spring context from the web container");
-		}
-
-		String resourceProviderBeanName = "myResourceProvidersDstu3";
-		List<IResourceProvider> beans = myAppCtx.getBean(resourceProviderBeanName, List.class);
-		setResourceProviders(beans);
-		
-		Object systemProvider = myAppCtx.getBean("mySystemProviderDstu3", JpaSystemProviderDstu3.class);
-		setPlainProviders(systemProvider);
-
-		/*
-		 * The conformance provider exports the supported resources, search parameters, etc for
-		 * this server. The JPA version adds resource counts to the exported statement, so it
-		 * is a nice addition.
-		 */
-		IFhirSystemDao<Bundle, Meta> systemDao = myAppCtx.getBean("mySystemDaoDstu3", IFhirSystemDao.class);
-		JpaConformanceProviderDstu3 confProvider =
-			new JpaConformanceProviderDstu3(this, systemDao, myAppCtx.getBean(DaoConfig.class));
-		confProvider.setImplementationDescription("Example Server");
-		setServerConformanceProvider(confProvider);
-
-		/*
-		 * Enable ETag Support (this is already the default)
-		 */
-		setETagSupport(ETagSupportEnum.ENABLED);
-
-		/*
-		 * This server tries to dynamically generate narratives
-		 */
-		FhirContext ctx = getFhirContext();
-		ctx.setNarrativeGenerator(new DefaultThymeleafNarrativeGenerator());
-
-		/*
-		 * Default to JSON and pretty printing
-		 */
-		setDefaultPrettyPrint(true);
-		setDefaultResponseEncoding(EncodingEnum.JSON);
-
-		/*
-		 * -- New in HAPI FHIR 1.5 --
-		 * This configures the server to page search results to and from
-		 * the database, instead of only paging them to memory. This may mean
-		 * a performance hit when performing searches that return lots of results,
-		 * but makes the server much more scalable.
-		 */
-		setPagingProvider(myAppCtx.getBean(DatabaseBackedPagingProvider.class));
-
-		/*
-		 * Load interceptors for the server from Spring (these are defined in FhirServerConfig.java)
-		 */
-		Collection<IServerInterceptor> interceptorBeans = myAppCtx.getBeansOfType(IServerInterceptor.class).values();
-		for (IServerInterceptor interceptor : interceptorBeans) {
-			this.registerInterceptor(interceptor);
-		}
-
-		/*
-		* 	Adding resource providers from the cqf-ruler
-		*/
-		// Measure processing
-		FHIRMeasureResourceProvider measureProvider = new FHIRMeasureResourceProvider(getResourceProviders());
-		MeasureResourceProvider jpaMeasureProvider = (MeasureResourceProvider) getProvider("Measure");
-		measureProvider.setDao(jpaMeasureProvider.getDao());
-		measureProvider.setContext(jpaMeasureProvider.getContext());
-
-		// PlanDefinition processing
-		FHIRPlanDefinitionResourceProvider planDefProvider = new FHIRPlanDefinitionResourceProvider(getResourceProviders());
-		PlanDefinitionResourceProvider jpaPlanDefProvider =
-			(PlanDefinitionResourceProvider) getProvider("PlanDefinition");
-		planDefProvider.setDao(jpaPlanDefProvider.getDao());
-		planDefProvider.setContext(jpaPlanDefProvider.getContext());
-
-		// ActivityDefinition processing
-		FHIRActivityDefinitionResourceProvider actDefProvider = new FHIRActivityDefinitionResourceProvider(getResourceProviders());
-		ActivityDefinitionResourceProvider jpaActDefProvider =
-			(ActivityDefinitionResourceProvider) getProvider("ActivityDefinition");
-		actDefProvider.setDao(jpaActDefProvider.getDao());
-		actDefProvider.setContext(jpaActDefProvider.getContext());
-
-		try {
-			unregisterProvider(jpaMeasureProvider);
-			unregisterProvider(jpaPlanDefProvider);
-			unregisterProvider(jpaActDefProvider);
-		} catch (Exception e) {
-			throw new ServletException("Unable to unregister provider: " + e.getMessage());
-		}
-
-		registerProvider(measureProvider);
-		registerProvider(planDefProvider);
-		registerProvider(actDefProvider);
-
-		/*
-		 * If you are hosting this server at a specific DNS name, the server will try to 
-		 * figure out the FHIR base URL based on what the web container tells it, but
-		 * this doesn't always work. If you are setting links in your search bundles that
-		 * just refer to "localhost", you might want to use a server address strategy:
-		 */
-		//setServerAddressStrategy(new HardcodedServerAddressStrategy("http://mydomain.com/fhir/baseDstu2"));
-		
-		/*
-		 * If you are using DSTU3+, you may want to add a terminology uploader, which allows 
-		 * uploading of external terminologies such as Snomed CT. Note that this uploader
-		 * does not have any security attached (any anonymous user may use it by default)
-		 * so it is a potential security vulnerability. Consider using an AuthorizationInterceptor
-		 * with this feature.
-		 */
-		registerProvider(myAppCtx.getBean(TerminologyUploaderProviderDstu3.class));
-	}
-
-	public IResourceProvider getProvider(String name) {
-
-		for (IResourceProvider res : getResourceProviders()) {
-			if (res.getResourceType().getSimpleName().equals(name)) {
-				return res;
-			}
-		}
-
-		throw new IllegalArgumentException("This should never happen!");
-	}
+        // Add additional config and/or resource providers
+    }
 }
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/FhirServerConfig.java b/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/FhirServerConfig.java
deleted file mode 100644
index 112ff1a5418..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/FhirServerConfig.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package ca.uhn.fhir.jpa.cds.example;
-
-import ca.uhn.fhir.jpa.config.BaseJavaConfigDstu3;
-import ca.uhn.fhir.jpa.dao.DaoConfig;
-import ca.uhn.fhir.jpa.search.LuceneSearchMappingFactory;
-import ca.uhn.fhir.jpa.util.DerbyTenSevenHapiFhirDialect;
-import ca.uhn.fhir.jpa.util.SubscriptionsRequireManualActivationInterceptorDstu3;
-import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
-import ca.uhn.fhir.rest.server.interceptor.LoggingInterceptor;
-import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor;
-import org.apache.commons.dbcp2.BasicDataSource;
-import org.apache.commons.lang3.time.DateUtils;
-import org.hibernate.jpa.HibernatePersistenceProvider;
-import org.springframework.beans.factory.annotation.Autowire;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.orm.jpa.JpaTransactionManager;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-import javax.persistence.EntityManagerFactory;
-import javax.sql.DataSource;
-import java.util.Properties;
-
-/**
- * This is the primary configuration file for the example server
- */
-@Configuration
-@EnableTransactionManagement()
-public class FhirServerConfig extends BaseJavaConfigDstu3 {
-
-	/**
-	 * Configure FHIR properties around the the JPA server via this bean
-	 */
-	@Bean()
-	public DaoConfig daoConfig() {
-		DaoConfig retVal = new DaoConfig();
-		retVal.setSubscriptionEnabled(true);
-		retVal.setSubscriptionPollDelay(5000);
-		retVal.setSubscriptionPurgeInactiveAfterMillis(DateUtils.MILLIS_PER_HOUR);
-		retVal.setAllowMultipleDelete(true);
-		return retVal;
-	}
-
-	/**
-	 * The following bean configures the database connection. The 'url' property value of "jdbc:derby:directory:jpaserver_derby_files;create=true" indicates that the server should save resources in a
-	 * directory called "jpaserver_derby_files".
-	 * 
-	 * A URL to a remote database could also be placed here, along with login credentials and other properties supported by BasicDataSource.
-	 */
-	@Bean(destroyMethod = "close")
-	public DataSource dataSource() {
-		BasicDataSource retVal = new BasicDataSource();
-		retVal.setDriver(new org.apache.derby.jdbc.EmbeddedDriver());
-		retVal.setUrl("jdbc:derby:directory:target/jpaserver_derby_files;create=true");
-		retVal.setUsername("");
-		retVal.setPassword("");
-		return retVal;
-	}
-
-	@Override
-	@Bean()
-	public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
-		LocalContainerEntityManagerFactoryBean retVal = super.entityManagerFactory();
-		retVal.setPersistenceUnitName("HAPI_PU");
-		retVal.setDataSource(dataSource());
-		retVal.setJpaProperties(jpaProperties());
-		return retVal;
-	}
-
-	private Properties jpaProperties() {
-		Properties extraProperties = new Properties();
-		extraProperties.put("hibernate.dialect", DerbyTenSevenHapiFhirDialect.class.getName());
-		extraProperties.put("hibernate.format_sql", "true");
-		extraProperties.put("hibernate.show_sql", "false");
-		extraProperties.put("hibernate.hbm2ddl.auto", "update");
-		extraProperties.put("hibernate.jdbc.batch_size", "20");
-		extraProperties.put("hibernate.cache.use_query_cache", "false");
-		extraProperties.put("hibernate.cache.use_second_level_cache", "false");
-		extraProperties.put("hibernate.cache.use_structured_entries", "false");
-		extraProperties.put("hibernate.cache.use_minimal_puts", "false");
-		extraProperties.put("hibernate.search.model_mapping", LuceneSearchMappingFactory.class.getName());
-		extraProperties.put("hibernate.search.default.directory_provider", "filesystem");
-		extraProperties.put("hibernate.search.default.indexBase", "target/lucenefiles");
-		extraProperties.put("hibernate.search.lucene_version", "LUCENE_CURRENT");
-//		extraProperties.put("hibernate.search.default.worker.execution", "async");
-		return extraProperties;
-	}
-
-	/**
-	 * Do some fancy logging to create a nice access log that has details about each incoming request.
-	 */
-	public IServerInterceptor loggingInterceptor() {
-		LoggingInterceptor retVal = new LoggingInterceptor();
-		retVal.setLoggerName("fhirtest.access");
-		retVal.setMessageFormat(
-				"Path[${servletPath}] Source[${requestHeader.x-forwarded-for}] Operation[${operationType} ${operationName} ${idOrResourceName}] UA[${requestHeader.user-agent}] Params[${requestParameters}] ResponseEncoding[${responseEncodingNoDefault}]");
-		retVal.setLogExceptions(true);
-		retVal.setErrorMessageFormat("ERROR - ${requestVerb} ${requestUrl}");
-		return retVal;
-	}
-
-	/**
-	 * This interceptor adds some pretty syntax highlighting in responses when a browser is detected
-	 */
-	@Bean(autowire = Autowire.BY_TYPE)
-	public IServerInterceptor responseHighlighterInterceptor() {
-		ResponseHighlighterInterceptor retVal = new ResponseHighlighterInterceptor();
-		return retVal;
-	}
-
-	@Bean(autowire = Autowire.BY_TYPE)
-	public IServerInterceptor subscriptionSecurityInterceptor() {
-		SubscriptionsRequireManualActivationInterceptorDstu3 retVal = new SubscriptionsRequireManualActivationInterceptorDstu3();
-		return retVal;
-	}
-
-	@Bean()
-	public JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
-		JpaTransactionManager retVal = new JpaTransactionManager();
-		retVal.setEntityManagerFactory(entityManagerFactory);
-		return retVal;
-	}
-
-}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/FhirTesterConfig.java b/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/FhirTesterConfig.java
deleted file mode 100644
index 6fbc660b27d..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/java/ca/uhn/fhir/jpa/cds/example/FhirTesterConfig.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package ca.uhn.fhir.jpa.cds.example;
-
-import ca.uhn.fhir.context.FhirVersionEnum;
-import ca.uhn.fhir.to.FhirTesterMvcConfig;
-import ca.uhn.fhir.to.TesterConfig;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Import;
-
-//@formatter:off
-
-/**
- * This spring config file configures the web testing module. It serves two
- * purposes:
- * 1. It imports FhirTesterMvcConfig, which is the spring config for the
- *    tester itself
- * 2. It tells the tester which server(s) to talk to, via the testerConfig()
- *    method below
- */
-@Configuration
-@Import(FhirTesterMvcConfig.class)
-public class FhirTesterConfig {
-
-	/**
-	 * This bean tells the testing webpage which servers it should configure itself
-	 * to communicate with. In this example we configure it to talk to the local
-	 * server, as well as one public server. If you are creating a project to
-	 * deploy somewhere else, you might choose to only put your own server's
-	 * address here.
-	 *
-	 * Note the use of the ${serverBase} variable below. This will be replaced with
-	 * the base URL as reported by the server itself. Often for a simple Tomcat
-	 * (or other container) installation, this will end up being something
-	 * like "http://localhost:8080/hapi-fhir-jpaserver-example". If you are
-	 * deploying your server to a place with a fully qualified domain name,
-	 * you might want to use that instead of using the variable.
-	 */
-	@Bean
-	public TesterConfig testerConfig() {
-		TesterConfig retVal = new TesterConfig();
-		retVal
-			.addServer()
-				.withId("home")
-				.withFhirVersion(FhirVersionEnum.DSTU3)
-				.withBaseUrl("${serverBase}/baseDstu3")
-				.withName("Local Tester")
-			.addServer()
-				.withId("hapi")
-				.withFhirVersion(FhirVersionEnum.DSTU3)
-				.withBaseUrl("http://fhirtest.uhn.ca/baseDstu3")
-				.withName("Public HAPI Test Server");
-		return retVal;
-	}
-
-}
-//@formatter:on
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/webapp/WEB-INF/web.xml b/example-projects/hapi-fhir-jpaserver-cds-example/src/main/webapp/WEB-INF/web.xml
index 4dbadc86c1c..c1ab711d504 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/main/webapp/WEB-INF/web.xml
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/main/webapp/WEB-INF/web.xml
@@ -1,5 +1,5 @@
 <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0"
-			xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ./xsd/web-app_3_0.xsd">
+		 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ./xsd/web-app_3_0.xsd" metadata-complete="true">
 
 	<listener>
 		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
@@ -13,7 +13,7 @@
 	<context-param>
 		<param-name>contextConfigLocation</param-name>
 		<param-value>
-			ca.uhn.fhir.jpa.cds.example.FhirServerConfig
+			org.opencds.cqf.config.FhirServerConfigDstu3
 		</param-value>
 	</context-param>
 
@@ -34,17 +34,17 @@
 		</init-param>
 		<init-param>
 			<param-name>contextConfigLocation</param-name>
-			<param-value>ca.uhn.fhir.jpa.cds.example.FhirTesterConfig</param-value>
+			<param-value>org.opencds.cqf.config.FhirTesterConfigDstu3</param-value>
 		</init-param>
 		<load-on-startup>2</load-on-startup>
 	</servlet>
 
 	<servlet>
-		<servlet-name>fhirServlet</servlet-name>
+		<servlet-name>cdsServerExample</servlet-name>
 		<servlet-class>ca.uhn.fhir.jpa.cds.example.CdsServerExample</servlet-class>
 		<init-param>
 			<param-name>ImplementationDescription</param-name>
-			<param-value>FHIR JPA Server</param-value>
+			<param-value>FHIR CQF Ruler-of-All-Knowledge JPA Server</param-value>
 		</init-param>
 		<init-param>
 			<param-name>FhirVersion</param-name>
@@ -53,6 +53,16 @@
 		<load-on-startup>1</load-on-startup>
 	</servlet>
 
+	<servlet-mapping>
+		<servlet-name>cdsServerExample</servlet-name>
+		<url-pattern>/baseDstu3/*</url-pattern>
+	</servlet-mapping>
+
+	<servlet-mapping>
+		<servlet-name>spring</servlet-name>
+		<url-pattern>/tester/*</url-pattern>
+	</servlet-mapping>
+
 	<servlet-mapping>
 		<servlet-name>cdsServicesServlet</servlet-name>
 		<url-pattern>/cds-services</url-pattern>
@@ -63,18 +73,6 @@
 		<url-pattern>/cds-services/*</url-pattern>
 	</servlet-mapping>
 
-	<servlet-mapping>
-		<servlet-name>fhirServlet</servlet-name>
-		<url-pattern>/baseDstu3/*</url-pattern>
-	</servlet-mapping>
-
-	<servlet-mapping>
-		<servlet-name>spring</servlet-name>
-		<url-pattern>/</url-pattern>
-	</servlet-mapping>
-
-
-
 	<!-- This filters provide support for Cross Origin Resource Sharing (CORS) -->
 	<filter>
 		<filter-name>CORS Filter</filter-name>
@@ -92,7 +90,7 @@
 		<init-param>
 			<description>A comma separated list of allowed headers when making a non simple CORS request.</description>
 			<param-name>cors.allowed.headers</param-name>
-			<param-value>X-FHIR-Starter,Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers,Prefer</param-value>
+			<param-value>X-FHIR-Starter,Origin,Accept,Authorization,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
 		</init-param>
 		<init-param>
 			<description>A comma separated list non-standard response headers that will be exposed to XHR2 object.</description>
@@ -120,5 +118,4 @@
 		<url-pattern>/*</url-pattern>
 	</filter-mapping>
 
-
 </web-app>
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/java/ca/uhn/fhir/jpa/cds/example/CdsExampleTests.java b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/java/ca/uhn/fhir/jpa/cds/example/CdsExampleTests.java
index 5501598b2d8..2fc033c6b76 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/java/ca/uhn/fhir/jpa/cds/example/CdsExampleTests.java
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/java/ca/uhn/fhir/jpa/cds/example/CdsExampleTests.java
@@ -40,6 +40,7 @@ public class CdsExampleTests {
 	@BeforeClass
 	public static void beforeClass() throws Exception {
 
+		// Configure and spin up server
 		String path = Paths.get("").toAbsolutePath().toString();
 
 		ourPort = RandomServerPortProvider.findFreePort();
@@ -60,11 +61,10 @@ public class CdsExampleTests {
 		ourClient = ourCtx.newRestfulGenericClient(ourServerBase);
 		ourClient.registerInterceptor(new LoggingInterceptor(true));
 
-		// Load test data
-		// Normally, I would use a transaction bundle, but issues with the random ports prevents that...
-		// So, doing it the old-fashioned way =)
+		// Load terminology for measure tests (HEDIS measures)
+		putResource("measure-terminology-bundle.json", "");
 
-		// General
+		// load test data and conversion library for $apply operation tests
 		putResource("general-practitioner.json", "Practitioner-12208");
 		putResource("general-patient.json", "Patient-12214");
 		putResource("general-fhirhelpers-3.json", "FHIRHelpers");
@@ -79,31 +79,129 @@ public class CdsExampleTests {
 		InputStream is = CdsExampleTests.class.getResourceAsStream(resourceFileName);
 		Scanner scanner = new Scanner(is).useDelimiter("\\A");
 		String json = scanner.hasNext() ? scanner.next() : "";
-		IBaseResource resource = ourCtx.newJsonParser().parseResource(json);
-		ourClient.update(id, resource);
+
+		boolean isJson = resourceFileName.endsWith("json");
+
+		IBaseResource resource = isJson ? ourCtx.newJsonParser().parseResource(json) : ourCtx.newXmlParser().parseResource(json);
+
+		if (resource instanceof Bundle) {
+			ourClient.transaction().withBundle((Bundle) resource).execute();
+		}
+		else {
+			ourClient.update().resource(resource).withId(id).execute();
+		}
 	}
 
+	/*
+	 *
+	 * 	Testing Individual Measure
+	 * 	This test patient satisfies all the group population criteria for this measure.
+	 *
+	 * */
 	@Test
-	public void MeasureProcessingTest() {
-		putResource("measure-processing-library.json", "col-logic");
-		putResource("measure-processing-measure.json", "col");
-		putResource("measure-processing-procedure.json", "Procedure-9");
-		putResource("measure-processing-condition.json", "Condition-13");
-		putResource("measure-processing-valueset-1.json", "2.16.840.1.113883.3.464.1003.108.11.1001");
-		putResource("measure-processing-valueset-2.json", "2.16.840.1.113883.3.464.1003.198.12.1019");
-		putResource("measure-processing-valueset-3.json", "2.16.840.1.113883.3.464.1003.108.12.1020");
-		putResource("measure-processing-valueset-4.json", "2.16.840.1.113883.3.464.1003.198.12.1010");
-		putResource("measure-processing-valueset-5.json", "2.16.840.1.113883.3.464.1003.198.12.1011");
+	public void PatientMeasureTest() {
+		// load measure specific test data
+		putResource("patient-measure-test-bundle.json", "");
 
 		Parameters inParams = new Parameters();
-		inParams.addParameter().setName("patient").setValue(new StringType("Patient-12214"));
-		inParams.addParameter().setName("startPeriod").setValue(new DateType("2001-01-01"));
-		inParams.addParameter().setName("endPeriod").setValue(new DateType("2015-03-01"));
+		inParams.addParameter().setName("patient").setValue(new StringType("Patient/Patient-6529"));
+		inParams.addParameter().setName("periodStart").setValue(new DateType("2003-01-01"));
+		inParams.addParameter().setName("periodEnd").setValue(new DateType("2003-12-31"));
 
 		Parameters outParams = ourClient
 			.operation()
-			.onInstance(new IdDt("Measure", "col"))
-			.named("$evaluate")
+			.onInstance(new IdDt("Measure", "measure-asf"))
+			.named("$evaluate-measure")
+			.withParameters(inParams)
+			.useHttpGet()
+			.execute();
+
+		List<Parameters.ParametersParameterComponent> response = outParams.getParameter();
+
+		Assert.assertTrue(!response.isEmpty());
+
+		Parameters.ParametersParameterComponent component = response.get(0);
+
+		Assert.assertTrue(component.getResource() instanceof MeasureReport);
+
+		MeasureReport report = (MeasureReport) component.getResource();
+
+		for (MeasureReport.MeasureReportGroupComponent group : report.getGroup()) {
+			for (MeasureReport.MeasureReportGroupPopulationComponent population : group.getPopulation()) {
+				Assert.assertTrue(population.getCount() > 0);
+			}
+		}
+	}
+
+	/*
+	 *
+	 * 	Testing Patient List Measure
+	 * 	This test is only testing for valid initial population membership.
+	 * 	There are 2 patients that reference Practitioner-2520 as their general practitioner.
+	 * 	However, only one meets the initial population criteria for the measure.
+	 *
+	 * */
+	@Test
+	public void PatientListMeasureTest() {
+		// load measure specific test data
+		putResource("patient-list-measure-test-bundle.json", "");
+
+		Parameters inParams = new Parameters();
+		inParams.addParameter().setName("reportType").setValue(new StringType("patient-list"));
+		inParams.addParameter().setName("practitioner").setValue(new StringType("Practitioner/Practitioner-2520"));
+		inParams.addParameter().setName("periodStart").setValue(new DateType("1997-01-01"));
+		inParams.addParameter().setName("periodEnd").setValue(new DateType("1997-12-31"));
+
+		Parameters outParams = ourClient
+			.operation()
+			.onInstance(new IdDt("Measure", "measure-ccs"))
+			.named("$evaluate-measure")
+			.withParameters(inParams)
+			.useHttpGet()
+			.execute();
+
+		List<Parameters.ParametersParameterComponent> response = outParams.getParameter();
+
+		Assert.assertTrue(!response.isEmpty());
+
+		Parameters.ParametersParameterComponent component = response.get(0);
+
+		Assert.assertTrue(component.getResource() instanceof MeasureReport);
+
+		MeasureReport report = (MeasureReport) component.getResource();
+
+		for (MeasureReport.MeasureReportGroupComponent group : report.getGroup()) {
+			for (MeasureReport.MeasureReportGroupPopulationComponent population : group.getPopulation()) {
+				if (population.getCode().getCodingFirstRep().getCode().equals("initial-population")) {
+					Assert.assertTrue(population.getCount() == 1);
+				}
+			}
+		}
+	}
+
+	/*
+	 *
+	 * 	Testing Population (or Summary) Measure
+	 * 	This tests a population of 100 patients. 10 patients satisfy the initial population criteria.
+	 * 	However, only 2 meet the numerator criteria.
+	 *
+	 * */
+	@Test
+	public void PopulationMeasureTest() {
+		// load measure specific test data
+		putResource("population-measure-network-bundle.json", "");
+		putResource("population-measure-patients-bundle.json", "");
+		putResource("population-measure-test-bundle.json", "");
+
+		Parameters inParams = new Parameters();
+		inParams.addParameter().setName("reportType").setValue(new StringType("population"));
+		inParams.addParameter().setName("periodStart").setValue(new DateType("1997-01-01"));
+		inParams.addParameter().setName("periodEnd").setValue(new DateType("1997-12-31"));
+
+		Parameters outParams = ourClient
+			.operation()
+			.onInstance(new IdDt("Measure", "measure-bcs"))
+			.named("$evaluate-measure")
 			.withParameters(inParams)
 			.useHttpGet()
 			.execute();
@@ -121,16 +219,102 @@ public class CdsExampleTests {
 		Assert.assertTrue(report.getEvaluatedResources() != null);
 
 		for (MeasureReport.MeasureReportGroupComponent group : report.getGroup()) {
-			if (group.getIdentifier().getValue().equals("history-of-colorectal-cancer")) {
-				Assert.assertTrue(group.getPopulation().get(0).getCount() > 0);
-			}
-
-			if (group.getIdentifier().getValue().equals("history-of-total-colectomy")) {
-				Assert.assertTrue(group.getPopulation().get(0).getCount() > 0);
+			for (MeasureReport.MeasureReportGroupPopulationComponent population : group.getPopulation()) {
+				Assert.assertTrue(population.getCount() > 0);
 			}
 		}
 	}
 
+	/*
+	 *
+	 * 	Testing Patient View CDS Hook
+	 * 	This tests whether a patient has had appropriate labs/orders for Breast Cancer detection.
+	 * 	If not, a suggestion will be returned.
+	 *
+	 * */
+	@Test
+	public void PatientViewCdsHooksTest() throws IOException {
+		// load terminology and test data specific to hook
+		putResource("cds-codesystems.json", "");
+		putResource("cds-valuesets.json", "");
+		putResource("cds-bcs-bundle.json", "");
+
+		// Get the CDS Hooks request
+		InputStream is = this.getClass().getResourceAsStream("cds-bcs-request.json");
+		Scanner scanner = new Scanner(is).useDelimiter("\\A");
+		String cdsHooksRequest = scanner.hasNext() ? scanner.next() : "";
+		cdsHooksRequest = cdsHooksRequest.replace("XXXXX", ourServerBase);
+		byte[] data = cdsHooksRequest.getBytes("UTF-8");
+
+		URL url = new URL("http://localhost:" + ourPort + "/hapi-fhir-jpaserver-cds/cds-services/bcs-decision-support");
+
+		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+		conn.setRequestMethod("POST");
+		conn.setRequestProperty("Content-Type", "application/json");
+		conn.setRequestProperty("Content-Length", String.valueOf(data.length));
+		conn.setDoOutput(true);
+		conn.getOutputStream().write(data);
+
+		StringBuilder response = new StringBuilder();
+		try(Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")))
+		{
+			for (int i; (i = in.read()) >= 0;) {
+				response.append((char) i);
+			}
+		}
+
+		String expected = "{\n" +
+			"  \"cards\": [\n" +
+			"    {\n" +
+			"      \"summary\": \"A Mammogram procedure for the patient is recommended\",\n" +
+			"      \"indicator\": \"warning\",\n" +
+			"      \"detail\": \"The patient has not had a Mammogram procedure in the last 39 months\",\n" +
+			"      \"source\": {},\n" +
+			"      \"suggestions\": [\n" +
+			"        {\n" +
+			"          \"label\": \"Mammogram request\",\n" +
+			"          \"actions\": [\n" +
+			"            {\n" +
+			"              \"type\": \"create\",\n" +
+			"              \"description\": \"The patient has not had a Mammogram procedure in the last 39 months\",\n" +
+			"              \"resource\": {\n" +
+			"                \"resourceType\": \"ProcedureRequest\",\n" +
+			"                \"status\": \"draft\",\n" +
+			"                \"intent\": \"order\",\n" +
+			"                \"code\": {\n" +
+			"                  \"coding\": [\n" +
+			"                    {\n" +
+			"                      \"system\": \"http://www.ama-assn.org/go/cpt\",\n" +
+			"                      \"code\": \"77056\",\n" +
+			"                      \"display\": \"Mammography; bilateral\"\n" +
+			"                    }\n" +
+			"                  ]\n" +
+			"                },\n" +
+			"                \"subject\": {\n" +
+			"                  \"reference\": \"Patient/Patient-6535\"\n" +
+			"                }\n" +
+			"              }\n" +
+			"            }\n" +
+			"          ]\n" +
+			"        }\n" +
+			"      ]\n" +
+			"    }\n" +
+			"  ]\n" +
+			"}\n";
+
+		String withoutID = response.toString().replaceAll("\"id\":.*\\s", "");
+		Assert.assertTrue(
+			withoutID.replaceAll("\\s+", "")
+				.equals(expected.replaceAll("\\s+", ""))
+		);
+	}
+
+	/*
+	 *
+	 * 	Testing $apply operation for a PlanDefinition resource
+	 * 	This test applies a PlanDefinition and returns a CarePlan with a dynamic property populated.
+	 *
+	 * */
 	@Test
 	public void PlanDefinitionApplyTest() throws ClassNotFoundException {
 		putResource("plandefinition-apply-library.json", "plandefinitionApplyTest");
@@ -160,6 +344,12 @@ public class CdsExampleTests {
 		Assert.assertTrue(carePlan.getTitle().equals("This is a dynamic definition!"));
 	}
 
+	/*
+	 *
+	 * 	Testing $apply operation for an ActivityDefinition resource
+	 * 	This test applies an ActivityDefinition and returns a ProcedureRequest with a dynamic property populated.
+	 *
+	 * */
 	@Test
 	public void ActivityDefinitionApplyTest() {
 		putResource("activitydefinition-apply-library.json", "activityDefinitionApplyTest");
@@ -188,53 +378,6 @@ public class CdsExampleTests {
 
 		Assert.assertTrue(procedureRequest.getDoNotPerform());
 	}
-
-	@Test
-	@Ignore
-	public void CdsHooksPatientViewTest() throws IOException {
-		putResource("cds-bcs-library.json", "patient-view");
-		putResource("cds-bcs-patient.json", "Patient-6532");
-		putResource("cds-bcs-plandefinition.json", "bcs-decision-support");
-		putResource("cds-bcs-activitydefinition.json", "mammogram-service-request");
-
-		// Get the CDS Hooks request
-		InputStream is = this.getClass().getResourceAsStream("cds-bcs-request.json");
-		Scanner scanner = new Scanner(is).useDelimiter("\\A");
-		String cdsHooksRequest = scanner.hasNext() ? scanner.next() : "";
-		byte[] data = cdsHooksRequest.getBytes("UTF-8");
-
-		URL url = new URL("http://localhost:" + ourPort + "/hapi-fhir-jpaserver-cds/cds-services/bcs-decision-support");
-
-		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
-		conn.setRequestMethod("POST");
-		conn.setRequestProperty("Content-Type", "application/json");
-		conn.setRequestProperty("Content-Length", String.valueOf(data.length));
-		conn.setDoOutput(true);
-		conn.getOutputStream().write(data);
-
-		StringBuilder response = new StringBuilder();
-		try(Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")))
-		{
-			for (int i; (i = in.read()) >= 0;) {
-				response.append((char) i);
-			}
-		}
-
-		String expected = "{\n" +
-			"  \"cards\": [\n" +
-			"    {\n" +
-			"      \"summary\": \"High risk for opioid overdose - taper now\",\n" +
-			"      \"indicator\": \"warning\",\n" +
-			"      \"detail\": \"Total morphine milligram equivalent (MME) is 20200.700mg/d. Taper to less than 50.\"\n" +
-			"    }\n" +
-			"  ]\n" +
-			"}";
-
-		Assert.assertTrue(
-			response.toString().replaceAll("\\s+", "")
-				.equals(expected.replaceAll("\\s+", ""))
-		);
-	}
 }
 
 class RandomServerPortProvider {
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/activitydefinition-apply.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/activitydefinition-apply.json
index 0d5243f6375..7458aa434d7 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/activitydefinition-apply.json
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/activitydefinition-apply.json
@@ -1,10 +1,6 @@
 {
   "resourceType": "ActivityDefinition",
   "id": "ad-apply-example",
-  "text": {
-    "status": "generated",
-    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">ActivityDefinition $apply operation example.</div>"
-  },
   "status": "draft",
   "description": "This is a test.",
   "library": [
@@ -29,4 +25,4 @@
       "expression": "activityDefinitionApplyTest.\"Dynamic doNotPerform Setting\""
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-activitydefinition.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-activitydefinition.json
deleted file mode 100644
index bc74be1e27f..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-activitydefinition.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "resourceType": "ActivityDefinition",
-  "id": "mammogram-service-request",
-  "text": {
-    "status": "generated",
-    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Create ServiceRequest for Mammogrm Procedure</div>"
-  },
-  "status": "draft",
-  "description": "Create ServiceRequest for Mammogram Procedure",
-  "kind": "ProcedureRequest",
-  "code": {
-    "coding": [
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "77056",
-        "display": "Mammography; bilateral"
-      }
-    ]
-  },
-  "timingTiming": {
-    "_event": [
-      {
-        "extension": [
-          {
-            "url": "http://hl7.org/fhir/StructureDefinition/cqif-basic-cqlExpression",
-            "valueString": "Now()"
-          }
-        ]
-      }
-    ]
-  },
-  "participant": [
-    {
-      "type": "practitioner"
-    }
-  ]
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-bundle.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-bundle.json
new file mode 100644
index 00000000000..9fd7b5cb8f4
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-bundle.json
@@ -0,0 +1,342 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6535",
+        "active": true,
+        "name": [
+          {
+            "family": "Howe",
+            "given": [
+              "Barbara",
+              "April"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-2144",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-6448",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1955-10-19",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "531 SW Jefferson Avenue"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48211"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6535"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "PlanDefinition",
+        "id": "bcs-decision-support",
+        "type": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/plan-definition-type",
+              "code": "eca-rule",
+              "display": "ECA Rule"
+            }
+          ]
+        },
+        "status": "draft",
+        "library": {
+          "reference": "Library/bcs-decision-support-logic"
+        },
+        "action": [
+          {
+            "triggerDefinition": [
+              {
+                "type": "named-event",
+                "eventName": "patient-view"
+              }
+            ],
+            "condition": [
+              {
+                "kind": "applicability",
+                "language": "text/cql",
+                "expression": "Does Patient Qualify?"
+              }
+            ],
+            "action": [
+              {
+                "label": "Mammogram request",
+                "condition": [
+                  {
+                    "kind": "applicability",
+                    "language": "text/cql",
+                    "expression": "Needs Mammogram"
+                  }
+                ],
+                "type": {
+                  "system": "http://hl7.org/fhir/action-type",
+                  "code": "create"
+                },
+                "definition": {
+                  "reference": "ActivityDefinition/mammogram-service-request"
+                },
+                "dynamicValue": [
+                  {
+                    "path": "action.title",
+                    "expression": "MammogramSummary"
+                  },
+                  {
+                    "path": "action.description",
+                    "expression": "MammogramDetail"
+                  },
+                  {
+                    "path": "activity.extension",
+                    "expression": "MammogramIndicator"
+                  }
+                ]
+              }
+            ]
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "PlanDefinition/bcs-decision-support"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ActivityDefinition",
+        "id": "mammogram-service-request",
+        "text": {
+          "status": "generated",
+          "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">Create ServiceRequest for Mammogrm Procedure</div>"
+        },
+        "status": "draft",
+        "description": "Create ServiceRequest for Mammogram Procedure",
+        "kind": "ProcedureRequest",
+        "code": {
+          "coding": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "code": "77056",
+              "display": "Mammography; bilateral"
+            }
+          ]
+        },
+        "timingTiming": {
+          "_event": [
+            {
+              "extension": [
+                {
+                  "url": "http://hl7.org/fhir/StructureDefinition/cqif-basic-cqlExpression",
+                  "valueString": "Now()"
+                }
+              ]
+            }
+          ]
+        },
+        "participant": [
+          {
+            "type": "practitioner"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ActivityDefinition/mammogram-service-request"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Library",
+        "id": "bcs-decision-support-logic",
+        "version": "1.0.0",
+        "status": "active",
+        "experimental": true,
+        "type": {
+          "coding": [
+            {
+              "code": "logic-library"
+            }
+          ]
+        },
+        "dataRequirement": [
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Bilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Condition",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "History of Bilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Claim"
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Bilateral Modifier Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Claim"
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Left Modifier Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Left Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Absence of Left Breast Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Claim"
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Right Modifier Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Right Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Absence of Right Breast Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Mammography Value Set"
+              }
+            ]
+          }
+        ],
+        "content": [
+          {
+            "contentType": "application/elm+xml",
+            "data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTAxIiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjEwMSIgZW5kQ2hhcj0iNDciIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTA4IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjEwOCIgZW5kQ2hhcj0iNTgiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTIwIiBzdGFydENoYXI9IjciIGVuZExpbmU9IjEyMCIgZW5kQ2hhcj0iNTIiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTI2IiBzdGFydENoYXI9IjcwIiBlbmRMaW5lPSIxMjYiIGVuZENoYXI9Ijc5IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjEyOSIgc3RhcnRDaGFyPSI3IiBlbmRMaW5lPSIxMjkiIGVuZENoYXI9IjQ5IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjEzNSIgc3RhcnRDaGFyPSI3MCIgZW5kTGluZT0iMTM1IiBlbmRDaGFyPSI3OSIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxNDMiIHN0YXJ0Q2hhcj0iNCIgZW5kTGluZT0iMTQzIiBlbmRDaGFyPSI0OSIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxNDgiIHN0YXJ0Q2hhcj0iNSIgZW5kTGluZT0iMTQ4IiBlbmRDaGFyPSI1MCIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxNjQiIHN0YXJ0Q2hhcj0iNyIgZW5kTGluZT0iMTY0IiBlbmRDaGFyPSI1MiIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxNzAiIHN0YXJ0Q2hhcj0iNzAiIGVuZExpbmU9IjE3MCIgZW5kQ2hhcj0iNzkiIG1lc3NhZ2U9Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTczIiBzdGFydENoYXI9IjciIGVuZExpbmU9IjE3MyIgZW5kQ2hhcj0iNDQiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTc5IiBzdGFydENoYXI9IjcwIiBlbmRMaW5lPSIxNzkiIGVuZENoYXI9Ijc5IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjE4NiIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSIxODYiIGVuZENoYXI9IjUzIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjE5MyIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSIxOTMiIGVuZENoYXI9IjUxIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjIwNSIgc3RhcnRDaGFyPSI3IiBlbmRMaW5lPSIyMDUiIGVuZENoYXI9IjUyIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjIxMSIgc3RhcnRDaGFyPSI3MCIgZW5kTGluZT0iMjExIiBlbmRDaGFyPSI3OSIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIyMTQiIHN0YXJ0Q2hhcj0iNyIgZW5kTGluZT0iMjE0IiBlbmRDaGFyPSI0NSIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIyMjAiIHN0YXJ0Q2hhcj0iNzAiIGVuZExpbmU9IjIyMCIgZW5kQ2hhcj0iNzkiIG1lc3NhZ2U9Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjI3IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjIyNyIgZW5kQ2hhcj0iNTQiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjM0IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjIzNCIgZW5kQ2hhcj0iNTIiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNzgiIHN0YXJ0Q2hhcj0iMyIgZW5kTGluZT0iNzgiIGVuZENoYXI9IjM4IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8aWRlbnRpZmllciBpZD0iQkNTX0ZISVIiIHZlcnNpb249IjEuMC4wIi8+CiAgIDxzY2hlbWFJZGVudGlmaWVyIGlkPSJ1cm46aGw3LW9yZzplbG0iIHZlcnNpb249InIxIi8+CiAgIDx1c2luZ3M+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJTeXN0ZW0iIHVyaT0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iMSIgbG9jYWxJZGVudGlmaWVyPSJGSElSIiB1cmk9Imh0dHA6Ly9obDcub3JnL2ZoaXIiIHZlcnNpb249IjMuMC4wIi8+CiAgIDwvdXNpbmdzPgogICA8dmFsdWVTZXRzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIiIG5hbWU9IkFic2VuY2Ugb2YgTGVmdCBCcmVhc3QgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMzI5LjEiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSIzIiBuYW1lPSJBYnNlbmNlIG9mIFJpZ2h0IEJyZWFzdCBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEzMzAuMiIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQiIG5hbWU9IkJpbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTA0MiIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjUiIG5hbWU9IkJpbGF0ZXJhbCBNb2RpZmllciBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEwNDMuNSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjYiIG5hbWU9Ikhpc3Rvcnkgb2YgQmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMzMxLjYiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSI3IiBuYW1lPSJMZWZ0IE1vZGlmaWVyIFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTE0OC43IiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iOCIgbmFtZT0iTWFtbW9ncmFwaHkgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMTY4IiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iOSIgbmFtZT0iUmlnaHQgTW9kaWZpZXIgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMjMwLjEyIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTAiIG5hbWU9IlVuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEyNTYiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxMSIgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMzM0LjE1IiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTIiIG5hbWU9IlVuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEzMzUuMTYiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgPC92YWx1ZVNldHM+CiAgIDxzdGF0ZW1lbnRzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIwIiBuYW1lPSJGaXJzdCBQcmVkZWNlc3NvciBZZWFyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjAiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtGaXJzdCBQcmVkZWNlc3NvciBZZWFyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTkiPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MiB5ZWFyczwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvZGF5KCk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjEgeWVhcnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE5IiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9ImZhbHNlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjE1IiB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMyIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE0IiB2YWx1ZT0iMiIgdW5pdD0ieWVhcnMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgPGhpZ2ggbG9jYWxJZD0iMTgiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTciIHZhbHVlPSIxIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIyOCIgbmFtZT0iU2Vjb25kIFByZWRlY2Vzc29yIFllYXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyOCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O1NlY29uZCBQcmVkZWNlc3NvciBZZWFyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjciPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MyB5ZWFyczwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvZGF5KCk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjIgeWVhcnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI3IiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9ImZhbHNlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjIzIiB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMSIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyIiB2YWx1ZT0iMyIgdW5pdD0ieWVhcnMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgPGhpZ2ggbG9jYWxJZD0iMjYiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI0IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjUiIHZhbHVlPSIyIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIzOCIgbmFtZT0iVGhpcmQgUHJlZGVjZXNzb3IgUXVhcnRlciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjM4Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7VGhpcmQgUHJlZGVjZXNzb3IgUXVhcnRlciZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjM3Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5JbnRlcnZhbFs8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4zIHllYXJzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MyBtb250aHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4zIHllYXJzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNyIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJmYWxzZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSIzMyIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzEiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzAiIHZhbHVlPSIzIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzIiIHZhbHVlPSIzIiB1bml0PSJtb250aHMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgPGhpZ2ggbG9jYWxJZD0iMzYiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM0IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzUiIHZhbHVlPSIzIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0NCIgbmFtZT0iTG9va2JhY2sgSW50ZXJ2YWwgMjcgTW9yZSBNb250aHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0NCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0xvb2tiYWNrIEludGVydmFsIDI3IE1vcmUgTW9udGhzJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDMiPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MjcgbW9udGhzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQzIiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9ImZhbHNlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjQxIiB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzOSIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQwIiB2YWx1ZT0iMjciIHVuaXQ9Im1vbnRocyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSI0MiIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iUGF0aWVudCIgY29udGV4dD0iUGF0aWVudCI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6UGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTAiIG5hbWU9IklzIEZlbWFsZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjUwIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgRmVtYWxlJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDkiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBhdGllbnQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5nZW5kZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmVtYWxlJzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ5IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDYiIHBhdGg9ImdlbmRlciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0NSIgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJmZW1hbGUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTYiIG5hbWU9IklzIEFnZSA1MiB0byA3NCBhdCBFbmQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI1NiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIEFnZSA1MiB0byA3NCBhdCBFbmQmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI1NSI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkFnZUluWWVhcnMoKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4gYmV0d2VlbiA1MiBhbmQgNzQ8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjU1IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTIiIHByZWNpc2lvbj0iWWVhciIgeHNpOnR5cGU9IkNhbGN1bGF0ZUFnZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImJpcnRoRGF0ZS52YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJQYXRpZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTMiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iNTIiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9Ikxlc3NPckVxdWFsIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTIiIHByZWNpc2lvbj0iWWVhciIgeHNpOnR5cGU9IkNhbGN1bGF0ZUFnZSI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImJpcnRoRGF0ZS52YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJQYXRpZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTQiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iNzQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI3NiIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9Ijc2Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgZnVuY3Rpb24gUGVyaW9kVG9JbnRlcnZhbE9mRFQodmFsdWUgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNjgiPgogICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUGVyaW9kPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPik6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI3NSI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzUiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjcxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7c3RhcnQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtlbmQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI3NSIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJ0cnVlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjcxIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI3MCIgcGF0aD0ic3RhcnQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNjkiIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9Ijc0IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI3MyIgcGF0aD0iZW5kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjcyIiBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJ2YWx1ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBsb2NhbElkPSI2OCIgbmFtZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI4NCIgbmFtZT0iSXMgQmlsYXRlcmFsIE1hc3RlY3RvbXkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI4NCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIEJpbGF0ZXJhbCBNYXN0ZWN0b215JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iODMiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjgyIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0JpbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjY0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjY3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iODMiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4MiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI2MCIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1OSIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iODEiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2NSIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNjMiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjYyIiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2NCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4MCIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3OCIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijc3IiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNjciIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3OSIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEwMSIgbmFtZT0iSXMgSGlzdG9yeSBPZiBCaWxhdGVyYWwgTWFzdGVjdG9teSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjEwMSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIEhpc3RvcnkgT2YgQmlsYXRlcmFsIE1hc3RlY3RvbXkmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxMDAiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk5Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTkiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltDb25kaXRpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0hpc3Rvcnkgb2YgQmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBDb25kPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q29uZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZlcmlmaWNhdGlvblN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb25maXJtZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q29uZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmFzc2VydGVkRGF0ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTAwIiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTkiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iODciIGFsaWFzPSJDb25kIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iODYiIGRhdGFUeXBlPSJmaGlyOkNvbmRpdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iSGlzdG9yeSBvZiBCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iOTgiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5MiIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTAiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijg5IiBwYXRoPSJ2ZXJpZmljYXRpb25TdGF0dXMiIHNjb3BlPSJDb25kIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5MSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbmZpcm1lZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5NyIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5NSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iOTQiIHBhdGg9ImFzc2VydGVkRGF0ZSIgc2NvcGU9IkNvbmQiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijk2IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTgwIiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBCaWxhdGVyYWwgTW9kaWZpZXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxODAiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBCaWxhdGVyYWwgTW9kaWZpZXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxNzkiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3OCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W0NsYWltXTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IENsYWltPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q2xhaW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYWN0aXZlJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNsYWltLnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7VW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCXN1Y2ggdGhhdAoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTMxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2MxPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQllbHNlIGZhbHNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2l0aCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0JpbGF0ZXJhbCBNb2RpZmllciBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvZGF5KCk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2MyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQlzdWNoIHRoYXQKCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWYgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGlzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCXRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTcxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBhcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJZWxzZSBmYWxzZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE3OSIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE3OCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMDUiIGFsaWFzPSJDbGFpbSI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEwNCIgZGF0YVR5cGU9ImZoaXI6Q2xhaW0iIHhzaTp0eXBlPSJSZXRyaWV2ZSIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjE3NyIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjExMCIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTA4IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMDciIHBhdGg9InN0YXR1cyIgc2NvcGU9IkNsYWltIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMDkiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhY3RpdmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTc2IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTc1IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjExMiIgYWxpYXM9IkJiRWxlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjExMSIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQ2xhaW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBsb2NhbElkPSIxNDMiIGFsaWFzPSJQcm9jMSIgeHNpOnR5cGU9IldpdGgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxMjciIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTE0IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjExMyIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjEyNiIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjExOSIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTE3IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMTYiIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjExOCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjUiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTIzIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTIyIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTIxIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTI0IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSIxNDIiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEzMiIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTMwIiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjEzMSIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iMTQwIiB4c2k6dHlwZT0iRXF1aXZhbGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEzNyIgcGF0aD0iaWRlbnRpZmllciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMzYiIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEzNCIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSIxMzUiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTM5IiBwYXRoPSJpZGVudGlmaWVyIiBzY29wZT0iUHJvYzEiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iMTQxIiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBsb2NhbElkPSIxNzQiIGFsaWFzPSJQcm9jMiIgeHNpOnR5cGU9IldpdGgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxNTgiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTQ1IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE0NCIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJCaWxhdGVyYWwgTW9kaWZpZXIgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjE1NyIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE1MCIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTQ4IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxNDciIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE0OSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNTYiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTU0IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTUzIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTUyIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTU1IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSIxNzMiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2MyIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTYxIiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjE2MiIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iMTcxIiB4c2k6dHlwZT0iRXF1aXZhbGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2OCIgcGF0aD0iaWRlbnRpZmllciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxNjciIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2NSIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSIxNjYiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTcwIiBwYXRoPSJpZGVudGlmaWVyIiBzY29wZT0iUHJvYzIiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iMTcyIiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIyMjkiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBUd2ljZSBTcHJlYWQgVHdvIFdlZWtzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjI5Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFR3aWNlIFNwcmVhZCBUd28gV2Vla3MmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMjgiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cmV0dXJuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTkxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gV2hlblVNMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2l0aCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5yZXR1cm4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gV2hlblVNMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCXN1Y2ggdGhhdCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRpZmZlcmVuY2UgaW4gZGF5cyBiZXR3ZWVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5XaGVuVU0xPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjExIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5XaGVuVU0yPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPj0gMTQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPldoZW5VTTE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5XaGVuVU0yPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMjgiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjciIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTk1IiBhbGlhcz0iV2hlblVNMSI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE5NCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxODQiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTgzIiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IlVuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTg5IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE4NiIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTg4IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICA8cmV0dXJuIGxvY2FsSWQ9IjE5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE5MiIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE5MSIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBsb2NhbElkPSIyMjYiIGFsaWFzPSJXaGVuVU0yIiB4c2k6dHlwZT0iV2l0aCI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIwNyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxOTciIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTk2IiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IlVuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMjAyIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMDAiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE5OSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjAxIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICA8cmV0dXJuIGxvY2FsSWQ9IjIwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIwNSIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwNCIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8c3VjaFRoYXQgbG9jYWxJZD0iMjI1IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjIwIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjE1IiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTMiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iRGlmZmVyZW5jZUJldHdlZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTAiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwOSIgbmFtZT0iV2hlblVNMSIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjEyIiB4c2k6dHlwZT0iU3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTEiIG5hbWU9IldoZW5VTTIiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjE0IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjE0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxOSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTciIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTYiIG5hbWU9IldoZW5VTTEiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxOCIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjQiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjIyIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjIxIiBuYW1lPSJXaGVuVU0yIiB4c2k6dHlwZT0iQWxpYXNSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjMiIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvc3VjaFRoYXQ+CiAgICAgICAgICAgICAgIDwvcmVsYXRpb25zaGlwPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjMyIiBuYW1lPSJJcyBMYWNraW5nIEJvdGggQnJlYXN0cyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjIzMiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIExhY2tpbmcgQm90aCBCcmVhc3RzJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjMxIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIEJpbGF0ZXJhbCBNYXN0ZWN0b215JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgSGlzdG9yeSBPZiBCaWxhdGVyYWwgTWFzdGVjdG9teSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBCaWxhdGVyYWwgTW9kaWZpZXImcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzMCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFR3aWNlIFNwcmVhZCBUd28gV2Vla3MmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMzEiIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE4MiIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTAzIiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4NSIgbmFtZT0iSXMgQmlsYXRlcmFsIE1hc3RlY3RvbXkiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwMiIgbmFtZT0iSXMgSGlzdG9yeSBPZiBCaWxhdGVyYWwgTWFzdGVjdG9teSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODEiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIEJpbGF0ZXJhbCBNb2RpZmllciIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzAiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBUd2ljZSBTcHJlYWQgVHdvIFdlZWtzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMxMCIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFdpdGggTGVmdCBNb2RpZmllciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjMxMCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIExlZnQgTW9kaWZpZXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzMDkiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwOCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwOCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W0NsYWltXTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IENsYWltPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q2xhaW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYWN0aXZlJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNsYWltLnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7VW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCXN1Y2ggdGhhdAoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2MxPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQllbHNlIGZhbHNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2l0aCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0xlZnQgTW9kaWZpZXIgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjgzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJc3VjaCB0aGF0CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlmIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjkxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjkxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQl0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWVsc2UgZmFsc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMDkiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMDgiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjM1IiBhbGlhcz0iQ2xhaW0iPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMzQiIGRhdGFUeXBlPSJmaGlyOkNsYWltIiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzMDciIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDAiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzOCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjM3IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJDbGFpbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjM5IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYWN0aXZlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMwNiIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMwNSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyNDIiIGFsaWFzPSJCYkVsZW0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyNDEiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkNsYWltIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iMjczIiBhbGlhcz0iUHJvYzEiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjU3IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI0NCIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyNDMiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIyNTYiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDkiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI0NyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjQ2IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjU1IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1MyIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1MiIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1MSIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1NCIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c3VjaFRoYXQgbG9jYWxJZD0iMjcyIiB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjIiIHhzaTp0eXBlPSJJcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2MCIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlzVHlwZVNwZWNpZmllciBsb2NhbElkPSIyNjEiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjI3MCIgeHNpOnR5cGU9IkVxdWl2YWxlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjciIHBhdGg9ImlkZW50aWZpZXIiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjY2IiBzdHJpY3Q9ImZhbHNlIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjQiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjY1IiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2OSIgcGF0aD0iaWRlbnRpZmllciIgc2NvcGU9IlByb2MxIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbHNlIGxvY2FsSWQ9IjI3MSIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdWNoVGhhdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZWxhdGlvbnNoaXA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iMzA0IiBhbGlhcz0iUHJvYzIiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjg4IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI3NSIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyNzQiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iTGVmdCBNb2RpZmllciBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMjg3IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjgwIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNzgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI3NyIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjc5IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI4NiIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODQiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODMiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODIiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODUiIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1Y2hUaGF0IGxvY2FsSWQ9IjMwMyIgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjkzIiB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyOTEiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjkyIiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlbiBsb2NhbElkPSIzMDEiIHhzaTp0eXBlPSJFcXVpdmFsZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjk4IiBwYXRoPSJpZGVudGlmaWVyIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI5NyIgc3RyaWN0PSJmYWxzZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjk1IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjI5NiIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMDAiIHBhdGg9ImlkZW50aWZpZXIiIHNjb3BlPSJQcm9jMiIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSIzMDIiIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VjaFRoYXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVsYXRpb25zaGlwPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMyOCIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzMjgiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjMyNyI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI2Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMjciIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjYiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzEzIiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjMxMiIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMzI1IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzE4IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMTYiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMxNSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzE3IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMyNCIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjIiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjEiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjAiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjMiIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIzNDgiIG5hbWU9IklzIEFic2VuY2UgT2YgTGVmdCBCcmVhc3QiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzNDgiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBBYnNlbmNlIE9mIExlZnQgQnJlYXN0JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ3Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDYiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltPYnNlcnZhdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7QWJzZW5jZSBvZiBMZWZ0IEJyZWFzdCBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IE9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz57IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2ZpbmFsJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2FtZW5kZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB9PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzQ3IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzQ2IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMzMiIgYWxpYXM9Ik9icyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjMzMSIgZGF0YVR5cGU9ImZoaXI6T2JzZXJ2YXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkFic2VuY2Ugb2YgTGVmdCBCcmVhc3QgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjM0NSIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMzOSIgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzM1IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMzQiIHBhdGg9InN0YXR1cyIgc2NvcGU9Ik9icyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzM4IiB4c2k6dHlwZT0iTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjMzNiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZpbmFsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIzMzciIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhbWVuZGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzQ0IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM0MiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzQxIiBwYXRoPSJlZmZlY3RpdmUiIHNjb3BlPSJPYnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM0MyIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjM1MSIgbmFtZT0iSXMgTGFja2luZyBMZWZ0IEJyZWFzdCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjM1MSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIExhY2tpbmcgTGVmdCBCcmVhc3QmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzNTAiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzExIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBMZWZ0IE1vZGlmaWVyJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0OSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgQWJzZW5jZSBPZiBMZWZ0IEJyZWFzdCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjM1MCIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzMwIiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMTEiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIExlZnQgTW9kaWZpZXIiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMyOSIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzQ5IiBuYW1lPSJJcyBBYnNlbmNlIE9mIExlZnQgQnJlYXN0IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQyOSIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFdpdGggUmlnaHQgTW9kaWZpZXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0MjkiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBSaWdodCBNb2RpZmllciZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQyOCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI3Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bQ2xhaW1dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQ2xhaW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5DbGFpbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhY3RpdmUnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q2xhaW0ucHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndpdGggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzY1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzY3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzcxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJc3VjaCB0aGF0CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlmIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQl0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWVsc2UgZmFsc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7UmlnaHQgTW9kaWZpZXIgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJc3VjaCB0aGF0CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlmIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQl0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWVsc2UgZmFsc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0MjgiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MjciIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzU0IiBhbGlhcz0iQ2xhaW0iPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNTMiIGRhdGFUeXBlPSJmaGlyOkNsYWltIiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSI0MjYiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNTkiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1NyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzU2IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJDbGFpbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzU4IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYWN0aXZlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQyNSIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQyNCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzNjEiIGFsaWFzPSJCYkVsZW0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNjAiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkNsYWltIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iMzkyIiBhbGlhcz0iUHJvYzEiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzc2IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM2MyIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNjIiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzNzUiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNjgiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM2NiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzY1IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNjciIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzc0IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3MiIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3MSIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3MCIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3MyIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c3VjaFRoYXQgbG9jYWxJZD0iMzkxIiB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzODEiIHhzaTp0eXBlPSJJcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3OSIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlzVHlwZVNwZWNpZmllciBsb2NhbElkPSIzODAiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjM4OSIgeHNpOnR5cGU9IkVxdWl2YWxlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzODYiIHBhdGg9ImlkZW50aWZpZXIiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzg1IiBzdHJpY3Q9ImZhbHNlIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzODMiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMzg0IiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4OCIgcGF0aD0iaWRlbnRpZmllciIgc2NvcGU9IlByb2MxIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbHNlIGxvY2FsSWQ9IjM5MCIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdWNoVGhhdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZWxhdGlvbnNoaXA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iNDIzIiBhbGlhcz0iUHJvYzIiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDA3IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM5NCIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzOTMiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iUmlnaHQgTW9kaWZpZXIgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjQwNiIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM5OSIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzk3IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzOTYiIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM5OCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MDUiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDAzIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDAyIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDAxIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDA0IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSI0MjIiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxMiIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDEwIiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjQxMSIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iNDIwIiB4c2k6dHlwZT0iRXF1aXZhbGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxNyIgcGF0aD0iaWRlbnRpZmllciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0MTYiIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxNCIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSI0MTUiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDE5IiBwYXRoPSJpZGVudGlmaWVyIiBzY29wZT0iUHJvYzIiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iNDIxIiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0NDciIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjQ0NyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ0NiI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQ1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDMxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgUmlnaHQgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDQ2IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQ1IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQzMiIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0MzEiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFJpZ2h0IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSI0NDQiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MzciIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQzNSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDM0IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MzYiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQzIiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ0MSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ0MCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQzOSIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ0MiIgeHNpOnR5cGU9IlRvZGF5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ2OCIgbmFtZT0iSXMgQWJzZW5jZSBPZiBSaWdodCBCcmVhc3QiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0NjgiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBBYnNlbmNlIE9mIFJpZ2h0IEJyZWFzdCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ2NyI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDY2Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bT2JzZXJ2YXRpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0Fic2VuY2Ugb2YgUmlnaHQgQnJlYXN0IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gT2JzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDY1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+T2JzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnsgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmluYWwnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYW1lbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+T2JzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVmZmVjdGl2ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvZGF5KCk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ2NyIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ2NiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0NTEiIGFsaWFzPSJPYnMiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0NTAiIGRhdGFUeXBlPSJmaGlyOk9ic2VydmF0aW9uIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJBYnNlbmNlIG9mIFJpZ2h0IEJyZWFzdCBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iNDY1IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDU4IiB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NTQiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQ1MyIgcGF0aD0ic3RhdHVzIiBzY29wZT0iT2JzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NTciIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iNDU1IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iZmluYWwiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjQ1NiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFtZW5kZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NjQiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDYyIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDYxIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDYwIiBwYXRoPSJlZmZlY3RpdmUiIHNjb3BlPSJPYnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NjMiIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0NzEiIG5hbWU9IklzIExhY2tpbmcgUmlnaHQgQnJlYXN0IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNDcxIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgTGFja2luZyBSaWdodCBCcmVhc3QmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI0NzAiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0OSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBSaWdodCBNb2RpZmllciZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQlvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDgiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CgkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDY5Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBBYnNlbmNlIE9mIFJpZ2h0IEJyZWFzdCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ3MCIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQ5IiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MzAiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIFJpZ2h0IE1vZGlmaWVyIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NDgiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NjkiIG5hbWU9IklzIEFic2VuY2UgT2YgUmlnaHQgQnJlYXN0IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ3NSIgbmFtZT0iSGFzIERvdWJsZSBNYXN0ZWN0b215IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNDc1Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SGFzIERvdWJsZSBNYXN0ZWN0b215JnF1b3Q7OgogICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDc0Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIExhY2tpbmcgQm90aCBCcmVhc3RzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgIG9yIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3MyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBMYWNraW5nIExlZnQgQnJlYXN0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIExhY2tpbmcgUmlnaHQgQnJlYXN0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDc0IiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzMiIG5hbWU9IklzIExhY2tpbmcgQm90aCBCcmVhc3RzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NzMiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNTIiIG5hbWU9IklzIExhY2tpbmcgTGVmdCBCcmVhc3QiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3MiIgbmFtZT0iSXMgTGFja2luZyBSaWdodCBCcmVhc3QiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0ODMiIG5hbWU9IkRvZXMgUGF0aWVudCBRdWFsaWZ5PyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjQ4MyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0RvZXMgUGF0aWVudCBRdWFsaWZ5PyZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ4MiI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTgiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBGZW1hbGUmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBBZ2UgNTIgdG8gNzQgYXQgRW5kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SGFzIERvdWJsZSBNYXN0ZWN0b215JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyBudWxsPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCSAgICAgICAgdGhlbiB0cnVlCgkJICAgIGVsc2UgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5ub3QgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtIYXMgRG91YmxlIE1hc3RlY3RvbXkmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ4MiIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjU4IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTEiIG5hbWU9IklzIEZlbWFsZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTciIG5hbWU9IklzIEFnZSA1MiB0byA3NCBhdCBFbmQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDgxIiB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NzciIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NzYiIG5hbWU9IkhhcyBEb3VibGUgTWFzdGVjdG9teSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iNDc4IiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9InRydWUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDxlbHNlIGxvY2FsSWQ9IjQ4MCIgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3OSIgbmFtZT0iSGFzIERvdWJsZSBNYXN0ZWN0b215IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0OTkiIG5hbWU9IklzIE1hbW1vZ3JhbSBJbiBMYXN0IDM5IE1vbnRocyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjQ5OSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIE1hbW1vZ3JhbSBJbiBMYXN0IDM5IE1vbnRocyZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ5OCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDk3Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNYW1tb2dyYXBoeSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGluY2x1ZGVkIGluIGRheSBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0xvb2tiYWNrIEludGVydmFsIDI3IE1vcmUgTW9udGhzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0OTgiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0OTciIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDg1IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ4NCIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJNYW1tb2dyYXBoeSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iNDk2IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDkwIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0ODgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQ4NyIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDg5IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ5NSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJJbmNsdWRlZEluIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDkzIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDkyIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ5NCIgbmFtZT0iTG9va2JhY2sgSW50ZXJ2YWwgMjcgTW9yZSBNb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjUwNiIgbmFtZT0iTmVlZHMgTWFtbW9ncmFtIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNTA2Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7TmVlZHMgTWFtbW9ncmFtJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTA1Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5pZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgTWFtbW9ncmFtIEluIExhc3QgMzkgTW9udGhzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyBudWxsPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJICAgIHRoZW4gdHJ1ZQoJZWxzZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPm5vdCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIE1hbW1vZ3JhbSBJbiBMYXN0IDM5IE1vbnRocyZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1MDUiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUwMSIgeHNpOnR5cGU9IklzTnVsbCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUwMCIgbmFtZT0iSXMgTWFtbW9ncmFtIEluIExhc3QgMzkgTW9udGhzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICA8dGhlbiBsb2NhbElkPSI1MDIiIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0idHJ1ZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iNTA0IiB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTAzIiBuYW1lPSJJcyBNYW1tb2dyYW0gSW4gTGFzdCAzOSBNb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvZWxzZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI1MDgiIG5hbWU9Ik1hbW1vZ3JhbVN1bW1hcnkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI1MDgiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSBNYW1tb2dyYW1TdW1tYXJ5OgogICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTA3Ij4KICAgICAgICAgICAgICAgICAgPGE6cz4nQSBNYW1tb2dyYW0gcHJvY2VkdXJlIGZvciB0aGUgcGF0aWVudCBpcyByZWNvbW1lbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjUwNyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IkEgTWFtbW9ncmFtIHByb2NlZHVyZSBmb3IgdGhlIHBhdGllbnQgaXMgcmVjb21tZW5kZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjUxMCIgbmFtZT0iTWFtbW9ncmFtRGV0YWlsIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNTEwIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgTWFtbW9ncmFtRGV0YWlsOgogICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTA5Ij4KICAgICAgICAgICAgICAgICAgPGE6cz4nVGhlIHBhdGllbnQgaGFzIG5vdCBoYWQgYSBNYW1tb2dyYW0gcHJvY2VkdXJlIGluIHRoZSBsYXN0IDM5IG1vbnRocyc8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjUwOSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9IlRoZSBwYXRpZW50IGhhcyBub3QgaGFkIGEgTWFtbW9ncmFtIHByb2NlZHVyZSBpbiB0aGUgbGFzdCAzOSBtb250aHMiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjUxMiIgbmFtZT0iTWFtbW9ncmFtSW5kaWNhdG9yIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNTEyIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgTWFtbW9ncmFtSW5kaWNhdG9yOgogICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTExIj4KICAgICAgICAgICAgICAgICAgPGE6cz4nd2FybmluZyc8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjUxMSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Indhcm5pbmciIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjUyOSIgbmFtZT0iQ29kaW5nVG9Db2RlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI1MjkiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSBmdW5jdGlvbiBDb2RpbmdUb0NvZGUoY29kaW5nIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjUxNSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5Db2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+KToKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjUyOCI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5TeXN0ZW0uQ29kZSB7CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y29kZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y29kaW5nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN5c3RlbTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y29kaW5nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN5c3RlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmVyc2lvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y29kaW5nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZlcnNpb248L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRpc3BsYXk6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGluZzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kaXNwbGF5PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJfTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjUyOCIgY2xhc3NUeXBlPSJ0OkNvZGUiIHhzaTp0eXBlPSJJbnN0YW5jZSI+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvZGUiPgogICAgICAgICAgICAgICA8dmFsdWUgbG9jYWxJZD0iNTE4IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1MTciIHBhdGg9ImNvZGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTE2IiBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InN5c3RlbSI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBsb2NhbElkPSI1MjEiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUyMCIgcGF0aD0ic3lzdGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUxOSIgbmFtZT0iY29kaW5nIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ2ZXJzaW9uIj4KICAgICAgICAgICAgICAgPHZhbHVlIGxvY2FsSWQ9IjUyNCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTIzIiBwYXRoPSJ2ZXJzaW9uIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUyMiIgbmFtZT0iY29kaW5nIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJkaXNwbGF5Ij4KICAgICAgICAgICAgICAgPHZhbHVlIGxvY2FsSWQ9IjUyNyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTI2IiBwYXRoPSJkaXNwbGF5IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUyNSIgbmFtZT0iY29kaW5nIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImNvZGluZyI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBsb2NhbElkPSI1MTUiIG5hbWU9ImZoaXI6Q29kaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgIDwvc3RhdGVtZW50cz4KPC9saWJyYXJ5Pgo="
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Library/bcs-decision-support-logic"
+      }
+    }
+  ]
+}
+
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-library.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-library.json
deleted file mode 100644
index f2360ca89e1..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-library.json
+++ /dev/null
@@ -1,166 +0,0 @@
-{
-  "resourceType": "Library",
-  "id": "patient-view",
-  "version": "1.0.0",
-  "status": "active",
-  "experimental": true,
-  "type": {
-    "coding": [
-      {
-        "code": "logic-library"
-      }
-    ]
-  },
-  "dataRequirement": [
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Bilateral Mastectomy Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Condition",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "History of Bilateral Mastectomy Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Claim"
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Unilateral Mastectomy Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Bilateral Modifier Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Unilateral Mastectomy Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Unilateral Mastectomy Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Claim"
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Unilateral Mastectomy Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Left Modifier Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Unilateral Mastectomy Left Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Observation",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Absence of Left Breast Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Claim"
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Unilateral Mastectomy Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Right Modifier Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Unilateral Mastectomy Right Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Observation",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Absence of Right Breast Value Set"
-        }
-      ]
-    },
-    {
-      "type": "Procedure",
-      "codeFilter": [
-        {
-          "path": "code",
-          "valueSetString": "Mammography Value Set"
-        }
-      ]
-    }
-  ],
-  "content": [
-    {
-      "contentType": "application/elm+xml",
-      "data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczphPSJ1cm46aGw3LW9yZzpjcWwtYW5ub3RhdGlvbnM6cjEiPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjEwNSIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSIxMDUiIGVuZENoYXI9IjQ3IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjExMiIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSIxMTIiIGVuZENoYXI9IjU4IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjEyNCIgc3RhcnRDaGFyPSI3IiBlbmRMaW5lPSIxMjQiIGVuZENoYXI9IjUyIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjEzMCIgc3RhcnRDaGFyPSI3MCIgZW5kTGluZT0iMTMwIiBlbmRDaGFyPSI3OSIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxMzMiIHN0YXJ0Q2hhcj0iNyIgZW5kTGluZT0iMTMzIiBlbmRDaGFyPSI0OSIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxMzkiIHN0YXJ0Q2hhcj0iNzAiIGVuZExpbmU9IjEzOSIgZW5kQ2hhcj0iNzkiIG1lc3NhZ2U9Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTQ3IiBzdGFydENoYXI9IjQiIGVuZExpbmU9IjE0NyIgZW5kQ2hhcj0iNDkiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTUyIiBzdGFydENoYXI9IjUiIGVuZExpbmU9IjE1MiIgZW5kQ2hhcj0iNTAiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTY4IiBzdGFydENoYXI9IjciIGVuZExpbmU9IjE2OCIgZW5kQ2hhcj0iNTIiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMTc0IiBzdGFydENoYXI9IjcwIiBlbmRMaW5lPSIxNzQiIGVuZENoYXI9Ijc5IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjE3NyIgc3RhcnRDaGFyPSI3IiBlbmRMaW5lPSIxNzciIGVuZENoYXI9IjQ0IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjE4MyIgc3RhcnRDaGFyPSI3MCIgZW5kTGluZT0iMTgzIiBlbmRDaGFyPSI3OSIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxOTAiIHN0YXJ0Q2hhcj0iMyIgZW5kTGluZT0iMTkwIiBlbmRDaGFyPSI1MyIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIxOTciIHN0YXJ0Q2hhcj0iMyIgZW5kTGluZT0iMTk3IiBlbmRDaGFyPSI1MSIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIyMDkiIHN0YXJ0Q2hhcj0iNyIgZW5kTGluZT0iMjA5IiBlbmRDaGFyPSI1MiIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIyMTUiIHN0YXJ0Q2hhcj0iNzAiIGVuZExpbmU9IjIxNSIgZW5kQ2hhcj0iNzkiIG1lc3NhZ2U9Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjE4IiBzdGFydENoYXI9IjciIGVuZExpbmU9IjIxOCIgZW5kQ2hhcj0iNDUiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjI0IiBzdGFydENoYXI9IjcwIiBlbmRMaW5lPSIyMjQiIGVuZENoYXI9Ijc5IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjIzMSIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSIyMzEiIGVuZENoYXI9IjU0IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjIzOCIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSIyMzgiIGVuZENoYXI9IjUyIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjgyIiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjgyIiBlbmRDaGFyPSIzOCIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSI3OCIgc3RhcnRDaGFyPSIxOCIgZW5kTGluZT0iNzgiIGVuZENoYXI9IjQ5IiBtZXNzYWdlPSJCb29sZWFuLXZhbHVlZCBleHByZXNzaW9uIHdhcyBwcm9tb3RlZCB0byBhIGxpc3QuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxpZGVudGlmaWVyIGlkPSJCQ1NfRkhJUiIgdmVyc2lvbj0iMS4wLjAiLz4KICAgPHNjaGVtYUlkZW50aWZpZXIgaWQ9InVybjpobDctb3JnOmVsbSIgdmVyc2lvbj0icjEiLz4KICAgPHVzaW5ncz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IlN5c3RlbSIgdXJpPSJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxIiBsb2NhbElkZW50aWZpZXI9IkZISVIiIHVyaT0iaHR0cDovL2hsNy5vcmcvZmhpciIgdmVyc2lvbj0iMy4wLjAiLz4KICAgPC91c2luZ3M+CiAgIDxwYXJhbWV0ZXJzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE0IiBuYW1lPSJQcm9kdWN0IExpbmUiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8cGFyYW1ldGVyVHlwZVNwZWNpZmllciBsb2NhbElkPSIxMyIgbmFtZT0idDpTdHJpbmciIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTciIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjE2IiB4c2k6dHlwZT0iSW50ZXJ2YWxUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgPHBvaW50VHlwZSBsb2NhbElkPSIxNSIgbmFtZT0idDpEYXRlVGltZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L3BhcmFtZXRlclR5cGVTcGVjaWZpZXI+CiAgICAgIDwvZGVmPgogICA8L3BhcmFtZXRlcnM+CiAgIDx2YWx1ZVNldHM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMiIgbmFtZT0iQWJzZW5jZSBvZiBMZWZ0IEJyZWFzdCBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEzMjkuMSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMiIG5hbWU9IkFic2VuY2Ugb2YgUmlnaHQgQnJlYXN0IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTMzMC4yIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iNCIgbmFtZT0iQmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMDQyIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iNSIgbmFtZT0iQmlsYXRlcmFsIE1vZGlmaWVyIFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTA0My41IiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iNiIgbmFtZT0iSGlzdG9yeSBvZiBCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEzMzEuNiIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjciIG5hbWU9IkxlZnQgTW9kaWZpZXIgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMTQ4LjciIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSI4IiBuYW1lPSJNYW1tb2dyYXBoeSBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjExNjgiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSI5IiBuYW1lPSJSaWdodCBNb2RpZmllciBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEyMzAuMTIiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxMCIgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTI1NiIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjExIiBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEzMzQuMTUiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxMiIgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFJpZ2h0IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTMzNS4xNiIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICA8L3ZhbHVlU2V0cz4KICAgPHN0YXRlbWVudHM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjUiIG5hbWU9IkZpcnN0IFByZWRlY2Vzc29yIFllYXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyNSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0ZpcnN0IFByZWRlY2Vzc29yIFllYXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyNCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4yIHllYXJzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MSB5ZWFyczwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjQiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0iZmFsc2UiIHhzaTp0eXBlPSJJbnRlcnZhbCI+CiAgICAgICAgICAgIDxsb3cgbG9jYWxJZD0iMjAiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE4IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTkiIHZhbHVlPSIyIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIyMyIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjEiIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMiIgdmFsdWU9IjEiIHVuaXQ9InllYXJzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMzIiBuYW1lPSJTZWNvbmQgUHJlZGVjZXNzb3IgWWVhciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjMzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7U2Vjb25kIFByZWRlY2Vzc29yIFllYXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzMiI+CiAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjgiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4zIHllYXJzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9kYXkoKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MiB5ZWFyczwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzIiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0iZmFsc2UiIHhzaTp0eXBlPSJJbnRlcnZhbCI+CiAgICAgICAgICAgIDxsb3cgbG9jYWxJZD0iMjgiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjciIHZhbHVlPSIzIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIzMSIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjkiIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMCIgdmFsdWU9IjIiIHVuaXQ9InllYXJzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQzIiBuYW1lPSJUaGlyZCBQcmVkZWNlc3NvciBRdWFydGVyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNDMiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtUaGlyZCBQcmVkZWNlc3NvciBRdWFydGVyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDIiPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvZGF5KCk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjMgeWVhcnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4zIG1vbnRoczwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzkiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvZGF5KCk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjMgeWVhcnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQyIiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9ImZhbHNlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjM4IiB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNiIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzQiIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNSIgdmFsdWU9IjMiIHVuaXQ9InllYXJzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNyIgdmFsdWU9IjMiIHVuaXQ9Im1vbnRocyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSI0MSIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzkiIHhzaTp0eXBlPSJUb2RheSIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MCIgdmFsdWU9IjMiIHVuaXQ9InllYXJzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ5IiBuYW1lPSJMb29rYmFjayBJbnRlcnZhbCAyNyBNb3JlIE1vbnRocyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjQ5Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7TG9va2JhY2sgSW50ZXJ2YWwgMjcgTW9yZSBNb250aHMmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI0OCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub2RheSgpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4yNyBtb250aHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDciPgogICAgICAgICAgICAgICAgICAgICA8YTpzPlRvZGF5KCk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDgiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0iZmFsc2UiIHhzaTp0eXBlPSJJbnRlcnZhbCI+CiAgICAgICAgICAgIDxsb3cgbG9jYWxJZD0iNDYiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ0IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDUiIHZhbHVlPSIyNyIgdW5pdD0ibW9udGhzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9IjQ3IiB4c2k6dHlwZT0iVG9kYXkiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJQYXRpZW50IiBjb250ZXh0PSJQYXRpZW50Ij4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICA8b3BlcmFuZCBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI1NSIgbmFtZT0iSXMgRmVtYWxlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNTUiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBGZW1hbGUmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI1NCI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGF0aWVudDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmdlbmRlcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPidmZW1hbGUnPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNTQiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUyIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1MSIgcGF0aD0iZ2VuZGVyIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUwIiBuYW1lPSJQYXRpZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZlbWFsZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI2MyIgbmFtZT0iSXMgQWdlIDUyIHRvIDc0IGF0IEVuZCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjYzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgQWdlIDUyIHRvIDc0IGF0IEVuZCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjYyIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1OSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+QWdlSW5ZZWFyc0F0KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4gYmV0d2VlbiA1MiBhbmQgNzQ8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjYyIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTkiIHByZWNpc2lvbj0iWWVhciIgeHNpOnR5cGU9IkNhbGN1bGF0ZUFnZUF0Ij4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iYmlydGhEYXRlLnZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9IlBhdGllbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTgiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1NyIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2MCIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI1MiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTGVzc09yRXF1YWwiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1OSIgcHJlY2lzaW9uPSJZZWFyIiB4c2k6dHlwZT0iQ2FsY3VsYXRlQWdlQXQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJiaXJ0aERhdGUudmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1OCIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjU3IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjYxIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9Ijc0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iODMiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI4MyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIFBlcmlvZFRvSW50ZXJ2YWxPZkRUKHZhbHVlIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9Ijc1Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlBlcmlvZDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4pOgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iODIiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjgyIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5JbnRlcnZhbFs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O3N0YXJ0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7ZW5kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iODIiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSI3OCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNzciIHBhdGg9InN0YXJ0IiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijc2IiBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSI4MSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iODAiIHBhdGg9ImVuZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI3OSIgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L2hpZ2g+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0idmFsdWUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iNzUiIG5hbWU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iOTIiIG5hbWU9IklzIEJpbGF0ZXJhbCBNYXN0ZWN0b215IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iOTIiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBCaWxhdGVyYWwgTWFzdGVjdG9teSZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjkxIj4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI5MCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjY4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iOTEiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5MCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI2NyIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI2NiIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iODkiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3MiIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNzAiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjY5IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3MSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4OCIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4NSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijg0IiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNzQiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijg3IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iODYiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjExMCIgbmFtZT0iSXMgSGlzdG9yeSBPZiBCaWxhdGVyYWwgTWFzdGVjdG9teSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjExMCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIEhpc3RvcnkgT2YgQmlsYXRlcmFsIE1hc3RlY3RvbXkmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxMDkiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwOCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwOCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W0NvbmRpdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SGlzdG9yeSBvZiBCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IENvbmQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Db25kPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmVyaWZpY2F0aW9uU3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbmZpcm1lZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q29uZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5hc3NlcnRlZERhdGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTA5IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTA4IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijk1IiBhbGlhcz0iQ29uZCI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9Ijk0IiBkYXRhVHlwZT0iZmhpcjpDb25kaXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9Ikhpc3Rvcnkgb2YgQmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjEwNyIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwMCIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijk3IiBwYXRoPSJ2ZXJpZmljYXRpb25TdGF0dXMiIHNjb3BlPSJDb25kIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5OSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbmZpcm1lZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMDYiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTAzIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMDIiIHBhdGg9ImFzc2VydGVkRGF0ZSIgc2NvcGU9IkNvbmQiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwNSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwNCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTkxIiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBCaWxhdGVyYWwgTW9kaWZpZXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxOTEiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBCaWxhdGVyYWwgTW9kaWZpZXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxOTAiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4OSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4OSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W0NsYWltXTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IENsYWltPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q2xhaW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYWN0aXZlJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNsYWltLnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7VW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCXN1Y2ggdGhhdAoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2MxPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQllbHNlIGZhbHNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2l0aCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0JpbGF0ZXJhbCBNb2RpZmllciBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2MyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQlzdWNoIHRoYXQKCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWYgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGlzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCXRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBhcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJZWxzZSBmYWxzZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE5MCIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE4OSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMTQiIGFsaWFzPSJDbGFpbSI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjExMyIgZGF0YVR5cGU9ImZoaXI6Q2xhaW0iIHhzaTp0eXBlPSJSZXRyaWV2ZSIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjE4OCIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjExOSIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTE3IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMTYiIHBhdGg9InN0YXR1cyIgc2NvcGU9IkNsYWltIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMTgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhY3RpdmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTg3IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTg2IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjEyMSIgYWxpYXM9IkJiRWxlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEyMCIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQ2xhaW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBsb2NhbElkPSIxNTMiIGFsaWFzPSJQcm9jMSIgeHNpOnR5cGU9IldpdGgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxMzciIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTIzIiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEyMiIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjEzNiIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEyOCIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTI2IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMjUiIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEyNyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzUiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTMyIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTMxIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTMwIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBuYW1lPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzQiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzMiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c3VjaFRoYXQgbG9jYWxJZD0iMTUyIiB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDIiIHhzaTp0eXBlPSJJcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE0MCIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlzVHlwZVNwZWNpZmllciBsb2NhbElkPSIxNDEiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBuYW1lPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjE1MCIgeHNpOnR5cGU9IkVxdWl2YWxlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDciIHBhdGg9ImlkZW50aWZpZXIiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTQ2IiBzdHJpY3Q9ImZhbHNlIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDQiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMTQ1IiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE0OSIgcGF0aD0iaWRlbnRpZmllciIgc2NvcGU9IlByb2MxIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbHNlIGxvY2FsSWQ9IjE1MSIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdWNoVGhhdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZWxhdGlvbnNoaXA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iMTg1IiBhbGlhcz0iUHJvYzIiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTY5IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE1NSIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxNTQiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQmlsYXRlcmFsIE1vZGlmaWVyIFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIxNjgiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNjAiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE1OCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTU3IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNTkiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTY3IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2NCIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2MyIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2MiIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbmFtZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTY2IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTY1IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1Y2hUaGF0IGxvY2FsSWQ9IjE4NCIgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTc0IiB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNzIiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMTczIiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbmFtZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlbiBsb2NhbElkPSIxODIiIHhzaTp0eXBlPSJFcXVpdmFsZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTc5IiBwYXRoPSJpZGVudGlmaWVyIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE3OCIgc3RyaWN0PSJmYWxzZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTc2IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjE3NyIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODEiIHBhdGg9ImlkZW50aWZpZXIiIHNjb3BlPSJQcm9jMiIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSIxODMiIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VjaFRoYXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVsYXRpb25zaGlwPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjI0MiIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFR3aWNlIFNwcmVhZCBUd28gV2Vla3MiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyNDIiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVHdpY2UgU3ByZWFkIFR3byBXZWVrcyZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI0MSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQwIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O1VuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5yZXR1cm4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBXaGVuVU0xPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O1VuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnJldHVybiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBXaGVuVU0yPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJc3VjaCB0aGF0IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGlmZmVyZW5jZSBpbiBkYXlzIGJldHdlZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPldoZW5VTTE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPldoZW5VTTI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA+PSAxNDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+V2hlblVNMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPldoZW5VTTI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI0MSIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI0MCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyMDYiIGFsaWFzPSJXaGVuVU0xIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjA1IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE5NSIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxOTQiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIyMDAiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE5OCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTk3IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOTkiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgICAgIDxyZXR1cm4gbG9jYWxJZD0iMjA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjAzIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjAyIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBuYW1lPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPC9yZXR1cm4+CiAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iMjM5IiBhbGlhcz0iV2hlblVNMiIgeHNpOnR5cGU9IldpdGgiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMTgiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjA4IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIwNyIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjIxMyIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjExIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyMTAiIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxMiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgICAgPHJldHVybiBsb2NhbElkPSIyMTciPgogICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMTYiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTUiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8c3VjaFRoYXQgbG9jYWxJZD0iMjM4IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjMyIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjI2IiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjQiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iRGlmZmVyZW5jZUJldHdlZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjEiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyMCIgbmFtZT0iV2hlblVNMSIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjIzIiB4c2k6dHlwZT0iU3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjIiIG5hbWU9IldoZW5VTTIiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjI1IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjE0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzMSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjgiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjciIG5hbWU9IldoZW5VTTEiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzMCIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyOSIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzNyIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzQiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzMiIG5hbWU9IldoZW5VTTIiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzNiIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzNSIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjI0NSIgbmFtZT0iSXMgTGFja2luZyBCb3RoIEJyZWFzdHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyNDUiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBMYWNraW5nIEJvdGggQnJlYXN0cyZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI0NCI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTkzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBCaWxhdGVyYWwgTWFzdGVjdG9teSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQlvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIEhpc3RvcnkgT2YgQmlsYXRlcmFsIE1hc3RlY3RvbXkmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFdpdGggQmlsYXRlcmFsIE1vZGlmaWVyJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KCQlvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBUd2ljZSBTcHJlYWQgVHdvIFdlZWtzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjQ0IiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOTMiIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjExMiIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTMiIG5hbWU9IklzIEJpbGF0ZXJhbCBNYXN0ZWN0b215IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMTEiIG5hbWU9IklzIEhpc3RvcnkgT2YgQmlsYXRlcmFsIE1hc3RlY3RvbXkiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTkyIiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBCaWxhdGVyYWwgTW9kaWZpZXIiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQzIiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVHdpY2UgU3ByZWFkIFR3byBXZWVrcyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIzMjUiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIExlZnQgTW9kaWZpZXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzMjUiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBMZWZ0IE1vZGlmaWVyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMzI0Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltDbGFpbV08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBDbGFpbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNsYWltPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2FjdGl2ZSc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5DbGFpbS5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBCYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2l0aCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O1VuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2MxPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQlzdWNoIHRoYXQKCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWYgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGlzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCXRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBhcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjgzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJZWxzZSBmYWxzZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndpdGggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtMZWZ0IE1vZGlmaWVyIFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCXN1Y2ggdGhhdAoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2MyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQllbHNlIGZhbHNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzI0IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzIzIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI0OCIgYWxpYXM9IkNsYWltIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjQ3IiBkYXRhVHlwZT0iZmhpcjpDbGFpbSIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMzIyIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjUzIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTEiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI1MCIgcGF0aD0ic3RhdHVzIiBzY29wZT0iQ2xhaW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1MiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFjdGl2ZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjEiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjAiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjU1IiBhbGlhcz0iQmJFbGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjU0IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJDbGFpbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8cmVsYXRpb25zaGlwIGxvY2FsSWQ9IjI4NyIgYWxpYXM9IlByb2MxIiB4c2k6dHlwZT0iV2l0aCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI3MSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyNTciIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjU2IiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IlVuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMjcwIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjYyIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjAiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI1OSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjYxIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2OSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjYiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjUiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjQiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2OCIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2NyIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSIyODYiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI3NiIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjc0IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjI3NSIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIG5hbWU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iMjg0IiB4c2k6dHlwZT0iRXF1aXZhbGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI4MSIgcGF0aD0iaWRlbnRpZmllciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyODAiIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI3OCIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSIyNzkiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjgzIiBwYXRoPSJpZGVudGlmaWVyIiBzY29wZT0iUHJvYzEiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iMjg1IiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBsb2NhbElkPSIzMTkiIGFsaWFzPSJQcm9jMiIgeHNpOnR5cGU9IldpdGgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMDMiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjg5IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI4OCIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJMZWZ0IE1vZGlmaWVyIFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzMDIiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyOTQiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5MiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjkxIiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyOTMiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzAxIiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5OCIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5NyIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5NiIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbmFtZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzAwIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjk5IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1Y2hUaGF0IGxvY2FsSWQ9IjMxOCIgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzA4IiB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMDYiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMzA3IiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbmFtZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlbiBsb2NhbElkPSIzMTYiIHhzaTp0eXBlPSJFcXVpdmFsZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzEzIiBwYXRoPSJpZGVudGlmaWVyIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMxMiIgc3RyaWN0PSJmYWxzZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzEwIiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjMxMSIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMTUiIHBhdGg9ImlkZW50aWZpZXIiIHNjb3BlPSJQcm9jMiIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSIzMTciIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VjaFRoYXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVsYXRpb25zaGlwPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjM0NCIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzNDQiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjM0MyI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQyIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNDMiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNDIiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzI4IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjMyNyIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMzQxIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzMzIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMzEiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMzMCIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzMyIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM0MCIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMzciIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMzYiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMzUiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMzOSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMzOCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMzY1IiBuYW1lPSJJcyBBYnNlbmNlIE9mIExlZnQgQnJlYXN0IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMzY1Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgQWJzZW5jZSBPZiBMZWZ0IEJyZWFzdCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjM2NCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bT2JzZXJ2YXRpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0Fic2VuY2Ugb2YgTGVmdCBCcmVhc3QgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBPYnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5PYnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGluIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+eyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidmaW5hbCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhbWVuZGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5PYnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZWZmZWN0aXZlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjM2NCIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM2MyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzNDgiIGFsaWFzPSJPYnMiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNDciIGRhdGFUeXBlPSJmaGlyOk9ic2VydmF0aW9uIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJBYnNlbmNlIG9mIExlZnQgQnJlYXN0IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzNjIiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNTUiIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1MSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzUwIiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJPYnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1NCIgeHNpOnR5cGU9Ikxpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIzNTIiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJmaW5hbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMzUzIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYW1lbmRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM2MSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNTgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM1NyIgcGF0aD0iZWZmZWN0aXZlIiBzY29wZT0iT2JzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNjAiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNTkiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjM2OCIgbmFtZT0iSXMgTGFja2luZyBMZWZ0IEJyZWFzdCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjM2OCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIExhY2tpbmcgTGVmdCBCcmVhc3QmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzNjciPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBMZWZ0IE1vZGlmaWVyJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2NiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgQWJzZW5jZSBPZiBMZWZ0IEJyZWFzdCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjM2NyIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzQ2IiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjYiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIExlZnQgTW9kaWZpZXIiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM0NSIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzY2IiBuYW1lPSJJcyBBYnNlbmNlIE9mIExlZnQgQnJlYXN0IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ0OCIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFdpdGggUmlnaHQgTW9kaWZpZXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0NDgiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBSaWdodCBNb2RpZmllciZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ0NyI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQ2Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQ2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bQ2xhaW1dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQ2xhaW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5DbGFpbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhY3RpdmUnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q2xhaW0ucHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndpdGggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzgzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzkxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJc3VjaCB0aGF0CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlmIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQl0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWVsc2UgZmFsc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7UmlnaHQgTW9kaWZpZXIgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDE2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJc3VjaCB0aGF0CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlmIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQl0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWVsc2UgZmFsc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0NDciIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NDYiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzcxIiBhbGlhcz0iQ2xhaW0iPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNzAiIGRhdGFUeXBlPSJmaGlyOkNsYWltIiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSI0NDUiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNzYiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3NCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzczIiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJDbGFpbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzc1IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYWN0aXZlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ0NCIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ0MyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzNzgiIGFsaWFzPSJCYkVsZW0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNzciIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkNsYWltIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iNDEwIiBhbGlhcz0iUHJvYzEiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzk0IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM4MCIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNzkiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzOTMiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzODUiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4MyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzgyIiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzODQiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzkyIiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4OSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4OCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4NyIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbmFtZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzkxIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzkwIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1Y2hUaGF0IGxvY2FsSWQ9IjQwOSIgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzk5IiB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzOTciIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMzk4IiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbmFtZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlbiBsb2NhbElkPSI0MDciIHhzaTp0eXBlPSJFcXVpdmFsZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDA0IiBwYXRoPSJpZGVudGlmaWVyIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQwMyIgc3RyaWN0PSJmYWxzZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDAxIiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjQwMiIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MDYiIHBhdGg9ImlkZW50aWZpZXIiIHNjb3BlPSJQcm9jMSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSI0MDgiIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VjaFRoYXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVsYXRpb25zaGlwPgogICAgICAgICAgICAgICAgICAgICAgICA8cmVsYXRpb25zaGlwIGxvY2FsSWQ9IjQ0MiIgYWxpYXM9IlByb2MyIiB4c2k6dHlwZT0iV2l0aCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQyNiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0MTIiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDExIiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IlJpZ2h0IE1vZGlmaWVyIFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSI0MjUiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MTciIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxNSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDE0IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MTYiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDI0IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQyMSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQyMCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxOSIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbmFtZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDIzIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDIyIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1Y2hUaGF0IGxvY2FsSWQ9IjQ0MSIgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDMxIiB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MjkiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iNDMwIiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbmFtZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlbiBsb2NhbElkPSI0MzkiIHhzaTp0eXBlPSJFcXVpdmFsZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDM2IiBwYXRoPSJpZGVudGlmaWVyIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQzNSIgc3RyaWN0PSJmYWxzZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDMzIiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjQzNCIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MzgiIHBhdGg9ImlkZW50aWZpZXIiIHNjb3BlPSJQcm9jMiIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSI0NDAiIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VjaFRoYXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVsYXRpb25zaGlwPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ2NyIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFJpZ2h0IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNDY3Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFJpZ2h0JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDY2Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjUiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O1VuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0NjYiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NjUiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDUxIiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ1MCIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgUmlnaHQgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjQ2NCIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ1NiIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDU0IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0NTMiIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ1NSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NjMiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDYwIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDU5IiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDU4IiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBuYW1lPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NjIiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NjEiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQ4OSIgbmFtZT0iSXMgQWJzZW5jZSBPZiBSaWdodCBCcmVhc3QiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0ODkiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBBYnNlbmNlIE9mIFJpZ2h0IEJyZWFzdCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ4OCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDg3Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bT2JzZXJ2YXRpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0Fic2VuY2Ugb2YgUmlnaHQgQnJlYXN0IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gT2JzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+T2JzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnsgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDc1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmluYWwnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYW1lbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+T2JzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVmZmVjdGl2ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ4OCIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ4NyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0NzEiIGFsaWFzPSJPYnMiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0NzAiIGRhdGFUeXBlPSJmaGlyOk9ic2VydmF0aW9uIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJBYnNlbmNlIG9mIFJpZ2h0IEJyZWFzdCBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iNDg2IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDc4IiB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NzQiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQ3MyIgcGF0aD0ic3RhdHVzIiBzY29wZT0iT2JzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NzciIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iNDc1IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iZmluYWwiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjQ3NiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFtZW5kZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0ODUiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDgyIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDgxIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDgwIiBwYXRoPSJlZmZlY3RpdmUiIHNjb3BlPSJPYnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ4NCIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ4MyIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNDkyIiBuYW1lPSJJcyBMYWNraW5nIFJpZ2h0IEJyZWFzdCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjQ5MiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIExhY2tpbmcgUmlnaHQgQnJlYXN0JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDkxIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjkiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0OSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFdpdGggUmlnaHQgTW9kaWZpZXImcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDY4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgUmlnaHQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5MCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgQWJzZW5jZSBPZiBSaWdodCBCcmVhc3QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0OTEiIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ2OSIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQ5IiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBSaWdodCBNb2RpZmllciIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDY4IiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgUmlnaHQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDkwIiBuYW1lPSJJcyBBYnNlbmNlIE9mIFJpZ2h0IEJyZWFzdCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0OTYiIG5hbWU9IkhhcyBEb3VibGUgTWFzdGVjdG9teSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjQ5NiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0hhcyBEb3VibGUgTWFzdGVjdG9teSZxdW90OzoKICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ5NSI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ2Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBMYWNraW5nIEJvdGggQnJlYXN0cyZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICBvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgTGFja2luZyBMZWZ0IEJyZWFzdCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICBhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBMYWNraW5nIFJpZ2h0IEJyZWFzdCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ5NSIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQ2IiBuYW1lPSJJcyBMYWNraW5nIEJvdGggQnJlYXN0cyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDk0IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzY5IiBuYW1lPSJJcyBMYWNraW5nIExlZnQgQnJlYXN0IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0OTMiIG5hbWU9IklzIExhY2tpbmcgUmlnaHQgQnJlYXN0IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTA0IiBuYW1lPSJEb2VzIFBhdGllbnQgUXVhbGlmeT8iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI1MDQiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtEb2VzIFBhdGllbnQgUXVhbGlmeT8mcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI1MDMiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjY1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgRmVtYWxlJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgQWdlIDUyIHRvIDc0IGF0IEVuZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CgkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwMiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWYgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0hhcyBEb3VibGUgTWFzdGVjdG9teSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgbnVsbDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkgICAgICAgIHRoZW4gdHJ1ZQoJCSAgICBlbHNlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+bm90IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SGFzIERvdWJsZSBNYXN0ZWN0b215JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1MDMiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2NSIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjU2IiBuYW1lPSJJcyBGZW1hbGUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY0IiBuYW1lPSJJcyBBZ2UgNTIgdG8gNzQgYXQgRW5kIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUwMiIgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDk4IiB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDk3IiBuYW1lPSJIYXMgRG91YmxlIE1hc3RlY3RvbXkiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBuYW1lPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjQ5OSIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJ0cnVlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSI1MDEiIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MDAiIG5hbWU9IkhhcyBEb3VibGUgTWFzdGVjdG9teSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTIwIiBuYW1lPSJJcyBNYW1tb2dyYW0gSW4gTGFzdCAzOSBNb250aHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI1MjAiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBNYW1tb2dyYW0gSW4gTGFzdCAzOSBNb250aHMmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI1MTkiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxOCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxOCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWFtbW9ncmFwaHkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbmNsdWRlZCBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0xvb2tiYWNrIEludGVydmFsIDI3IE1vcmUgTW9udGhzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1MTkiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MTgiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTA2IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjUwNSIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJNYW1tb2dyYXBoeSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iNTE3IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTExIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MDkiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUwOCIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTEwIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUxNiIgeHNpOnR5cGU9IkluY2x1ZGVkSW4iPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MTQiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MTMiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIG5hbWU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MTUiIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIDI3IE1vcmUgTW9udGhzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI1MjgiIG5hbWU9Ik5lZWRzIE1hbW1vZ3JhbSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjUyOCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O05lZWRzIE1hbW1vZ3JhbSZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjUyNyI+CiAgICAgICAgICAgICAgICAgIDxhOnM+aWYgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIyIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIE1hbW1vZ3JhbSBJbiBMYXN0IDM5IE1vbnRocyZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgbnVsbDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KCSAgICB0aGVuIHRydWUKCWVsc2UgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI2Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5ub3QgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBNYW1tb2dyYW0gSW4gTGFzdCAzOSBNb250aHMmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjUyNyIgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTIyIiB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTIxIiBuYW1lPSJJcyBNYW1tb2dyYW0gSW4gTGFzdCAzOSBNb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBuYW1lPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjUyMyIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJ0cnVlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSI1MjYiIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MjUiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9MaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTI0IiBuYW1lPSJJcyBNYW1tb2dyYW0gSW4gTGFzdCAzOSBNb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L2Vsc2U+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTQ1IiBuYW1lPSJDb2RpbmdUb0NvZGUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjU0NSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIENvZGluZ1RvQ29kZShjb2RpbmcgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTMxIj4KICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLkNvZGluZzwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4pOgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTQ0Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NDQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPlN5c3RlbS5Db2RlIHsKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2RlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y29kZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3lzdGVtOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3lzdGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52ZXJzaW9uOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmVyc2lvbjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGlzcGxheTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTQzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU0MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y29kaW5nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRpc3BsYXk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+Cgl9PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNTQ0IiBjbGFzc1R5cGU9InQ6Q29kZSIgeHNpOnR5cGU9Ikluc3RhbmNlIj4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY29kZSI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBsb2NhbElkPSI1MzQiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUzMyIgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1MzIiIG5hbWU9ImNvZGluZyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic3lzdGVtIj4KICAgICAgICAgICAgICAgPHZhbHVlIGxvY2FsSWQ9IjUzNyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTM2IiBwYXRoPSJzeXN0ZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTM1IiBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InZlcnNpb24iPgogICAgICAgICAgICAgICA8dmFsdWUgbG9jYWxJZD0iNTQwIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1MzkiIHBhdGg9InZlcnNpb24iIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTM4IiBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRpc3BsYXkiPgogICAgICAgICAgICAgICA8dmFsdWUgbG9jYWxJZD0iNTQzIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1NDIiIHBhdGg9ImRpc3BsYXkiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTQxIiBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iY29kaW5nIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjUzMSIgbmFtZT0iZmhpcjpDb2RpbmciIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgPC9zdGF0ZW1lbnRzPgo8L2xpYnJhcnk+Cg=="
-    }
-  ]
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-patient.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-patient.json
deleted file mode 100644
index 1749d4395d4..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-patient.json
+++ /dev/null
@@ -1,96 +0,0 @@
-{
-	"resourceType": "Patient",
-	"id": "Patient-6532",
-	"extension": [
-		{
-			"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
-			"valueCodeableConcept": {
-				"coding": [
-					{
-						"system": "http://hl7.org/fhir/v3/Race",
-						"code": "2106-3",
-						"display": "White"
-					}
-				]
-			}
-		},
-		{
-			"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
-			"valueCodeableConcept": {
-				"coding": [
-					{
-						"system": "http://hl7.org/fhir/v3/Ethnicity",
-						"code": "2186-5",
-						"display": "Not Hispanic or Latino"
-					}
-				]
-			}
-		},
-		{
-			"url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
-			"valueCodeableConcept": {
-				"coding": [
-					{
-						"system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
-						"code": "1041",
-						"display": "Roman Catholic Church"
-					}
-				]
-			}
-		}
-	],
-	"identifier": [
-		{
-			"use": "official",
-			"type": {
-				"coding": [
-					{
-						"system": "http://hl7.org/fhir/identifier-type",
-						"code": "SB",
-						"display": "Social Beneficiary Identifier"
-					}
-				],
-				"text": "US Social Security Number"
-			},
-			"system": "http://hl7.org/fhir/sid/us-ssn",
-			"value": "000006532"
-		}
-	],
-	"active": true,
-	"name": [
-		{
-			"family": "Brandt",
-			"given": [
-				"Edith",
-				"Elaine"
-			]
-		}
-	],
-	"telecom": [
-		{
-			"system": "phone",
-			"value": "616-555-1082",
-			"use": "home"
-		},
-		{
-			"system": "phone",
-			"value": "616-555-1211",
-			"use": "mobile"
-		}
-	],
-	"gender": "female",
-	"birthDate": "1987-07-16",
-	"address": [
-		{
-			"use": "home",
-			"type": "postal",
-			"line": [
-				"893 N Elm Drive"
-			],
-			"city": "Grand Rapids",
-			"district": "Kent County",
-			"state": "MI",
-			"postalCode": "49504"
-		}
-	]
-}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-plandefinition.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-plandefinition.json
deleted file mode 100644
index a95c264a80c..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-plandefinition.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "resourceType": "PlanDefinition",
-  "id": "bcs-decision-support",
-  "status": "draft",
-  "library": {
-    "reference": "Library/patient-view"
-  },
-  "action": [
-    {
-      "condition": [
-        {
-          "kind": "applicability",
-          "language": "text/cql",
-          "expression": "Does Patient Qualify?"
-        }
-      ],
-      "action": [
-        {
-          "condition": [
-            {
-              "kind": "applicability",
-              "language": "text/cql",
-              "expression": "Needs Mammogram"
-            }
-          ],
-          "definition": {
-            "reference": "ActivityDefinition/mammogram-service-request"
-          }
-        }
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-request.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-request.json
index 8f3e1c228ae..0621621f4d8 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-request.json
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-bcs-request.json
@@ -1,9 +1,9 @@
 {
   "hookInstance": "d1577c69-dfbe-44ad-ba6d-3e05e953b2ea",
-  "fhirServer": "https://sb-fhir-dstu2.smarthealthit.org/smartdstu2/open",
+  "fhirServer": "XXXXX",
   "hook": "patient-view",
   "user": "Practitioner/example",
-  "context": [],
-  "patient": "Patient/Patient-6535",
-  "prefetch": {}
-}
\ No newline at end of file
+  "context": {
+    "patientId": "Patient/Patient-6535"
+  }
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-codesystems.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-codesystems.json
new file mode 100644
index 00000000000..f8bfaca8769
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-codesystems.json
@@ -0,0 +1,1268 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.90",
+        "url": "http://hl7.org/fhir/sid/icd-10-us",
+        "status": "active",
+        "concept": [
+          {
+            "code": "Z90.12",
+            "display": "Acquired absence of left breast and nipple"
+          },
+          {
+            "code": "C18.0",
+            "display": "Malignant neoplasm of cecum"
+          },
+          {
+            "code": "C18.1",
+            "display": "Malignant neoplasm of appendix"
+          },
+          {
+            "code": "C18.2",
+            "display": "Malignant neoplasm of ascending colon"
+          },
+          {
+            "code": "C18.3",
+            "display": "Malignant neoplasm of hepatic flexure"
+          },
+          {
+            "code": "C18.4",
+            "display": "Malignant neoplasm of transverse colon"
+          },
+          {
+            "code": "C18.5",
+            "display": "Malignant neoplasm of splenic flexure"
+          },
+          {
+            "code": "C18.6",
+            "display": "Malignant neoplasm of descending colon"
+          },
+          {
+            "code": "C18.7",
+            "display": "Malignant neoplasm of sigmoid colon"
+          },
+          {
+            "code": "C18.8",
+            "display": "Malignant neoplasm of overlapping sites of colon"
+          },
+          {
+            "code": "C18.9",
+            "display": "Malignant neoplasm of colon, unspecified"
+          },
+          {
+            "code": "C19",
+            "display": "Malignant neoplasm of rectosigmoid junction"
+          },
+          {
+            "code": "C20",
+            "display": "Malignant neoplasm of rectum"
+          },
+          {
+            "code": "C21.2",
+            "display": "Malignant neoplasm of cloacogenic zone"
+          },
+          {
+            "code": "C21.8",
+            "display": "Malignant neoplasm of overlapping sites of rectum, anus and anal canal"
+          },
+          {
+            "code": "C78.5",
+            "display": "Secondary malignant neoplasm of large intestine and rectum"
+          },
+          {
+            "code": "Z85.038",
+            "display": "Personal history of other malignant neoplasm of large intestine"
+          },
+          {
+            "code": "Z85.048",
+            "display": "Personal history of other malignant neoplasm of rectum, rectosigmoid junction, and anus"
+          },
+          {
+            "code": "Z90.11",
+            "display": "Acquired absence of right breast and nipple"
+          },
+          {
+            "code": "Z90.13",
+            "display": "Acquired absence of bilateral breasts and nipples"
+          },
+          {
+            "code": "Q51.5",
+            "display": "Agenesis and aplasia of cervix"
+          },
+          {
+            "code": "Z90.710",
+            "display": "Acquired absence of both cervix and uterus"
+          },
+          {
+            "code": "Z90.712",
+            "display": "Acquired absence of cervix with remaining uterus"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.90"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.1",
+        "url": "http://loinc.org",
+        "status": "active",
+        "concept": [
+          {
+            "code": "77353-1",
+            "display": "Noninvasive colorectal cancer DNA and occult blood screening [Interpretation] in Stool Narrative"
+          },
+          {
+            "code": "77354-9",
+            "display": "Noninvasive colorectal cancer DNA and occult blood screening [Presence] in Stool"
+          },
+          {
+            "code": "33717-0",
+            "display": "Cytology Cervical or vaginal smear or scraping study"
+          },
+          {
+            "code": "47528-5",
+            "display": "Cytology report of Cervical or vaginal smear or scraping Cyto stain"
+          },
+          {
+            "code": "47527-7",
+            "display": "Cytology report of Cervical or vaginal smear or scraping Cyto stain.thin prep"
+          },
+          {
+            "code": "19774-9",
+            "display": "Cytology study comment Cervical or vaginal smear or scraping Cyto stain"
+          },
+          {
+            "code": "19762-4",
+            "display": "General categories [Interpretation] of Cervical or vaginal smear or scraping by Cyto stain"
+          },
+          {
+            "code": "19765-7",
+            "display": "Microscopic observation [Identifier] in Cervical or vaginal smear or scraping by Cyto stain"
+          },
+          {
+            "code": "19766-5",
+            "display": "Microscopic observation [Identifier] in Cervical or vaginal smear or scraping by Cyto stain Narrative"
+          },
+          {
+            "code": "10524-7",
+            "display": "Microscopic observation [Identifier] in Cervix by Cyto stain"
+          },
+          {
+            "code": "18500-9",
+            "display": "Microscopic observation [Identifier] in Cervix by Cyto stain.thin prep"
+          },
+          {
+            "code": "19764-0",
+            "display": "Statement of adequacy [Interpretation] of Cervical or vaginal smear or scraping by Cyto stain"
+          },
+          {
+            "code": "30167-1",
+            "display": "Human papilloma virus 16+18+31+33+35+39+45+51+52+56+58+59+68 DNA [Presence] in Cervix by Probe and signal amplification method"
+          },
+          {
+            "code": "49896-4",
+            "display": "Human papilloma virus 16+18+31+33+35+39+45+51+52+56+58+59+68 DNA [Presence] in Unspecified specimen by Probe and target amplification method"
+          },
+          {
+            "code": "21440-3",
+            "display": "Human papilloma virus 16+18+31+33+35+45+51+52+56 DNA [Presence] in Cervix by DNA probe"
+          },
+          {
+            "code": "38372-9",
+            "display": "Human papilloma virus 6+11+16+18+31+33+35+39+42+43+44+45+51+52+56+58+59+68 DNA [Presence] in Cervix by Probe and signal amplification method"
+          },
+          {
+            "code": "59420-0",
+            "display": "Human papilloma virus 16+18+31+33+35+39+45+51+52+56+58+59+66+68 DNA [Presence] in Cervix by Probe and signal amplification method"
+          },
+          {
+            "code": "75406-9",
+            "display": "Human papilloma virus 16 and 18+45 E6+E7 mRNA [Presence] in Cervix by Probe with amplification"
+          },
+          {
+            "code": "75694-0",
+            "display": "Human papilloma virus 18+45 E6+E7 mRNA [Presence] in Cervix by Probe and target amplification method"
+          },
+          {
+            "code": "69002-4",
+            "display": "Human papilloma virus E6+E7 mRNA [Presence] in Cervix by Probe and target amplification method"
+          },
+          {
+            "code": "71431-1",
+            "display": "Human papilloma virus 31+33+35+39+45+51+52+56+58+59+66+68 DNA [Presence] in Cervix by Probe and target amplification method"
+          },
+          {
+            "code": "59263-4",
+            "display": "Human papilloma virus 16 DNA [Presence] in Cervix by Probe and signal amplification method"
+          },
+          {
+            "code": "59264-2",
+            "display": "Human papilloma virus 18 DNA [Presence] in Cervix by Probe and signal amplification method"
+          },
+          {
+            "code": "77379-6",
+            "display": "Human papiloma virus 16 and 18 and 31+33+35+39+45+51+52+56+58+59+66+68 DNA [Interpretation] in Cervix"
+          },
+          {
+            "code": "77399-4",
+            "display": "Human papilloma virus 16 DNA [Presence] in Cervix by Probe and target amplification method"
+          },
+          {
+            "code": "77400-0",
+            "display": "Human papilloma virus 18 DNA [Presence] in Cervix by Probe and target amplification method"
+          },
+          {
+            "code": "12503-9",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool --4th specimen"
+          },
+          {
+            "code": "12504-7",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool --5th specimen"
+          },
+          {
+            "code": "14563-1",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool --1st specimen"
+          },
+          {
+            "code": "14564-9",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool --2nd specimen"
+          },
+          {
+            "code": "14565-6",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool --3rd specimen"
+          },
+          {
+            "code": "2335-8",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool"
+          },
+          {
+            "code": "27396-1",
+            "display": "Hemoglobin.gastrointestinal [Mass/mass] in Stool"
+          },
+          {
+            "code": "27401-9",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool --6th specimen"
+          },
+          {
+            "code": "27925-7",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool --7th specimen"
+          },
+          {
+            "code": "27926-5",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool --8th specimen"
+          },
+          {
+            "code": "29771-3",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Immunologic method"
+          },
+          {
+            "code": "56490-6",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Immunologic method --2nd specimen"
+          },
+          {
+            "code": "56491-4",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Immunologic method --3rd specimen"
+          },
+          {
+            "code": "57905-2",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Immunologic method --1st specimen"
+          },
+          {
+            "code": "58453-2",
+            "display": "Hemoglobin.gastrointestinal [Mass/volume] in Stool by Immunologic method"
+          },
+          {
+            "code": "80372-6",
+            "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Rapid immunoassay"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.1"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.285",
+        "url": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+        "status": "active",
+        "concept": [
+          {
+            "code": "0HTV0ZZ",
+            "display": "Resection of Bilateral Breast, Open Approach"
+          },
+          {
+            "code": "0HTU0ZZ",
+            "display": "Resection of Left Breast, Open Approach"
+          },
+          {
+            "code": "0HTT0ZZ",
+            "display": "Resection of Right Breast, Open Approach"
+          },
+          {
+            "code": "0UTC0ZZ",
+            "display": "Resection of Cervix, Open Approach"
+          },
+          {
+            "code": "0UTC4ZZ",
+            "display": "Resection of Cervix, Percutaneous Endoscopic Approach"
+          },
+          {
+            "code": "0UTC7ZZ",
+            "display": "Resection of Cervix, Via Natural or Artificial Opening"
+          },
+          {
+            "code": "0UTC8ZZ",
+            "display": "Resection of Cervix, Via Natural or Artificial Opening Endoscopic"
+          },
+          {
+            "code": "0DTE0ZZ",
+            "display": "Resection of Large Intestine, Open Approach"
+          },
+          {
+            "code": "0DTE4ZZ",
+            "display": "Resection of Large Intestine, Percutaneous Endoscopic Approach"
+          },
+          {
+            "code": "0DTE7ZZ",
+            "display": "Resection of Large Intestine, Via Natural or Artificial Opening"
+          },
+          {
+            "code": "0DTE8ZZ",
+            "display": "Resection of Large Intestine, Via Natural or Artificial Opening Endoscopic"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.285"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.42",
+        "url": "http://hl7.org/fhir/sid/icd-9-cm",
+        "status": "active",
+        "concept": [
+          {
+            "code": "85.48",
+            "display": "Bilateral extended radical mastectomy"
+          },
+          {
+            "code": "85.44",
+            "display": "Bilateral extended simple mastectomy"
+          },
+          {
+            "code": "85.46",
+            "display": "Bilateral radical mastectomy"
+          },
+          {
+            "code": "85.42",
+            "display": "Bilateral simple mastectomy"
+          },
+          {
+            "code": "87.37",
+            "display": "Other mammography"
+          },
+          {
+            "code": "87.36",
+            "display": "Xerography of breast"
+          },
+          {
+            "code": "85.47",
+            "display": "Unilateral extended radical mastectomy"
+          },
+          {
+            "code": "85.43",
+            "display": "Unilateral extended simple mastectomy"
+          },
+          {
+            "code": "85.45",
+            "display": "Unilateral radical mastectomy"
+          },
+          {
+            "code": "85.41",
+            "display": "Unilateral simple mastectomy"
+          },
+          {
+            "code": "V88.02",
+            "display": "Acquired absence of both cervix and uterus"
+          },
+          {
+            "code": "V88.03",
+            "display": "Acquired absence of cervix with remaining uterus"
+          },
+          {
+            "code": "752.43",
+            "display": "Cervical agenesis"
+          },
+          {
+            "code": "618.5",
+            "display": "Prolapse of vaginal vault after hysterectomy"
+          },
+          {
+            "code": "68.61",
+            "display": "Laparoscopic radical abdominal hysterectomy"
+          },
+          {
+            "code": "68.71",
+            "display": "Laparoscopic radical vaginal hysterectomy [LRVH]"
+          },
+          {
+            "code": "68.41",
+            "display": "Laparoscopic total abdominal hysterectomy"
+          },
+          {
+            "code": "68.51",
+            "display": "Laparoscopically assisted vaginal hysterectomy (LAVH)"
+          },
+          {
+            "code": "68.69",
+            "display": "Other and unspecified radical abdominal hysterectomy"
+          },
+          {
+            "code": "68.79",
+            "display": "Other and unspecified radical vaginal hysterectomy"
+          },
+          {
+            "code": "68.49",
+            "display": "Other and unspecified total abdominal hysterectomy"
+          },
+          {
+            "code": "68.59",
+            "display": "Other and unspecified vaginal hysterectomy"
+          },
+          {
+            "code": "68.8",
+            "display": "Pelvic evisceration"
+          },
+          {
+            "code": "45.81",
+            "display": "Laparoscopic total intra-abdominal colectomy"
+          },
+          {
+            "code": "45.82",
+            "display": "Open total intra-abdominal colectomy"
+          },
+          {
+            "code": "45.83",
+            "display": "Other and unspecified total intra-abdominal colectomy"
+          },
+          {
+            "code": "45.24",
+            "display": "Flexible sigmoidoscopy"
+          },
+          {
+            "code": "153.0",
+            "display": "Malignant neoplasm of hepatic flexure"
+          },
+          {
+            "code": "153.1",
+            "display": "Malignant neoplasm of transverse colon"
+          },
+          {
+            "code": "153.2",
+            "display": "Malignant neoplasm of descending colon"
+          },
+          {
+            "code": "153.3",
+            "display": "Malignant neoplasm of sigmoid colon"
+          },
+          {
+            "code": "153.4",
+            "display": "Malignant neoplasm of cecum"
+          },
+          {
+            "code": "153.5",
+            "display": "Malignant neoplasm of appendix vermiformis"
+          },
+          {
+            "code": "153.6",
+            "display": "Malignant neoplasm of ascending colon"
+          },
+          {
+            "code": "153.7",
+            "display": "Malignant neoplasm of splenic flexure"
+          },
+          {
+            "code": "153.8",
+            "display": "Malignant neoplasm of other specified sites of large intestine"
+          },
+          {
+            "code": "153.9",
+            "display": "Malignant neoplasm of colon, unspecified site"
+          },
+          {
+            "code": "154.0",
+            "display": "Malignant neoplasm of rectosigmoid junction"
+          },
+          {
+            "code": "154.1",
+            "display": "Malignant neoplasm of rectum"
+          },
+          {
+            "code": "197.5",
+            "display": "Secondary malignant neoplasm of large intestine and rectum"
+          },
+          {
+            "code": "V10.05",
+            "display": "Personal history of malignant neoplasm of large intestine"
+          },
+          {
+            "code": "V10.06",
+            "display": "Personal history of malignant neoplasm of rectum, rectosigmoid junction, and anus"
+          },
+          {
+            "code": "45.22",
+            "display": "Endoscopy of large intestine through artificial stoma"
+          },
+          {
+            "code": "45.23",
+            "display": "Colonoscopy"
+          },
+          {
+            "code": "45.25",
+            "display": "Closed [endoscopic] biopsy of large intestine"
+          },
+          {
+            "code": "45.42",
+            "display": "Endoscopic polypectomy of large intestine"
+          },
+          {
+            "code": "45.43",
+            "display": "Endoscopic destruction of other lesion or tissue of large intestine"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.42"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.12",
+        "url": "http://www.ama-assn.org/go/cpt",
+        "status": "active",
+        "concept": [
+          {
+            "code": "50",
+            "display": "Bilateral Procedure [50]"
+          },
+          {
+            "code": "LT",
+            "display": "Left side (used to identify procedures performed on the left side of the body) [LT]"
+          },
+          {
+            "code": "RT",
+            "display": "Right side (used to identify procedures performed on the right side of the body) [RT]"
+          },
+          {
+            "code": "77066",
+            "display": "Diagnostic mammography, including computer-aided detection (CAD) when performed; bilateral"
+          },
+          {
+            "code": "77065",
+            "display": "Diagnostic mammography, including computer-aided detection (CAD) when performed; unilateral"
+          },
+          {
+            "code": "77062",
+            "display": "Digital breast tomosynthesis; bilateral"
+          },
+          {
+            "code": "77061",
+            "display": "Digital breast tomosynthesis; unilateral"
+          },
+          {
+            "code": "77056",
+            "display": "Mammography; bilateral"
+          },
+          {
+            "code": "77055",
+            "display": "Mammography; unilateral]"
+          },
+          {
+            "code": "77063",
+            "display": "Screening digital breast tomosynthesis, bilateral (List separately in addition to code for primary procedure)"
+          },
+          {
+            "code": "77057",
+            "display": "Screening mammography, bilateral (2-view study of each breast)"
+          },
+          {
+            "code": "77067",
+            "display": "Screening mammography, bilateral (2-view study of each breast), including computer-aided detection (CAD) when performed"
+          },
+          {
+            "code": "19307",
+            "display": "Mastectomy, modified radical, including axillary lymph nodes, with or without pectoralis minor muscle, but excluding pectoralis major muscle"
+          },
+          {
+            "code": "19306",
+            "display": "Mastectomy, radical, including pectoral muscles, axillary and internal mammary lymph nodes (Urban type operation)"
+          },
+          {
+            "code": "19305",
+            "display": "Mastectomy, radical, including pectoral muscles, axillary lymph nodes"
+          },
+          {
+            "code": "19303",
+            "display": "Mastectomy, simple, complete"
+          },
+          {
+            "code": "19304",
+            "display": "Mastectomy, subcutaneous"
+          },
+          {
+            "code": "19240",
+            "display": "Mastectomy, modified radical, including axillary lymph nodes, with or without pectoralis minor muscle, but excluding pectoralis major muscle"
+          },
+          {
+            "code": "19220",
+            "display": "Mastectomy, radical, including pectoral muscles, axillary and internal mammary lymph nodes (Urban type operation)"
+          },
+          {
+            "code": "19200",
+            "display": "Mastectomy, radical, including pectoral muscles, axillary lymph nodes"
+          },
+          {
+            "code": "19180",
+            "display": "Mastectomy, simple, complete"
+          },
+          {
+            "code": "58953",
+            "display": "Bilateral salpingo-oophorectomy with omentectomy, total abdominal hysterectomy and radical dissection for debulking"
+          },
+          {
+            "code": "58954",
+            "display": "Bilateral salpingo-oophorectomy with omentectomy, total abdominal hysterectomy and radical dissection for debulking; with pelvic lymphadenectomy and limited para-aortic lymphadenectomy"
+          },
+          {
+            "code": "58956",
+            "display": "Bilateral salpingo-oophorectomy with total omentectomy, total abdominal hysterectomy for malignancy"
+          },
+          {
+            "code": "51925",
+            "display": "Closure of vesicouterine fistula; with hysterectomy"
+          },
+          {
+            "code": "57540",
+            "display": "Excision of cervical stump, abdominal approach"
+          },
+          {
+            "code": "57545",
+            "display": "Excision of cervical stump, abdominal approach; with pelvic floor repair"
+          },
+          {
+            "code": "57550",
+            "display": "Excision of cervical stump, vaginal approach"
+          },
+          {
+            "code": "57555",
+            "display": "Excision of cervical stump, vaginal approach; with anterior and/or posterior repair"
+          },
+          {
+            "code": "57556",
+            "display": "Excision of cervical stump, vaginal approach; with repair of enterocele"
+          },
+          {
+            "code": "58548",
+            "display": "Laparoscopy, surgical, with radical hysterectomy, with bilateral total pelvic lymphadenectomy and para-aortic lymph node sampling (biopsy), with removal of tube(s) and ovary(s), if performed"
+          },
+          {
+            "code": "58570",
+            "display": "Laparoscopy, surgical, with total hysterectomy, for uterus 250 g or less"
+          },
+          {
+            "code": "58571",
+            "display": "Laparoscopy, surgical, with total hysterectomy, for uterus 250 g or less; with removal of tube(s) and/or ovary(s)"
+          },
+          {
+            "code": "58572",
+            "display": "Laparoscopy, surgical, with total hysterectomy, for uterus greater than 250 g"
+          },
+          {
+            "code": "58573",
+            "display": "Laparoscopy, surgical, with total hysterectomy, for uterus greater than 250 g; with removal of tube(s) and/or ovary(s)"
+          },
+          {
+            "code": "58550",
+            "display": "Laparoscopy, surgical, with vaginal hysterectomy, for uterus 250 g or less"
+          },
+          {
+            "code": "58552",
+            "display": "Laparoscopy, surgical, with vaginal hysterectomy, for uterus 250 g or less; with removal of tube(s) and/or ovary(s)"
+          },
+          {
+            "code": "58553",
+            "display": "Laparoscopy, surgical, with vaginal hysterectomy, for uterus greater than 250 g"
+          },
+          {
+            "code": "58554",
+            "display": "Laparoscopy, surgical, with vaginal hysterectomy, for uterus greater than 250 g; with removal of tube(s) and/or ovary(s)"
+          },
+          {
+            "code": "58240",
+            "display": "Pelvic exenteration for gynecologic malignancy, with total abdominal hysterectomy or cervicectomy, with or without removal of tube(s), with or without removal of ovary(s), with removal of bladder and ureteral transplantations, and/or abdominoperineal resection of rectum and colon and colostomy, or any combination thereof"
+          },
+          {
+            "code": "58210",
+            "display": "Radical abdominal hysterectomy, with bilateral total pelvic lymphadenectomy and para-aortic lymph node sampling (biopsy), with or without removal of tube(s), with or without removal of ovary(s)"
+          },
+          {
+            "code": "58951",
+            "display": "Resection (initial) of ovarian, tubal or primary peritoneal malignancy with bilateral salpingo-oophorectomy and omentectomy; with total abdominal hysterectomy, pelvic and limited para-aortic lymphadenectomy"
+          },
+          {
+            "code": "59135",
+            "display": "Surgical treatment of ectopic pregnancy; interstitial, uterine pregnancy requiring total hysterectomy"
+          },
+          {
+            "code": "X1022450",
+            "display": "Total abdominal hysterectomy (corpus and cervix), with or without removal of tube(s), with or without removal of ovary(s)"
+          },
+          {
+            "code": "58150",
+            "display": "Total abdominal hysterectomy (corpus and cervix), with or without removal of tube(s), with or without removal of ovary(s)"
+          },
+          {
+            "code": "58152",
+            "display": "Total abdominal hysterectomy (corpus and cervix), with or without removal of tube(s), with or without removal of ovary(s); with colpo-urethrocystopexy (eg, Marshall-Marchetti-Krantz, Burch)"
+          },
+          {
+            "code": "58200",
+            "display": "Total abdominal hysterectomy, including partial vaginectomy, with para-aortic and pelvic lymph node sampling, with or without removal of tube(s), with or without removal of ovary(s)"
+          },
+          {
+            "code": "X1022451",
+            "display": "Vaginal hysterectomy, for uterus 250 g or less"
+          },
+          {
+            "code": "58260",
+            "display": "Vaginal hysterectomy, for uterus 250 g or less"
+          },
+          {
+            "code": "58267",
+            "display": "Vaginal hysterectomy, for uterus 250 g or less; with colpo-urethrocystopexy (Marshall-Marchetti-Krantz type, Pereyra type) with or without endoscopic control"
+          },
+          {
+            "code": "58262",
+            "display": "Vaginal hysterectomy, for uterus 250 g or less; with removal of tube(s), and/or ovary(s)"
+          },
+          {
+            "code": "58263",
+            "display": "Vaginal hysterectomy, for uterus 250 g or less; with removal of tube(s), and/or ovary(s), with repair of enterocele"
+          },
+          {
+            "code": "58270",
+            "display": "Vaginal hysterectomy, for uterus 250 g or less; with repair of enterocele"
+          },
+          {
+            "code": "X1022567",
+            "display": "Vaginal hysterectomy, for uterus greater than 250 g"
+          },
+          {
+            "code": "58290",
+            "display": "Vaginal hysterectomy, for uterus greater than 250 g"
+          },
+          {
+            "code": "58293",
+            "display": "Vaginal hysterectomy, for uterus greater than 250 g; with colpo-urethrocystopexy (Marshall-Marchetti-Krantz type, Pereyra type) with or without endoscopic control"
+          },
+          {
+            "code": "58291",
+            "display": "Vaginal hysterectomy, for uterus greater than 250 g; with removal of tube(s) and/or ovary(s)"
+          },
+          {
+            "code": "58292",
+            "display": "Vaginal hysterectomy, for uterus greater than 250 g; with removal of tube(s) and/or ovary(s), with repair of enterocele"
+          },
+          {
+            "code": "58294",
+            "display": "Vaginal hysterectomy, for uterus greater than 250 g; with repair of enterocele"
+          },
+          {
+            "code": "58285",
+            "display": "Mastectomy, simple, complete"
+          },
+          {
+            "code": "X1022452",
+            "display": "Vaginal hysterectomy, with total or partial vaginectomy"
+          },
+          {
+            "code": "58275",
+            "display": "Vaginal hysterectomy, with total or partial vaginectomy"
+          },
+          {
+            "code": "58280",
+            "display": "Vaginal hysterectomy, with total or partial vaginectomy; with repair of enterocele"
+          },
+          {
+            "code": "88147",
+            "display": "Cytopathology smears, cervical or vaginal; screening by automated system under physician supervision"
+          },
+          {
+            "code": "88148",
+            "display": "Cytopathology smears, cervical or vaginal; screening by automated system with manual rescreening under physician supervision"
+          },
+          {
+            "code": "88142",
+            "display": "Cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation; manual screening under physician supervision"
+          },
+          {
+            "code": "88174",
+            "display": "Cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation; screening by automated system, under physician supervision"
+          },
+          {
+            "code": "88143",
+            "display": "Cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation; with manual screening and rescreening under physician supervision"
+          },
+          {
+            "code": "88175",
+            "display": "Cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation; with screening by automated system and manual rescreening or review, under physician supervision"
+          },
+          {
+            "code": "88141",
+            "display": "Cytopathology, cervical or vaginal (any reporting system), requiring interpretation by physician"
+          },
+          {
+            "code": "88164",
+            "display": "Cytopathology, slides, cervical or vaginal (the Bethesda System); manual screening under physician supervision"
+          },
+          {
+            "code": "88166",
+            "display": "Cytopathology, slides, cervical or vaginal (the Bethesda System); with manual screening and computer-assisted rescreening under physician supervision"
+          },
+          {
+            "code": "88167",
+            "display": "Cytopathology, slides, cervical or vaginal (the Bethesda System); with manual screening and computer-assisted rescreening using cell selection and review under physician supervision"
+          },
+          {
+            "code": "88165",
+            "display": "Cytopathology, slides, cervical or vaginal (the Bethesda System); with manual screening and rescreening under physician supervision"
+          },
+          {
+            "code": "88150",
+            "display": "Cytopathology, slides, cervical or vaginal; manual screening under physician supervision"
+          },
+          {
+            "code": "88152",
+            "display": "Cytopathology, slides, cervical or vaginal; with manual screening and computer-assisted rescreening under physician supervision"
+          },
+          {
+            "code": "88154",
+            "display": "Cytopathology, slides, cervical or vaginal; with manual screening and computer-assisted rescreening using cell selection and review under physician supervision"
+          },
+          {
+            "code": "88153",
+            "display": "Cytopathology, slides, cervical or vaginal; with manual screening and rescreening under physician supervision"
+          },
+          {
+            "code": "87620",
+            "display": "Infectious agent detection by nucleic acid (DNA or RNA); papillomavirus, human, direct probe technique"
+          },
+          {
+            "code": "87621",
+            "display": "Infectious agent detection by nucleic acid (DNA or RNA); papillomavirus, human, amplified probe technique"
+          },
+          {
+            "code": "87622",
+            "display": "Infectious agent detection by nucleic acid (DNA or RNA); papillomavirus, human, quantification"
+          },
+          {
+            "code": "87624",
+            "display": "Infectious agent detection by nucleic acid (DNA or RNA); Human Papillomavirus (HPV), high-risk types (eg, 16, 18, 31, 33, 35, 39, 45, 51, 52, 56, 58, 59, 68)"
+          },
+          {
+            "code": "87625",
+            "display": "Infectious agent detection by nucleic acid (DNA or RNA); Human Papillomavirus (HPV), types 16 and 18 only, includes type 45, if performed"
+          },
+          {
+            "code": "44388",
+            "display": "Colonoscopy through stoma; diagnostic, including collection of specimen(s) by brushing or washing, when performed (separate procedure)"
+          },
+          {
+            "code": "44393",
+            "display": "Colonoscopy through stoma; with ablation of tumor(s), polyp(s), or other lesion(s) not amenable to removal by hot biopsy forceps, bipolar cautery or snare technique"
+          },
+          {
+            "code": "44389",
+            "display": "Colonoscopy through stoma; with biopsy, single or multiple"
+          },
+          {
+            "code": "44391",
+            "display": "Colonoscopy through stoma; with control of bleeding, any method"
+          },
+          {
+            "code": "44390",
+            "display": "Colonoscopy through stoma; with removal of foreign body(s)"
+          },
+          {
+            "code": "44392",
+            "display": "Colonoscopy through stoma; with removal of tumor(s), polyp(s), or other lesion(s) by hot biopsy forceps"
+          },
+          {
+            "code": "44394",
+            "display": "Colonoscopy through stoma; with removal of tumor(s), polyp(s), or other lesion(s) by snare technique"
+          },
+          {
+            "code": "44397",
+            "display": "Colonoscopy through stoma; with transendoscopic stent placement (includes predilation)"
+          },
+          {
+            "code": "45378",
+            "display": "Colonoscopy, flexible; diagnostic, including collection of specimen(s) by brushing or washing, when performed (separate procedure)"
+          },
+          {
+            "code": "45383",
+            "display": "Colonoscopy, flexible, proximal to splenic flexure; with ablation of tumor(s), polyp(s), or other lesion(s) not amenable to removal by hot biopsy forceps, bipolar cautery or snare technique"
+          },
+          {
+            "code": "45380",
+            "display": "Colonoscopy, flexible; with biopsy, single or multiple"
+          },
+          {
+            "code": "45382",
+            "display": "Colonoscopy, flexible; with control of bleeding, any method"
+          },
+          {
+            "code": "45386",
+            "display": "Colonoscopy, flexible; with transendoscopic balloon dilation"
+          },
+          {
+            "code": "45381",
+            "display": "Colonoscopy, flexible; with directed submucosal injection(s), any substance"
+          },
+          {
+            "code": "45391",
+            "display": "Colonoscopy, flexible; with endoscopic ultrasound examination limited to the rectum, sigmoid, descending, transverse, or ascending colon and cecum, and adjacent structures"
+          },
+          {
+            "code": "45379",
+            "display": "Colonoscopy, flexible; with removal of foreign body(s)"
+          },
+          {
+            "code": "45384",
+            "display": "Colonoscopy, flexible; with removal of tumor(s), polyp(s), or other lesion(s) by hot biopsy forceps"
+          },
+          {
+            "code": "45385",
+            "display": "Colonoscopy, flexible; with removal of tumor(s), polyp(s), or other lesion(s) by snare technique"
+          },
+          {
+            "code": "45387",
+            "display": "Colonoscopy, flexible, proximal to splenic flexure; with transendoscopic stent placement (includes predilation)"
+          },
+          {
+            "code": "45392",
+            "display": "Colonoscopy, flexible; with transendoscopic ultrasound guided intramural or transmural fine needle aspiration/biopsy(s), includes endoscopic ultrasound examination limited to the rectum, sigmoid, descending, transverse, or ascending colon and cecum, and adjacent structures"
+          },
+          {
+            "code": "45355",
+            "display": "Colonoscopy, rigid or flexible, transabdominal via colotomy, single or multiple"
+          },
+          {
+            "code": "44401",
+            "display": "Colonoscopy through stoma; with ablation of tumor(s), polyp(s), or other lesion(s) (includes pre-and post-dilation and guide wire passage, when performed)"
+          },
+          {
+            "code": "44402",
+            "display": "Colonoscopy through stoma; with endoscopic stent placement (including pre- and post-dilation and guide wire passage, when performed)"
+          },
+          {
+            "code": "44403",
+            "display": "Colonoscopy through stoma; with endoscopic mucosal resection"
+          },
+          {
+            "code": "44404",
+            "display": "Colonoscopy through stoma; with directed submucosal injection(s), any substance"
+          },
+          {
+            "code": "44405",
+            "display": "Colonoscopy through stoma; with transendoscopic balloon dilation"
+          },
+          {
+            "code": "44406",
+            "display": "Colonoscopy through stoma; with endoscopic ultrasound examination, limited to the sigmoid, descending, transverse, or ascending colon and cecum and adjacent structures"
+          },
+          {
+            "code": "44407",
+            "display": "Colonoscopy through stoma; with transendoscopic ultrasound guided intramural or transmural fine needle aspiration/biopsy(s), includes endoscopic ultrasound examination limited to the sigmoid, descending, transverse, or ascending colon and cecum and adjacent structures"
+          },
+          {
+            "code": "44408",
+            "display": "Colonoscopy through stoma; with decompression (for pathologic distention) (eg, volvulus, megacolon), including placement of decompression tube, when performed"
+          },
+          {
+            "code": "45388",
+            "display": "Colonoscopy, flexible; with ablation of tumor(s), polyp(s), or other lesion(s) (includes pre- and post-dilation and guide wire passage, when performed)"
+          },
+          {
+            "code": "45389",
+            "display": "Colonoscopy, flexible; with endoscopic stent placement (includes pre- and post-dilation and guide wire passage, when performed)"
+          },
+          {
+            "code": "45390",
+            "display": "Colonoscopy, flexible; with endoscopic mucosal resection"
+          },
+          {
+            "code": "45393",
+            "display": "Colonoscopy, flexible; with decompression (for pathologic distention) (eg, volvulus, megacolon), including placement of decompression tube, when performed"
+          },
+          {
+            "code": "45398",
+            "display": "Colonoscopy, flexible; with band ligation(s) (eg, hemorrhoids)"
+          },
+          {
+            "code": "81528",
+            "display": "Oncology (colorectal) screening, quantitative real-time target and signal amplification of 10 DNA markers (KRAS mutations, promoter methylation of NDRG4 and BMP3) and fecal hemoglobin, utilizing stool, algorithm reported as a positive or negative result"
+          },
+          {
+            "code": "45330",
+            "display": "Sigmoidoscopy, flexible; diagnostic, including collection of specimen(s) by brushing or washing, when performed (separate procedure)"
+          },
+          {
+            "code": "45339",
+            "display": "Sigmoidoscopy, flexible; with ablation of tumor(s), polyp(s), or other lesion(s) not amenable to removal by hot biopsy forceps, bipolar cautery or snare technique"
+          },
+          {
+            "code": "45331",
+            "display": "Sigmoidoscopy, flexible; with biopsy, single or multiple"
+          },
+          {
+            "code": "45334",
+            "display": "Sigmoidoscopy, flexible; with control of bleeding, any method"
+          },
+          {
+            "code": "45337",
+            "display": "Sigmoidoscopy, flexible; with decompression (for pathologic distention) (eg, volvulus, megacolon), including placement of decompression tube, when performed"
+          },
+          {
+            "code": "45340",
+            "display": "Sigmoidoscopy, flexible; with transendoscopic balloon dilation"
+          },
+          {
+            "code": "45335",
+            "display": "Sigmoidoscopy, flexible; with directed submucosal injection(s), any substance"
+          },
+          {
+            "code": "45341",
+            "display": "Sigmoidoscopy, flexible; with endoscopic ultrasound examination"
+          },
+          {
+            "code": "45332",
+            "display": "Sigmoidoscopy, flexible; with removal of foreign body(s)"
+          },
+          {
+            "code": "45333",
+            "display": "Sigmoidoscopy, flexible; with removal of tumor(s), polyp(s), or other lesion(s) by hot biopsy forceps"
+          },
+          {
+            "code": "45338",
+            "display": "Sigmoidoscopy, flexible; with removal of tumor(s), polyp(s), or other lesion(s) by snare technique"
+          },
+          {
+            "code": "45345",
+            "display": "Sigmoidoscopy, flexible; with transendoscopic stent placement (includes predilation)"
+          },
+          {
+            "code": "45346",
+            "display": "Sigmoidoscopy, flexible; with ablation of tumor(s), polyp(s), or other lesion(s) (includes pre- and post-dilation and guide wire passage, when performed)"
+          },
+          {
+            "code": "45347",
+            "display": "Sigmoidoscopy, flexible; with placement of endoscopic stent (includes pre- and post-dilation and guide wire passage, when performed)"
+          },
+          {
+            "code": "45349",
+            "display": "Sigmoidoscopy, flexible; with endoscopic mucosal resection"
+          },
+          {
+            "code": "45350",
+            "display": "Sigmoidoscopy, flexible; with band ligation(s) (eg, hemorrhoids)"
+          },
+          {
+            "code": "82274",
+            "display": "Blood, occult, by fecal hemoglobin determination by immunoassay, qualitative, feces, 1-3 simultaneous determinations"
+          },
+          {
+            "code": "82270",
+            "display": "Blood, occult, by peroxidase activity (eg, guaiac), qualitative; feces, consecutive collected specimens with single determination, for colorectal neoplasm screening (ie, patient was provided 3 cards or single triple card for consecutive collection)"
+          },
+          {
+            "code": "44156",
+            "display": "Colectomy, total, abdominal, with proctectomy; with continent ileostomy"
+          },
+          {
+            "code": "44158",
+            "display": "Colectomy, total, abdominal, with proctectomy; with ileoanal anastomosis, creation of ileal reservoir (S or J), includes loop ileostomy, and rectal mucosectomy, when performed"
+          },
+          {
+            "code": "44157",
+            "display": "Colectomy, total, abdominal, with proctectomy; with ileoanal anastomosis, includes loop ileostomy, and rectal mucosectomy, when performed"
+          },
+          {
+            "code": "44155",
+            "display": "Colectomy, total, abdominal, with proctectomy; with ileostomy"
+          },
+          {
+            "code": "44151",
+            "display": "Colectomy, total, abdominal, without proctectomy; with continent ileostomy"
+          },
+          {
+            "code": "44150",
+            "display": "Colectomy, total, abdominal, without proctectomy; with ileostomy or ileoproctostomy"
+          },
+          {
+            "code": "44211",
+            "display": "Laparoscopy, surgical; colectomy, total, abdominal, with proctectomy, with ileoanal anastomosis, creation of ileal reservoir (S or J), with loop ileostomy, includes rectal mucosectomy, when performed"
+          },
+          {
+            "code": "44210",
+            "display": "Laparoscopy, surgical; colectomy, total, abdominal, without proctectomy, with ileostomy or ileoproctostomy"
+          },
+          {
+            "code": "44212",
+            "display": "Laparoscopy, surgical; colectomy, total, abdominal, with proctectomy, with ileostomy"
+          },
+          {
+            "code": "44153",
+            "display": "Colectomy, total, abdominal, without proctectomy; with rectal mucosectomy, ileoanal anastomosis, creation of ileal reservoir (S or J), with or without loop ileostomy"
+          },
+          {
+            "code": "44152",
+            "display": "Colectomy, total, abdominal, without proctectomy; with rectal mucosectomy, ileoanal anastomosis, with or without loop ileostomy"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.12"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.4",
+        "url": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+        "status": "active",
+        "concept": [
+          {
+            "code": "G0202",
+            "display": "Screening mammography, bilateral (2-view study of each breast), including computer-aided detection (cad) when performed"
+          },
+          {
+            "code": "G0204",
+            "display": "Diagnostic mammography, including computer-aided detection (cad) when performed; bilateral"
+          },
+          {
+            "code": "G0206",
+            "display": "Diagnostic mammography, including computer-aided detection (cad) when performed; unilateral"
+          },
+          {
+            "code": "G0147",
+            "display": "Screening cytopathology smears, cervical or vaginal, performed by automated system under physician supervision"
+          },
+          {
+            "code": "G0148",
+            "display": "Screening cytopathology smears, cervical or vaginal, performed by automated system with manual rescreening"
+          },
+          {
+            "code": "G0141",
+            "display": "Screening cytopathology smears, cervical or vaginal, performed by automated system, with manual rescreening, requiring interpretation by physician"
+          },
+          {
+            "code": "G0124",
+            "display": "Screening cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation, requiring interpretation by physician"
+          },
+          {
+            "code": "G0123",
+            "display": "Screening cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation, screening by cytotechnologist under physician supervision"
+          },
+          {
+            "code": "G0143",
+            "display": "Screening cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation, with manual screening and rescreening by cytotechnologist under physician supervision"
+          },
+          {
+            "code": "G0145",
+            "display": "Screening cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation, with screening by automated system and manual rescreening under physician supervision"
+          },
+          {
+            "code": "G0144",
+            "display": "Screening cytopathology, cervical or vaginal (any reporting system), collected in preservative fluid, automated thin layer preparation, with screening by automated system, under physician supervision"
+          },
+          {
+            "code": "P3000",
+            "display": "Screening papanicolaou smear, cervical or vaginal, up to three smears, by technician under physician supervision"
+          },
+          {
+            "code": "P3001",
+            "display": "Screening papanicolaou smear, cervical or vaginal, up to three smears, requiring interpretation by physician"
+          },
+          {
+            "code": "Q0091",
+            "display": "Screening papanicolaou smear; obtaining, preparing and conveyance of cervical or vaginal smear to laboratory"
+          },
+          {
+            "code": "G0245",
+            "display": "Initial physician evaluation and management of a diabetic patient with diabetic sensory neuropathy resulting in a loss of protective sensation (lops) which must include: (1) the diagnosis of lops, (2) a patient history, (3) a physical examination that consists of at least the following elements: (a) visual inspection of the forefoot, hindfoot and toe web spaces, (b) evaluation of a protective sensation, (c) evaluation of foot structure and biomechanics, (d) evaluation of vascular status and skin integrity, and (e) evaluation and recommendation of footwear and (4) patient education"
+          },
+          {
+            "code": "G0464",
+            "display": "Colorectal cancer screening; stool-based dna and fecal occult hemoglobin (e.g., kras, ndrg4 and bmp3)"
+          },
+          {
+            "code": "G0397",
+            "display": "Alcohol and/or substance (other than tobacco) abuse structured assessment (e.g., audit, dast), and intervention, greater than 30 minutes"
+          },
+          {
+            "code": "G0476",
+            "display": "Infectious agent detection by nucleic acid (dna or rna); human papillomavirus (hpv), high-risk types (e.g., 16, 18, 31, 33, 35, 39, 45, 51, 52, 56, 58, 59, 68) for cervical cancer screening, must be performed in addition to pap test"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.4"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.4.340",
+        "url": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+        "status": "active",
+        "concept": [
+          {
+            "code": "0403",
+            "display": "Screening mammography"
+          },
+          {
+            "code": "0401",
+            "display": "Diagnostic mammography"
+          },
+          {
+            "code": "0923",
+            "display": "Pap smear"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.4.340"
+      }
+    }
+  ]
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-valuesets.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-valuesets.json
new file mode 100644
index 00000000000..84ced2b3f86
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/cds-valuesets.json
@@ -0,0 +1,2255 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1329.1",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1329.1",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-us",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Z90.12"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1329.1"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1330.2",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1330.2",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-us",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Z90.11"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1330.2"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1042",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0HTV0ZZ"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "85.48"
+                },
+                {
+                  "code": "85.44"
+                },
+                {
+                  "code": "85.46"
+                },
+                {
+                  "code": "85.42"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1042.3",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042.3",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0HTV0ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042.3"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1042.4",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042.4",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "85.48"
+                },
+                {
+                  "code": "85.44"
+                },
+                {
+                  "code": "85.46"
+                },
+                {
+                  "code": "85.42"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042.4"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1043.5",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1043.5",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "50"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1043.5"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1331.6",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1331.6",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-us",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Z90.13"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1331.6"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1148.7",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1148.7",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "LT"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1148.7"
+      }
+    },
+            {
+              "resource": {
+                "resourceType": "ValueSet",
+                "id": "2.16.840.1.113883.3.464.1004.1168",
+                "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168",
+                "status": "active",
+                "compose": {
+                  "include": [
+                    {
+                      "system": "http://www.ama-assn.org/go/cpt",
+                      "version": "2017.3.16AB",
+                      "concept": [
+                        {
+                          "code": "77066"
+                        },
+                        {
+                          "code": "77065"
+                        },
+                        {
+                          "code": "77062"
+                        },
+                        {
+                          "code": "77061"
+                        },
+                        {
+                          "code": "77056"
+                        },
+                        {
+                          "code": "77055"
+                        },
+                        {
+                          "code": "77063"
+                        },
+                        {
+                          "code": "77057"
+                        },
+                        {
+                          "code": "77067"
+                        }
+                      ]
+                    },
+                    {
+                      "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+                      "version": "2017.5.17AA",
+                      "concept": [
+                        {
+                          "code": "G0202"
+                        },
+                        {
+                          "code": "G0204"
+                        },
+                        {
+                          "code": "G0206"
+                        }
+                      ]
+                    },
+                    {
+                      "system": "http://hl7.org/fhir/sid/icd-9-cm",
+                      "version": "2014.1.13AA",
+                      "concept": [
+                        {
+                          "code": "87.37"
+                        },
+                        {
+                          "code": "87.36"
+                        }
+                      ]
+                    },
+                    {
+                      "system": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+                      "version": "2012.05",
+                      "concept": [
+                        {
+                          "code": "0403"
+                        },
+                        {
+                          "code": "0401"
+                        }
+                      ]
+                    }
+                  ]
+                }
+              },
+              "request": {
+                "method": "PUT",
+                "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168"
+              }
+            },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168.8",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.8",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "77066"
+                },
+                {
+                  "code": "77065"
+                },
+                {
+                  "code": "77062"
+                },
+                {
+                  "code": "77061"
+                },
+                {
+                  "code": "77056"
+                },
+                {
+                  "code": "77055"
+                },
+                {
+                  "code": "77063"
+                },
+                {
+                  "code": "77057"
+                },
+                {
+                  "code": "77067"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.8"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168.9",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.9",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0202"
+                },
+                {
+                  "code": "G0204"
+                },
+                {
+                  "code": "G0206"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.9"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168.10",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.10",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "87.37"
+                },
+                {
+                  "code": "87.36"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.10"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168.11",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.11",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0403"
+                },
+                {
+                  "code": "0401"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.11"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1230.12",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1230.12",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "RT"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1230.12"
+      }
+    },
+            {
+              "resource": {
+                "resourceType": "ValueSet",
+                "id": "2.16.840.1.113883.3.464.1004.1256",
+                "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256",
+                "status": "active",
+                "compose": {
+                  "include": [
+                    {
+                      "system": "http://www.ama-assn.org/go/cpt",
+                      "version": "2017.3.16AB",
+                      "concept": [
+                        {
+                          "code": "19307"
+                        },
+                        {
+                          "code": "19306"
+                        },
+                        {
+                          "code": "19305"
+                        },
+                        {
+                          "code": "19303"
+                        },
+                        {
+                          "code": "19304"
+                        },
+                        {
+                          "code": "19240"
+                        },
+                        {
+                          "code": "19220"
+                        },
+                        {
+                          "code": "19200"
+                        },
+                        {
+                          "code": "19180"
+                        }
+                      ]
+                    },
+                    {
+                      "system": "http://hl7.org/fhir/sid/icd-9-cm",
+                      "version": "2014.1.13AA",
+                      "concept": [
+                        {
+                          "code": "85.47"
+                        },
+                        {
+                          "code": "85.43"
+                        },
+                        {
+                          "code": "85.45"
+                        },
+                        {
+                          "code": "85.41"
+                        }
+                      ]
+                    }
+                  ]
+                }
+              },
+              "request": {
+                "method": "PUT",
+                "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256"
+              }
+            },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1256.13",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256.13",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "19307"
+                },
+                {
+                  "code": "19306"
+                },
+                {
+                  "code": "19305"
+                },
+                {
+                  "code": "19303"
+                },
+                {
+                  "code": "19304"
+                },
+                {
+                  "code": "19240"
+                },
+                {
+                  "code": "19220"
+                },
+                {
+                  "code": "19200"
+                },
+                {
+                  "code": "19180"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256.13"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1256.14",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256.14",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "85.47"
+                },
+                {
+                  "code": "85.43"
+                },
+                {
+                  "code": "85.45"
+                },
+                {
+                  "code": "85.41"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256.14"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1334.15",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1334.15",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0HTU0ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1334.15"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1335.16",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1335.16",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0HTT0ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1335.16"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.17",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.17",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "58953"
+                },
+                {
+                  "code": "58954"
+                },
+                {
+                  "code": "58956"
+                },
+                {
+                  "code": "51925"
+                },
+                {
+                  "code": "57540"
+                },
+                {
+                  "code": "57545"
+                },
+                {
+                  "code": "57550"
+                },
+                {
+                  "code": "57555"
+                },
+                {
+                  "code": "57556"
+                },
+                {
+                  "code": "58548"
+                },
+                {
+                  "code": "58570"
+                },
+                {
+                  "code": "58571"
+                },
+                {
+                  "code": "58572"
+                },
+                {
+                  "code": "58573"
+                },
+                {
+                  "code": "58550"
+                },
+                {
+                  "code": "58552"
+                },
+                {
+                  "code": "58553"
+                },
+                {
+                  "code": "58554"
+                },
+                {
+                  "code": "58240"
+                },
+                {
+                  "code": "58210"
+                },
+                {
+                  "code": "58951"
+                },
+                {
+                  "code": "59135"
+                },
+                {
+                  "code": "X1022450"
+                },
+                {
+                  "code": "58150"
+                },
+                {
+                  "code": "58152"
+                },
+                {
+                  "code": "58200"
+                },
+                {
+                  "code": "X1022451"
+                },
+                {
+                  "code": "58260"
+                },
+                {
+                  "code": "58267"
+                },
+                {
+                  "code": "58262"
+                },
+                {
+                  "code": "58263"
+                },
+                {
+                  "code": "58270"
+                },
+                {
+                  "code": "X1022567"
+                },
+                {
+                  "code": "58290"
+                },
+                {
+                  "code": "58293"
+                },
+                {
+                  "code": "58291"
+                },
+                {
+                  "code": "58292"
+                },
+                {
+                  "code": "58294"
+                },
+                {
+                  "code": "58285"
+                },
+                {
+                  "code": "X1022452"
+                },
+                {
+                  "code": "58275"
+                },
+                {
+                  "code": "58280"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.17"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.18",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.18",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-us",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Q51.5"
+                },
+                {
+                  "code": "Z90.710"
+                },
+                {
+                  "code": "Z90.712"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.18"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.19",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.19",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0UTC0ZZ"
+                },
+                {
+                  "code": "0UTC4ZZ"
+                },
+                {
+                  "code": "0UTC7ZZ"
+                },
+                {
+                  "code": "0UTC8ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.19"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.20",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.20",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "V88.01"
+                },
+                {
+                  "code": "V88.03"
+                },
+                {
+                  "code": "752.43"
+                },
+                {
+                  "code": "618.5"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.20"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.21",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.21",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "68.61"
+                },
+                {
+                  "code": "68.71"
+                },
+                {
+                  "code": "68.41"
+                },
+                {
+                  "code": "68.51"
+                },
+                {
+                  "code": "68.69"
+                },
+                {
+                  "code": "68.79"
+                },
+                {
+                  "code": "68.49"
+                },
+                {
+                  "code": "68.59"
+                },
+                {
+                  "code": "68.8"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.21"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "88147"
+                },
+                {
+                  "code": "88148"
+                },
+                {
+                  "code": "88142"
+                },
+                {
+                  "code": "88174"
+                },
+                {
+                  "code": "88143"
+                },
+                {
+                  "code": "88175"
+                },
+                {
+                  "code": "88141"
+                },
+                {
+                  "code": "88164"
+                },
+                {
+                  "code": "88166"
+                },
+                {
+                  "code": "88167"
+                },
+                {
+                  "code": "88165"
+                },
+                {
+                  "code": "88150"
+                },
+                {
+                  "code": "88152"
+                },
+                {
+                  "code": "88154"
+                },
+                {
+                  "code": "88153"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0147"
+                },
+                {
+                  "code": "G0148"
+                },
+                {
+                  "code": "G0141"
+                },
+                {
+                  "code": "G0124"
+                },
+                {
+                  "code": "G0123"
+                },
+                {
+                  "code": "G0143"
+                },
+                {
+                  "code": "G0145"
+                },
+                {
+                  "code": "G0144"
+                },
+                {
+                  "code": "P3000"
+                },
+                {
+                  "code": "P3001"
+                },
+                {
+                  "code": "Q0091"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "33717-0"
+                },
+                {
+                  "code": "47528-5"
+                },
+                {
+                  "code": "47527-7"
+                },
+                {
+                  "code": "19774-9"
+                },
+                {
+                  "code": "19762-4"
+                },
+                {
+                  "code": "19765-7"
+                },
+                {
+                  "code": "19766-5"
+                },
+                {
+                  "code": "10524-7"
+                },
+                {
+                  "code": "18500-9"
+                },
+                {
+                  "code": "19764-0"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0923"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208.22",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.22",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "88147"
+                },
+                {
+                  "code": "88148"
+                },
+                {
+                  "code": "88142"
+                },
+                {
+                  "code": "88174"
+                },
+                {
+                  "code": "88143"
+                },
+                {
+                  "code": "88175"
+                },
+                {
+                  "code": "88141"
+                },
+                {
+                  "code": "88164"
+                },
+                {
+                  "code": "88166"
+                },
+                {
+                  "code": "88167"
+                },
+                {
+                  "code": "88165"
+                },
+                {
+                  "code": "88150"
+                },
+                {
+                  "code": "88152"
+                },
+                {
+                  "code": "88154"
+                },
+                {
+                  "code": "88153"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.22"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208.23",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.23",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0147"
+                },
+                {
+                  "code": "G0148"
+                },
+                {
+                  "code": "G0141"
+                },
+                {
+                  "code": "G0124"
+                },
+                {
+                  "code": "G0123"
+                },
+                {
+                  "code": "G0143"
+                },
+                {
+                  "code": "G0145"
+                },
+                {
+                  "code": "G0144"
+                },
+                {
+                  "code": "P3000"
+                },
+                {
+                  "code": "P3001"
+                },
+                {
+                  "code": "Q0091"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.23"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208.24",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.24",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "33717-0"
+                },
+                {
+                  "code": "47528-5"
+                },
+                {
+                  "code": "47527-7"
+                },
+                {
+                  "code": "19774-9"
+                },
+                {
+                  "code": "19762-4"
+                },
+                {
+                  "code": "19765-7"
+                },
+                {
+                  "code": "19766-5"
+                },
+                {
+                  "code": "10524-7"
+                },
+                {
+                  "code": "18500-9"
+                },
+                {
+                  "code": "19764-0"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.24"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208.25",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.25",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0923"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.25"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1265.26",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.26",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "87620"
+                },
+                {
+                  "code": "87621"
+                },
+                {
+                  "code": "87622"
+                },
+                {
+                  "code": "87624"
+                },
+                {
+                  "code": "87625"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.26"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1265.27",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.27",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0476"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.27"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1265.28",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.28",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "30167-1"
+                },
+                {
+                  "code": "49896-4"
+                },
+                {
+                  "code": "21440-3"
+                },
+                {
+                  "code": "38372-9"
+                },
+                {
+                  "code": "59420-0"
+                },
+                {
+                  "code": "75406-9"
+                },
+                {
+                  "code": "75694-0"
+                },
+                {
+                  "code": "69002-4"
+                },
+                {
+                  "code": "71431-1"
+                },
+                {
+                  "code": "59263-4"
+                },
+                {
+                  "code": "59264-2"
+                },
+                {
+                  "code": "77379-6"
+                },
+                {
+                  "code": "77399-4"
+                },
+                {
+                  "code": "77400-0"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.28"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1064.29",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.29",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "44388"
+                },
+                {
+                  "code": "44393"
+                },
+                {
+                  "code": "44389"
+                },
+                {
+                  "code": "44391"
+                },
+                {
+                  "code": "44390"
+                },
+                {
+                  "code": "44392"
+                },
+                {
+                  "code": "44394"
+                },
+                {
+                  "code": "44397"
+                },
+                {
+                  "code": "45378"
+                },
+                {
+                  "code": "44383"
+                },
+                {
+                  "code": "45380"
+                },
+                {
+                  "code": "45382"
+                },
+                {
+                  "code": "45386"
+                },
+                {
+                  "code": "45381"
+                },
+                {
+                  "code": "45391"
+                },
+                {
+                  "code": "45379"
+                },
+                {
+                  "code": "45384"
+                },
+                {
+                  "code": "45385"
+                },
+                {
+                  "code": "44387"
+                },
+                {
+                  "code": "44392"
+                },
+                {
+                  "code": "45355"
+                },
+                {
+                  "code": "44401"
+                },
+                {
+                  "code": "44402"
+                },
+                {
+                  "code": "44403"
+                },
+                {
+                  "code": "44404"
+                },
+                {
+                  "code": "44405"
+                },
+                {
+                  "code": "44406"
+                },
+                {
+                  "code": "44407"
+                },
+                {
+                  "code": "44408"
+                },
+                {
+                  "code": "45388"
+                },
+                {
+                  "code": "45389"
+                },
+                {
+                  "code": "45390"
+                },
+                {
+                  "code": "45393"
+                },
+                {
+                  "code": "45398"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.29"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1064.30",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.30",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0204"
+                },
+                {
+                  "code": "G0245"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.30"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1064.31",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.31",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "45.22"
+                },
+                {
+                  "code": "45.23"
+                },
+                {
+                  "code": "45.25"
+                },
+                {
+                  "code": "45.42"
+                },
+                {
+                  "code": "45.43"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.31"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1065.32",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1065.32",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-us",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Z90.12"
+                },
+                {
+                  "code": "C18.0"
+                },
+                {
+                  "code": "C18.1"
+                },
+                {
+                  "code": "C18.2"
+                },
+                {
+                  "code": "C18.3"
+                },
+                {
+                  "code": "C18.4"
+                },
+                {
+                  "code": "C18.5"
+                },
+                {
+                  "code": "C18.6"
+                },
+                {
+                  "code": "C18.7"
+                },
+                {
+                  "code": "C18.8"
+                },
+                {
+                  "code": "C18.9"
+                },
+                {
+                  "code": "C19"
+                },
+                {
+                  "code": "C20"
+                },
+                {
+                  "code": "C21.2"
+                },
+                {
+                  "code": "C21.8"
+                },
+                {
+                  "code": "C78.5"
+                },
+                {
+                  "code": "Z85.038"
+                },
+                {
+                  "code": "Z85.048"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1065.32"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1065.33",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1065.33",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "153.0"
+                },
+                {
+                  "code": "153.1"
+                },
+                {
+                  "code": "153.2"
+                },
+                {
+                  "code": "153.3"
+                },
+                {
+                  "code": "153.4"
+                },
+                {
+                  "code": "153.5"
+                },
+                {
+                  "code": "153.6"
+                },
+                {
+                  "code": "153.7"
+                },
+                {
+                  "code": "153.8"
+                },
+                {
+                  "code": "153.9"
+                },
+                {
+                  "code": "154.0"
+                },
+                {
+                  "code": "154.1"
+                },
+                {
+                  "code": "197.5"
+                },
+                {
+                  "code": "V10.05"
+                },
+                {
+                  "code": "V10.06"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1065.33"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1421.34",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1421.34",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "74263"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1421.34"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1420.35",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.35",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "81528"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.35"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1420.36",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.36",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0464"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.36"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1420.37",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.37",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "77353-1"
+                },
+                {
+                  "code": "77354-9"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.37"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1102.38",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.38",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "45330"
+                },
+                {
+                  "code": "45339"
+                },
+                {
+                  "code": "45331"
+                },
+                {
+                  "code": "45334"
+                },
+                {
+                  "code": "45337"
+                },
+                {
+                  "code": "45340"
+                },
+                {
+                  "code": "45335"
+                },
+                {
+                  "code": "45341"
+                },
+                {
+                  "code": "45332"
+                },
+                {
+                  "code": "45333"
+                },
+                {
+                  "code": "45338"
+                },
+                {
+                  "code": "45345"
+                },
+                {
+                  "code": "45342"
+                },
+                {
+                  "code": "45346"
+                },
+                {
+                  "code": "45347"
+                },
+                {
+                  "code": "45349"
+                },
+                {
+                  "code": "45350"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.38"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1102.39",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.39",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0202"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.39"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1102.40",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.40",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "45.24"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.40"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1093.41",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.41",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "82274"
+                },
+                {
+                  "code": "82270"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.41"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1093.42",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.42",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0397"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.42"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1093.43",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.43",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "12503-9"
+                },
+                {
+                  "code": "12504-7"
+                },
+                {
+                  "code": "14563-1"
+                },
+                {
+                  "code": "14564-9"
+                },
+                {
+                  "code": "14565-6"
+                },
+                {
+                  "code": "2335-8"
+                },
+                {
+                  "code": "27396-1"
+                },
+                {
+                  "code": "27401-9"
+                },
+                {
+                  "code": "27925-7"
+                },
+                {
+                  "code": "27926-5"
+                },
+                {
+                  "code": "29771-3"
+                },
+                {
+                  "code": "56490-6"
+                },
+                {
+                  "code": "56491-4"
+                },
+                {
+                  "code": "57905-2"
+                },
+                {
+                  "code": "58453-2"
+                },
+                {
+                  "code": "80372-6"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.43"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1250.44",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.44",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "44156"
+                },
+                {
+                  "code": "44158"
+                },
+                {
+                  "code": "44157"
+                },
+                {
+                  "code": "44155"
+                },
+                {
+                  "code": "44151"
+                },
+                {
+                  "code": "44150"
+                },
+                {
+                  "code": "44211"
+                },
+                {
+                  "code": "44212"
+                },
+                {
+                  "code": "44210"
+                },
+                {
+                  "code": "44153"
+                },
+                {
+                  "code": "44152"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.44"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1250.45",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.45",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0DTE0ZZ"
+                },
+                {
+                  "code": "0DTE4ZZ"
+                },
+                {
+                  "code": "0DTE7ZZ"
+                },
+                {
+                  "code": "0DTE8ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.45"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1250.46",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.46",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "45.81"
+                },
+                {
+                  "code": "45.82"
+                },
+                {
+                  "code": "45.83"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.46"
+      }
+    }
+  ]
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/general-patient.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/general-patient.json
index 3a8e647c005..d2116f783c3 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/general-patient.json
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/general-patient.json
@@ -1,69 +1,6 @@
 {
   "resourceType": "Patient",
   "id": "Patient-12214",
-  "meta": {
-    "versionId": "1",
-    "lastUpdated": "2017-07-17T16:34:10.814+00:00"
-  },
-  "text": {
-    "status": "generated",
-    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\"><div class=\"hapiHeaderText\">2 <b>N GERIATRIC </b>Jr</div><table class=\"hapiPropertyTable\"><tbody><tr><td>Identifier</td><td>7f3672feb3b54789953e012d8aef5246</td></tr><tr><td>Address</td><td><span>202 Burlington Rd. </span><br/><span>Bedford </span><span>MA </span></td></tr><tr><td>Date of birth</td><td><span>07 May 1946</span></td></tr></tbody></table></div>"
-  },
-  "extension": [
-    {
-      "url": "http://hl7.org/fhir/StructureDefinition/us-core-race",
-      "valueCodeableConcept": {
-        "coding": [
-          {
-            "system": "http://hl7.org/fhir/v3/Race",
-            "code": "2106-3",
-            "display": "White"
-          }
-        ]
-      }
-    },
-    {
-      "url": "http://hl7.org/fhir/StructureDefinition/us-core-ethnicity",
-      "valueCodeableConcept": {
-        "coding": [
-          {
-            "system": "http://hl7.org/fhir/v3/Ethnicity",
-            "code": "2186-5",
-            "display": "Not Hispanic or Latino"
-          }
-        ]
-      }
-    },
-    {
-      "url": "http://hl7.org/fhir/StructureDefinition/us-core-religion",
-      "valueCodeableConcept": {
-        "coding": [
-          {
-            "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
-            "code": "1007",
-            "display": "Atheism"
-          }
-        ]
-      }
-    }
-  ],
-  "identifier": [
-    {
-      "use": "official",
-      "type": {
-        "coding": [
-          {
-            "system": "http://hl7.org/fhir/identifier-type",
-            "code": "SB",
-            "display": "Social Beneficiary Identifier"
-          }
-        ],
-        "text": "Michigan Common Key Service Identifier"
-      },
-      "system": "http://mihin.org/fhir/cks",
-      "value": "7f3672feb3b54789953e012d8aef5246"
-    }
-  ],
   "active": false,
   "name": [
     {
@@ -86,17 +23,6 @@
       "system": "phone",
       "value": "586-555-0297",
       "use": "work"
-    },
-    {
-      "extension": [
-        {
-          "url": "http://hl7.org/fhir/StructureDefinition/us-core-direct",
-          "valueBoolean": true
-        }
-      ],
-      "system": "email",
-      "value": "2.N.Geriatric@direct.mihintest.org",
-      "use": "home"
     }
   ],
   "gender": "male",
@@ -111,4 +37,4 @@
       "postalCode": "01730"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/general-practitioner.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/general-practitioner.json
index 2665f30cb3a..e9a05bdbaee 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/general-practitioner.json
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/general-practitioner.json
@@ -1,55 +1,6 @@
 {
   "resourceType": "Practitioner",
   "id": "Practitioner-12208",
-  "meta": {
-    "versionId": "1",
-    "lastUpdated": "2017-07-17T16:34:10.814+00:00"
-  },
-  "extension": [
-    {
-      "url": "http://hl7.org/fhir/StructureDefinition/us-core-race",
-      "valueCodeableConcept": {
-        "coding": [
-          {
-            "system": "http://hl7.org/fhir/v3/Race",
-            "code": "2056-0",
-            "display": "Black"
-          }
-        ]
-      }
-    },
-    {
-      "url": "http://hl7.org/fhir/StructureDefinition/us-core-ethnicity",
-      "valueCodeableConcept": {
-        "coding": [
-          {
-            "system": "http://hl7.org/fhir/v3/Ethnicity",
-            "code": "2186-5",
-            "display": "Not Hispanic or Latino"
-          }
-        ]
-      }
-    },
-    {
-      "url": "http://gov.onc.fhir.extension.taxonomy",
-      "valueCodeableConcept": {
-        "coding": [
-          {
-            "system": "http://org.nucc.taxonomy",
-            "code": "208D00000X",
-            "display": "General Practice"
-          }
-        ]
-      }
-    },
-    {
-      "url": "http://org.mihin.fhir.extension.electronic-service",
-      "valueReference": {
-        "reference": "ElectronicService/ElectronicService-2415",
-        "display": "Jay.M.Sawyer@direct.mihintest.org"
-      }
-    }
-  ],
   "identifier": [
     {
       "use": "official",
@@ -163,11 +114,7 @@
             "display": "Medical Doctor"
           }
         ]
-      },
-      "issuer": {
-        "reference": "Organization/Organization-2000",
-        "display": "Michigan Department of Licensing and Regulatory Affairs"
       }
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/library-col.elm.xml b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/library-col.elm.xml
deleted file mode 100644
index e078fa6dc57..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/library-col.elm.xml
+++ /dev/null
@@ -1,319 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<library xmlns="urn:hl7-org:elm:r1" xmlns:t="urn:hl7-org:elm-types:r1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:fhir="http://hl7.org/fhir" xmlns:a="urn:hl7-org:cql-annotations:r1">
-   <identifier id="COL" version="1"/>
-   <schemaIdentifier id="urn:hl7-org:elm" version="r1"/>
-   <usings>
-      <def localIdentifier="System" uri="urn:hl7-org:elm-types:r1"/>
-      <def localIdentifier="FHIR" uri="http://hl7.org/fhir" version="1.6"/>
-   </usings>
-   <parameters>
-      <def name="MeasurementPeriod" accessLevel="Public">
-         <parameterTypeSpecifier xsi:type="IntervalTypeSpecifier">
-            <pointType name="t:DateTime" xsi:type="NamedTypeSpecifier"/>
-         </parameterTypeSpecifier>
-      </def>
-   </parameters>
-   <codeSystems>
-      <def name="CPT" id="urn:oid:2.16.840.1.113883.6.12" accessLevel="Public"/>
-      <def name="SNOMED-CT" id="urn:oid:2.16.840.1.113883.6.96" accessLevel="Public"/>
-      <def name="LOINC" id="http://loinc.org" accessLevel="Public"/>
-   </codeSystems>
-   <valueSets>
-      <def name="Malignant Neoplasm of Colon" id="2.16.840.1.113883.3.464.1003.108.11.1001" accessLevel="Public"/>
-      <def name="Total Colectomy" id="2.16.840.1.113883.3.464.1003.198.12.1019" accessLevel="Public"/>
-      <def name="Colonoscopy" id="2.16.840.1.113883.3.464.1003.108.12.1020" accessLevel="Public"/>
-      <def name="Flexible Sigmoidoscopy" id="2.16.840.1.113883.3.464.1003.198.12.1010" accessLevel="Public"/>
-      <def name="Fecal Occult Blood Test (FOBT)" id="2.16.840.1.113883.3.464.1003.198.12.1011" accessLevel="Public"/>
-   </valueSets>
-   <statements>
-      <def name="Patient" context="Patient">
-         <expression xsi:type="SingletonFrom">
-            <operand dataType="fhir:Patient" xsi:type="Retrieve"/>
-         </expression>
-      </def>
-      <def name="Lookback Interval One Year" context="Patient" accessLevel="Public">
-         <expression lowClosed="true" highClosed="true" xsi:type="Interval">
-            <low xsi:type="Subtract">
-               <operand xsi:type="Start">
-                  <operand name="MeasurementPeriod" xsi:type="ParameterRef"/>
-               </operand>
-               <operand value="1" unit="years" xsi:type="Quantity"/>
-            </low>
-            <high xsi:type="End">
-               <operand name="MeasurementPeriod" xsi:type="ParameterRef"/>
-            </high>
-         </expression>
-      </def>
-      <def name="Lookback Interval Five Years" context="Patient" accessLevel="Public">
-         <expression lowClosed="true" highClosed="true" xsi:type="Interval">
-            <low xsi:type="Subtract">
-               <operand xsi:type="Start">
-                  <operand name="MeasurementPeriod" xsi:type="ParameterRef"/>
-               </operand>
-               <operand value="5" unit="years" xsi:type="Quantity"/>
-            </low>
-            <high xsi:type="End">
-               <operand name="MeasurementPeriod" xsi:type="ParameterRef"/>
-            </high>
-         </expression>
-      </def>
-      <def name="Lookback Interval Ten Years" context="Patient" accessLevel="Public">
-         <expression lowClosed="true" highClosed="true" xsi:type="Interval">
-            <low xsi:type="Subtract">
-               <operand xsi:type="Start">
-                  <operand name="MeasurementPeriod" xsi:type="ParameterRef"/>
-               </operand>
-               <operand value="10" unit="years" xsi:type="Quantity"/>
-            </low>
-            <high xsi:type="End">
-               <operand name="MeasurementPeriod" xsi:type="ParameterRef"/>
-            </high>
-         </expression>
-      </def>
-      <def name="In Demographic" context="Patient" accessLevel="Public">
-         <expression xsi:type="GreaterOrEqual">
-            <operand precision="Year" xsi:type="CalculateAgeAt">
-               <operand path="birthDate.value" xsi:type="Property">
-                  <source name="Patient" xsi:type="ExpressionRef"/>
-               </operand>
-               <operand xsi:type="Start">
-                  <operand name="MeasurementPeriod" xsi:type="ParameterRef"/>
-               </operand>
-            </operand>
-            <operand valueType="t:Integer" value="50" xsi:type="Literal"/>
-         </expression>
-      </def>
-      <def name="Hx Colorectal Cancer" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="C">
-               <expression dataType="fhir:Condition" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Malignant Neoplasm of Colon" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="clinicalStatus" scope="C" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="active" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="verificationStatus" scope="C" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="confirmed" xsi:type="Literal"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-      <def name="Hx Total Colectomy" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="T">
-               <expression dataType="fhir:Procedure" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Total Colectomy" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="Equal">
-               <operand path="value" xsi:type="Property">
-                  <source path="status" scope="T" xsi:type="Property"/>
-               </operand>
-               <operand valueType="t:String" value="completed" xsi:type="Literal"/>
-            </where>
-         </expression>
-      </def>
-      <def name="Colonoscopy Performed" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="C">
-               <expression dataType="fhir:Procedure" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Colonoscopy" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="status" scope="C" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="completed" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="In">
-                  <operand path="value" xsi:type="Property">
-                     <source path="end" xsi:type="Property">
-                        <source path="performedPeriod" scope="C" xsi:type="Property"/>
-                     </source>
-                  </operand>
-                  <operand name="Lookback Interval Ten Years" xsi:type="ExpressionRef"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-      <def name="Colonoscopy Results" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="C">
-               <expression dataType="fhir:Observation" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Colonoscopy" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="status" scope="C" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="final" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="In">
-                  <operand path="value" xsi:type="Property">
-                     <source path="effectiveDateTime" scope="C" xsi:type="Property"/>
-                  </operand>
-                  <operand name="Lookback Interval Ten Years" xsi:type="ExpressionRef"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-      <def name="Sigmoidoscopy Procedure" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="S">
-               <expression dataType="fhir:Procedure" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Flexible Sigmoidoscopy" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="status" scope="S" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="completed" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="In">
-                  <operand path="value" xsi:type="Property">
-                     <source path="end" xsi:type="Property">
-                        <source path="performedPeriod" scope="S" xsi:type="Property"/>
-                     </source>
-                  </operand>
-                  <operand name="Lookback Interval Five Years" xsi:type="ExpressionRef"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-      <def name="Sigmoidoscopy Observation" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="O">
-               <expression dataType="fhir:Observation" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Flexible Sigmoidoscopy" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="status" scope="O" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="final" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="In">
-                  <operand path="value" xsi:type="Property">
-                     <source path="effectiveDateTime" scope="O" xsi:type="Property"/>
-                  </operand>
-                  <operand name="Lookback Interval Five Years" xsi:type="ExpressionRef"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-      <def name="FOBT Procedure" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="F">
-               <expression dataType="fhir:Procedure" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Fecal Occult Blood Test (FOBT)" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="status" scope="F" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="completed" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="In">
-                  <operand path="value" xsi:type="Property">
-                     <source path="end" xsi:type="Property">
-                        <source path="performedPeriod" scope="F" xsi:type="Property"/>
-                     </source>
-                  </operand>
-                  <operand name="Lookback Interval One Year" xsi:type="ExpressionRef"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-      <def name="FOBT Observation" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="O">
-               <expression dataType="fhir:Observation" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Fecal Occult Blood Test (FOBT)" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="status" scope="O" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="final" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="In">
-                  <operand path="value" xsi:type="Property">
-                     <source path="effectiveDateTime" scope="O" xsi:type="Property"/>
-                  </operand>
-                  <operand name="Lookback Interval One Year" xsi:type="ExpressionRef"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-      <def name="Colonoscopy Procedure" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="C">
-               <expression dataType="fhir:Procedure" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Colonoscopy" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="status" scope="C" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="completed" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="In">
-                  <operand path="value" xsi:type="Property">
-                     <source path="end" xsi:type="Property">
-                        <source path="performedPeriod" scope="C" xsi:type="Property"/>
-                     </source>
-                  </operand>
-                  <operand name="Lookback Interval Ten Years" xsi:type="ExpressionRef"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-      <def name="Colonoscopy Observation" context="Patient" accessLevel="Public">
-         <expression xsi:type="Query">
-            <source alias="O">
-               <expression dataType="fhir:Observation" codeProperty="code" xsi:type="Retrieve">
-                  <codes name="Colonoscopy" xsi:type="ValueSetRef"/>
-               </expression>
-            </source>
-            <where xsi:type="And">
-               <operand xsi:type="Equal">
-                  <operand path="value" xsi:type="Property">
-                     <source path="status" scope="O" xsi:type="Property"/>
-                  </operand>
-                  <operand valueType="t:String" value="final" xsi:type="Literal"/>
-               </operand>
-               <operand xsi:type="In">
-                  <operand path="value" xsi:type="Property">
-                     <source path="effectiveDateTime" scope="O" xsi:type="Property"/>
-                  </operand>
-                  <operand name="Lookback Interval Ten Years" xsi:type="ExpressionRef"/>
-               </operand>
-            </where>
-         </expression>
-      </def>
-   </statements>
-</library>
-
-
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-col.xml b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-col.xml
deleted file mode 100644
index 4d538f19fbf..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-col.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Measure xmlns="http://hl7.org/fhir" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hl7.org/fhir ../../schema/measure.xsd">
-	<id value="col"/>
-	<text>
-		<status value="additional"/>
-		<div xmlns="http://www.w3.org/1999/xhtml">
-      Cohort definition for Colorectal Cancer Screening.
-    </div>
-	</text>
-	<identifier>
-		<use value="official"/>
-		<system value="http://hl7.org/fhir/cqi/ecqm/Measure/Identifier/payer-extract"/>
-		<value value="COL"/>
-	</identifier>
-	<version value="1.0.0"/>
-	<title value="Colorectal Cancer Screening. Cohort Definition"/>
-	<status value="active"/>
-	<experimental value="true"/>
-	<description value="Colorectal Cancer Screening. Cohort Definition"/>
-	<topic>
-		<coding>
-			<system value="http://hl7.org/fhir/c80-doc-typecodes"/>
-			<code value="57024-2"/>
-		</coding>
-	</topic>
-	<library>
-		<reference value="Library/col-logic"/>
-	</library>
-	<scoring value="cohort"/>
-	<group>
-		<identifier>
-			<value value="in-demographic"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="in-demographic"/>
-			</identifier>
-			<criteria value="In Demographic"/>
-		</population>
-	</group>
-	<group>
-		<identifier>
-			<value value="history-of-colorectal-cancer"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="history-of-colorectal-cancer"/>
-			</identifier>
-			<criteria value="Hx Colorectal Cancer"/>
-		</population>
-	</group>
-	<group>
-		<identifier>
-			<value value="history-of-total-colectomy"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="history-of-total-colectomy"/>
-			</identifier>
-			<criteria value="Hx Total Colectomy"/>
-		</population>
-	</group>
-	<group>
-		<identifier>
-			<value value="colonoscopy-performed"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="colonoscopy-performed"/>
-			</identifier>
-			<criteria value="Colonoscopy Performed"/>
-		</population>
-	</group>
-	<group>
-		<identifier>
-			<value value="colonoscopy-results"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="colonoscopy-results"/>
-			</identifier>
-			<criteria value="Colonoscopy Results"/>
-		</population>
-	</group>
-	<group>
-		<identifier>
-			<value value="sigmoidoscopy-procedure"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="sigmoidoscopy-procedure"/>
-			</identifier>
-			<criteria value="Sigmoidoscopy Procedure"/>
-		</population>
-	</group>
-	<group>
-		<identifier>
-			<value value="sigmoidoscopy-observation"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="sigmoidoscopy-observation"/>
-			</identifier>
-			<criteria value="Sigmoidoscopy Observation"/>
-		</population>
-	</group>
-	<group>
-		<identifier>
-			<value value="fobt-procedure"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="fobt-procedure"/>
-			</identifier>
-			<criteria value="FOBT Procedure"/>
-		</population>
-	</group>
-	<group>
-		<identifier>
-			<value value="fobt-observation"/>
-		</identifier>
-		<population>
-			<type value="initial-population"/>
-			<identifier>
-				<value value="fobt-observation"/>
-			</identifier>
-			<criteria value="FOBT Observation"/>
-		</population>
-	</group>
-</Measure>
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-condition.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-condition.json
deleted file mode 100644
index 6cbca50c2b5..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-condition.json
+++ /dev/null
@@ -1,49 +0,0 @@
-{
-  "resourceType": "Condition",
-  "id": "Condition-13",
-  "meta": {
-    "versionId": "1",
-    "lastUpdated": "2017-09-09T21:52:17.035-06:00"
-  },
-  "extension": [
-    {
-      "url": "http://mihin.org/fhir/templateId",
-      "valueString": "2.16.840.1.113883.10.20.22.4.3"
-    },
-    {
-      "url": "http://mihin.org/fhir/templateId",
-      "valueString": "2.16.840.1.113883.10.20.24.3.137"
-    }
-  ],
-  "clinicalStatus": "active",
-  "verificationStatus": "confirmed",
-  "category": [
-    {
-      "coding": [
-        {
-          "system": "http://hl7.org/fhir/condition-category",
-          "code": "diagnosis",
-          "display": "Diagnosis"
-        }
-      ],
-      "text": "This is a judgment made by a healthcare provider that the patient has a particular disease or condition"
-    }
-  ],
-  "code": {
-    "coding": [
-      {
-        "system": "http://snomed.info/sct",
-        "code": "363414004"
-      }
-    ],
-    "text": "Diagnosis: Malignant Neoplasm Of Colon"
-  },
-  "subject": {
-    "reference": "Patient/Patient-12214",
-    "display": "2  N Geriatric Jr"
-  },
-  "asserter": {
-    "reference": "Practitioner/Practitioner-12208",
-    "display": "Jay McCann Sawyer MD"
-  }
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-library.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-library.json
deleted file mode 100644
index f5ccd262162..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-library.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-  "resourceType": "Library",
-  "id": "col-logic",
-  "meta": {
-    "versionId": "1",
-    "lastUpdated": "2017-09-09T21:25:51.679-06:00"
-  },
-  "status": "draft",
-  "type": {
-    "coding": [
-      {
-        "code": "logic-library"
-      }
-    ]
-  },
-  "content": [
-    {
-      "contentType": "application/elm+xml",
-      "data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxsaWJyYXJ5IHhtbG5zPSJ1cm46aGw3LW9yZzplbG06cjEiIHhtbG5zOnQ9InVybjpobDctb3JnOmVsbS10eXBlczpyMSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6Zmhpcj0iaHR0cDovL2hsNy5vcmcvZmhpciIgeG1sbnM6YT0idXJuOmhsNy1vcmc6Y3FsLWFubm90YXRpb25zOnIxIj4NCiAgIDxpZGVudGlmaWVyIGlkPSJDT0wiIHZlcnNpb249IjEiLz4NCiAgIDxzY2hlbWFJZGVudGlmaWVyIGlkPSJ1cm46aGw3LW9yZzplbG0iIHZlcnNpb249InIxIi8+DQogICA8dXNpbmdzPg0KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IlN5c3RlbSIgdXJpPSJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiLz4NCiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJGSElSIiB1cmk9Imh0dHA6Ly9obDcub3JnL2ZoaXIiIHZlcnNpb249IjEuNiIvPg0KICAgPC91c2luZ3M+DQogICA8cGFyYW1ldGVycz4NCiAgICAgIDxkZWYgbmFtZT0iTWVhc3VyZW1lbnRQZXJpb2QiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPg0KICAgICAgICAgPHBhcmFtZXRlclR5cGVTcGVjaWZpZXIgeHNpOnR5cGU9IkludGVydmFsVHlwZVNwZWNpZmllciI+DQogICAgICAgICAgICA8cG9pbnRUeXBlIG5hbWU9InQ6RGF0ZVRpbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4NCiAgICAgICAgIDwvcGFyYW1ldGVyVHlwZVNwZWNpZmllcj4NCiAgICAgIDwvZGVmPg0KICAgPC9wYXJhbWV0ZXJzPg0KICAgPGNvZGVTeXN0ZW1zPg0KICAgICAgPGRlZiBuYW1lPSJDUFQiIGlkPSJ1cm46b2lkOjIuMTYuODQwLjEuMTEzODgzLjYuMTIiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4NCiAgICAgIDxkZWYgbmFtZT0iU05PTUVELUNUIiBpZD0idXJuOm9pZDoyLjE2Ljg0MC4xLjExMzg4My42Ljk2IiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+DQogICAgICA8ZGVmIG5hbWU9IkxPSU5DIiBpZD0iaHR0cDovL2xvaW5jLm9yZyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPg0KICAgPC9jb2RlU3lzdGVtcz4NCiAgIDx2YWx1ZVNldHM+DQogICAgICA8ZGVmIG5hbWU9Ik1hbGlnbmFudCBOZW9wbGFzbSBvZiBDb2xvbiIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTA4LjExLjEwMDEiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4NCiAgICAgIDxkZWYgbmFtZT0iVG90YWwgQ29sZWN0b215IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTguMTIuMTAxOSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPg0KICAgICAgPGRlZiBuYW1lPSJDb2xvbm9zY29weSIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTA4LjEyLjEwMjAiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4NCiAgICAgIDxkZWYgbmFtZT0iRmxleGlibGUgU2lnbW9pZG9zY29weSIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDMuMTk4LjEyLjEwMTAiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4NCiAgICAgIDxkZWYgbmFtZT0iRmVjYWwgT2NjdWx0IEJsb29kIFRlc3QgKEZPQlQpIiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwMy4xOTguMTIuMTAxMSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPg0KICAgPC92YWx1ZVNldHM+DQogICA8c3RhdGVtZW50cz4NCiAgICAgIDxkZWYgbmFtZT0iUGF0aWVudCIgY29udGV4dD0iUGF0aWVudCI+DQogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+DQogICAgICAgICAgICA8b3BlcmFuZCBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB4c2k6dHlwZT0iUmV0cmlldmUiLz4NCiAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgIDwvZGVmPg0KICAgICAgPGRlZiBuYW1lPSJMb29rYmFjayBJbnRlcnZhbCBPbmUgWWVhciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+DQogICAgICAgICA8ZXhwcmVzc2lvbiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9InRydWUiIHhzaTp0eXBlPSJJbnRlcnZhbCI+DQogICAgICAgICAgICA8bG93IHhzaTp0eXBlPSJTdWJ0cmFjdCI+DQogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU3RhcnQiPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iTWVhc3VyZW1lbnRQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlPSIxIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+DQogICAgICAgICAgICA8L2xvdz4NCiAgICAgICAgICAgIDxoaWdoIHhzaTp0eXBlPSJFbmQiPg0KICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iTWVhc3VyZW1lbnRQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4NCiAgICAgICAgICAgIDwvaGlnaD4NCiAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgIDwvZGVmPg0KICAgICAgPGRlZiBuYW1lPSJMb29rYmFjayBJbnRlcnZhbCBGaXZlIFllYXJzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4NCiAgICAgICAgIDxleHByZXNzaW9uIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4NCiAgICAgICAgICAgIDxsb3cgeHNpOnR5cGU9IlN1YnRyYWN0Ij4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTdGFydCI+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJNZWFzdXJlbWVudFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPg0KICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWU9IjUiIHVuaXQ9InllYXJzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4NCiAgICAgICAgICAgIDwvbG93Pg0KICAgICAgICAgICAgPGhpZ2ggeHNpOnR5cGU9IkVuZCI+DQogICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJNZWFzdXJlbWVudFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPg0KICAgICAgICAgICAgPC9oaWdoPg0KICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgPC9kZWY+DQogICAgICA8ZGVmIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIFRlbiBZZWFycyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+DQogICAgICAgICA8ZXhwcmVzc2lvbiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9InRydWUiIHhzaTp0eXBlPSJJbnRlcnZhbCI+DQogICAgICAgICAgICA8bG93IHhzaTp0eXBlPSJTdWJ0cmFjdCI+DQogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU3RhcnQiPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iTWVhc3VyZW1lbnRQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlPSIxMCIgdW5pdD0ieWVhcnMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPg0KICAgICAgICAgICAgPC9sb3c+DQogICAgICAgICAgICA8aGlnaCB4c2k6dHlwZT0iRW5kIj4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ik1lYXN1cmVtZW50UGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+DQogICAgICAgICAgICA8L2hpZ2g+DQogICAgICAgICA8L2V4cHJlc3Npb24+DQogICAgICA8L2RlZj4NCiAgICAgIDxkZWYgbmFtZT0iSW4gRGVtb2dyYXBoaWMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPg0KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4NCiAgICAgICAgICAgIDxvcGVyYW5kIHByZWNpc2lvbj0iWWVhciIgeHNpOnR5cGU9IkNhbGN1bGF0ZUFnZUF0Ij4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImJpcnRoRGF0ZS52YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4NCiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTdGFydCI+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJNZWFzdXJlbWVudFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPg0KICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI1MCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4NCiAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgIDwvZGVmPg0KICAgICAgPGRlZiBuYW1lPSJIeCBDb2xvcmVjdGFsIENhbmNlciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+DQogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPg0KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iQyI+DQogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpDb25kaXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4NCiAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJNYWxpZ25hbnQgTmVvcGxhc20gb2YgQ29sb24iIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPg0KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgICAgICAgPC9zb3VyY2U+DQogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9IkFuZCI+DQogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iRXF1YWwiPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+DQogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImNsaW5pY2FsU3RhdHVzIiBzY29wZT0iQyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+DQogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYWN0aXZlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPg0KICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJ2ZXJpZmljYXRpb25TdGF0dXMiIHNjb3BlPSJDIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb25maXJtZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+DQogICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICA8L3doZXJlPg0KICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgPC9kZWY+DQogICAgICA8ZGVmIG5hbWU9Ikh4IFRvdGFsIENvbGVjdG9teSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+DQogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPg0KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iVCI+DQogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4NCiAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJUb3RhbCBDb2xlY3RvbXkiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPg0KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgICAgICAgPC9zb3VyY2U+DQogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9IkVxdWFsIj4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJzdGF0dXMiIHNjb3BlPSJUIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+DQogICAgICAgICAgICA8L3doZXJlPg0KICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgPC9kZWY+DQogICAgICA8ZGVmIG5hbWU9IkNvbG9ub3Njb3B5IFBlcmZvcm1lZCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+DQogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPg0KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iQyI+DQogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4NCiAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJDb2xvbm9zY29weSIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+DQogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+DQogICAgICAgICAgICA8L3NvdXJjZT4NCiAgICAgICAgICAgIDx3aGVyZSB4c2k6dHlwZT0iQW5kIj4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFcXVhbCI+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4NCiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ic3RhdHVzIiBzY29wZT0iQyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+DQogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPg0KICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluIj4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJlbmQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InBlcmZvcm1lZFBlcmlvZCIgc2NvcGU9IkMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPg0KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+DQogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJMb29rYmFjayBJbnRlcnZhbCBUZW4gWWVhcnMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+DQogICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICA8L3doZXJlPg0KICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgPC9kZWY+DQogICAgICA8ZGVmIG5hbWU9IkNvbG9ub3Njb3B5IFJlc3VsdHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPg0KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlF1ZXJ5Ij4NCiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9IkMiPg0KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gZGF0YVR5cGU9ImZoaXI6T2JzZXJ2YXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4NCiAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJDb2xvbm9zY29weSIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+DQogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+DQogICAgICAgICAgICA8L3NvdXJjZT4NCiAgICAgICAgICAgIDx3aGVyZSB4c2k6dHlwZT0iQW5kIj4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJFcXVhbCI+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4NCiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0ic3RhdHVzIiBzY29wZT0iQyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+DQogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iZmluYWwiIHhzaTp0eXBlPSJMaXRlcmFsIi8+DQogICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSW4iPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+DQogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImVmZmVjdGl2ZURhdGVUaW1lIiBzY29wZT0iQyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+DQogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBuYW1lPSJMb29rYmFjayBJbnRlcnZhbCBUZW4gWWVhcnMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+DQogICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICA8L3doZXJlPg0KICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgPC9kZWY+DQogICAgICA8ZGVmIG5hbWU9IlNpZ21vaWRvc2NvcHkgUHJvY2VkdXJlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4NCiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+DQogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJTIj4NCiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPg0KICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkZsZXhpYmxlIFNpZ21vaWRvc2NvcHkiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPg0KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgICAgICAgPC9zb3VyY2U+DQogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9IkFuZCI+DQogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iRXF1YWwiPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+DQogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXR1cyIgc2NvcGU9IlMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPg0KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJbiI+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4NCiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZW5kIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJwZXJmb3JtZWRQZXJpb2QiIHNjb3BlPSJTIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPg0KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iTG9va2JhY2sgSW50ZXJ2YWwgRml2ZSBZZWFycyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgIDwvd2hlcmU+DQogICAgICAgICA8L2V4cHJlc3Npb24+DQogICAgICA8L2RlZj4NCiAgICAgIDxkZWYgbmFtZT0iU2lnbW9pZG9zY29weSBPYnNlcnZhdGlvbiIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+DQogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPg0KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iTyI+DQogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpPYnNlcnZhdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPg0KICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkZsZXhpYmxlIFNpZ21vaWRvc2NvcHkiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPg0KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgICAgICAgPC9zb3VyY2U+DQogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9IkFuZCI+DQogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iRXF1YWwiPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+DQogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXR1cyIgc2NvcGU9Ik8iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPg0KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZpbmFsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPg0KICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkluIj4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJlZmZlY3RpdmVEYXRlVGltZSIgc2NvcGU9Ik8iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPg0KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iTG9va2JhY2sgSW50ZXJ2YWwgRml2ZSBZZWFycyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgIDwvd2hlcmU+DQogICAgICAgICA8L2V4cHJlc3Npb24+DQogICAgICA8L2RlZj4NCiAgICAgIDxkZWYgbmFtZT0iRk9CVCBQcm9jZWR1cmUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPg0KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlF1ZXJ5Ij4NCiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9IkYiPg0KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+DQogICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iRmVjYWwgT2NjdWx0IEJsb29kIFRlc3QgKEZPQlQpIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4NCiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgICAgICAgIDwvc291cmNlPg0KICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJBbmQiPg0KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJzdGF0dXMiIHNjb3BlPSJGIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+DQogICAgICAgICAgICAgICA8L29wZXJhbmQ+DQogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSW4iPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+DQogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9ImVuZCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0icGVyZm9ybWVkUGVyaW9kIiBzY29wZT0iRiIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+DQogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4NCiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIE9uZSBZZWFyIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPg0KICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgPC93aGVyZT4NCiAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgIDwvZGVmPg0KICAgICAgPGRlZiBuYW1lPSJGT0JUIE9ic2VydmF0aW9uIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4NCiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJRdWVyeSI+DQogICAgICAgICAgICA8c291cmNlIGFsaWFzPSJPIj4NCiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGRhdGFUeXBlPSJmaGlyOk9ic2VydmF0aW9uIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+DQogICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iRmVjYWwgT2NjdWx0IEJsb29kIFRlc3QgKEZPQlQpIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4NCiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgICAgICAgIDwvc291cmNlPg0KICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJBbmQiPg0KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJzdGF0dXMiIHNjb3BlPSJPIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJmaW5hbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJbiI+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4NCiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZWZmZWN0aXZlRGF0ZVRpbWUiIHNjb3BlPSJPIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIE9uZSBZZWFyIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPg0KICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgPC93aGVyZT4NCiAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgIDwvZGVmPg0KICAgICAgPGRlZiBuYW1lPSJDb2xvbm9zY29weSBQcm9jZWR1cmUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPg0KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlF1ZXJ5Ij4NCiAgICAgICAgICAgIDxzb3VyY2UgYWxpYXM9IkMiPg0KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+DQogICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQ29sb25vc2NvcHkiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPg0KICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPg0KICAgICAgICAgICAgPC9zb3VyY2U+DQogICAgICAgICAgICA8d2hlcmUgeHNpOnR5cGU9IkFuZCI+DQogICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iRXF1YWwiPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+DQogICAgICAgICAgICAgICAgICAgICA8c291cmNlIHBhdGg9InN0YXR1cyIgc2NvcGU9IkMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPg0KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJbiI+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4NCiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZW5kIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJwZXJmb3JtZWRQZXJpb2QiIHNjb3BlPSJDIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPg0KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iTG9va2JhY2sgSW50ZXJ2YWwgVGVuIFllYXJzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPg0KICAgICAgICAgICAgICAgPC9vcGVyYW5kPg0KICAgICAgICAgICAgPC93aGVyZT4NCiAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgIDwvZGVmPg0KICAgICAgPGRlZiBuYW1lPSJDb2xvbm9zY29weSBPYnNlcnZhdGlvbiIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+DQogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iUXVlcnkiPg0KICAgICAgICAgICAgPHNvdXJjZSBhbGlhcz0iTyI+DQogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBkYXRhVHlwZT0iZmhpcjpPYnNlcnZhdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPg0KICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkNvbG9ub3Njb3B5IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4NCiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4NCiAgICAgICAgICAgIDwvc291cmNlPg0KICAgICAgICAgICAgPHdoZXJlIHhzaTp0eXBlPSJBbmQiPg0KICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkVxdWFsIj4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPg0KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBwYXRoPSJzdGF0dXMiIHNjb3BlPSJPIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJmaW5hbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJbiI+DQogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4NCiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgcGF0aD0iZWZmZWN0aXZlRGF0ZVRpbWUiIHNjb3BlPSJPIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4NCiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIFRlbiBZZWFycyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4NCiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4NCiAgICAgICAgICAgIDwvd2hlcmU+DQogICAgICAgICA8L2V4cHJlc3Npb24+DQogICAgICA8L2RlZj4NCiAgIDwvc3RhdGVtZW50cz4NCjwvbGlicmFyeT4NCg=="
-    }
-  ]
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-measure.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-measure.json
deleted file mode 100644
index ecb7851c71e..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-measure.json
+++ /dev/null
@@ -1,158 +0,0 @@
-{
-  "resourceType": "Measure",
-  "id": "col",
-  "meta": {
-    "versionId": "1",
-    "lastUpdated": "2017-09-09T21:26:03.890-06:00"
-  },
-  "text": {
-    "status": "additional",
-    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">\n      Cohort definition for Colorectal Cancer Screening.\n    </div>"
-  },
-  "identifier": [
-    {
-      "use": "official",
-      "system": "http://hl7.org/fhir/cqi/ecqm/Measure/Identifier/payer-extract",
-      "value": "COL"
-    }
-  ],
-  "version": "1.0.0",
-  "title": "Colorectal Cancer Screening. Cohort Definition",
-  "status": "active",
-  "experimental": true,
-  "description": "Colorectal Cancer Screening. Cohort Definition",
-  "topic": [
-    {
-      "coding": [
-        {
-          "system": "http://hl7.org/fhir/c80-doc-typecodes",
-          "code": "57024-2"
-        }
-      ]
-    }
-  ],
-  "library": [
-    {
-      "reference": "Library/col-logic"
-    }
-  ],
-  "group": [
-    {
-      "identifier": {
-        "value": "in-demographic"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "in-demographic"
-          },
-          "criteria": "In Demographic"
-        }
-      ]
-    },
-    {
-      "identifier": {
-        "value": "history-of-colorectal-cancer"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "history-of-colorectal-cancer"
-          },
-          "criteria": "Hx Colorectal Cancer"
-        }
-      ]
-    },
-    {
-      "identifier": {
-        "value": "history-of-total-colectomy"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "history-of-total-colectomy"
-          },
-          "criteria": "Hx Total Colectomy"
-        }
-      ]
-    },
-    {
-      "identifier": {
-        "value": "colonoscopy-performed"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "colonoscopy-performed"
-          },
-          "criteria": "Colonoscopy Performed"
-        }
-      ]
-    },
-    {
-      "identifier": {
-        "value": "colonoscopy-results"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "colonoscopy-results"
-          },
-          "criteria": "Colonoscopy Results"
-        }
-      ]
-    },
-    {
-      "identifier": {
-        "value": "sigmoidoscopy-procedure"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "sigmoidoscopy-procedure"
-          },
-          "criteria": "Sigmoidoscopy Procedure"
-        }
-      ]
-    },
-    {
-      "identifier": {
-        "value": "sigmoidoscopy-observation"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "sigmoidoscopy-observation"
-          },
-          "criteria": "Sigmoidoscopy Observation"
-        }
-      ]
-    },
-    {
-      "identifier": {
-        "value": "fobt-procedure"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "fobt-procedure"
-          },
-          "criteria": "FOBT Procedure"
-        }
-      ]
-    },
-    {
-      "identifier": {
-        "value": "fobt-observation"
-      },
-      "population": [
-        {
-          "identifier": {
-            "value": "fobt-observation"
-          },
-          "criteria": "FOBT Observation"
-        }
-      ]
-    }
-  ]
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-procedure.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-procedure.json
deleted file mode 100644
index b9bac60b14d..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-procedure.json
+++ /dev/null
@@ -1,68 +0,0 @@
-{
-  "resourceType": "Procedure",
-  "id": "Procedure-9",
-  "meta": {
-    "versionId": "1",
-    "lastUpdated": "2017-09-09T21:52:35.933-06:00"
-  },
-  "extension": [
-    {
-      "url": "http://mihin.org/fhir/templateId",
-      "valueString": "2.16.840.1.113883.10.20.24.3.64"
-    },
-    {
-      "url": "http://mihin.org/fhir/templateId",
-      "valueString": "2.16.840.1.113883.10.20.22.4.14"
-    }
-  ],
-  "identifier": [
-    {
-      "system": "http://hl7.org/fhir/identifier",
-      "value": "1.3.6.1.4.1.115:579f4eb5aeac500a550c5c7b"
-    }
-  ],
-  "status": "completed",
-  "category": {
-    "coding": [
-      {
-        "system": "http://snomed.info/sct",
-        "code": "387713003",
-        "display": "Surgical Procedure"
-      }
-    ]
-  },
-  "code": {
-    "coding": [
-      {
-        "system": "http://snomed.info/sct",
-        "code": "36192008"
-      }
-    ],
-    "text": "Procedure, Performed: Total Colectomy"
-  },
-  "subject": {
-    "reference": "Patient/Patient-12214",
-    "display": "2  N Geriatric Jr"
-  },
-  "performedPeriod": {
-    "start": "2010-10-12T06:00:00-04:00",
-    "end": "2010-10-12T08:15:00-04:00"
-  },
-  "performer": [
-    {
-      "role": {
-        "coding": [
-          {
-            "system": "http://hl7.org/fhir/ValueSet/performer-role",
-            "code": "112247003",
-            "display": "Medical doctor (occupation)"
-          }
-        ]
-      },
-      "actor": {
-        "reference": "Practitioner/Practitioner-12208",
-        "display": "Jay McCann Sawyer MD"
-      }
-    }
-  ]
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-1.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-1.json
deleted file mode 100644
index 19a6f47dcd1..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-1.json
+++ /dev/null
@@ -1,416 +0,0 @@
-{
-  "resourceType": "ValueSet",
-  "id": "2.16.840.1.113883.3.464.1003.108.11.1001",
-  "meta": {
-    "versionId": "3",
-    "lastUpdated": "2017-07-25T09:54:33.579+00:00"
-  },
-  "url": "http://measure.eval.kanvix.com/cqf-ruler/baseDstu3/Valueset/2.16.840.1.113883.3.464.1003.108.11.1001",
-  "name": "Malignant Neoplasm of Colon (SNOMED CT) eCQM",
-  "status": "active",
-  "compose": {
-    "include": [
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "concept": [
-          {
-            "code": "187758006"
-          },
-          {
-            "code": "109838007"
-          },
-          {
-            "code": "1701000119104"
-          },
-          {
-            "code": "187757001"
-          },
-          {
-            "code": "269533000"
-          },
-          {
-            "code": "269544008"
-          },
-          {
-            "code": "285312008"
-          },
-          {
-            "code": "285611007"
-          },
-          {
-            "code": "301756000"
-          },
-          {
-            "code": "312111009"
-          },
-          {
-            "code": "312112002"
-          },
-          {
-            "code": "312113007"
-          },
-          {
-            "code": "312114001"
-          },
-          {
-            "code": "312115000"
-          },
-          {
-            "code": "314965007"
-          },
-          {
-            "code": "315058005"
-          },
-          {
-            "code": "363406005"
-          },
-          {
-            "code": "363407001"
-          },
-          {
-            "code": "363408006"
-          },
-          {
-            "code": "363409003"
-          },
-          {
-            "code": "363410008"
-          },
-          {
-            "code": "363412000"
-          },
-          {
-            "code": "363413005"
-          },
-          {
-            "code": "363414004"
-          },
-          {
-            "code": "363510005"
-          },
-          {
-            "code": "425178004"
-          },
-          {
-            "code": "449218003"
-          },
-          {
-            "code": "93683002"
-          },
-          {
-            "code": "93761005"
-          },
-          {
-            "code": "93771007"
-          },
-          {
-            "code": "93826009"
-          },
-          {
-            "code": "93980002"
-          },
-          {
-            "code": "94006002"
-          },
-          {
-            "code": "94072004"
-          },
-          {
-            "code": "94105000"
-          },
-          {
-            "code": "94179005"
-          },
-          {
-            "code": "94260004"
-          },
-          {
-            "code": "94271003"
-          },
-          {
-            "code": "94328005"
-          },
-          {
-            "code": "94509004"
-          },
-          {
-            "code": "94538001"
-          },
-          {
-            "code": "94604000"
-          },
-          {
-            "code": "94643001"
-          }
-        ]
-      }
-    ]
-  },
-  "expansion": {
-    "identifier": "http://open-api2.hspconsortium.org/payerextract/data/ValueSet/2.16.840.1.113883.3.464.1003.108.11.1001",
-    "timestamp": "2016-09-19T14:05:21.939-04:00",
-    "total": 43,
-    "offset": 0,
-    "contains": [
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "425178004",
-        "display": "Adenocarcinoma of rectosigmoid junction"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "301756000",
-        "display": "Adenocarcinoma of sigmoid colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "312111009",
-        "display": "Carcinoma of ascending colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "269533000",
-        "display": "Carcinoma of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "312113007",
-        "display": "Carcinoma of descending colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "312114001",
-        "display": "Carcinoma of hepatic flexure"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "285312008",
-        "display": "Carcinoma of sigmoid colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "312115000",
-        "display": "Carcinoma of splenic flexure"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "269544008",
-        "display": "Carcinoma of the rectosigmoid junction"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "312112002",
-        "display": "Carcinoma of transverse colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "315058005",
-        "display": "Lynch syndrome"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "314965007",
-        "display": "Local recurrence of malignant tumor of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "449218003",
-        "display": "Lymphoma of sigmoid colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "187758006",
-        "display": "Malignant neoplasm of other specified sites of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "187757001",
-        "display": "Malignant neoplasm, overlapping lesion of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363412000",
-        "display": "Malignant tumor of ascending colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363406005",
-        "display": "Malignant tumor of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363409003",
-        "display": "Malignant tumor of descending colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363407001",
-        "display": "Malignant tumor of hepatic flexure"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363510005",
-        "display": "Malignant tumor of large intestine"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363414004",
-        "display": "Malignant tumor of rectosigmoid junction"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363410008",
-        "display": "Malignant tumor of sigmoid colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363413005",
-        "display": "Malignant tumor of splenic flexure"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "363408006",
-        "display": "Malignant tumor of transverse colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "285611007",
-        "display": "Metastasis to colon of unknown primary"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "109838007",
-        "display": "Overlapping malignant neoplasm of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "1701000119104",
-        "display": "Primary adenocarcinoma of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "93683002",
-        "display": "Primary malignant neoplasm of ascending colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "93761005",
-        "display": "Primary malignant neoplasm of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "93771007",
-        "display": "Primary malignant neoplasm of descending colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "93826009",
-        "display": "Primary malignant neoplasm of hepatic flexure of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "93980002",
-        "display": "Primary malignant neoplasm of rectosigmoid junction"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94006002",
-        "display": "Primary malignant neoplasm of sigmoid colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94072004",
-        "display": "Primary malignant neoplasm of splenic flexure of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94105000",
-        "display": "Primary malignant neoplasm of transverse colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94179005",
-        "display": "Secondary malignant neoplasm of ascending colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94260004",
-        "display": "Secondary malignant neoplasm of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94271003",
-        "display": "Secondary malignant neoplasm of descending colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94328005",
-        "display": "Secondary malignant neoplasm of hepatic flexure of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94509004",
-        "display": "Secondary malignant neoplasm of rectosigmoid junction"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94538001",
-        "display": "Secondary malignant neoplasm of sigmoid colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94604000",
-        "display": "Secondary malignant neoplasm of splenic flexure of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.03.14AB",
-        "code": "94643001",
-        "display": "Secondary malignant neoplasm of transverse colon"
-      }
-    ]
-  }
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-2.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-2.json
deleted file mode 100644
index 1d09b2d79af..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-2.json
+++ /dev/null
@@ -1,181 +0,0 @@
-{
-  "resourceType": "ValueSet",
-  "id": "2.16.840.1.113883.3.464.1003.198.12.1019",
-  "meta": {
-    "versionId": "3",
-    "lastUpdated": "2017-07-25T09:54:33.579+00:00"
-  },
-  "url": "http://measure.eval.kanvix.com/cql-measure-processor/baseDstu3/Valueset/2.16.840.1.113883.3.464.1003.198.12.1019 ",
-  "name": "Total Colectomy eMeasure",
-  "compose": {
-    "include": [
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "version": "2016.1.15AA",
-        "concept": [
-          {
-            "code": "44156"
-          },
-          {
-            "code": "44158"
-          },
-          {
-            "code": "44157"
-          },
-          {
-            "code": "44155"
-          },
-          {
-            "code": "44151"
-          },
-          {
-            "code": "44150"
-          },
-          {
-            "code": "44211"
-          },
-          {
-            "code": "44212"
-          },
-          {
-            "code": "44210"
-          },
-          {
-            "code": "44153"
-          },
-          {
-            "code": "44152"
-          }
-        ]
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2015.09.15AA",
-        "filter": [
-          {
-            "property": "concept",
-            "op": "is-a",
-            "value": "26390003"
-          }
-        ]
-      }
-    ]
-  },
-  "expansion": {
-    "timestamp": "2016-09-20T12:32:19.296-04:00",
-    "total": 22,
-    "offset": 0,
-    "contains": [
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44156",
-        "display": "Colectomy, total, abdominal, with proctectomy; with continent ileostomy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44158",
-        "display": "Colectomy, total, abdominal, with proctectomy; with ileoanal anastomosis, creation of ileal reservoir (S or J), includes loop ileostomy, and rectal mucosectomy, when performed"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44157",
-        "display": "Colectomy, total, abdominal, with proctectomy; with ileoanal anastomosis, includes loop ileostomy, and rectal mucosectomy, when performed"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44155",
-        "display": "Colectomy, total, abdominal, with proctectomy; with ileostomy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44151",
-        "display": "Colectomy, total, abdominal, without proctectomy; with continent ileostomy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44150",
-        "display": "Colectomy, total, abdominal, without proctectomy; with ileostomy or ileoproctostomy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44153",
-        "display": "Colectomy, total, abdominal, without proctectomy; with rectal mucosectomy, ileoanal anastomosis, creation of ileal reservoir (S or J), with or without loop ileostomy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44152",
-        "display": "Colectomy, total, abdominal, without proctectomy; with rectal mucosectomy, ileoanal anastomosis, with or without loop ileostomy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44211",
-        "display": "Laparoscopy, surgical; colectomy, total, abdominal, with proctectomy, with ileoanal anastomosis, creation of ileal reservoir (S or J), with loop ileostomy, includes rectal mucosectomy, when performed"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44212",
-        "display": "Laparoscopy, surgical; colectomy, total, abdominal, with proctectomy, with ileostomy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44210",
-        "display": "Laparoscopy, surgical; colectomy, total, abdominal, without proctectomy, with ileostomy or ileoproctostomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "303401008",
-        "display": "Parks panproctocolectomy, anastomosis of ileum to anus and creation of pouch"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "235331003",
-        "display": "Restorative proctocolectomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "36192008",
-        "display": "Total abdominal colectomy with ileoproctostomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "456004",
-        "display": "Total abdominal colectomy with ileostomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "44751009",
-        "display": "Total abdominal colectomy with proctectomy and continent ileostomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "31130001",
-        "display": "Total abdominal colectomy with proctectomy and ileostomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "80294005",
-        "display": "Total abdominal colectomy with rectal mucosectomy and ileoanal anastomosis"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "26390003",
-        "display": "Total colectomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "307666008",
-        "display": "Total colectomy and ileostomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "307669001",
-        "display": "Total colectomy, ileostomy and closure of rectal stump"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "307667004",
-        "display": "Total colectomy, ileostomy and rectal mucous fistula"
-      }
-    ]
-  }
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-3.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-3.json
deleted file mode 100644
index 87882baf088..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-3.json
+++ /dev/null
@@ -1,421 +0,0 @@
-{
-  "resourceType": "ValueSet",
-  "id": "2.16.840.1.113883.3.464.1003.108.12.1020",
-  "meta": {
-    "versionId": "3",
-    "lastUpdated": "2017-07-25T09:54:33.579+00:00"
-  },
-  "url": "http://measure.eval.kanvix.com/cql-measure-processor/baseDstu3/Valueset/2.16.840.1.113883.3.464.1003.108.12.1020",
-  "name": "Colonoscopy eMeasure",
-  "compose": {
-    "include": [
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "version": "2015.1.14AB",
-        "concept": [
-          {
-            "code": "44388"
-          },
-          {
-            "code": "44393"
-          },
-          {
-            "code": "44389"
-          },
-          {
-            "code": "44391"
-          },
-          {
-            "code": "44390"
-          },
-          {
-            "code": "44392"
-          },
-          {
-            "code": "44394"
-          },
-          {
-            "code": "44397"
-          },
-          {
-            "code": "45378"
-          },
-          {
-            "code": "45383"
-          },
-          {
-            "code": "45380"
-          },
-          {
-            "code": "45382"
-          },
-          {
-            "code": "45386"
-          },
-          {
-            "code": "45381"
-          },
-          {
-            "code": "45391"
-          },
-          {
-            "code": "45379"
-          },
-          {
-            "code": "45384"
-          },
-          {
-            "code": "45385"
-          },
-          {
-            "code": "45387"
-          },
-          {
-            "code": "45392"
-          },
-          {
-            "code": "45355"
-          },
-          {
-            "code": "44401"
-          },
-          {
-            "code": "44402"
-          },
-          {
-            "code": "44403"
-          },
-          {
-            "code": "44404"
-          },
-          {
-            "code": "44405"
-          },
-          {
-            "code": "44406"
-          },
-          {
-            "code": "44407"
-          },
-          {
-            "code": "44408"
-          },
-          {
-            "code": "45388"
-          },
-          {
-            "code": "45389"
-          },
-          {
-            "code": "45390"
-          },
-          {
-            "code": "45393"
-          },
-          {
-            "code": "45398"
-          }
-        ]
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2014.07.14AA",
-        "filter": [
-          {
-            "property": "concept",
-            "op": "is-a",
-            "value": "73761001"
-          }
-        ]
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2014.07.14AA",
-        "filter": [
-          {
-            "property": "concept",
-            "op": "is-a",
-            "value": "174184006"
-          }
-        ]
-      }
-    ]
-  },
-  "expansion": {
-    "timestamp": "2016-09-20T13:07:55.271-04:00",
-    "total": 54,
-    "offset": 0,
-    "contains": [
-      {
-        "system": "http://snomed.info/sct",
-        "code": "310634005",
-        "display": "Check colonoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "73761001",
-        "display": "Colonoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "446745002",
-        "display": "Colonoscopy and biopsy of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "446521004",
-        "display": "Colonoscopy and excision of mucosa of colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "447021001",
-        "display": "Colonoscopy and tattooing"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "443998000",
-        "display": "Colonoscopy through colostomy with endoscopic biopsy of colon"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44388",
-        "display": "Colonoscopy through stoma; diagnostic, including collection of specimen(s) by brushing or washing, when performed (separate procedure)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44401",
-        "display": "Colonoscopy through stoma; with ablation of tumor(s), polyp(s), or other lesion(s) (includes pre-and post-dilation and guide wire passage, when performed)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44393",
-        "display": "Colonoscopy through stoma; with ablation of tumor(s), polyp(s), or other lesion(s) not amenable to removal by hot biopsy forceps, bipolar cautery or snare technique"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44389",
-        "display": "Colonoscopy through stoma; with biopsy, single or multiple"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44391",
-        "display": "Colonoscopy through stoma; with control of bleeding, any method"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44408",
-        "display": "Colonoscopy through stoma; with decompression (for pathologic distention) (eg, volvulus, megacolon), including placement of decompression tube, when performed"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44404",
-        "display": "Colonoscopy through stoma; with directed submucosal injection(s), any substance"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44403",
-        "display": "Colonoscopy through stoma; with endoscopic mucosal resection"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44402",
-        "display": "Colonoscopy through stoma; with endoscopic stent placement (including pre- and post-dilation and guide wire passage, when performed)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44406",
-        "display": "Colonoscopy through stoma; with endoscopic ultrasound examination, limited to the sigmoid, descending, transverse, or ascending colon and cecum and adjacent structures"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44390",
-        "display": "Colonoscopy through stoma; with removal of foreign body(s)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44392",
-        "display": "Colonoscopy through stoma; with removal of tumor(s), polyp(s), or other lesion(s) by hot biopsy forceps"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44394",
-        "display": "Colonoscopy through stoma; with removal of tumor(s), polyp(s), or other lesion(s) by snare technique"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44405",
-        "display": "Colonoscopy through stoma; with transendoscopic balloon dilation"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44397",
-        "display": "Colonoscopy through stoma; with transendoscopic stent placement (includes predilation)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "44407",
-        "display": "Colonoscopy through stoma; with transendoscopic ultrasound guided intramural or transmural fine needle aspiration/biopsy(s), includes endoscopic ultrasound examination limited to the sigmoid, descending, transverse, or ascending colon and cecum and adjacent structures"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "12350003",
-        "display": "Colonoscopy with rigid sigmoidoscope through colotomy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45383",
-        "display": "Colonoscopy, flexible, proximal to splenic flexure; with ablation of tumor(s), polyp(s), or other lesion(s) not amenable to removal by hot biopsy forceps, bipolar cautery or snare technique"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45387",
-        "display": "Colonoscopy, flexible, proximal to splenic flexure; with transendoscopic stent placement (includes predilation)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45378",
-        "display": "Colonoscopy, flexible; diagnostic, including collection of specimen(s) by brushing or washing, when performed (separate procedure)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45388",
-        "display": "Colonoscopy, flexible; with ablation of tumor(s), polyp(s), or other lesion(s) (includes pre- and post-dilation and guide wire passage, when performed)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45398",
-        "display": "Colonoscopy, flexible; with band ligation(s) (eg, hemorrhoids)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45380",
-        "display": "Colonoscopy, flexible; with biopsy, single or multiple"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45382",
-        "display": "Colonoscopy, flexible; with control of bleeding, any method"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45393",
-        "display": "Colonoscopy, flexible; with decompression (for pathologic distention) (eg, volvulus, megacolon), including placement of decompression tube, when performed"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45381",
-        "display": "Colonoscopy, flexible; with directed submucosal injection(s), any substance"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45390",
-        "display": "Colonoscopy, flexible; with endoscopic mucosal resection"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45389",
-        "display": "Colonoscopy, flexible; with endoscopic stent placement (includes pre- and post-dilation and guide wire passage, when performed)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45391",
-        "display": "Colonoscopy, flexible; with endoscopic ultrasound examination limited to the rectum, sigmoid, descending, transverse, or ascending colon and cecum, and adjacent structures"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45379",
-        "display": "Colonoscopy, flexible; with removal of foreign body(s)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45384",
-        "display": "Colonoscopy, flexible; with removal of tumor(s), polyp(s), or other lesion(s) by hot biopsy forceps"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45385",
-        "display": "Colonoscopy, flexible; with removal of tumor(s), polyp(s), or other lesion(s) by snare technique"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45386",
-        "display": "Colonoscopy, flexible; with transendoscopic balloon dilation"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45392",
-        "display": "Colonoscopy, flexible; with transendoscopic ultrasound guided intramural or transmural fine needle aspiration/biopsy(s), includes endoscopic ultrasound examination limited to the rectum, sigmoid, descending, transverse, or ascending colon and cecum, and adjacent structures"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45355",
-        "display": "Colonoscopy, rigid or flexible, transabdominal via colotomy, single or multiple"
-      },
-      {
-        "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
-        "code": "G0105",
-        "display": "Colorectal cancer screening; colonoscopy on individual at high risk"
-      },
-      {
-        "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
-        "code": "G0121",
-        "display": "Colorectal cancer screening; colonoscopy on individual not meeting criteria for high risk"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "427459009",
-        "display": "Diagnostic endoscopic examination of colonic pouch and biopsy of colonic pouch using colonoscope"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "174184006",
-        "display": "Diagnostic endoscopic examination on colon"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "367535003",
-        "display": "Fiberoptic colonoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "8180007",
-        "display": "Fiberoptic colonoscopy through colostomy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "25732003",
-        "display": "Fiberoptic colonoscopy with biopsy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "34264006",
-        "display": "Intraoperative colonoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "235151005",
-        "display": "Limited colonoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "174158000",
-        "display": "Open colonoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "444783004",
-        "display": "Screening colonoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "303587008",
-        "display": "Therapeutic colonoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "235150006",
-        "display": "Total colonoscopy"
-      }
-    ]
-  }
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-4.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-4.json
deleted file mode 100644
index 139a8e6246b..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-4.json
+++ /dev/null
@@ -1,208 +0,0 @@
-{
-  "resourceType": "ValueSet",
-  "id": "2.16.840.1.113883.3.464.1003.198.12.1010",
-  "meta": {
-    "versionId": "6",
-    "lastUpdated": "2017-07-25T09:54:33.579+00:00"
-  },
-  "url": "http://measure.eval.kanvix.com/cql-measure-processor/baseDstu3/Valueset/2.16.840.1.113883.3.464.1003.198.12.1010",
-  "name": "Flexible Sigmoidoscopy eMeasure",
-  "compose": {
-    "include": [
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "version": "2015.1.14AB",
-        "concept": [
-          {
-            "code": "45330"
-          },
-          {
-            "code": "45339"
-          },
-          {
-            "code": "45331"
-          },
-          {
-            "code": "45334"
-          },
-          {
-            "code": "45337"
-          },
-          {
-            "code": "45340"
-          },
-          {
-            "code": "45335"
-          },
-          {
-            "code": "45341"
-          },
-          {
-            "code": "45332"
-          },
-          {
-            "code": "45333"
-          },
-          {
-            "code": "45338"
-          },
-          {
-            "code": "45345"
-          },
-          {
-            "code": "45342"
-          },
-          {
-            "code": "45346"
-          },
-          {
-            "code": "45347"
-          },
-          {
-            "code": "45349"
-          },
-          {
-            "code": "45350"
-          }
-        ]
-      },
-      {
-        "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
-        "version": "2016.1.15AB",
-        "concept": [
-          {
-            "code": "G0104"
-          }
-        ]
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "version": "2014.07.14AA",
-        "filter": [
-          {
-            "property": "concept",
-            "op": "is-a",
-            "value": "44441009"
-          }
-        ]
-      }
-    ]
-  },
-  "expansion": {
-    "timestamp": "2016-09-20T13:20:03.237-04:00",
-    "total": 22,
-    "offset": 0,
-    "contains": [
-      {
-        "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
-        "code": "G0104",
-        "display": "Colorectal cancer screening; flexible sigmoidoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "425634007",
-        "display": "Diagnostic endoscopic examination of lower bowel and sampling for bacterial overgrowth using fiberoptic sigmoidoscope"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "44441009",
-        "display": "Flexible fiberoptic sigmoidoscopy"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "112870002",
-        "display": "Flexible fiberoptic sigmoidoscopy for removal of foreign body"
-      },
-      {
-        "system": "http://snomed.info/sct",
-        "code": "396226005",
-        "display": "Flexible fiberoptic sigmoidoscopy with biopsy"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45330",
-        "display": "Sigmoidoscopy, flexible; diagnostic, including collection of specimen(s) by brushing or washing, when performed (separate procedure)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45346",
-        "display": "Sigmoidoscopy, flexible; with ablation of tumor(s), polyp(s), or other lesion(s) (includes pre- and post-dilation and guide wire passage, when performed)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45339",
-        "display": "Sigmoidoscopy, flexible; with ablation of tumor(s), polyp(s), or other lesion(s) not amenable to removal by hot biopsy forceps, bipolar cautery or snare technique"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45350",
-        "display": "Sigmoidoscopy, flexible; with band ligation(s) (eg, hemorrhoids)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45331",
-        "display": "Sigmoidoscopy, flexible; with biopsy, single or multiple"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45334",
-        "display": "Sigmoidoscopy, flexible; with control of bleeding, any method"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45337",
-        "display": "Sigmoidoscopy, flexible; with decompression (for pathologic distention) (eg, volvulus, megacolon), including placement of decompression tube, when performed"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45335",
-        "display": "Sigmoidoscopy, flexible; with directed submucosal injection(s), any substance"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45349",
-        "display": "Sigmoidoscopy, flexible; with endoscopic mucosal resection"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45341",
-        "display": "Sigmoidoscopy, flexible; with endoscopic ultrasound examination"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45347",
-        "display": "Sigmoidoscopy, flexible; with placement of endoscopic stent (includes pre- and post-dilation and guide wire passage, when performed)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45332",
-        "display": "Sigmoidoscopy, flexible; with removal of foreign body(s)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45333",
-        "display": "Sigmoidoscopy, flexible; with removal of tumor(s), polyp(s), or other lesion(s) by hot biopsy forceps"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45338",
-        "display": "Sigmoidoscopy, flexible; with removal of tumor(s), polyp(s), or other lesion(s) by snare technique"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45340",
-        "display": "Sigmoidoscopy, flexible; with transendoscopic balloon dilation"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45345",
-        "display": "Sigmoidoscopy, flexible; with transendoscopic stent placement (includes predilation)"
-      },
-      {
-        "system": "http://www.ama-assn.org/go/cpt",
-        "code": "45342",
-        "display": "Sigmoidoscopy, flexible; with transendoscopic ultrasound guided intramural or transmural fine needle aspiration/biopsy(s)"
-      }
-    ]
-  }
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-5.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-5.json
deleted file mode 100644
index a060cf3f2c7..00000000000
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-processing-valueset-5.json
+++ /dev/null
@@ -1,147 +0,0 @@
-{
-  "resourceType": "ValueSet",
-  "id": "2.16.840.1.113883.3.464.1003.198.12.1011",
-  "meta": {
-    "versionId": "3",
-    "lastUpdated": "2017-07-25T09:54:33.579+00:00"
-  },
-  "url": "http://measure.eval.kanvix.com/cql-measure-processor/baseDstu3/Valueset/2.16.840.1.113883.3.464.1003.198.12.1011",
-  "name": "Fecal Occult Blood Test (FOBT) eMeasure",
-  "compose": {
-    "include": [
-      {
-        "system": "http://loinc.org",
-        "version": "2.44.13AA",
-        "concept": [
-          {
-            "code": "27396-1"
-          },
-          {
-            "code": "58453-2"
-          },
-          {
-            "code": "2335-8"
-          },
-          {
-            "code": "14563-1"
-          },
-          {
-            "code": "14564-9"
-          },
-          {
-            "code": "14565-6"
-          },
-          {
-            "code": "12503-9"
-          },
-          {
-            "code": "12504-7"
-          },
-          {
-            "code": "27401-9"
-          },
-          {
-            "code": "27925-7"
-          },
-          {
-            "code": "27926-5"
-          },
-          {
-            "code": "29771-3"
-          },
-          {
-            "code": "57905-2"
-          },
-          {
-            "code": "56490-6"
-          },
-          {
-            "code": "56491-4"
-          }
-        ]
-      }
-    ]
-  },
-  "expansion": {
-    "timestamp": "2016-09-20T13:32:34.390-04:00",
-    "total": 15,
-    "offset": 0,
-    "contains": [
-      {
-        "system": "http://loinc.org",
-        "code": "27396-1",
-        "display": "Hemoglobin.gastrointestinal [Mass/mass] in Stool"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "58453-2",
-        "display": "Hemoglobin.gastrointestinal [Mass/volume] in Stool by Immunologic method"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "2335-8",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "14563-1",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool --1st specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "14564-9",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool --2nd specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "14565-6",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool --3rd specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "12503-9",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool --4th specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "12504-7",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool --5th specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "27401-9",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool --6th specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "27925-7",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool --7th specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "27926-5",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool --8th specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "29771-3",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Immunologic method"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "57905-2",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Immunologic method --1st specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "56490-6",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Immunologic method --2nd specimen"
-      },
-      {
-        "system": "http://loinc.org",
-        "code": "56491-4",
-        "display": "Hemoglobin.gastrointestinal [Presence] in Stool by Immunologic method --3rd specimen"
-      }
-    ]
-  }
-}
\ No newline at end of file
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-terminology-bundle.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-terminology-bundle.json
new file mode 100644
index 00000000000..81be418b492
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/measure-terminology-bundle.json
@@ -0,0 +1,37148 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.17",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.17",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "58953"
+                },
+                {
+                  "code": "58954"
+                },
+                {
+                  "code": "58956"
+                },
+                {
+                  "code": "51925"
+                },
+                {
+                  "code": "57540"
+                },
+                {
+                  "code": "57545"
+                },
+                {
+                  "code": "57550"
+                },
+                {
+                  "code": "57555"
+                },
+                {
+                  "code": "57556"
+                },
+                {
+                  "code": "58548"
+                },
+                {
+                  "code": "58570"
+                },
+                {
+                  "code": "58571"
+                },
+                {
+                  "code": "58572"
+                },
+                {
+                  "code": "58573"
+                },
+                {
+                  "code": "58550"
+                },
+                {
+                  "code": "58552"
+                },
+                {
+                  "code": "58553"
+                },
+                {
+                  "code": "58554"
+                },
+                {
+                  "code": "58240"
+                },
+                {
+                  "code": "58210"
+                },
+                {
+                  "code": "58951"
+                },
+                {
+                  "code": "59135"
+                },
+                {
+                  "code": "X1022450"
+                },
+                {
+                  "code": "58150"
+                },
+                {
+                  "code": "58152"
+                },
+                {
+                  "code": "58200"
+                },
+                {
+                  "code": "X1022451"
+                },
+                {
+                  "code": "58260"
+                },
+                {
+                  "code": "58267"
+                },
+                {
+                  "code": "58262"
+                },
+                {
+                  "code": "58263"
+                },
+                {
+                  "code": "58270"
+                },
+                {
+                  "code": "X1022567"
+                },
+                {
+                  "code": "58290"
+                },
+                {
+                  "code": "58293"
+                },
+                {
+                  "code": "58291"
+                },
+                {
+                  "code": "58292"
+                },
+                {
+                  "code": "58294"
+                },
+                {
+                  "code": "58285"
+                },
+                {
+                  "code": "X1022452"
+                },
+                {
+                  "code": "58275"
+                },
+                {
+                  "code": "58280"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.17"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.18",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.18",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Q51.5"
+                },
+                {
+                  "code": "Z90.710"
+                },
+                {
+                  "code": "Z90.712"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.18"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.19",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.19",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0UTC0ZZ"
+                },
+                {
+                  "code": "0UTC4ZZ"
+                },
+                {
+                  "code": "0UTC7ZZ"
+                },
+                {
+                  "code": "0UTC8ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.19"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1102.39",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.39",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0202"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.39"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1335.16",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1335.16",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0HTT0ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1335.16"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1064.30",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.30",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0204"
+                },
+                {
+                  "code": "G0245"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.30"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1330.2",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1330.2",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Z90.11"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1330.2"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1064.31",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.31",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "45.22"
+                },
+                {
+                  "code": "45.23"
+                },
+                {
+                  "code": "45.25"
+                },
+                {
+                  "code": "45.42"
+                },
+                {
+                  "code": "45.43"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.31"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1102.38",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.38",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "45330"
+                },
+                {
+                  "code": "45339"
+                },
+                {
+                  "code": "45331"
+                },
+                {
+                  "code": "45334"
+                },
+                {
+                  "code": "45337"
+                },
+                {
+                  "code": "45340"
+                },
+                {
+                  "code": "45335"
+                },
+                {
+                  "code": "45341"
+                },
+                {
+                  "code": "45332"
+                },
+                {
+                  "code": "45333"
+                },
+                {
+                  "code": "45338"
+                },
+                {
+                  "code": "45345"
+                },
+                {
+                  "code": "45342"
+                },
+                {
+                  "code": "45346"
+                },
+                {
+                  "code": "45347"
+                },
+                {
+                  "code": "45349"
+                },
+                {
+                  "code": "45350"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.38"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1250.46",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.46",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "45.81"
+                },
+                {
+                  "code": "45.82"
+                },
+                {
+                  "code": "45.83"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.46"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1250.44",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.44",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "44156"
+                },
+                {
+                  "code": "44158"
+                },
+                {
+                  "code": "44157"
+                },
+                {
+                  "code": "44155"
+                },
+                {
+                  "code": "44151"
+                },
+                {
+                  "code": "44150"
+                },
+                {
+                  "code": "44211"
+                },
+                {
+                  "code": "44212"
+                },
+                {
+                  "code": "44210"
+                },
+                {
+                  "code": "44153"
+                },
+                {
+                  "code": "44152"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.44"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1250.45",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.45",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0DTE0ZZ"
+                },
+                {
+                  "code": "0DTE4ZZ"
+                },
+                {
+                  "code": "0DTE7ZZ"
+                },
+                {
+                  "code": "0DTE8ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1250.45"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1383",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90791",
+                  "display": "PSYCH DIAGNOSTIC EVALUATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90792",
+                  "display": "PSYCH DIAG EVAL W/MED SRVCS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90832",
+                  "display": "PSYTX W PT 30 MINUTES"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90833",
+                  "display": "PSYTX W PT W E/M 30 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90834",
+                  "display": "PSYTX W PT 45 MINUTES"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90836",
+                  "display": "PSYTX W PT W E/M 45 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90837",
+                  "display": "PSYTX W PT 60 MINUTES"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90838",
+                  "display": "PSYTX W PT W E/M 60 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90839",
+                  "display": "PSYTX CRISIS INITIAL 60 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90845",
+                  "display": "PSYCHOANALYSIS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90846",
+                  "display": "FAMILY PSYTX W/O PT 50 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90847",
+                  "display": "FAMILY PSYTX W/PT 50 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90849",
+                  "display": "MULTIPLE FAMILY GROUP PSYTX"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90853",
+                  "display": "GROUP PSYCHOTHERAPY"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90865",
+                  "display": "NARCOSYNTHESIS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90867",
+                  "display": "TCRANIAL MAGN STIM TX PLAN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90868",
+                  "display": "TCRANIAL MAGN STIM TX DELI"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90869",
+                  "display": "TCRAN MAGN STIM REDETEMINE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90870",
+                  "display": "ELECTROCONVULSIVE THERAPY"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90875",
+                  "display": "PSYCHOPHYSIOLOGICAL THERAPY"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90876",
+                  "display": "PSYCHOPHYSIOLOGICAL THERAPY"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90880",
+                  "display": "HYPNOTHERAPY"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90887",
+                  "display": "CONSULTATION WITH FAMILY"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0155",
+                  "display": "Services of clinical social worker in home health or hospice settings, each 15 minutes (G0155)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0176",
+                  "display": "Activity therapy, such as music, dance, art or play therapies not for recreation, related to the care and treatment of patient's disabling mental health problems, per session (45 minutes or more) (G0176)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0177",
+                  "display": "Training and educational services related to the care and treatment of patient's disabling mental health problems per session (45 minutes or more) (G0177)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0409",
+                  "display": "Social work and psychological services, directly relating to and/or furthering the patient's rehabilitation goals, each 15 minutes, face-to-face; individual (services provided by a corf-qualified social worker or psychologist in a corf) (G0409)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0410",
+                  "display": "Group psychotherapy other than of a multiple-family group, in a partial hospitalization setting, approximately 45 to 50 minutes (G0410)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0411",
+                  "display": "Interactive group psychotherapy, in a partial hospitalization setting, approximately 45 to 50 minutes (G0411)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0502",
+                  "display": "Initial psychiatric collaborative care management, first 70 minutes in the first calendar month of behavioral health care manager activities, in consultation with a psychiatric consultant, and directed by the treating physician or other qualified health care professional, with the following required elements: outreach to and engagement in treatment of a patient directed by the treating physician or other qualified health care professional; initial assessment of the patient, including administration of validated rating scales, with the development of an individualized treatment plan; review by the psychiatric consultant with modifications of the plan if recommended; entering patient in a registry and tracking patient follow-up and (G0502)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0503",
+                  "display": "Subsequent psychiatric collaborative care management, first 60 minutes in a subsequent month of behavioral health care manager activities, in consultation with a psychiatric consultant, and directed by the treating physician or other qualified health care professional, with the following required elements: tracking patient follow-up and progress using the registry, with appropriate documentation; participation in weekly caseload consultation with the psychiatric consultant; ongoing collaboration with and coordination of the patient's mental health care with the treating physician or other qualified health care professional and any other treating mental health providers; additional review of progress and recommendations for changes (G0503)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0507",
+                  "display": "Care management services for behavioral health conditions, at least 20 minutes of clinical staff time, directed by a physician or other qualified health care professional, per calendar month, with the following required elements: initial assessment or follow-up monitoring, including the use of applicable validated rating scales; behavioral health care planning in relation to behavioral/psychiatric health problems, including revision for patients who are not progressing or whose status changes; facilitating and coordinating treatment such as psychotherapy, pharmacotherapy, counseling and/or psychiatric consultation; and continuity of care with a designated member of the care team (G0507)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0002",
+                  "display": "Behavioral health screening to determine eligibility for admission to treatment program (H0002)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0004",
+                  "display": "Behavioral health counseling and therapy, per 15 minutes (H0004)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0031",
+                  "display": "Mental health assessment, by non-physician (H0031)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0034",
+                  "display": "Medication training and support, per 15 minutes (H0034)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0035",
+                  "display": "Mental health partial hospitalization, treatment, less than 24 hours (H0035)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0036",
+                  "display": "Community psychiatric supportive treatment, face-to-face, per 15 minutes (H0036)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0037",
+                  "display": "Community psychiatric supportive treatment program, per diem (H0037)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0039",
+                  "display": "Assertive community treatment, face-to-face, per 15 minutes (H0039)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0040",
+                  "display": "Assertive community treatment program, per diem (H0040)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2000",
+                  "display": "Comprehensive multidisciplinary evaluation (H2000)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2001",
+                  "display": "Rehabilitation program, per 1/2 day (H2001)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2010",
+                  "display": "Comprehensive medication services, per 15 minutes (H2010)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2011",
+                  "display": "Crisis intervention service, per 15 minutes (H2011)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2012",
+                  "display": "Behavioral health day treatment, per hour (H2012)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2013",
+                  "display": "Psychiatric health facility service, per diem (H2013)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2014",
+                  "display": "Skills training and development, per 15 minutes (H2014)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2015",
+                  "display": "Comprehensive community support services, per 15 minutes (H2015)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2016",
+                  "display": "Comprehensive community support services, per diem (H2016)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2017",
+                  "display": "Psychosocial rehabilitation services, per 15 minutes (H2017)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2018",
+                  "display": "Psychosocial rehabilitation services, per diem (H2018)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2019",
+                  "display": "Therapeutic behavioral services, per 15 minutes (H2019)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2020",
+                  "display": "Therapeutic behavioral services, per diem (H2020)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "M0064",
+                  "display": "Brief office visit for the sole purpose of monitoring or changing drug prescriptions used in the treatment of mental psychoneurotic and personality disorders (M0064)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S0201",
+                  "display": "Partial hospitalization services, less than 24 hours, per diem (S0201)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S9480",
+                  "display": "Intensive outpatient psychiatric services, per diem (S9480)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S9484",
+                  "display": "Crisis intervention mental health services, per hour (S9484)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S9485",
+                  "display": "Crisis intervention mental health services, per diem (S9485)"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "Z71.82",
+                  "display": "[Z71.82] Exercise counseling"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5694008",
+                  "display": "Crisis intervention with follow-up (regime/therapy)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10197000",
+                  "display": "Psychiatric interview and evaluation (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10997001",
+                  "display": "Psychiatric evaluation of patient for testimentary capacity with report (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38756009",
+                  "display": "Psychiatric evaluation of patient for criminal responsibility with report (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "45392008",
+                  "display": "Psychologic evaluation or test procedure (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79094001",
+                  "display": "Initial psychiatric interview with mental status and evaluation (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "88848003",
+                  "display": "Psychiatric follow-up (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "90407005",
+                  "display": "Evaluation of psychiatric state of patient (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "91310009",
+                  "display": "Patient follow-up to return when and if necessary (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "165171009",
+                  "display": "Initial psychiatric evaluation (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "165190001",
+                  "display": "Psychiatric evaluation for rehabilitation (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "225337009",
+                  "display": "Suicide risk assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "370803007",
+                  "display": "Evaluation of psychosocial impact on plan of care (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "372067001",
+                  "display": "Implementation of measures to provide psychological support (regime/therapy)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385721005",
+                  "display": "Coping support assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385724002",
+                  "display": "Coping support management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385725001",
+                  "display": "Emotional support assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385726000",
+                  "display": "Emotional support education (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385727009",
+                  "display": "Emotional support management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385887004",
+                  "display": "Mental health history taking assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385889001",
+                  "display": "Mental health history taking education (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385890005",
+                  "display": "Mental health history taking management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "401277000",
+                  "display": "Completion of mental health crisis plan (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410223002",
+                  "display": "Mental health care assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410224008",
+                  "display": "Mental health care education (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410225009",
+                  "display": "Mental health care management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410226005",
+                  "display": "Mental health promotion assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410227001",
+                  "display": "Mental health promotion education (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410228006",
+                  "display": "Mental health promotion management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410229003",
+                  "display": "Mental health screening assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410230008",
+                  "display": "Mental health screening education (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410231007",
+                  "display": "Mental health screening management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410232000",
+                  "display": "Mental health treatment assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410233005",
+                  "display": "Mental health treatment education (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410234004",
+                  "display": "Management of mental health treatment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "425604002",
+                  "display": "Case management follow up (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "439141002",
+                  "display": "Discharge by mental health primary care worker (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0900",
+                  "display": "General"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0901",
+                  "display": "Electroshock treatment (ECT)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0902",
+                  "display": "Milieu therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0903",
+                  "display": "Play therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0904",
+                  "display": "Activity therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0905",
+                  "display": "Intensive outpatient services-psychiatric"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0907",
+                  "display": "Community behavioral health program (day treatment)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0911",
+                  "display": "Rehabilitation"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0912",
+                  "display": "Partial hospitalization-less intensive"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0913",
+                  "display": "Partial hospitalization-intensive"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0914",
+                  "display": "Individual therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0915",
+                  "display": "Group therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0916",
+                  "display": "Family therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0917",
+                  "display": "Biofeedback"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0919",
+                  "display": "Other Behavioral health treatments"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1383"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1102.40",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.40",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "45.24"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1102.40"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1346",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "162004",
+                  "display": "Severe manic bipolar I disorder without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1196001",
+                  "display": "Chronic bipolar II disorder, most recent episode major depressive (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1499003",
+                  "display": "Bipolar I disorder, single manic episode with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "3530005",
+                  "display": "Bipolar I disorder, single manic episode, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "4441000",
+                  "display": "Severe bipolar disorder with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5703000",
+                  "display": "Bipolar disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "9340000",
+                  "display": "Bipolar I disorder, single manic episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10875004",
+                  "display": "Severe mixed bipolar I disorder with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10981006",
+                  "display": "Severe mixed bipolar I disorder with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "12969000",
+                  "display": "Severe bipolar II disorder, most recent episode major depressive, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "13313007",
+                  "display": "Mild bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "13581000",
+                  "display": "Severe bipolar I disorder, single manic episode with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "13746004",
+                  "display": "Bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14495005",
+                  "display": "Severe bipolar I disorder, single manic episode without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16295005",
+                  "display": "Bipolar II disorder, most recent episode major depressive (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16506000",
+                  "display": "Mixed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "17782008",
+                  "display": "Bipolar I disorder, most recent episode manic with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19300006",
+                  "display": "Severe bipolar II disorder, most recent episode major depressive with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "20960007",
+                  "display": "Severe bipolar II disorder, most recent episode major depressive with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "21900002",
+                  "display": "Bipolar I disorder, most recent episode depressed with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22121000",
+                  "display": "Depressed bipolar I disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22407005",
+                  "display": "Bipolar II disorder, most recent episode major depressive with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26203008",
+                  "display": "Severe depressed bipolar I disorder with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26530004",
+                  "display": "Severe bipolar disorder with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28663008",
+                  "display": "Severe manic bipolar I disorder with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28884001",
+                  "display": "Moderate bipolar I disorder, single manic episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29929003",
+                  "display": "Bipolar I disorder, most recent episode depressed with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30520009",
+                  "display": "Severe bipolar II disorder, most recent episode major depressive with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30687003",
+                  "display": "Bipolar II disorder, most recent episode major depressive with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30935000",
+                  "display": "Manic bipolar I disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31446002",
+                  "display": "Bipolar I disorder, most recent episode hypomanic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33380008",
+                  "display": "Severe manic bipolar I disorder with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "34315001",
+                  "display": "Bipolar II disorder, most recent episode major depressive with melancholic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35481005",
+                  "display": "Mixed bipolar I disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35722002",
+                  "display": "Severe bipolar II disorder, most recent episode major depressive, in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35846004",
+                  "display": "Moderate bipolar II disorder, most recent episode major depressive (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36583000",
+                  "display": "Mixed bipolar I disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40926005",
+                  "display": "Moderate mixed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41552001",
+                  "display": "Mild bipolar I disorder, single manic episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41832009",
+                  "display": "Severe bipolar I disorder, single manic episode with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41836007",
+                  "display": "Bipolar disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43568002",
+                  "display": "Bipolar II disorder, most recent episode major depressive with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43769008",
+                  "display": "Mild mixed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "45479006",
+                  "display": "Manic bipolar I disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "46229002",
+                  "display": "Severe mixed bipolar I disorder without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "48937005",
+                  "display": "Bipolar II disorder, most recent episode hypomanic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "49468007",
+                  "display": "Depressed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "49512000",
+                  "display": "Depressed bipolar I disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "51637008",
+                  "display": "Chronic bipolar I disorder, most recent episode depressed (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "53049002",
+                  "display": "Severe bipolar disorder without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "53607008",
+                  "display": "Depressed bipolar I disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "54761006",
+                  "display": "Severe depressed bipolar I disorder with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "55516002",
+                  "display": "Bipolar I disorder, most recent episode manic with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "59617007",
+                  "display": "Severe depressed bipolar I disorder with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61403008",
+                  "display": "Severe depressed bipolar I disorder without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63249007",
+                  "display": "Manic bipolar I disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "64731001",
+                  "display": "Severe mixed bipolar I disorder with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "65042007",
+                  "display": "Bipolar I disorder, most recent episode mixed with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66631006",
+                  "display": "Moderate depressed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "67002003",
+                  "display": "Severe bipolar II disorder, most recent episode major depressive, in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68569003",
+                  "display": "Manic bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "70546001",
+                  "display": "Severe bipolar disorder with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71294008",
+                  "display": "Mild bipolar II disorder, most recent episode major depressive (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71984005",
+                  "display": "Mild manic bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "73471000",
+                  "display": "Bipolar I disorder, most recent episode mixed with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "74686005",
+                  "display": "Mild depressed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "75360000",
+                  "display": "Bipolar I disorder, single manic episode, in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78269000",
+                  "display": "Bipolar I disorder, single manic episode, in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78640000",
+                  "display": "Severe manic bipolar I disorder with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79584002",
+                  "display": "Moderate bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "81319007",
+                  "display": "Severe bipolar II disorder, most recent episode major depressive without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82998009",
+                  "display": "Moderate manic bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83225003",
+                  "display": "Bipolar II disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85248005",
+                  "display": "Bipolar disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "86058007",
+                  "display": "Severe bipolar I disorder, single manic episode with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87950005",
+                  "display": "Bipolar I disorder, single manic episode with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111485001",
+                  "display": "Mixed bipolar I disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191618007",
+                  "display": "Bipolar affective disorder, current episode manic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191620005",
+                  "display": "Bipolar affective disorder, currently manic, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191621009",
+                  "display": "Bipolar affective disorder, currently manic, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191623007",
+                  "display": "Bipolar affective disorder, currently manic, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191625000",
+                  "display": "Bipolar affective disorder, currently manic, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191627008",
+                  "display": "Bipolar affective disorder, current episode depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191629006",
+                  "display": "Bipolar affective disorder, currently depressed, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191630001",
+                  "display": "Bipolar affective disorder, currently depressed, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191632009",
+                  "display": "Bipolar affective disorder, currently depressed, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191634005",
+                  "display": "Bipolar affective disorder, currently depressed, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191636007",
+                  "display": "Mixed bipolar affective disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191638008",
+                  "display": "Mixed bipolar affective disorder, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191639000",
+                  "display": "Mixed bipolar affective disorder, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191641004",
+                  "display": "Mixed bipolar affective disorder, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191643001",
+                  "display": "Mixed bipolar affective disorder, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192362008",
+                  "display": "Bipolar affective disorder, current episode mixed (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "371596008",
+                  "display": "Bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "371599001",
+                  "display": "Severe bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "371600003",
+                  "display": "Severe bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "371604007",
+                  "display": "Severe bipolar II disorder (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1346"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1347",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90791",
+                  "display": "PSYCH DIAGNOSTIC EVALUATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90792",
+                  "display": "PSYCH DIAG EVAL W/MED SRVCS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90832",
+                  "display": "PSYTX W PT 30 MINUTES"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90834",
+                  "display": "PSYTX W PT 45 MINUTES"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90837",
+                  "display": "PSYTX W PT 60 MINUTES"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "98960",
+                  "display": "SELF-MGMT EDUC & TRAIN 1 PT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "98961",
+                  "display": "SELF-MGMT EDUC/TRAIN 2-4 PT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "98962",
+                  "display": "SELF-MGMT EDUC/TRAIN 5-8 PT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99078",
+                  "display": "GROUP HEALTH EDUCATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99201",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99202",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99203",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99204",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99205",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99211",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99212",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99213",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99214",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99215",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99217",
+                  "display": "OBSERVATION CARE DISCHARGE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99218",
+                  "display": "INITIAL OBSERVATION CARE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99219",
+                  "display": "INITIAL OBSERVATION CARE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99220",
+                  "display": "INITIAL OBSERVATION CARE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99241",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99242",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99243",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99244",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99245",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99341",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99342",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99343",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99344",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99345",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99347",
+                  "display": "HOME VISIT EST PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99348",
+                  "display": "HOME VISIT EST PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99349",
+                  "display": "HOME VISIT EST PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99350",
+                  "display": "HOME VISIT EST PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99381",
+                  "display": "INIT PM E/M NEW PAT INFANT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99382",
+                  "display": "INIT PM E/M NEW PAT 1-4 YRS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99383",
+                  "display": "PREV VISIT NEW AGE 5-11"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99384",
+                  "display": "PREV VISIT NEW AGE 12-17"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99385",
+                  "display": "PREV VISIT NEW AGE 18-39"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99386",
+                  "display": "PREV VISIT NEW AGE 40-64"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99387",
+                  "display": "INIT PM E/M NEW PAT 65+ YRS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99391",
+                  "display": "PER PM REEVAL EST PAT INFANT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99392",
+                  "display": "PREV VISIT EST AGE 1-4"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99393",
+                  "display": "PREV VISIT EST AGE 5-11"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99394",
+                  "display": "PREV VISIT EST AGE 12-17"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99395",
+                  "display": "PREV VISIT EST AGE 18-39"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99396",
+                  "display": "PREV VISIT EST AGE 40-64"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99397",
+                  "display": "PER PM REEVAL EST PAT 65+ YR"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99401",
+                  "display": "PREVENTIVE COUNSELING INDIV"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99402",
+                  "display": "PREVENTIVE COUNSELING INDIV"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99403",
+                  "display": "PREVENTIVE COUNSELING INDIV"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99404",
+                  "display": "PREVENTIVE COUNSELING INDIV"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99411",
+                  "display": "PREVENTIVE COUNSELING GROUP"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99412",
+                  "display": "PREVENTIVE COUNSELING GROUP"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99510",
+                  "display": "HOME VISIT SING/M/FAM COUNS"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0155",
+                  "display": "Services of clinical social worker in home health or hospice settings, each 15 minutes (G0155)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0176",
+                  "display": "Activity therapy, such as music, dance, art or play therapies not for recreation, related to the care and treatment of patient's disabling mental health problems, per session (45 minutes or more) (G0176)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0177",
+                  "display": "Training and educational services related to the care and treatment of patient's disabling mental health problems per session (45 minutes or more) (G0177)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0409",
+                  "display": "Social work and psychological services, directly relating to and/or furthering the patient's rehabilitation goals, each 15 minutes, face-to-face; individual (services provided by a corf-qualified social worker or psychologist in a corf) (G0409)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0410",
+                  "display": "Group psychotherapy other than of a multiple-family group, in a partial hospitalization setting, approximately 45 to 50 minutes (G0410)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0411",
+                  "display": "Interactive group psychotherapy, in a partial hospitalization setting, approximately 45 to 50 minutes (G0411)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0463",
+                  "display": "Hospital outpatient clinic visit for assessment and management of a patient (G0463)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0502",
+                  "display": "Initial psychiatric collaborative care management, first 70 minutes in the first calendar month of behavioral health care manager activities, in consultation with a psychiatric consultant, and directed by the treating physician or other qualified health care professional, with the following required elements: outreach to and engagement in treatment of a patient directed by the treating physician or other qualified health care professional; initial assessment of the patient, including administration of validated rating scales, with the development of an individualized treatment plan; review by the psychiatric consultant with modifications of the plan if recommended; entering patient in a registry and tracking patient follow-up and (G0502)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0503",
+                  "display": "Subsequent psychiatric collaborative care management, first 60 minutes in a subsequent month of behavioral health care manager activities, in consultation with a psychiatric consultant, and directed by the treating physician or other qualified health care professional, with the following required elements: tracking patient follow-up and progress using the registry, with appropriate documentation; participation in weekly caseload consultation with the psychiatric consultant; ongoing collaboration with and coordination of the patient's mental health care with the treating physician or other qualified health care professional and any other treating mental health providers; additional review of progress and recommendations for changes (G0503)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0507",
+                  "display": "Care management services for behavioral health conditions, at least 20 minutes of clinical staff time, directed by a physician or other qualified health care professional, per calendar month, with the following required elements: initial assessment or follow-up monitoring, including the use of applicable validated rating scales; behavioral health care planning in relation to behavioral/psychiatric health problems, including revision for patients who are not progressing or whose status changes; facilitating and coordinating treatment such as psychotherapy, pharmacotherapy, counseling and/or psychiatric consultation; and continuity of care with a designated member of the care team (G0507)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0002",
+                  "display": "Behavioral health screening to determine eligibility for admission to treatment program (H0002)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0004",
+                  "display": "Behavioral health counseling and therapy, per 15 minutes (H0004)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0031",
+                  "display": "Mental health assessment, by non-physician (H0031)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0034",
+                  "display": "Medication training and support, per 15 minutes (H0034)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0035",
+                  "display": "Mental health partial hospitalization, treatment, less than 24 hours (H0035)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0036",
+                  "display": "Community psychiatric supportive treatment, face-to-face, per 15 minutes (H0036)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0037",
+                  "display": "Community psychiatric supportive treatment program, per diem (H0037)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0039",
+                  "display": "Assertive community treatment, face-to-face, per 15 minutes (H0039)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0040",
+                  "display": "Assertive community treatment program, per diem (H0040)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2000",
+                  "display": "Comprehensive multidisciplinary evaluation (H2000)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2001",
+                  "display": "Rehabilitation program, per 1/2 day (H2001)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2010",
+                  "display": "Comprehensive medication services, per 15 minutes (H2010)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2011",
+                  "display": "Crisis intervention service, per 15 minutes (H2011)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2012",
+                  "display": "Behavioral health day treatment, per hour (H2012)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2013",
+                  "display": "Psychiatric health facility service, per diem (H2013)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2014",
+                  "display": "Skills training and development, per 15 minutes (H2014)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2015",
+                  "display": "Comprehensive community support services, per 15 minutes (H2015)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2016",
+                  "display": "Comprehensive community support services, per diem (H2016)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2017",
+                  "display": "Psychosocial rehabilitation services, per 15 minutes (H2017)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2018",
+                  "display": "Psychosocial rehabilitation services, per diem (H2018)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2019",
+                  "display": "Therapeutic behavioral services, per 15 minutes (H2019)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2020",
+                  "display": "Therapeutic behavioral services, per diem (H2020)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "M0064",
+                  "display": "Brief office visit for the sole purpose of monitoring or changing drug prescriptions used in the treatment of mental psychoneurotic and personality disorders (M0064)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S0201",
+                  "display": "Partial hospitalization services, less than 24 hours, per diem (S0201)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S9480",
+                  "display": "Intensive outpatient psychiatric services, per diem (S9480)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S9484",
+                  "display": "Crisis intervention mental health services, per hour (S9484)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S9485",
+                  "display": "Crisis intervention mental health services, per diem (S9485)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T1015",
+                  "display": "Clinic visit/encounter, all-inclusive (T1015)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "12843005",
+                  "display": "Subsequent hospital visit by physician (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18170008",
+                  "display": "Subsequent nursing facility visit (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19681004",
+                  "display": "Nursing evaluation of patient and report (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87790002",
+                  "display": "Follow-up inpatient consultation visit (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "90526000",
+                  "display": "Initial evaluation and management of healthy individual (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "185349003",
+                  "display": "Encounter for check up (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "185463005",
+                  "display": "Visit out of hours (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "185465003",
+                  "display": "Weekend visit (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "207195004",
+                  "display": "History and physical examination with evaluation and management of nursing facility patient (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "270427003",
+                  "display": "Patient-initiated encounter (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "270430005",
+                  "display": "Provider-initiated encounter (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "308335008",
+                  "display": "Patient encounter procedure (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "390906007",
+                  "display": "Follow-up encounter (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "406547006",
+                  "display": "Urgent follow-up (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "439708006",
+                  "display": "Home visit (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0510",
+                  "display": "General"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0513",
+                  "display": "Psychiatric clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0516",
+                  "display": "Urgent care clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0517",
+                  "display": "Family practice clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0519",
+                  "display": "Other clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0520",
+                  "display": "General"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0521",
+                  "display": "Clinic visit by member to RHC/FQHC"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0522",
+                  "display": "Home visit by RHC/FQHC practitioner"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0523",
+                  "display": "Family practice clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0526",
+                  "display": "Urgent care clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0527",
+                  "display": "Visit nurse service to a member's home in a home health shortage area"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0528",
+                  "display": "Visit by RHC/FQHC practitioner to other non-RHC/FQHC site (e.g., scene of accident)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0529",
+                  "display": "Other freestanding clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0900",
+                  "display": "General"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0901",
+                  "display": "Electroshock treatment (ECT)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0902",
+                  "display": "Milieu therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0903",
+                  "display": "Play therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0904",
+                  "display": "Activity therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0905",
+                  "display": "Intensive outpatient services-psychiatric"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0907",
+                  "display": "Community behavioral health program (day treatment)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0911",
+                  "display": "Rehabilitation"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0912",
+                  "display": "Partial hospitalization-less intensive"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0913",
+                  "display": "Partial hospitalization-intensive"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0914",
+                  "display": "Individual therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0915",
+                  "display": "Group therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0916",
+                  "display": "Family therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0917",
+                  "display": "Biofeedback"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0919",
+                  "display": "Other Behavioral health treatments"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0982",
+                  "display": "Outpatient services"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0983",
+                  "display": "Clinic"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1347"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1389",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99366",
+                  "display": "TEAM CONF W/PAT BY HC PROF"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T1016",
+                  "display": "Case management, each 15 minutes (T1016)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T1017",
+                  "display": "Targeted case management, each 15 minutes (T1017)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T2022",
+                  "display": "Case management, per month (T2022)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T2023",
+                  "display": "Targeted case management; per month (T2023)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "182832007",
+                  "display": "Procedure related to management of drug administration (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "225333008",
+                  "display": "Behavior management (regime/therapy)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "385828006",
+                  "display": "Health promotion management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "386230005",
+                  "display": "Case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "409022004",
+                  "display": "Dispensing medication management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410216003",
+                  "display": "Communication care management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410219005",
+                  "display": "Personal care management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410328009",
+                  "display": "Coping skills case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410335001",
+                  "display": "Exercises case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410346003",
+                  "display": "Medication action/side effects case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410347007",
+                  "display": "Medication set-up case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410351009",
+                  "display": "Relaxation/breathing techniques case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410352002",
+                  "display": "Rest/sleep case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410353007",
+                  "display": "Safety case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410354001",
+                  "display": "Screening case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410356004",
+                  "display": "Signs/symptoms-mental/emotional case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410358003",
+                  "display": "Social work/counseling case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410360001",
+                  "display": "Spiritual care case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410363004",
+                  "display": "Support group case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410364005",
+                  "display": "Support system case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "410366007",
+                  "display": "Wellness case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "416341003",
+                  "display": "Case management started (situation)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "416584001",
+                  "display": "Case management ended (situation)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "424490002",
+                  "display": "Medication prescription case management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "425604002",
+                  "display": "Case management follow up (procedure)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1389"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1386",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G8510",
+                  "display": "Screening for depression is documented as negative, a follow-up plan is not required (G8510)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428171000124102",
+                  "display": "Depression screening negative (finding)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1386"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1023",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "999.4",
+                  "display": "Anaphylactic reaction due to serum [999.4]"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1023"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1387",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G8431",
+                  "display": "Screening for depression is documented as being positive and a follow-up plan is documented (G8431)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428181000124104",
+                  "display": "Depression screening positive (situation)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1387"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1024",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "T80.52XA",
+                  "display": "[T80.52XA] Anaphylactic reaction due to vaccination, initial encounter"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "T80.52XD",
+                  "display": "[T80.52XD] Anaphylactic reaction due to vaccination, subsequent encounter"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "T80.52XS",
+                  "display": "[T80.52XS] Anaphylactic reaction due to vaccination, sequela"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "999.42",
+                  "display": "Anaphylactic reaction due to vaccination"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1024"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1384",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G8431",
+                  "display": "Screening for depression is documented as being positive and a follow-up plan is documented (G8431)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G8510",
+                  "display": "Screening for depression is documented as negative, a follow-up plan is not required (G8510)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G8511",
+                  "display": "Screening for depression documented as positive, follow-up plan not documented, reason not given (G8511)"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "44261-6",
+                  "display": "Patient Health Questionnaire 9 item (PHQ-9) total score [Reported]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "48544-1",
+                  "display": "Geriatric depression scale (GDS) total"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "48545-8",
+                  "display": "Geriatric depression scale (GDS) short version total"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "55758-7",
+                  "display": "Patient Health Questionnaire 2 item (PHQ-2) total score [Reported]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "70271-2",
+                  "display": "Patient Health Questionnaire - Somatic, Anxiety, and Depressive Symptoms (PHQ-SADS) total score [Reported]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "70272-0",
+                  "display": "Patient Health Questionnaire 4 item (PHQ-4) total score [Reported]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "71354-5",
+                  "display": "Edinburgh Postnatal Depression Scale [EPDS]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "71965-8",
+                  "display": "PROMIS-29 Depression score T-score"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "71966-6",
+                  "display": "PROMIS-29 Depression score"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "73831-0",
+                  "display": "Adolescent depression screening assessment"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "73832-8",
+                  "display": "Adult depression screening assessment"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "77688-0",
+                  "display": "Depression scale [UPDRS]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "77821-7",
+                  "display": "PROMIS short form - emotional distress - depression 4a - version 1.0 raw score"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "77835-7",
+                  "display": "PROMIS short form - emotional distress - depression 8b - version 1.0 raw score"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "77847-2",
+                  "display": "PROMIS pediatric short form - depressive symptoms - version 1.0 raw score"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "77861-3",
+                  "display": "PROMIS emotional distress - depression - version 1.0 Tscore"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428151000124107",
+                  "display": "Standardized adult depression screening tool completed (situation)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428161000124109",
+                  "display": "Standardized adolescent depression screening tool completed (situation)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428171000124102",
+                  "display": "Depression screening negative (finding)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428181000124104",
+                  "display": "Depression screening positive (situation)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1384"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1385",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "98960",
+                  "display": "SELF-MGMT EDUC & TRAIN 1 PT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "98961",
+                  "display": "SELF-MGMT EDUC/TRAIN 2-4 PT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "98962",
+                  "display": "SELF-MGMT EDUC/TRAIN 5-8 PT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99078",
+                  "display": "GROUP HEALTH EDUCATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99201",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99202",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99203",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99204",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99205",
+                  "display": "OFFICE/OUTPATIENT VISIT NEW"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99211",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99212",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99213",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99214",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99215",
+                  "display": "OFFICE/OUTPATIENT VISIT EST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99217",
+                  "display": "OBSERVATION CARE DISCHARGE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99218",
+                  "display": "INITIAL OBSERVATION CARE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99219",
+                  "display": "INITIAL OBSERVATION CARE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99220",
+                  "display": "INITIAL OBSERVATION CARE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99241",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99242",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99243",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99244",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99245",
+                  "display": "OFFICE CONSULTATION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99341",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99342",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99343",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99344",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99345",
+                  "display": "HOME VISIT NEW PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99347",
+                  "display": "HOME VISIT EST PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99348",
+                  "display": "HOME VISIT EST PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99349",
+                  "display": "HOME VISIT EST PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99350",
+                  "display": "HOME VISIT EST PATIENT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99381",
+                  "display": "INIT PM E/M NEW PAT INFANT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99382",
+                  "display": "INIT PM E/M NEW PAT 1-4 YRS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99383",
+                  "display": "PREV VISIT NEW AGE 5-11"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99384",
+                  "display": "PREV VISIT NEW AGE 12-17"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99385",
+                  "display": "PREV VISIT NEW AGE 18-39"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99386",
+                  "display": "PREV VISIT NEW AGE 40-64"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99387",
+                  "display": "INIT PM E/M NEW PAT 65+ YRS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99391",
+                  "display": "PER PM REEVAL EST PAT INFANT"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99392",
+                  "display": "PREV VISIT EST AGE 1-4"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99393",
+                  "display": "PREV VISIT EST AGE 5-11"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99394",
+                  "display": "PREV VISIT EST AGE 12-17"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99395",
+                  "display": "PREV VISIT EST AGE 18-39"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99396",
+                  "display": "PREV VISIT EST AGE 40-64"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99397",
+                  "display": "PER PM REEVAL EST PAT 65+ YR"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99401",
+                  "display": "PREVENTIVE COUNSELING INDIV"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99402",
+                  "display": "PREVENTIVE COUNSELING INDIV"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99403",
+                  "display": "PREVENTIVE COUNSELING INDIV"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99404",
+                  "display": "PREVENTIVE COUNSELING INDIV"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99411",
+                  "display": "PREVENTIVE COUNSELING GROUP"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99412",
+                  "display": "PREVENTIVE COUNSELING GROUP"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0463",
+                  "display": "Hospital outpatient clinic visit for assessment and management of a patient (G0463)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T1015",
+                  "display": "Clinic visit/encounter, all-inclusive (T1015)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0510",
+                  "display": "General"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0513",
+                  "display": "Psychiatric clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0516",
+                  "display": "Urgent care clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0517",
+                  "display": "Family practice clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0519",
+                  "display": "Other clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0520",
+                  "display": "General"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0521",
+                  "display": "Clinic visit by member to RHC/FQHC"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0522",
+                  "display": "Home visit by RHC/FQHC practitioner"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0523",
+                  "display": "Family practice clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0526",
+                  "display": "Urgent care clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0527",
+                  "display": "Visit nurse service to a member's home in a home health shortage area"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0528",
+                  "display": "Visit by RHC/FQHC practitioner to other non-RHC/FQHC site (e.g., scene of accident)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0529",
+                  "display": "Other freestanding clinic"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0982",
+                  "display": "Outpatient services"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0983",
+                  "display": "Clinic"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1385"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1148.7",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1148.7",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "LT"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1148.7"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168.11",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.11",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0403"
+                },
+                {
+                  "code": "0401"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.11"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1420.35",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.35",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "81528"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.35"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1418",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99377",
+                  "display": "HOSPICE CARE SUPERVISION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99378",
+                  "display": "HOSPICE CARE SUPERVISION"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0182",
+                  "display": "Physician supervision of a patient under a medicare-approved hospice (patient not present) requiring complex and multidisciplinary care modalities involving regular physician development and/or revision of care plans, review of subsequent reports of patient status, review of laboratory and other studies, communication (including telephone calls) with other health care professionals involved in the patient's care, integration of new information into the medical treatment plan and/or adjustment of medical therapy, within a calendar month, 30 minutes or more (G0182)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G9473",
+                  "display": "Services performed by chaplain in the hospice setting, each 15 minutes (G9473)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G9474",
+                  "display": "Services performed by dietary counselor in the hospice setting, each 15 minutes (G9474)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G9475",
+                  "display": "Services performed by other counselor in the hospice setting, each 15 minutes (G9475)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G9476",
+                  "display": "Services performed by volunteer in the hospice setting, each 15 minutes (G9476)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G9477",
+                  "display": "Services performed by care coordinator in the hospice setting, each 15 minutes (G9477)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G9478",
+                  "display": "Services performed by other qualified therapist in the hospice setting, each 15 minutes (G9478)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G9479",
+                  "display": "Services performed by qualified pharmacist in the hospice setting, each 15 minutes (G9479)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "Q5003",
+                  "display": "Hospice care provided in nursing long term care facility (ltc) or non-skilled nursing facility (nf) (Q5003)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "Q5004",
+                  "display": "Hospice care provided in skilled nursing facility (snf) (Q5004)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "Q5005",
+                  "display": "Hospice care provided in inpatient hospital (Q5005)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "Q5006",
+                  "display": "Hospice care provided in inpatient hospice facility (Q5006)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "Q5007",
+                  "display": "Hospice care provided in long term care facility (Q5007)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "Q5008",
+                  "display": "Hospice care provided in inpatient psychiatric facility (Q5008)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "Q5010",
+                  "display": "Hospice home care provided in a hospice facility (Q5010)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "S9126",
+                  "display": "Hospice care, in the home, per diem (S9126)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T2042",
+                  "display": "Hospice routine home care; per diem (T2042)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T2043",
+                  "display": "Hospice continuous home care; per hour (T2043)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T2044",
+                  "display": "Hospice inpatient respite care; per diem (T2044)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T2045",
+                  "display": "Hospice general inpatient care; per diem (T2045)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T2046",
+                  "display": "Hospice long term care, room and board only; per diem (T2046)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0115",
+                  "display": "Hospice"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0125",
+                  "display": "Hospice"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0135",
+                  "display": "Hospice"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0145",
+                  "display": "Hospice"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0155",
+                  "display": "Hospice"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0235",
+                  "display": "Hospice"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0650",
+                  "display": "General"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0651",
+                  "display": "Routine home care"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0652",
+                  "display": "Continuous home care"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0655",
+                  "display": "Inpatient respite care"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0656",
+                  "display": "General inpatient care nonrespite"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0657",
+                  "display": "Physician services"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0658",
+                  "display": "Hospice room & board-nursing facility"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0659",
+                  "display": "Other hospice"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0810",
+                  "display": "Nonpayment/Zero Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0811",
+                  "display": "Admit-Through-Discharge Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0812",
+                  "display": "Interim - First Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0813",
+                  "display": "Interim - Continuing Claim (Not Valid for Medicare PPS Claims), Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0814",
+                  "display": "Interim - Last Claim (Not Valid for Medicare Inpatient Hospital PPS Claims), Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0815",
+                  "display": "Late Charges Only Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0817",
+                  "display": "Replacement of Prior Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0818",
+                  "display": "Void/Cancel of a Prior Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0819",
+                  "display": "Final Claim for a Home Health PPS Episode, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0820",
+                  "display": "Nonpayment/Zero Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0821",
+                  "display": "Admit-Through-Discharge Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0822",
+                  "display": "Interim - First Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0823",
+                  "display": "Interim - Continuing Claim (Not Valid for Medicare PPS Claims), Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0824",
+                  "display": "Interim - Last Claim (Not Valid for Medicare Inpatient Hospital PPS Claims), Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0825",
+                  "display": "Late Charges Only Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0827",
+                  "display": "Replacement of Prior Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0828",
+                  "display": "Void/Cancel of a Prior Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0829",
+                  "display": "Final Claim for a Home Health PPS Episode, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081A",
+                  "display": "Hospice Admission/Election Notice, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081B",
+                  "display": "Termination/Revocation Notice - Hospice/Medicare Coordinated Care Demonstration/Religious Nonmedica, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081C",
+                  "display": "Hospice Change of Provider Notice, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081D",
+                  "display": "Void/Cancel - Hospice/Medicare Coordinated Care Demonstration/Religious Nonmedical Health Care Inst, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081E",
+                  "display": "Hospice Change of Ownership, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081F",
+                  "display": "Beneficiary Initiated Adjustment Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081G",
+                  "display": "CWF Initiated Adjustment Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081H",
+                  "display": "CMS Initiated Adjustment Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081I",
+                  "display": "Intermediary Adjustment Claim (Other Than PRO or Provider), Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081J",
+                  "display": "Initiated Adjustment Claim - Other, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081K",
+                  "display": "OIG Initiated Adjustment Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081M",
+                  "display": "MSP Initiated Adjustment Claim, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081O",
+                  "display": "Nonpayment/Zero Claims, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081X",
+                  "display": "Void/Cancel a Prior Abbreviated Encounter Submission, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081Y",
+                  "display": "Replacement of a Prior Abbreviated Encounter Submission, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "081Z",
+                  "display": "New Abbreviated Encounter Submission, Hospice (non-hospital based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082A",
+                  "display": "Hospice Admission/Election Notice, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082B",
+                  "display": "Termination/Revocation Notice - Hospice/Medicare Coordinated Care Demonstration/Religious Nonmedica, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082C",
+                  "display": "Hospice Change of Provider Notice, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082D",
+                  "display": "Void/Cancel - Hospice/Medicare Coordinated Care Demonstration/Religious Nonmedical Health Care Inst, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082E",
+                  "display": "Hospice Change of Ownership, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082F",
+                  "display": "Beneficiary Initiated Adjustment Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082G",
+                  "display": "CWF Initiated Adjustment Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082H",
+                  "display": "CMS Initiated Adjustment Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082I",
+                  "display": "Intermediary Adjustment Claim (Other Than PRO or Provider), Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082J",
+                  "display": "Initiated Adjustment Claim - Other, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082K",
+                  "display": "OIG Initiated Adjustment Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082M",
+                  "display": "MSP Initiated Adjustment Claim, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082O",
+                  "display": "Nonpayment/Zero Claims, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082X",
+                  "display": "Void/Cancel a Prior Abbreviated Encounter Submission, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082Y",
+                  "display": "Replacement of a Prior Abbreviated Encounter Submission, Hospice (hospital-based)"
+                }
+              ]
+            },
+            {
+              "system": "http://www.nubc.org",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "082Z",
+                  "display": "New Abbreviated Encounter Submission, Hospice (hospital-based)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1418"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1420.37",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.37",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "77353-1"
+                },
+                {
+                  "code": "77354-9"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.37"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168.10",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.10",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "87.37"
+                },
+                {
+                  "code": "87.36"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.10"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1420.36",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.36",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0464"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1420.36"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1339",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.10",
+                  "display": "[F10.10] Alcohol abuse, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.120",
+                  "display": "[F10.120] Alcohol abuse with intoxication, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.121",
+                  "display": "[F10.121] Alcohol abuse with intoxication delirium"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.129",
+                  "display": "[F10.129] Alcohol abuse with intoxication, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.14",
+                  "display": "[F10.14] Alcohol abuse with alcohol-induced mood disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.150",
+                  "display": "[F10.150] Alcohol abuse with alcohol-induced psychotic disorder with delusions"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.151",
+                  "display": "[F10.151] Alcohol abuse with alcohol-induced psychotic disorder with hallucinations"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.159",
+                  "display": "[F10.159] Alcohol abuse with alcohol-induced psychotic disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.180",
+                  "display": "[F10.180] Alcohol abuse with alcohol-induced anxiety disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.181",
+                  "display": "[F10.181] Alcohol abuse with alcohol-induced sexual dysfunction"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.182",
+                  "display": "[F10.182] Alcohol abuse with alcohol-induced sleep disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.188",
+                  "display": "[F10.188] Alcohol abuse with other alcohol-induced disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.19",
+                  "display": "[F10.19] Alcohol abuse with unspecified alcohol-induced disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.20",
+                  "display": "[F10.20] Alcohol dependence, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.220",
+                  "display": "[F10.220] Alcohol dependence with intoxication, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.221",
+                  "display": "[F10.221] Alcohol dependence with intoxication delirium"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.229",
+                  "display": "[F10.229] Alcohol dependence with intoxication, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.230",
+                  "display": "[F10.230] Alcohol dependence with withdrawal, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.231",
+                  "display": "[F10.231] Alcohol dependence with withdrawal delirium"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.232",
+                  "display": "[F10.232] Alcohol dependence with withdrawal with perceptual disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.239",
+                  "display": "[F10.239] Alcohol dependence with withdrawal, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.24",
+                  "display": "[F10.24] Alcohol dependence with alcohol-induced mood disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.250",
+                  "display": "[F10.250] Alcohol dependence with alcohol-induced psychotic disorder with delusions"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.251",
+                  "display": "[F10.251] Alcohol dependence with alcohol-induced psychotic disorder with hallucinations"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.259",
+                  "display": "[F10.259] Alcohol dependence with alcohol-induced psychotic disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.26",
+                  "display": "[F10.26] Alcohol dependence with alcohol-induced persisting amnestic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.27",
+                  "display": "[F10.27] Alcohol dependence with alcohol-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.280",
+                  "display": "[F10.280] Alcohol dependence with alcohol-induced anxiety disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.281",
+                  "display": "[F10.281] Alcohol dependence with alcohol-induced sexual dysfunction"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.282",
+                  "display": "[F10.282] Alcohol dependence with alcohol-induced sleep disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.288",
+                  "display": "[F10.288] Alcohol dependence with other alcohol-induced disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.29",
+                  "display": "[F10.29] Alcohol dependence with unspecified alcohol-induced disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.920",
+                  "display": "[F10.920] Alcohol use, unspecified with intoxication, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.921",
+                  "display": "[F10.921] Alcohol use, unspecified with intoxication delirium"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.929",
+                  "display": "[F10.929] Alcohol use, unspecified with intoxication, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.94",
+                  "display": "[F10.94] Alcohol use, unspecified with alcohol-induced mood disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.950",
+                  "display": "[F10.950] Alcohol use, unspecified with alcohol-induced psychotic disorder with delusions"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.951",
+                  "display": "[F10.951] Alcohol use, unspecified with alcohol-induced psychotic disorder with hallucinations"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.959",
+                  "display": "[F10.959] Alcohol use, unspecified with alcohol-induced psychotic disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.96",
+                  "display": "[F10.96] Alcohol use, unspecified with alcohol-induced persisting amnestic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.97",
+                  "display": "[F10.97] Alcohol use, unspecified with alcohol-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.980",
+                  "display": "[F10.980] Alcohol use, unspecified with alcohol-induced anxiety disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.981",
+                  "display": "[F10.981] Alcohol use, unspecified with alcohol-induced sexual dysfunction"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.982",
+                  "display": "[F10.982] Alcohol use, unspecified with alcohol-induced sleep disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.988",
+                  "display": "[F10.988] Alcohol use, unspecified with other alcohol-induced disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.99",
+                  "display": "[F10.99] Alcohol use, unspecified with unspecified alcohol-induced disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "K29.20",
+                  "display": "[K29.20] Alcoholic gastritis without bleeding"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "K29.21",
+                  "display": "[K29.21] Alcoholic gastritis with bleeding"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "K70.10",
+                  "display": "[K70.10] Alcoholic hepatitis without ascites"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "K70.11",
+                  "display": "[K70.11] Alcoholic hepatitis with ascites"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "281004",
+                  "display": "Dementia associated with alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7052005",
+                  "display": "Alcohol hallucinosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7200002",
+                  "display": "Alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "8635005",
+                  "display": "Alcohol withdrawal delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15167005",
+                  "display": "Alcohol abuse (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18653004",
+                  "display": "Alcohol intoxication delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29212009",
+                  "display": "Alcohol-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "34938008",
+                  "display": "Alcohol-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41083005",
+                  "display": "Alcohol-induced sleep disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42344001",
+                  "display": "Alcohol-induced psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "53936005",
+                  "display": "Alcohol-induced mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61144001",
+                  "display": "Alcohol-induced psychotic disorder with delusions (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66590003",
+                  "display": "Alcohol dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "73097000",
+                  "display": "Alcohol amnestic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78524005",
+                  "display": "Alcohol-induced sexual dysfunction (finding)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79578000",
+                  "display": "Alcohol paranoia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85561006",
+                  "display": "Uncomplicated alcohol withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191471000",
+                  "display": "Korsakov's alcoholic psychosis with peripheral neuritis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191475009",
+                  "display": "Chronic alcoholic brain syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191476005",
+                  "display": "Alcohol withdrawal hallucinosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191477001",
+                  "display": "Pathological alcohol intoxication (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191478006",
+                  "display": "Alcoholic paranoia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191480000",
+                  "display": "Alcohol withdrawal syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191802004",
+                  "display": "Acute alcoholic intoxication in alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191804003",
+                  "display": "Continuous acute alcoholic intoxication in alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191805002",
+                  "display": "Episodic acute alcoholic intoxication in alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191806001",
+                  "display": "Acute alcoholic intoxication in remission, in alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191811004",
+                  "display": "Continuous chronic alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191812006",
+                  "display": "Episodic chronic alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191813001",
+                  "display": "Chronic alcoholism in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191882002",
+                  "display": "Nondependent alcohol abuse, continuous (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191883007",
+                  "display": "Nondependent alcohol abuse, episodic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191884001",
+                  "display": "Nondependent alcohol abuse in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268645007",
+                  "display": "Nondependent alcohol abuse (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "284591009",
+                  "display": "Persistent alcohol abuse (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "713583005",
+                  "display": "Mild alcohol dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "713862009",
+                  "display": "Severe alcohol dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "714829008",
+                  "display": "Moderate alcohol dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "97571000119109",
+                  "display": "Thrombocytopenia co-occurrent and due to alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "135311000119100",
+                  "display": "Insomnia caused by alcohol (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10741871000119101",
+                  "display": "Alcohol dependence in pregnancy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10755041000119100",
+                  "display": "Alcohol dependence in childbirth (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1339"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1334.15",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1334.15",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0HTU0ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1334.15"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1337",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99408",
+                  "display": "AUDIT/DAST 15-30 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99409",
+                  "display": "AUDIT/DAST OVER 30 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "3016F",
+                  "display": "PT SCRND UNHLTHY OH USE"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0396",
+                  "display": "Alcohol and/or substance (other than tobacco) abuse structured assessment (e.g., audit, dast), and brief intervention 15 to 30 minutes (G0396)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0397",
+                  "display": "Alcohol and/or substance (other than tobacco) abuse structured assessment (e.g., audit, dast), and intervention, greater than 30 minutes (G0397)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0442",
+                  "display": "Annual alcohol misuse screening, 15 minutes (G0442)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0001",
+                  "display": "Alcohol and/or drug assessment (H0001)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0049",
+                  "display": "Alcohol and/or drug screening (H0049)"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "68517-2",
+                  "display": "How many times in the past year have you have X or more drinks in a day [SAMHSA]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "68519-8",
+                  "display": "How many standard drinks containing alcohol do you have on a typical day [SAMHSA]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "68520-6",
+                  "display": "How often do you have 6 or more drinks on 1 occasion [SAMHSA]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "72109-2",
+                  "display": "Alcohol Use Disorder Identification Test - Consumption [AUDIT-C]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "72110-0",
+                  "display": "Alcohol Use Disorder Identification Test [AUDIT]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "75624-7",
+                  "display": "Total score [AUDIT]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "75626-2",
+                  "display": "Total score [AUDIT-C]"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "171208001",
+                  "display": "Alcohol consumption screening (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "408946003",
+                  "display": "Alcohol abuse prevention assessment (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "713107002",
+                  "display": "Screening for alcohol abuse (procedure)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1337"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1139",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.0",
+                  "display": "[D80.0] Hereditary hypogammaglobulinemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.1",
+                  "display": "[D80.1] Nonfamilial hypogammaglobulinemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.2",
+                  "display": "[D80.2] Selective deficiency of immunoglobulin A [IgA]"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.3",
+                  "display": "[D80.3] Selective deficiency of immunoglobulin G [IgG] subclasses"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.4",
+                  "display": "[D80.4] Selective deficiency of immunoglobulin M [IgM]"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.5",
+                  "display": "[D80.5] Immunodeficiency with increased immunoglobulin M [IgM]"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.6",
+                  "display": "[D80.6] Antibody deficiency with near-normal immunoglobulins or with hyperimmunoglobulinemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.7",
+                  "display": "[D80.7] Transient hypogammaglobulinemia of infancy"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.8",
+                  "display": "[D80.8] Other immunodeficiencies with predominantly antibody defects"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D80.9",
+                  "display": "[D80.9] Immunodeficiency with predominantly antibody defects, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D81.0",
+                  "display": "[D81.0] Severe combined immunodeficiency [SCID] with reticular dysgenesis"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D81.1",
+                  "display": "[D81.1] Severe combined immunodeficiency [SCID] with low T- and B-cell numbers"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D81.2",
+                  "display": "[D81.2] Severe combined immunodeficiency [SCID] with low or normal B-cell numbers"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D81.4",
+                  "display": "[D81.4] Nezelof's syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D81.6",
+                  "display": "[D81.6] Major histocompatibility complex class I deficiency"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D81.7",
+                  "display": "[D81.7] Major histocompatibility complex class II deficiency"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D81.89",
+                  "display": "[D81.89] Other combined immunodeficiencies"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D81.9",
+                  "display": "[D81.9] Combined immunodeficiency, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D82.0",
+                  "display": "[D82.0] Wiskott-Aldrich syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D82.1",
+                  "display": "[D82.1] Di George's syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D82.2",
+                  "display": "[D82.2] Immunodeficiency with short-limbed stature"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D82.3",
+                  "display": "[D82.3] Immunodeficiency following hereditary defective response to Epstein-Barr virus"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D82.4",
+                  "display": "[D82.4] Hyperimmunoglobulin E [IgE] syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D82.8",
+                  "display": "[D82.8] Immunodeficiency associated with other specified major defects"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D82.9",
+                  "display": "[D82.9] Immunodeficiency associated with major defect, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D83.0",
+                  "display": "[D83.0] Common variable immunodeficiency with predominant abnormalities of B-cell numbers and function"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D83.1",
+                  "display": "[D83.1] Common variable immunodeficiency with predominant immunoregulatory T-cell disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D83.2",
+                  "display": "[D83.2] Common variable immunodeficiency with autoantibodies to B- or T-cells"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D83.8",
+                  "display": "[D83.8] Other common variable immunodeficiencies"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D83.9",
+                  "display": "[D83.9] Common variable immunodeficiency, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D84.0",
+                  "display": "[D84.0] Lymphocyte function antigen-1 [LFA-1] defect"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D84.1",
+                  "display": "[D84.1] Defects in the complement system"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D84.8",
+                  "display": "[D84.8] Other specified immunodeficiencies"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D84.9",
+                  "display": "[D84.9] Immunodeficiency, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D89.3",
+                  "display": "[D89.3] Immune reconstitution syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D89.810",
+                  "display": "[D89.810] Acute graft-versus-host disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D89.811",
+                  "display": "[D89.811] Chronic graft-versus-host disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D89.812",
+                  "display": "[D89.812] Acute on chronic graft-versus-host disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D89.813",
+                  "display": "[D89.813] Graft-versus-host disease, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D89.82",
+                  "display": "[D89.82] Autoimmune lymphoproliferative syndrome [ALPS]"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D89.89",
+                  "display": "[D89.89] Other specified disorders involving the immune mechanism, not elsewhere classified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D89.9",
+                  "display": "[D89.9] Disorder involving the immune mechanism, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.00",
+                  "display": "Hypogammaglobulinemia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.01",
+                  "display": "Selective IgA immunodeficiency"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.02",
+                  "display": "Selective IgM immunodeficiency"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.03",
+                  "display": "Other selective immunoglobulin deficiencies"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.04",
+                  "display": "Congenital hypogammaglobulinemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.05",
+                  "display": "Immunodeficiency with increased IgM"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.06",
+                  "display": "Common variable immunodeficiency"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.09",
+                  "display": "Other deficiency of humoral immunity"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.10",
+                  "display": "Immunodeficiency with predominant T-cell defect, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.11",
+                  "display": "Digeorge's syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.12",
+                  "display": "Wiskott-aldrich syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.13",
+                  "display": "Nezelof's syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.19",
+                  "display": "Other deficiency of cell-mediated immunity"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.2",
+                  "display": "Combined immunity deficiency"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.3",
+                  "display": "Unspecified immunity deficiency"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.41",
+                  "display": "Autoimmune lymphoproliferative syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.49",
+                  "display": "Autoimmune disease, not elsewhere classified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.50",
+                  "display": "Graft-versus-host disease, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.51",
+                  "display": "Acute graft-versus-host disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.52",
+                  "display": "Chronic graft-versus-host disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.53",
+                  "display": "Acute on chronic graft-versus-host disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.8",
+                  "display": "Other specified disorders involving the immune mechanism"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "279.9",
+                  "display": "Unspecified disorder of immune mechanism"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1139"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.20",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.20",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "V88.01"
+                },
+                {
+                  "code": "V88.03"
+                },
+                {
+                  "code": "752.43"
+                },
+                {
+                  "code": "618.5"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.20"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1123.21",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.21",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "68.61"
+                },
+                {
+                  "code": "68.71"
+                },
+                {
+                  "code": "68.41"
+                },
+                {
+                  "code": "68.51"
+                },
+                {
+                  "code": "68.69"
+                },
+                {
+                  "code": "68.79"
+                },
+                {
+                  "code": "68.49"
+                },
+                {
+                  "code": "68.59"
+                },
+                {
+                  "code": "68.8"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1123.21"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1256.13",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256.13",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "19307"
+                },
+                {
+                  "code": "19306"
+                },
+                {
+                  "code": "19305"
+                },
+                {
+                  "code": "19303"
+                },
+                {
+                  "code": "19304"
+                },
+                {
+                  "code": "19240"
+                },
+                {
+                  "code": "19220"
+                },
+                {
+                  "code": "19200"
+                },
+                {
+                  "code": "19180"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256.13"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1256.14",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256.14",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "85.47"
+                },
+                {
+                  "code": "85.43"
+                },
+                {
+                  "code": "85.45"
+                },
+                {
+                  "code": "85.41"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256.14"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1042.3",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042.3",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0HTV0ZZ"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042.3"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1042.4",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042.4",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "85.48"
+                },
+                {
+                  "code": "85.44"
+                },
+                {
+                  "code": "85.46"
+                },
+                {
+                  "code": "85.42"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042.4"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208.22",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.22",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "88147"
+                },
+                {
+                  "code": "88148"
+                },
+                {
+                  "code": "88142"
+                },
+                {
+                  "code": "88174"
+                },
+                {
+                  "code": "88143"
+                },
+                {
+                  "code": "88175"
+                },
+                {
+                  "code": "88141"
+                },
+                {
+                  "code": "88164"
+                },
+                {
+                  "code": "88166"
+                },
+                {
+                  "code": "88167"
+                },
+                {
+                  "code": "88165"
+                },
+                {
+                  "code": "88150"
+                },
+                {
+                  "code": "88152"
+                },
+                {
+                  "code": "88154"
+                },
+                {
+                  "code": "88153"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.22"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1179",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.0",
+                  "display": "[F20.0] Paranoid schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.1",
+                  "display": "[F20.1] Disorganized schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.2",
+                  "display": "[F20.2] Catatonic schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.3",
+                  "display": "[F20.3] Undifferentiated schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.5",
+                  "display": "[F20.5] Residual schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.81",
+                  "display": "[F20.81] Schizophreniform disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.89",
+                  "display": "[F20.89] Other schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.9",
+                  "display": "[F20.9] Schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F21",
+                  "display": "[F21] Schizotypal disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F22",
+                  "display": "[F22] Delusional disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F23",
+                  "display": "[F23] Brief psychotic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F24",
+                  "display": "[F24] Shared psychotic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F25.0",
+                  "display": "[F25.0] Schizoaffective disorder, bipolar type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F25.1",
+                  "display": "[F25.1] Schizoaffective disorder, depressive type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F25.8",
+                  "display": "[F25.8] Other schizoaffective disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F25.9",
+                  "display": "[F25.9] Schizoaffective disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F28",
+                  "display": "[F28] Other psychotic disorder not due to a substance or known physiological condition"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F29",
+                  "display": "[F29] Unspecified psychosis not due to a substance or known physiological condition"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.10",
+                  "display": "[F30.10] Manic episode without psychotic symptoms, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.11",
+                  "display": "[F30.11] Manic episode without psychotic symptoms, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.12",
+                  "display": "[F30.12] Manic episode without psychotic symptoms, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.13",
+                  "display": "[F30.13] Manic episode, severe, without psychotic symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.2",
+                  "display": "[F30.2] Manic episode, severe with psychotic symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.3",
+                  "display": "[F30.3] Manic episode in partial remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.4",
+                  "display": "[F30.4] Manic episode in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.8",
+                  "display": "[F30.8] Other manic episodes"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.9",
+                  "display": "[F30.9] Manic episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.0",
+                  "display": "[F31.0] Bipolar disorder, current episode hypomanic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.10",
+                  "display": "[F31.10] Bipolar disorder, current episode manic without psychotic features, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.11",
+                  "display": "[F31.11] Bipolar disorder, current episode manic without psychotic features, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.12",
+                  "display": "[F31.12] Bipolar disorder, current episode manic without psychotic features, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.13",
+                  "display": "[F31.13] Bipolar disorder, current episode manic without psychotic features, severe"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.2",
+                  "display": "[F31.2] Bipolar disorder, current episode manic severe with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.30",
+                  "display": "[F31.30] Bipolar disorder, current episode depressed, mild or moderate severity, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.31",
+                  "display": "[F31.31] Bipolar disorder, current episode depressed, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.32",
+                  "display": "[F31.32] Bipolar disorder, current episode depressed, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.4",
+                  "display": "[F31.4] Bipolar disorder, current episode depressed, severe, without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.5",
+                  "display": "[F31.5] Bipolar disorder, current episode depressed, severe, with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.60",
+                  "display": "[F31.60] Bipolar disorder, current episode mixed, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.61",
+                  "display": "[F31.61] Bipolar disorder, current episode mixed, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.62",
+                  "display": "[F31.62] Bipolar disorder, current episode mixed, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.63",
+                  "display": "[F31.63] Bipolar disorder, current episode mixed, severe, without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.64",
+                  "display": "[F31.64] Bipolar disorder, current episode mixed, severe, with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.70",
+                  "display": "[F31.70] Bipolar disorder, currently in remission, most recent episode unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.71",
+                  "display": "[F31.71] Bipolar disorder, in partial remission, most recent episode hypomanic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.72",
+                  "display": "[F31.72] Bipolar disorder, in full remission, most recent episode hypomanic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.73",
+                  "display": "[F31.73] Bipolar disorder, in partial remission, most recent episode manic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.74",
+                  "display": "[F31.74] Bipolar disorder, in full remission, most recent episode manic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.75",
+                  "display": "[F31.75] Bipolar disorder, in partial remission, most recent episode depressed"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.76",
+                  "display": "[F31.76] Bipolar disorder, in full remission, most recent episode depressed"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.77",
+                  "display": "[F31.77] Bipolar disorder, in partial remission, most recent episode mixed"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.78",
+                  "display": "[F31.78] Bipolar disorder, in full remission, most recent episode mixed"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.81",
+                  "display": "[F31.81] Bipolar II disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.89",
+                  "display": "[F31.89] Other bipolar disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.9",
+                  "display": "[F31.9] Bipolar disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.0",
+                  "display": "[F32.0] Major depressive disorder, single episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.1",
+                  "display": "[F32.1] Major depressive disorder, single episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.2",
+                  "display": "[F32.2] Major depressive disorder, single episode, severe without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.3",
+                  "display": "[F32.3] Major depressive disorder, single episode, severe with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.4",
+                  "display": "[F32.4] Major depressive disorder, single episode, in partial remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.5",
+                  "display": "[F32.5] Major depressive disorder, single episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.8",
+                  "display": "[F32.8] Other depressive episodes"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.81",
+                  "display": "[F32.81] Premenstrual dysphoric disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.89",
+                  "display": "[F32.89] Other specified depressive episodes"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.9",
+                  "display": "[F32.9] Major depressive disorder, single episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.0",
+                  "display": "[F33.0] Major depressive disorder, recurrent, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.1",
+                  "display": "[F33.1] Major depressive disorder, recurrent, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.2",
+                  "display": "[F33.2] Major depressive disorder, recurrent severe without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.3",
+                  "display": "[F33.3] Major depressive disorder, recurrent, severe with psychotic symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.40",
+                  "display": "[F33.40] Major depressive disorder, recurrent, in remission, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.41",
+                  "display": "[F33.41] Major depressive disorder, recurrent, in partial remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.42",
+                  "display": "[F33.42] Major depressive disorder, recurrent, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.8",
+                  "display": "[F33.8] Other recurrent depressive disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.9",
+                  "display": "[F33.9] Major depressive disorder, recurrent, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.0",
+                  "display": "[F34.0] Cyclothymic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.1",
+                  "display": "[F34.1] Dysthymic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.8",
+                  "display": "[F34.8] Other persistent mood [affective] disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.81",
+                  "display": "[F34.81] Disruptive mood dysregulation disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.89",
+                  "display": "[F34.89] Other specified persistent mood disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.9",
+                  "display": "[F34.9] Persistent mood [affective] disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F39",
+                  "display": "[F39] Unspecified mood [affective] disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F42",
+                  "display": "[F42] Obsessive-compulsive disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F42.2",
+                  "display": "[F42.2] Mixed obsessional thoughts and acts"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F42.3",
+                  "display": "[F42.3] Hoarding disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F42.4",
+                  "display": "[F42.4] Excoriation (skin-picking) disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F42.8",
+                  "display": "[F42.8] Other obsessive-compulsive disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F42.9",
+                  "display": "[F42.9] Obsessive-compulsive disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.0",
+                  "display": "[F43.0] Acute stress reaction"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.10",
+                  "display": "[F43.10] Post-traumatic stress disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.11",
+                  "display": "[F43.11] Post-traumatic stress disorder, acute"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.12",
+                  "display": "[F43.12] Post-traumatic stress disorder, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.20",
+                  "display": "[F43.20] Adjustment disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.21",
+                  "display": "[F43.21] Adjustment disorder with depressed mood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.22",
+                  "display": "[F43.22] Adjustment disorder with anxiety"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.23",
+                  "display": "[F43.23] Adjustment disorder with mixed anxiety and depressed mood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.24",
+                  "display": "[F43.24] Adjustment disorder with disturbance of conduct"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.25",
+                  "display": "[F43.25] Adjustment disorder with mixed disturbance of emotions and conduct"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.29",
+                  "display": "[F43.29] Adjustment disorder with other symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.8",
+                  "display": "[F43.8] Other reactions to severe stress"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.9",
+                  "display": "[F43.9] Reaction to severe stress, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F44.89",
+                  "display": "[F44.89] Other dissociative and conversion disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F53",
+                  "display": "[F53] Puerperal psychosis"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.0",
+                  "display": "[F60.0] Paranoid personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.1",
+                  "display": "[F60.1] Schizoid personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.2",
+                  "display": "[F60.2] Antisocial personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.3",
+                  "display": "[F60.3] Borderline personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.4",
+                  "display": "[F60.4] Histrionic personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.5",
+                  "display": "[F60.5] Obsessive-compulsive personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.6",
+                  "display": "[F60.6] Avoidant personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.7",
+                  "display": "[F60.7] Dependent personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.81",
+                  "display": "[F60.81] Narcissistic personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.89",
+                  "display": "[F60.89] Other specific personality disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.9",
+                  "display": "[F60.9] Personality disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F63.0",
+                  "display": "[F63.0] Pathological gambling"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F63.1",
+                  "display": "[F63.1] Pyromania"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F63.2",
+                  "display": "[F63.2] Kleptomania"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F63.3",
+                  "display": "[F63.3] Trichotillomania"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F63.81",
+                  "display": "[F63.81] Intermittent explosive disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F63.89",
+                  "display": "[F63.89] Other impulse disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F63.9",
+                  "display": "[F63.9] Impulse disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.10",
+                  "display": "[F68.10] Factitious disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.11",
+                  "display": "[F68.11] Factitious disorder with predominantly psychological signs and symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.12",
+                  "display": "[F68.12] Factitious disorder with predominantly physical signs and symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.13",
+                  "display": "[F68.13] Factitious disorder with combined psychological and physical signs and symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.8",
+                  "display": "[F68.8] Other specified disorders of adult personality and behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.0",
+                  "display": "[F84.0] Autistic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.2",
+                  "display": "[F84.2] Rett's syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.3",
+                  "display": "[F84.3] Other childhood disintegrative disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.5",
+                  "display": "[F84.5] Asperger's syndrome"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.8",
+                  "display": "[F84.8] Other pervasive developmental disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.9",
+                  "display": "[F84.9] Pervasive developmental disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F90.0",
+                  "display": "[F90.0] Attention-deficit hyperactivity disorder, predominantly inattentive type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F90.1",
+                  "display": "[F90.1] Attention-deficit hyperactivity disorder, predominantly hyperactive type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F90.2",
+                  "display": "[F90.2] Attention-deficit hyperactivity disorder, combined type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F90.8",
+                  "display": "[F90.8] Attention-deficit hyperactivity disorder, other type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F90.9",
+                  "display": "[F90.9] Attention-deficit hyperactivity disorder, unspecified type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F91.0",
+                  "display": "[F91.0] Conduct disorder confined to family context"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F91.1",
+                  "display": "[F91.1] Conduct disorder, childhood-onset type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F91.2",
+                  "display": "[F91.2] Conduct disorder, adolescent-onset type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F91.3",
+                  "display": "[F91.3] Oppositional defiant disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F91.8",
+                  "display": "[F91.8] Other conduct disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F91.9",
+                  "display": "[F91.9] Conduct disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F93.0",
+                  "display": "[F93.0] Separation anxiety disorder of childhood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F93.8",
+                  "display": "[F93.8] Other childhood emotional disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F93.9",
+                  "display": "[F93.9] Childhood emotional disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F94.0",
+                  "display": "[F94.0] Selective mutism"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F94.1",
+                  "display": "[F94.1] Reactive attachment disorder of childhood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F94.2",
+                  "display": "[F94.2] Disinhibited attachment disorder of childhood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F94.8",
+                  "display": "[F94.8] Other childhood disorders of social functioning"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F94.9",
+                  "display": "[F94.9] Childhood disorder of social functioning, unspecified"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1179"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1256",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "19307"
+                },
+                {
+                  "code": "19306"
+                },
+                {
+                  "code": "19305"
+                },
+                {
+                  "code": "19303"
+                },
+                {
+                  "code": "19304"
+                },
+                {
+                  "code": "19240"
+                },
+                {
+                  "code": "19220"
+                },
+                {
+                  "code": "19200"
+                },
+                {
+                  "code": "19180"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "85.47"
+                },
+                {
+                  "code": "85.43"
+                },
+                {
+                  "code": "85.45"
+                },
+                {
+                  "code": "85.41"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1256"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1453",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "109006",
+                  "display": "Anxiety disorder of childhood OR adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "162004",
+                  "display": "Severe manic bipolar I disorder without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "281004",
+                  "display": "Dementia associated with alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "600009",
+                  "display": "Pyromania (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "899001",
+                  "display": "Axis I diagnosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1145003",
+                  "display": "Developmental speech disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1196001",
+                  "display": "Chronic bipolar II disorder, most recent episode major depressive (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1376001",
+                  "display": "Obsessive compulsive personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1380006",
+                  "display": "Agoraphobia without history of panic disorder with limited symptom attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1383008",
+                  "display": "Hallucinogen mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1499003",
+                  "display": "Bipolar I disorder, single manic episode with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1686006",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1816003",
+                  "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND mild panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1855002",
+                  "display": "Developmental academic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "1973000",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic-induced psychotic disorder with delusions (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "2312009",
+                  "display": "Reactive attachment disorder of infancy OR early childhood, inhibited type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "2403008",
+                  "display": "Psychoactive substance dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "2618002",
+                  "display": "Chronic recurrent major depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "3158007",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND panic attacks in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "3503000",
+                  "display": "Gender identity disorder of adolescence, previously asexual (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "3914008",
+                  "display": "Mental disorder in childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "4306003",
+                  "display": "Cluster B personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "4926007",
+                  "display": "Schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "4932002",
+                  "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND mild panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5095008",
+                  "display": "Gender identity disorder of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5158005",
+                  "display": "Gilles de la Tourette's syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5444000",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic intoxication delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5464005",
+                  "display": "Brief reactive psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5507002",
+                  "display": "Stereotypy habit disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5509004",
+                  "display": "Panic disorder with agoraphobia AND severe panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5510009",
+                  "display": "Organic delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5703000",
+                  "display": "Bipolar disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "6348008",
+                  "display": "Cocaine-induced psychotic disorder with hallucinations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7025000",
+                  "display": "Subchronic undifferentiated schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7052005",
+                  "display": "Alcohol hallucinosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7200002",
+                  "display": "Alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7291006",
+                  "display": "Reactive attachment disorder of infancy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7397008",
+                  "display": "Aggressor identification syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7461003",
+                  "display": "Attention deficit hyperactivity disorder, predominantly hyperactive impulsive type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7794004",
+                  "display": "Chronic motor tic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "8185002",
+                  "display": "Panic disorder with agoraphobia AND moderate panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "8635005",
+                  "display": "Alcohol withdrawal delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "8837000",
+                  "display": "Amphetamine delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "9167000",
+                  "display": "Moderate mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "9340000",
+                  "display": "Bipolar I disorder, single manic episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "9674006",
+                  "display": "Adjustment disorder with withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "9760005",
+                  "display": "Deferred diagnosis on Axis I (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10278007",
+                  "display": "Factitious purpura (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10327003",
+                  "display": "Cocaine-induced mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "10586006",
+                  "display": "Occupation-related stress disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "11061003",
+                  "display": "Psychoactive substance use disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "11806006",
+                  "display": "Separation anxiety disorder of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "11941006",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND panic attacks in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "12939007",
+                  "display": "Chronic disorganized schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "13313007",
+                  "display": "Mild bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "13438001",
+                  "display": "Overanxious disorder of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "13601005",
+                  "display": "Paranoid personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "13670005",
+                  "display": "Gender identity disorder of adulthood, previously heterosexual (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "13746004",
+                  "display": "Bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14070001",
+                  "display": "Multi-infarct dementia with depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14077003",
+                  "display": "Pica (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14183003",
+                  "display": "Chronic major depressive disorder, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14291003",
+                  "display": "Subchronic disorganized schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14784000",
+                  "display": "Opioid-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15193003",
+                  "display": "Severe recurrent major depression with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15277004",
+                  "display": "Hallucinogen-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15945005",
+                  "display": "Psychogenic polydipsia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15977008",
+                  "display": "Adjustment disorder with academic inhibition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16295005",
+                  "display": "Bipolar II disorder, most recent episode major depressive (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16506000",
+                  "display": "Mixed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16805009",
+                  "display": "Cluster A personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16966009",
+                  "display": "Factitious hypoglycemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16990005",
+                  "display": "Subchronic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "17155009",
+                  "display": "Trichotillomania (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "17226007",
+                  "display": "Adjustment disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "17262008",
+                  "display": "Non-alcoholic Korsakoff's psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "17496003",
+                  "display": "Organic anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "17782008",
+                  "display": "Bipolar I disorder, most recent episode manic with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18003009",
+                  "display": "Gender identity disorder of adulthood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18085000",
+                  "display": "Compulsive gambling (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18260003",
+                  "display": "Postpartum psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18478005",
+                  "display": "Adjustment disorder with physical complaints (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18653004",
+                  "display": "Alcohol intoxication delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18689007",
+                  "display": "Inhalant intoxication delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18818009",
+                  "display": "Moderate recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19445006",
+                  "display": "Opioid-induced psychotic disorder with hallucinations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19766004",
+                  "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND severe panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "20010003",
+                  "display": "Borderline personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "20385005",
+                  "display": "Opioid-induced psychotic disorder with delusions (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "20876004",
+                  "display": "Inhalant-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "21000000",
+                  "display": "Idiosyncratic intoxication (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "21586000",
+                  "display": "Munchausen's syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "21634003",
+                  "display": "Borjeson-Forssman-Lehmann syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "21897009",
+                  "display": "Generalized anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "21900002",
+                  "display": "Bipolar I disorder, most recent episode depressed with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22121000",
+                  "display": "Depressed bipolar I disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22230001",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND panic attacks in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22407005",
+                  "display": "Bipolar II disorder, most recent episode major depressive with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22419002",
+                  "display": "Mood disorder with mixed features due to general medical condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "23148009",
+                  "display": "Undifferentiated attention deficit disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "23560001",
+                  "display": "Asperger's disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "23645006",
+                  "display": "Organic mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "24121004",
+                  "display": "Insomnia disorder related to another mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "24125008",
+                  "display": "Mental disorder in infancy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "24315006",
+                  "display": "Factitious disorder with combined physical AND psychological symptoms (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "24781009",
+                  "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND panic attacks in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "25501002",
+                  "display": "Social phobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "25766007",
+                  "display": "Mixed receptive-expressive language disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26025008",
+                  "display": "Residual schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26203008",
+                  "display": "Severe depressed bipolar I disorder with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26453000",
+                  "display": "Mental disorder in adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26472000",
+                  "display": "Paraphrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26516009",
+                  "display": "Severe mood disorder with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26530004",
+                  "display": "Severe bipolar disorder with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26665006",
+                  "display": "Antisocial personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26714005",
+                  "display": "Cannabis-induced psychotic disorder with hallucinations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "27387000",
+                  "display": "Subchronic disorganized schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "27544004",
+                  "display": "Developmental coordination disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "27956007",
+                  "display": "Cocaine intoxication (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28357009",
+                  "display": "Transitory postpartum mood disturbance (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28368009",
+                  "display": "Psychoactive substance-induced organic hallucinosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28475009",
+                  "display": "Severe recurrent major depression with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28663008",
+                  "display": "Severe manic bipolar I disorder with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28676002",
+                  "display": "Mood disorder with manic features due to general medical condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28857002",
+                  "display": "Reactive attachment disorder of infancy OR early childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28864000",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic-induced mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28884001",
+                  "display": "Moderate bipolar I disorder, single manic episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29212009",
+                  "display": "Alcohol-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29599000",
+                  "display": "Chronic undifferentiated schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29733004",
+                  "display": "Opioid-induced mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29929003",
+                  "display": "Bipolar I disorder, most recent episode depressed with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30059008",
+                  "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND moderate panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30310000",
+                  "display": "Nicotine-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30336007",
+                  "display": "Chronic residual schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30491001",
+                  "display": "Cocaine delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30509009",
+                  "display": "Gender identity disorder of adolescence, previously homosexual (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30687003",
+                  "display": "Bipolar II disorder, most recent episode major depressive with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30935000",
+                  "display": "Manic bipolar I disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31027006",
+                  "display": "Schizotypal personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31177006",
+                  "display": "Attention deficit hyperactivity disorder, combined type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31358003",
+                  "display": "Coprophilia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31373002",
+                  "display": "Disorganized schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31446002",
+                  "display": "Bipolar I disorder, most recent episode hypomanic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31611000",
+                  "display": "Multiple personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31648009",
+                  "display": "Unaggressive type unsocialized behavior disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31658008",
+                  "display": "Chronic paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31715000",
+                  "display": "Phencyclidine delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31781004",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND mild panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "32009006",
+                  "display": "Hallucinogen hallucinosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "32174002",
+                  "display": "Voice disorder due to psychosexual conflict (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "32358001",
+                  "display": "Amphetamine delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "32388005",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND moderate panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "32552001",
+                  "display": "Psychoactive substance-induced organic delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "32721004",
+                  "display": "Bulimia nervosa, purging type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "32875003",
+                  "display": "Inhalant-induced persisting dementia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "32880007",
+                  "display": "Adjustment disorder with work inhibition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33078009",
+                  "display": "Severe recurrent major depression with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33135002",
+                  "display": "Recurrent major depression in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33323008",
+                  "display": "Somatic delusion disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33380008",
+                  "display": "Severe manic bipolar I disorder with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33449004",
+                  "display": "Personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33693007",
+                  "display": "Compensation neurosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33871004",
+                  "display": "Phencyclidine-induced psychotic disorder with hallucinations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "34116005",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND severe panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "34315001",
+                  "display": "Bipolar II disorder, most recent episode major depressive with melancholic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "34938008",
+                  "display": "Alcohol-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35218008",
+                  "display": "Chronic disorganized schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35252006",
+                  "display": "Disorganized schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35253001",
+                  "display": "Attention deficit hyperactivity disorder, predominantly inattentive type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35481005",
+                  "display": "Mixed bipolar I disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35489007",
+                  "display": "Depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35607004",
+                  "display": "Panic disorder with agoraphobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35827000",
+                  "display": "Recurrent conversion disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35919005",
+                  "display": "Pervasive developmental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36217008",
+                  "display": "Organic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36474008",
+                  "display": "Severe recurrent major depression without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36583000",
+                  "display": "Mixed bipolar I disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36622002",
+                  "display": "Mild mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "37331004",
+                  "display": "Psychoactive substance-induced organic mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "37739004",
+                  "display": "Mood disorder due to a general medical condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "37746008",
+                  "display": "Avoidant personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "37868008",
+                  "display": "Anxiety disorder of adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "37872007",
+                  "display": "Avoidant disorder of childhood OR adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "37941009",
+                  "display": "Rumination disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38295006",
+                  "display": "Involutional paraphrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38328002",
+                  "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND panic attacks in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38368003",
+                  "display": "Schizoaffective disorder, bipolar type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38547003",
+                  "display": "Mood disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38694004",
+                  "display": "Recurrent major depressive disorder with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39003006",
+                  "display": "Psychoactive substance-induced organic delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39465007",
+                  "display": "Emotional deprivation syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39610001",
+                  "display": "Undifferentiated schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39807006",
+                  "display": "Cannabis intoxication delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39809009",
+                  "display": "Recurrent major depressive disorder with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39951001",
+                  "display": "Cannabis-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40379007",
+                  "display": "Mild recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40568001",
+                  "display": "Recurrent brief depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40571009",
+                  "display": "Hallucinogen intoxication delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40673001",
+                  "display": "Post-encephalitic syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40987004",
+                  "display": "Intermittent explosive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41021005",
+                  "display": "Psychologic dyspareunia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41083005",
+                  "display": "Alcohol-induced sleep disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41526007",
+                  "display": "Reactive attachment disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41552001",
+                  "display": "Mild bipolar I disorder, single manic episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41836007",
+                  "display": "Bipolar disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42344001",
+                  "display": "Alcohol-induced psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42594001",
+                  "display": "Organic mood disorder of depressed type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42868002",
+                  "display": "Subchronic catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43150009",
+                  "display": "Panic disorder without agoraphobia with severe panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43497001",
+                  "display": "Amphetamine-induced mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43568002",
+                  "display": "Bipolar II disorder, most recent episode major depressive with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43614003",
+                  "display": "Autistic disorder of childhood onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "44031002",
+                  "display": "Postseizure confusion (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "44124003",
+                  "display": "Reactive attachment disorder of early childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "44966003",
+                  "display": "Passive aggressive personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "45479006",
+                  "display": "Manic bipolar I disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "45677003",
+                  "display": "Developmental expressive writing disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "45912004",
+                  "display": "Organic hallucinosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "46206005",
+                  "display": "Mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "46244001",
+                  "display": "Recurrent major depression in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "46721000",
+                  "display": "Psychoactive substance-induced organic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "46975003",
+                  "display": "Cocaine-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "47372000",
+                  "display": "Adjustment disorder with anxious mood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "47447001",
+                  "display": "Grandiose delusion disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "47505003",
+                  "display": "Posttraumatic stress disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "47664006",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic-induced psychotic disorder with hallucinations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "47916000",
+                  "display": "Developmental arithmetic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "48500005",
+                  "display": "Delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "48589009",
+                  "display": "Minor depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "49271002",
+                  "display": "Deferred diagnosis on Axis II (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "49468007",
+                  "display": "Depressed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "49481000",
+                  "display": "Postseizure delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "49512000",
+                  "display": "Depressed bipolar I disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "49564006",
+                  "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND moderate panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50026000",
+                  "display": "Psychoactive substance-induced organic anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50320000",
+                  "display": "Hallucinogen intoxication (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50705009",
+                  "display": "Factitious disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50722006",
+                  "display": "Phencyclidine delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50878001",
+                  "display": "Gender identity disorder of adulthood, previously asexual (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50933003",
+                  "display": "Hallucinogen delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50983008",
+                  "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND panic attacks in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "51133006",
+                  "display": "Residual schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "51443000",
+                  "display": "Amphetamine-induced psychotic disorder with hallucinations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "51493001",
+                  "display": "Cocaine-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "51637008",
+                  "display": "Chronic bipolar I disorder, most recent episode depressed (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "51771007",
+                  "display": "Postviral fatigue syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "52702003",
+                  "display": "Chronic fatigue syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "52824009",
+                  "display": "Developmental reading disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "52866005",
+                  "display": "Opioid intoxication delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "52910006",
+                  "display": "Anxiety disorder due to a general medical condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "52954000",
+                  "display": "Schizoid personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "53050002",
+                  "display": "Hallucinogen-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "53467004",
+                  "display": "Anxiety disorder of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "53607008",
+                  "display": "Depressed bipolar I disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "53936005",
+                  "display": "Alcohol-induced mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "53956006",
+                  "display": "Panic disorder without agoraphobia with panic attacks in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "54319003",
+                  "display": "Disruptive behavior disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "54417002",
+                  "display": "Adult gender identity disorder, sexually attracted to females (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "54587008",
+                  "display": "Simple phobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "54761006",
+                  "display": "Severe depressed bipolar I disorder with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "55341008",
+                  "display": "Histrionic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "55516002",
+                  "display": "Bipolar I disorder, most recent episode manic with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "55668003",
+                  "display": "Adjustment disorder with mixed emotional features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "55967005",
+                  "display": "Phencyclidine-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "56194001",
+                  "display": "Caffeine-induced sleep disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "56576003",
+                  "display": "Panic disorder without agoraphobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "56627002",
+                  "display": "Psychosexual disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "56641006",
+                  "display": "Axis II diagnosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "56882008",
+                  "display": "Anorexia nervosa (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "57194009",
+                  "display": "Adjustment disorder with depressed mood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "57588009",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic-induced sleep disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "57715001",
+                  "display": "Gender identity disorder of adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "58214004",
+                  "display": "Schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "58329000",
+                  "display": "Organic mood disorder of manic type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "58535001",
+                  "display": "Physical AND emotional exhaustion state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "58647003",
+                  "display": "Severe mood disorder with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "58703003",
+                  "display": "Postpartum depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "59216005",
+                  "display": "Adult gender identity disorder, sexually attracted to males (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "59617007",
+                  "display": "Severe depressed bipolar I disorder with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "59645001",
+                  "display": "Bulimia nervosa, nonpurging type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "59651006",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic-induced persisting dementia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "59923000",
+                  "display": "Panic disorder with agoraphobia AND panic attacks in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "60123008",
+                  "display": "Delusional disorder, mixed type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61104008",
+                  "display": "Inhalant-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61144001",
+                  "display": "Alcohol-induced psychotic disorder with delusions (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61157009",
+                  "display": "Combat fatigue (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61180001",
+                  "display": "Adult gender identity disorder, sexually attracted to neither sex (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61212007",
+                  "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND severe panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61403008",
+                  "display": "Severe depressed bipolar I disorder without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61569007",
+                  "display": "Agoraphobia without history of panic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61831009",
+                  "display": "Induced psychotic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "62239001",
+                  "display": "Parkinson-dementia complex of Guam (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "62351001",
+                  "display": "Generalized social phobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63181006",
+                  "display": "Paranoid schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63204009",
+                  "display": "Bouffée délirante (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63249007",
+                  "display": "Manic bipolar I disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63393005",
+                  "display": "Anorexia nervosa, binge-eating purging type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63649001",
+                  "display": "Cannabis delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63701002",
+                  "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND mild panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63909006",
+                  "display": "Panic disorder with agoraphobia AND panic attacks in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63983005",
+                  "display": "Inhalant-induced psychotic disorder with hallucinations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "64060000",
+                  "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND panic attacks in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "64165008",
+                  "display": "Avoidant disorder of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "64731001",
+                  "display": "Severe mixed bipolar I disorder with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "64905009",
+                  "display": "Paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "65064003",
+                  "display": "Panic disorder without agoraphobia with moderate panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66344007",
+                  "display": "Recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66347000",
+                  "display": "Impulse control disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66381006",
+                  "display": "Adjustment disorder with mixed disturbance of emotions AND conduct (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66590003",
+                  "display": "Alcohol dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66631006",
+                  "display": "Moderate depressed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66936004",
+                  "display": "Identity disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "67123006",
+                  "display": "Adult gender identity disorder, sexually attracted to both sexes (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "67195008",
+                  "display": "Acute stress disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68019004",
+                  "display": "Recurrent major depression in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68569003",
+                  "display": "Manic bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68618008",
+                  "display": "Rett's disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68890003",
+                  "display": "Schizoaffective disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68963006",
+                  "display": "Gender identity disorder of adolescence, previously heterosexual (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68995007",
+                  "display": "Chronic catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "69322001",
+                  "display": "Psychotic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "69361009",
+                  "display": "Kleptomania (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "69479009",
+                  "display": "Anxiety hyperventilation (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "69482004",
+                  "display": "Korsakoff's psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "70328006",
+                  "display": "Cocaine delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "70655008",
+                  "display": "Caffeine-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "70691001",
+                  "display": "Agoraphobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "70814008",
+                  "display": "Subchronic residual schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "70932007",
+                  "display": "Amphetamine-induced sexual dysfunction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71103003",
+                  "display": "Chronic residual schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71328000",
+                  "display": "Opioid-induced sexual dysfunction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71336009",
+                  "display": "Recurrent major depressive disorder with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71787009",
+                  "display": "Psychologic vaginismus (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71959007",
+                  "display": "Elective mutism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71961003",
+                  "display": "Childhood disintegrative disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71984005",
+                  "display": "Mild manic bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "72366004",
+                  "display": "Eating disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "72861004",
+                  "display": "Panic disorder without agoraphobia with mild panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "73097000",
+                  "display": "Alcohol amnestic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "73462009",
+                  "display": "Chronic vocal tic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "74010007",
+                  "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND panic attacks in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "74266001",
+                  "display": "Mood disorder in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "74686005",
+                  "display": "Mild depressed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "74732009",
+                  "display": "Mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "74934004",
+                  "display": "Psychoactive substance-induced organic withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "75122001",
+                  "display": "Inhalant-induced psychotic disorder with delusions (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "75360000",
+                  "display": "Bipolar I disorder, single manic episode, in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "75752004",
+                  "display": "Bipolar I disorder, most recent episode depressed with melancholic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "75837004",
+                  "display": "Mood disorder with depressive features due to general medical condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "76105009",
+                  "display": "Cyclothymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "76236006",
+                  "display": "Atypical tic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "76566000",
+                  "display": "Subchronic residual schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "76812003",
+                  "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND panic attacks in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "76868007",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND mild panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77355000",
+                  "display": "Cannabis-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77383003",
+                  "display": "Marfanoid mental retardation syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77475008",
+                  "display": "Jealous delusion disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77486005",
+                  "display": "Mood disorder with major depressive-like episode due to general medical condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77675002",
+                  "display": "Anorexia nervosa, restricting type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77815007",
+                  "display": "Gender identity disorder of adulthood, previously homosexual (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78004001",
+                  "display": "Bulimia nervosa (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78269000",
+                  "display": "Bipolar I disorder, single manic episode, in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78358001",
+                  "display": "Amphetamine withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78640000",
+                  "display": "Severe manic bipolar I disorder with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78667006",
+                  "display": "Dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79204003",
+                  "display": "Chronic undifferentiated schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79524000",
+                  "display": "Ecouteurism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79578000",
+                  "display": "Alcohol paranoia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79584002",
+                  "display": "Moderate bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79842004",
+                  "display": "Stuporous depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79866005",
+                  "display": "Subchronic paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "80711002",
+                  "display": "Narcissistic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "80868005",
+                  "display": "Cocaine withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "81463002",
+                  "display": "Bestiality (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82096005",
+                  "display": "Aggressive type unsocialized behavior disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82218004",
+                  "display": "Postoperative depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82339009",
+                  "display": "Amphetamine-induced anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82415003",
+                  "display": "Agoraphobia without history of panic disorder without limited symptom attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82494000",
+                  "display": "Panic disorder without agoraphobia with panic attacks in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82738004",
+                  "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND moderate panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82998009",
+                  "display": "Moderate manic bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83168008",
+                  "display": "Psychoactive substance-induced organic amnestic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83225003",
+                  "display": "Bipolar II disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83253003",
+                  "display": "Shyness disorder of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83367009",
+                  "display": "Amphetamine-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83458005",
+                  "display": "Agitated depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83501007",
+                  "display": "Organic mood disorder of mixed type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83631006",
+                  "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND severe panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83746006",
+                  "display": "Chronic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83890006",
+                  "display": "Cluster C personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "84466009",
+                  "display": "Dependent personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "84760002",
+                  "display": "Schizoaffective disorder, depressive type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "84788008",
+                  "display": "Menopausal depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "84984002",
+                  "display": "Adjustment disorder with disturbance of conduct (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85061001",
+                  "display": "Separation anxiety disorder of childhood, early onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85248005",
+                  "display": "Bipolar disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85561006",
+                  "display": "Uncomplicated alcohol withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85762002",
+                  "display": "Voice disorder due to transsexualism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85821003",
+                  "display": "Acute non-psychotic brain syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85861002",
+                  "display": "Subchronic undifferentiated schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87132004",
+                  "display": "Opioid withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87203005",
+                  "display": "Bipolar I disorder, most recent episode depressed with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87414006",
+                  "display": "Reactive depression (situational) (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87798009",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND moderate panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87950005",
+                  "display": "Bipolar I disorder, single manic episode with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87991007",
+                  "display": "Gender identity disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "88845000",
+                  "display": "Explosive type organic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "88939009",
+                  "display": "Severe mood disorder without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "88975006",
+                  "display": "Schizophreniform disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "89415002",
+                  "display": "Hypersomnia disorder related to another mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "89451009",
+                  "display": "Inhalant-induced mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "89618007",
+                  "display": "Persecutory delusion disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "89948007",
+                  "display": "Panic disorder with agoraphobia AND mild panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "90755006",
+                  "display": "Nicotine withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "90790003",
+                  "display": "Avoidant disorder of adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "93461009",
+                  "display": "Gender dysphoria (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "95635002",
+                  "display": "Caffeine withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "95637005",
+                  "display": "Munchausen syndrome by proxy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "106013002",
+                  "display": "Mental disorder of infancy, childhood or adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "106014008",
+                  "display": "Organic mental disorder of unknown etiology (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "106015009",
+                  "display": "Mental disorder AND/OR culture bound syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "109805003",
+                  "display": "Factitious cheilitis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111475002",
+                  "display": "Neurosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111476001",
+                  "display": "Mental disorder usually first evident in infancy, childhood AND/OR adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111477005",
+                  "display": "Reactive attachment disorder of infancy OR early childhood, disinhibited type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111479008",
+                  "display": "Organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111480006",
+                  "display": "Psychoactive substance-induced organic dementia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111482003",
+                  "display": "Subchronic schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111483008",
+                  "display": "Catatonic schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111484002",
+                  "display": "Undifferentiated schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111485001",
+                  "display": "Mixed bipolar I disorder in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111487009",
+                  "display": "Dream anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111490003",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND severe panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111491004",
+                  "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND panic attacks in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "126943008",
+                  "display": "Separation anxiety (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "128293007",
+                  "display": "Chronic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "129104009",
+                  "display": "Developmental mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "129604005",
+                  "display": "Delusion of heart disease syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "162313000",
+                  "display": "Morbid jealousy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "162702000",
+                  "display": "On examination - mentally confused (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "162722001",
+                  "display": "On examination - depressed (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "187921002",
+                  "display": "Developmental receptive language disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191447007",
+                  "display": "Organic psychotic condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191455000",
+                  "display": "Presenile dementia with depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191457008",
+                  "display": "Senile dementia with depressive or paranoid features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191458003",
+                  "display": "Senile dementia with paranoia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191459006",
+                  "display": "Senile dementia with depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191466007",
+                  "display": "Arteriosclerotic dementia with depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191471000",
+                  "display": "Korsakov's alcoholic psychosis with peripheral neuritis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191475009",
+                  "display": "Chronic alcoholic brain syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191476005",
+                  "display": "Alcohol withdrawal hallucinosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191477001",
+                  "display": "Pathological alcohol intoxication (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191478006",
+                  "display": "Alcoholic paranoia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191480000",
+                  "display": "Alcohol withdrawal syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191483003",
+                  "display": "Drug-induced psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191484009",
+                  "display": "Drug-induced paranoia or hallucinatory states (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191485005",
+                  "display": "Drug-induced paranoid state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191486006",
+                  "display": "Drug-induced hallucinosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191492000",
+                  "display": "Drug-induced delirium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191493005",
+                  "display": "Drug-induced dementia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191494004",
+                  "display": "Drug-induced amnestic syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191495003",
+                  "display": "Drug-induced depressive state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191496002",
+                  "display": "Drug-induced personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191499009",
+                  "display": "Transient organic psychoses (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191501001",
+                  "display": "Acute confusional state, post-traumatic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191508007",
+                  "display": "Subacute confusional state, post-traumatic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191526005",
+                  "display": "Schizophrenic disorders (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191527001",
+                  "display": "Simple schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191530008",
+                  "display": "Acute exacerbation of subchronic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191531007",
+                  "display": "Acute exacerbation of chronic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191536002",
+                  "display": "Subchronic hebephrenic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191537006",
+                  "display": "Chronic hebephrenic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191538001",
+                  "display": "Acute exacerbation of subchronic hebephrenic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191539009",
+                  "display": "Acute exacerbation of chronic hebephrenic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191540006",
+                  "display": "Hebephrenic schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191542003",
+                  "display": "Catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191547009",
+                  "display": "Acute exacerbation of subchronic catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191548004",
+                  "display": "Acute exacerbation of chronic catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191554003",
+                  "display": "Acute exacerbation of subchronic paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191555002",
+                  "display": "Acute exacerbation of chronic paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191559008",
+                  "display": "Latent schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191564007",
+                  "display": "Acute exacerbation of chronic latent schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191567000",
+                  "display": "Schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191569002",
+                  "display": "Subchronic schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191570001",
+                  "display": "Chronic schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191571002",
+                  "display": "Acute exacerbation of subchronic schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191572009",
+                  "display": "Acute exacerbation of chronic schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191574005",
+                  "display": "Schizoaffective schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191577003",
+                  "display": "Cenesthopathic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191590005",
+                  "display": "Recurrent manic episodes (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191592002",
+                  "display": "Recurrent manic episodes, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191593007",
+                  "display": "Recurrent manic episodes, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191595000",
+                  "display": "Recurrent manic episodes, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191597008",
+                  "display": "Recurrent manic episodes, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191610000",
+                  "display": "Recurrent major depressive episodes, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191611001",
+                  "display": "Recurrent major depressive episodes, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191613003",
+                  "display": "Recurrent major depressive episodes, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191615005",
+                  "display": "Recurrent major depressive episodes, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191616006",
+                  "display": "Recurrent depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191618007",
+                  "display": "Bipolar affective disorder, current episode manic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191620005",
+                  "display": "Bipolar affective disorder, currently manic, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191621009",
+                  "display": "Bipolar affective disorder, currently manic, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191623007",
+                  "display": "Bipolar affective disorder, currently manic, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191625000",
+                  "display": "Bipolar affective disorder, currently manic, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191627008",
+                  "display": "Bipolar affective disorder, current episode depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191629006",
+                  "display": "Bipolar affective disorder, currently depressed, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191630001",
+                  "display": "Bipolar affective disorder, currently depressed, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191632009",
+                  "display": "Bipolar affective disorder, currently depressed, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191634005",
+                  "display": "Bipolar affective disorder, currently depressed, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191636007",
+                  "display": "Mixed bipolar affective disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191659001",
+                  "display": "Atypical depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191667009",
+                  "display": "Paranoid disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191668004",
+                  "display": "Simple paranoid state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191670008",
+                  "display": "Shared paranoid disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191672000",
+                  "display": "Paranoia querulans (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191676002",
+                  "display": "Reactive depressive psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191678001",
+                  "display": "Reactive confusion (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191680007",
+                  "display": "Psychogenic paranoid psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191687005",
+                  "display": "Psychosis with origin in childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191689008",
+                  "display": "Active infantile autism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191692007",
+                  "display": "Active disintegrative psychoses (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191693002",
+                  "display": "Residual disintegrative psychoses (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191696005",
+                  "display": "Atypical childhood psychoses (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191697001",
+                  "display": "Borderline psychosis of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191714002",
+                  "display": "Dissociative convulsions (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191722009",
+                  "display": "Agoraphobia with panic attacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191724005",
+                  "display": "Social phobia, fear of eating in public (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191725006",
+                  "display": "Social phobia, fear of public speaking (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191726007",
+                  "display": "Social phobia, fear of public washing (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191736004",
+                  "display": "Obsessive-compulsive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191737008",
+                  "display": "Compulsive neurosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191738003",
+                  "display": "Obsessional neurosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191753006",
+                  "display": "Hypomanic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191765005",
+                  "display": "Emotionally unstable personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191766006",
+                  "display": "Psychoinfantile personality (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191772006",
+                  "display": "Eccentric personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191773001",
+                  "display": "Immature personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191774007",
+                  "display": "Masochistic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191787001",
+                  "display": "Psychosexual identity disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191811004",
+                  "display": "Continuous chronic alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191812006",
+                  "display": "Episodic chronic alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191813001",
+                  "display": "Chronic alcoholism in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191966002",
+                  "display": "Psychogenic pruritus (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192014006",
+                  "display": "Psychogenic rumination (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192037000",
+                  "display": "Acute panic state due to acute stress reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192038005",
+                  "display": "Acute fugue state due to acute stress reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192039002",
+                  "display": "Acute stupor state due to acute stress reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192041001",
+                  "display": "Acute situational disturbance (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192042008",
+                  "display": "Acute post-trauma stress state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192044009",
+                  "display": "Stress reaction causing mixed disturbance of emotion and conduct (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192046006",
+                  "display": "Brief depressive adjustment reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192049004",
+                  "display": "Prolonged depressive adjustment reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192051000",
+                  "display": "Adolescent emancipation disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192052007",
+                  "display": "Early adult emancipation disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192054008",
+                  "display": "Culture shock (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192056005",
+                  "display": "Adjustment reaction with aggression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192057001",
+                  "display": "Adjustment reaction with antisocial behavior (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192058006",
+                  "display": "Adjustment reaction with destructiveness (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192061007",
+                  "display": "Concentration camp syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192063005",
+                  "display": "Adjustment reaction with physical symptoms (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192064004",
+                  "display": "Elective mutism due to an adjustment reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192069009",
+                  "display": "Specific nonpsychotic mental disorders following organic brain damage (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192072002",
+                  "display": "Organic memory impairment (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192073007",
+                  "display": "Change in personality (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192079006",
+                  "display": "Postviral depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192080009",
+                  "display": "Chronic depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192097003",
+                  "display": "Isolated explosive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192099000",
+                  "display": "Childhood disorder of conduct and emotion (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192108001",
+                  "display": "Disturbance of anxiety and fearfulness in childhood and adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192110004",
+                  "display": "Childhood and adolescent fearfulness disturbance (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192122001",
+                  "display": "Childhood or adolescent identity disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192127007",
+                  "display": "Child attention deficit disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192147004",
+                  "display": "Mixed disorder of psychological development (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192527004",
+                  "display": "Elaboration of physical symptoms for psychological reasons (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192562009",
+                  "display": "Disorder of psychological development (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192611004",
+                  "display": "Childhood phobic anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192616009",
+                  "display": "Childhood or adolescent disorder of social functioning (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192631000",
+                  "display": "Pica of infancy and childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "197480006",
+                  "display": "Anxiety disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "199257008",
+                  "display": "Mental disorders during pregnancy, childbirth and the puerperium (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "199259006",
+                  "display": "Mental disorder during pregnancy - baby delivered (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "199260001",
+                  "display": "Mental disorder in the puerperium - baby delivered (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "199261002",
+                  "display": "Mental disorder during pregnancy - baby not yet delivered (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "199262009",
+                  "display": "Mental disorder in the puerperium - baby delivered during previous episode of care (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229623002",
+                  "display": "Developmental dysfluency (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229699006",
+                  "display": "Immature articulatory praxis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229700007",
+                  "display": "Developmental motor speech disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229701006",
+                  "display": "Developmental articulatory dyspraxia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229715008",
+                  "display": "Deficits in attention motor control and perception (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229729009",
+                  "display": "Developmental language impairment (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229740001",
+                  "display": "Delayed pre-verbal development (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229744005",
+                  "display": "Developmental syntactic impairment (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "229745006",
+                  "display": "Developmental semantic impairment (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "230334008",
+                  "display": "Drug-induced tic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "230455006",
+                  "display": "Self-induced non-photosensitive epilepsy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231437006",
+                  "display": "Reactive psychoses (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231438001",
+                  "display": "Presbyophrenic psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231442003",
+                  "display": "Organic catatonic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231443008",
+                  "display": "Right hemispheric organic affective disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231444002",
+                  "display": "Organic bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231445001",
+                  "display": "Organic dissociative disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231446000",
+                  "display": "Organic emotionally labile disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231449007",
+                  "display": "Epileptic psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231450007",
+                  "display": "Psychosis associated with intensive care (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231451006",
+                  "display": "Drug-induced intensive care psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231452004",
+                  "display": "Limbic epilepsy personality syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231454003",
+                  "display": "Organic pseudopsychopathic personality (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231455002",
+                  "display": "Organic pseudoretarded personality (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231457005",
+                  "display": "Organic psychosyndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231467000",
+                  "display": "Absinthe addiction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231485007",
+                  "display": "Post-schizophrenic depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231487004",
+                  "display": "Persistent delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231489001",
+                  "display": "Acute transient psychotic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231494001",
+                  "display": "Mania (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231496004",
+                  "display": "Hypomania (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231500002",
+                  "display": "Masked depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231504006",
+                  "display": "Mixed anxiety and depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231516000",
+                  "display": "Cutaneous hypochondriasis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231520001",
+                  "display": "Behavioral syndrome associated with physiological disturbance and physical factors (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231521002",
+                  "display": "Weight fixation (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231522009",
+                  "display": "Atypical anorexia nervosa (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231523004",
+                  "display": "Atypical bulimia nervosa (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231524005",
+                  "display": "Interictal behavior disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231525006",
+                  "display": "Manipulative personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231526007",
+                  "display": "Fanatic personality (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231527003",
+                  "display": "Explosive personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231528008",
+                  "display": "Anxious personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231530005",
+                  "display": "Post-concussional personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231536004",
+                  "display": "Atypical autism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231537008",
+                  "display": "Developmental agnosia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231538003",
+                  "display": "Behavioral and emotional disorder with onset in childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231539006",
+                  "display": "Adolescent - emotional problem (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231542000",
+                  "display": "Depressive conduct disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "233690008",
+                  "display": "Factitious asthma (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "237351003",
+                  "display": "Mild postnatal psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238110009",
+                  "display": "Nutritional mental retardation (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238961003",
+                  "display": "Trichophobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238966008",
+                  "display": "Syphilophobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238967004",
+                  "display": "Psychogenic sensory disturbance of skin (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238972008",
+                  "display": "Cutaneous monosymptomatic delusional psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238973003",
+                  "display": "Delusions of parasitosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238974009",
+                  "display": "Delusions of infestation (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238975005",
+                  "display": "Delusion of foul odor (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238976006",
+                  "display": "Bromisodrophobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238977002",
+                  "display": "Delusional hyperhidrosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238978007",
+                  "display": "Hyperschemazia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "238979004",
+                  "display": "Hyposchemazia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "247803002",
+                  "display": "Seasonal affective disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "247804008",
+                  "display": "Schizophrenic prodrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "267320004",
+                  "display": "Pregnancy with mental disorders (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268612007",
+                  "display": "Senile and presenile organic psychotic conditions (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268617001",
+                  "display": "Acute schizophrenic episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268621008",
+                  "display": "Recurrent major depressive episodes (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268622001",
+                  "display": "Chronic paranoid psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268624000",
+                  "display": "Acute paranoid reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268633003",
+                  "display": "Introverted personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268634009",
+                  "display": "Psychoneurotic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268664001",
+                  "display": "Childhood emotional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268666004",
+                  "display": "Childhood and adolescent disturbance with sensitivity (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268667008",
+                  "display": "Childhood and adolescent disturbance with shyness (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268668003",
+                  "display": "Childhood and adolescent disturbance with introversion (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268669006",
+                  "display": "Childhood and adolescent disturbance with elective mutism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268673009",
+                  "display": "Developmental aphasia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268734000",
+                  "display": "Developmental expressive language disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "270901009",
+                  "display": "Schizoaffective disorder, mixed type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "270902002",
+                  "display": "Overeating associated with other psychological disturbances (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "270905000",
+                  "display": "Childhood disinhibited attachment disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "271428004",
+                  "display": "Schizoaffective disorder, manic type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "271952001",
+                  "display": "Stress and adjustment reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "274948002",
+                  "display": "Endogenous depression - recurrent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "274952002",
+                  "display": "Borderline schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "274953007",
+                  "display": "Acute polymorphic psychotic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "275474009",
+                  "display": "Psychogenic overeating (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "278506006",
+                  "display": "Involutional paranoid state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "278508007",
+                  "display": "Delusional dysmorphophobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "278852008",
+                  "display": "Paranoid-hallucinatory epileptic psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "278853003",
+                  "display": "Acute schizophrenia-like psychotic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "279611005",
+                  "display": "Shell shock (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "280032002",
+                  "display": "Developmental language disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "280375000",
+                  "display": "Psychological disorder associated with sexual development (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "280994000",
+                  "display": "Chronic confusional state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "286933003",
+                  "display": "Confusional state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "300706003",
+                  "display": "Endogenous depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "301643003",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic-induced persisting amnestic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "302507002",
+                  "display": "Sedative amnestic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "307417003",
+                  "display": "Cycloid psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "309279000",
+                  "display": "Caffeine-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "310495003",
+                  "display": "Mild depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "310496002",
+                  "display": "Moderate depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "310497006",
+                  "display": "Severe depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "311173003",
+                  "display": "Phencyclidine-related disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "312098001",
+                  "display": "Sedative, hypnotic AND/OR anxiolytic-related disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "312936002",
+                  "display": "Anxiolytic-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "313182004",
+                  "display": "Chronic post-traumatic stress disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "313224008",
+                  "display": "Dysmorphophobia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "313915006",
+                  "display": "Hypnotic-induced organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "317816007",
+                  "display": "Stockholm syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "318784009",
+                  "display": "Posttraumatic stress disorder, delayed onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "319768000",
+                  "display": "Recurrent major depressive disorder with melancholic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "357705009",
+                  "display": "Cotard's syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "370143000",
+                  "display": "Major depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "371026009",
+                  "display": "Senile dementia with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "371596008",
+                  "display": "Bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "371600003",
+                  "display": "Severe bipolar disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "371631005",
+                  "display": "Panic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "373618009",
+                  "display": "Autistic spectrum disorder with isolated skills (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "386701004",
+                  "display": "Developmental articulation disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "386810004",
+                  "display": "Phobic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "386822001",
+                  "display": "Adjustment reaction of adolescence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "386823006",
+                  "display": "Adjustment reaction of adult life (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "386824000",
+                  "display": "Adjustment reaction of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "386825004",
+                  "display": "Adjustment reaction of late life (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "398066007",
+                  "display": "Intensive care psychiatric disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "402732001",
+                  "display": "Habit tic (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "402733006",
+                  "display": "Habit tic affecting skin (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "402735004",
+                  "display": "Habit tic affecting hair (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "403590001",
+                  "display": "Cutaneous Munchausen syndrome by proxy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "403593004",
+                  "display": "Phobic fear of skin cancer (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "403594005",
+                  "display": "Psychogenic formication (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "404906000",
+                  "display": "Postoperative confusion (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "406506008",
+                  "display": "Attention deficit hyperactivity disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "408856003",
+                  "display": "Autistic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "416340002",
+                  "display": "Late onset schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "417143004",
+                  "display": "Short duration flashbacks (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "420774007",
+                  "display": "Organic brain syndrome associated with acquired immunodeficiency syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "425914008",
+                  "display": "Adjustment reaction to medical therapy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "425919003",
+                  "display": "Chronic organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "426041005",
+                  "display": "Developmental dyslalia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "426174008",
+                  "display": "Chronic stress disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "426881004",
+                  "display": "Developmental delay in feeding (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "427469003",
+                  "display": "Eating disorder in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "427975003",
+                  "display": "Drug-induced delusional disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428687006",
+                  "display": "Nightmares associated with chronic post-traumatic stress disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428703001",
+                  "display": "Transient organic mental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "429672007",
+                  "display": "Drug-induced mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "430744005",
+                  "display": "Factitious disorder with predominantly physical signs and symptoms (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "430751001",
+                  "display": "Factitious disorder with predominantly psychological signs and symptoms (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "430909002",
+                  "display": "Conduct disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "439960005",
+                  "display": "Binge eating disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "441704009",
+                  "display": "Affective psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "441711008",
+                  "display": "Chronic psychogenic pain (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "441716003",
+                  "display": "Residual childhood psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "441833000",
+                  "display": "Lethal catatonia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "442057004",
+                  "display": "Chronic depressive personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "442245003",
+                  "display": "Chronic hypomanic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "442314000",
+                  "display": "Active but odd autism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "442351006",
+                  "display": "Mental disorder caused by drug (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "443919007",
+                  "display": "Complex posttraumatic stress disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "450714000",
+                  "display": "Severe major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "473452003",
+                  "display": "Atypical psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "473456000",
+                  "display": "Compulsive personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "473457009",
+                  "display": "Obsessional personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "609225004",
+                  "display": "Developmental regression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "712823008",
+                  "display": "Acute depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "712824002",
+                  "display": "Acute polymorphic psychotic disorder without symptoms of schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "712850003",
+                  "display": "Acute polymorphic psychotic disorder co-occurrent with symptoms of schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "712884004",
+                  "display": "Pathological demand avoidance (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "713491003",
+                  "display": "Organic brain syndrome co-occurrent with human immunodeficiency virus infection (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "713583005",
+                  "display": "Mild alcohol dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "713862009",
+                  "display": "Severe alcohol dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "714829008",
+                  "display": "Moderate alcohol dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "715737004",
+                  "display": "Parkinsonism co-occurrent with dementia of Guadeloupe (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "715924009",
+                  "display": "Disruptive mood dysregulation disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "716096005",
+                  "display": "Hypospadias and intellectual disability syndrome Goldblatt type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "716199000",
+                  "display": "Delayed speech and facial asymmetry with strabismus and ear lobe skin crease syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "716578009",
+                  "display": "Developmental language comprehension impairment (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "718393002",
+                  "display": "Atypical Rett syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "251000119105",
+                  "display": "Severe major depression, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "261000119107",
+                  "display": "Severe depressed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "271000119101",
+                  "display": "Severe mixed bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "281000119103",
+                  "display": "Severe recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18491000119109",
+                  "display": "Psychological disorder during pregnancy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "21071000119101",
+                  "display": "Mood disorder of manic type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22641000119109",
+                  "display": "Psychosis in early childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22981000119106",
+                  "display": "Recurrent severe manic episodes (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "23601000119102",
+                  "display": "Sedative withdrawal (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "23741000119105",
+                  "display": "Severe manic bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39951000119105",
+                  "display": "Pervasive developmental disorder of residual state (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "61771000119106",
+                  "display": "Bipolar II disorder, most recent episode rapid cycling (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "62211000119103",
+                  "display": "Moderate expressive language delay (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "62231000119108",
+                  "display": "Mild expressive language delay (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "89381000119107",
+                  "display": "Moderate receptive language delay (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "89501000119108",
+                  "display": "Mild receptive language delay (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "94631000119100",
+                  "display": "Depressive disorder in mother complicating pregnancy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "97571000119109",
+                  "display": "Thrombocytopenia co-occurrent and due to alcoholism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "130121000119104",
+                  "display": "Dementia due to Rett's syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "133091000119105",
+                  "display": "Rapid cycling bipolar I disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "133121000119109",
+                  "display": "Severe seasonal affective disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "153071000119108",
+                  "display": "Recurrent manic episodes in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "270291000119109",
+                  "display": "Identity disorder of childhood (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "288271000119103",
+                  "display": "Childhood onset fluency disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "288421000119100",
+                  "display": "Hyposomnia co-occurrent and due to psychological disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "288511000119108",
+                  "display": "Chronic mood disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "288751000119101",
+                  "display": "Reactive depressive psychosis, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "288851000119106",
+                  "display": "Opioid-induced mood disorder due to opioid abuse (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "288861000119108",
+                  "display": "Opioid-induced mood disorder due to opioid dependence (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "434971000124109",
+                  "display": "Amphetamine induced psychotic disorder (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1453"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208.25",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.25",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0923"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.25"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208.24",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.24",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "33717-0"
+                },
+                {
+                  "code": "47528-5"
+                },
+                {
+                  "code": "47527-7"
+                },
+                {
+                  "code": "19774-9"
+                },
+                {
+                  "code": "19762-4"
+                },
+                {
+                  "code": "19765-7"
+                },
+                {
+                  "code": "19766-5"
+                },
+                {
+                  "code": "10524-7"
+                },
+                {
+                  "code": "18500-9"
+                },
+                {
+                  "code": "19764-0"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.24"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208.23",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.23",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0147"
+                },
+                {
+                  "code": "G0148"
+                },
+                {
+                  "code": "G0141"
+                },
+                {
+                  "code": "G0124"
+                },
+                {
+                  "code": "G0123"
+                },
+                {
+                  "code": "G0143"
+                },
+                {
+                  "code": "G0145"
+                },
+                {
+                  "code": "G0144"
+                },
+                {
+                  "code": "P3000"
+                },
+                {
+                  "code": "P3001"
+                },
+                {
+                  "code": "Q0091"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208.23"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1449",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D60.0",
+                  "display": "[D60.0] Chronic acquired pure red cell aplasia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D60.1",
+                  "display": "[D60.1] Transient acquired pure red cell aplasia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D60.8",
+                  "display": "[D60.8] Other acquired pure red cell aplasias"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D60.9",
+                  "display": "[D60.9] Acquired pure red cell aplasia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.01",
+                  "display": "[D61.01] Constitutional (pure) red blood cell aplasia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.09",
+                  "display": "[D61.09] Other constitutional aplastic anemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.1",
+                  "display": "[D61.1] Drug-induced aplastic anemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.2",
+                  "display": "[D61.2] Aplastic anemia due to other external agents"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.3",
+                  "display": "[D61.3] Idiopathic aplastic anemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.810",
+                  "display": "[D61.810] Antineoplastic chemotherapy induced pancytopenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.811",
+                  "display": "[D61.811] Other drug-induced pancytopenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.818",
+                  "display": "[D61.818] Other pancytopenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.82",
+                  "display": "[D61.82] Myelophthisis"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.89",
+                  "display": "[D61.89] Other specified aplastic anemias and other bone marrow failure syndromes"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D61.9",
+                  "display": "[D61.9] Aplastic anemia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D62",
+                  "display": "[D62] Acute posthemorrhagic anemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D63.0",
+                  "display": "[D63.0] Anemia in neoplastic disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D63.1",
+                  "display": "[D63.1] Anemia in chronic kidney disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D63.8",
+                  "display": "[D63.8] Anemia in other chronic diseases classified elsewhere"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D64.0",
+                  "display": "[D64.0] Hereditary sideroblastic anemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D64.1",
+                  "display": "[D64.1] Secondary sideroblastic anemia due to disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D64.2",
+                  "display": "[D64.2] Secondary sideroblastic anemia due to drugs and toxins"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D64.3",
+                  "display": "[D64.3] Other sideroblastic anemias"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D64.4",
+                  "display": "[D64.4] Congenital dyserythropoietic anemia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "D64.81",
+                  "display": "[D64.81] Anemia due to antineoplastic chemotherapy"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "183005",
+                  "display": "Autoimmune pancytopenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "862001",
+                  "display": "Anemia caused by chlorate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5603006",
+                  "display": "Autoimmune hemolytic anemia caused by immunoglobulin G (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5876000",
+                  "display": "Acquired pancytopenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "9764001",
+                  "display": "Anemia caused by radiation (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "11781007",
+                  "display": "Autoimmune hemolytic anemia caused by complement (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14126008",
+                  "display": "Autosomal-linked pyridoxine refractory sideroblastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15276008",
+                  "display": "Drug-induced enzyme deficiency anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16645003",
+                  "display": "Anemia caused by insect venom (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18323000",
+                  "display": "Drug-induced immune hemolytic anemia, immune complex type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22098000",
+                  "display": "Chronic idiopathic autoimmune hemolytic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26944003",
+                  "display": "Acute megaloblastic anemia due to dialysis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28975000",
+                  "display": "Constitutional aplastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29551000",
+                  "display": "Anemia caused by oxygen (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33491002",
+                  "display": "Autoimmune hemolytic anemia caused by immunoglobulin A plus complement (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "34247008",
+                  "display": "Anemia due to mechanical damage (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36919001",
+                  "display": "Anemia caused by lead (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "41841004",
+                  "display": "Sideroblastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42461002",
+                  "display": "Anemia caused by copper (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43707008",
+                  "display": "Anemia caused by heat (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43858000",
+                  "display": "Secondary aplastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "44288006",
+                  "display": "Anemia due to abnormality extrinsic to the red cell (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50220002",
+                  "display": "Cellular immunologic aplastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "50253007",
+                  "display": "Secondary paroxysmal cold hemoglobinuria (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "57192008",
+                  "display": "Acute pure red cell aplasia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "62389006",
+                  "display": "Acute megaloblastic anemia due to severe illness (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "62609001",
+                  "display": "Autoimmune hemolytic anemia caused by immunoglobulin G plus complement (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71832003",
+                  "display": "Autoimmune hemolytic anemia caused by immunoglobulin M (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71855000",
+                  "display": "Acute megaloblastic anemia secondary to total parenteral nutrition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "72501006",
+                  "display": "Anemia caused by arsenic hydride (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "73891003",
+                  "display": "Acute megaloblastic anemia caused by nitrous oxide (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77084001",
+                  "display": "Immunologic aplastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77607006",
+                  "display": "Drug-induced sideroblastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "82430007",
+                  "display": "Acute megaloblastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "90175006",
+                  "display": "Secondary acquired sideroblastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "90414007",
+                  "display": "Chronic acquired pure red cell aplasia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "91411007",
+                  "display": "Autoimmune hemolytic anemia caused by immunoglobulin A (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111576004",
+                  "display": "Acquired stomatocytosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111581008",
+                  "display": "Anemia caused by physical agent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "127050002",
+                  "display": "Secondary autoimmune hemolytic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "127054006",
+                  "display": "Cold agglutinin disease caused by Epstein-Barr virus infection (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "127059001",
+                  "display": "Drug-induced immune hemolytic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "127060006",
+                  "display": "Drug-induced immune hemolytic anemia, hapten type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "127061005",
+                  "display": "Autoimmune hemolytic anemia, categorized by antibody class AND/OR complement (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "127319005",
+                  "display": "Anemia caused by alloimmune destruction of transfused red cells (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191212002",
+                  "display": "Secondary cold-type hemolytic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191228007",
+                  "display": "Acquired spherocytosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191244003",
+                  "display": "Aplastic anemia due to chronic disease (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191246001",
+                  "display": "Aplastic anemia due to infection (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191247005",
+                  "display": "Aplastic anemia caused by radiation (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191248000",
+                  "display": "Aplastic anemia caused by toxic cause (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191256002",
+                  "display": "Idiopathic aplastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191261000",
+                  "display": "Secondary sideroblastic anemia due to disease (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191262007",
+                  "display": "Secondary sideroblastic anemia caused by drugs and toxins (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191265009",
+                  "display": "Anemia in neoplastic disease (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234366009",
+                  "display": "Alcohol-related sideroblastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234371002",
+                  "display": "Congenital pure red cell aplasia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234372009",
+                  "display": "Congenital red cell hypoplasia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234373004",
+                  "display": "Constitutional red cell hypoplasia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234376007",
+                  "display": "Acquired red cell aplasia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "267524009",
+                  "display": "Constitutional aplastic anemia with malformation (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "267525005",
+                  "display": "Constitutional red cell aplasia and hypoplasia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "267527002",
+                  "display": "Aplastic anemia due to drugs (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "273985002",
+                  "display": "Anemia due to isoimmunization (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "276448005",
+                  "display": "Idiopathic sideroblastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "278363000",
+                  "display": "Alcoholic macrocytosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "290246007",
+                  "display": "Sideropenic anemia with reticuloendothelial siderosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "303266002",
+                  "display": "Aplastic bone marrow (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "306058006",
+                  "display": "Aplastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "307726001",
+                  "display": "Anemia in ovarian carcinoma (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "309742004",
+                  "display": "Drug-induced autoimmune hemolytic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "398937006",
+                  "display": "Cold autoimmune hemolytic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "413565006",
+                  "display": "Aplastic anemia associated with metabolic alteration (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "413566007",
+                  "display": "Aplastic anemia associated with pancreatitis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "413567003",
+                  "display": "Aplastic anemia associated with pregnancy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "413603009",
+                  "display": "Autoimmune hemolytic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "420543008",
+                  "display": "Anemia associated with acquired immunodeficiency syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "421102007",
+                  "display": "Aplastic anemia associated with acquired immunodeficiency syndrome (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "424988008",
+                  "display": "Anemia caused by substance (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "428383000",
+                  "display": "Anemia caused by medication (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "429564000",
+                  "display": "Anemia caused by chemotherapy (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "438476003",
+                  "display": "Autoimmune thrombotic thrombocytopenic purpura (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "439007008",
+                  "display": "Acquired thrombotic thrombocytopenic purpura (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "441322009",
+                  "display": "Drug induced thrombotic thrombocytopenic purpura (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "713496008",
+                  "display": "Anemia caused by zidovudine (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "713508003",
+                  "display": "Aplastic anemia co-occurrent with human immunodeficiency virus infection (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "717050005",
+                  "display": "Autosomal recessive sideroblastic anemia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "118791000119106",
+                  "display": "Aplastic anemia caused by antineoplastic agent (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1449"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1208",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "88147"
+                },
+                {
+                  "code": "88148"
+                },
+                {
+                  "code": "88142"
+                },
+                {
+                  "code": "88174"
+                },
+                {
+                  "code": "88143"
+                },
+                {
+                  "code": "88175"
+                },
+                {
+                  "code": "88141"
+                },
+                {
+                  "code": "88164"
+                },
+                {
+                  "code": "88166"
+                },
+                {
+                  "code": "88167"
+                },
+                {
+                  "code": "88165"
+                },
+                {
+                  "code": "88150"
+                },
+                {
+                  "code": "88152"
+                },
+                {
+                  "code": "88154"
+                },
+                {
+                  "code": "88153"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0147"
+                },
+                {
+                  "code": "G0148"
+                },
+                {
+                  "code": "G0141"
+                },
+                {
+                  "code": "G0124"
+                },
+                {
+                  "code": "G0123"
+                },
+                {
+                  "code": "G0143"
+                },
+                {
+                  "code": "G0145"
+                },
+                {
+                  "code": "G0144"
+                },
+                {
+                  "code": "P3000"
+                },
+                {
+                  "code": "P3001"
+                },
+                {
+                  "code": "Q0091"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "33717-0"
+                },
+                {
+                  "code": "47528-5"
+                },
+                {
+                  "code": "47527-7"
+                },
+                {
+                  "code": "19774-9"
+                },
+                {
+                  "code": "19762-4"
+                },
+                {
+                  "code": "19765-7"
+                },
+                {
+                  "code": "19766-5"
+                },
+                {
+                  "code": "10524-7"
+                },
+                {
+                  "code": "18500-9"
+                },
+                {
+                  "code": "19764-0"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0923"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1208"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1421.34",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1421.34",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "74263"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1421.34"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1326",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "Z51.0",
+                  "display": "[Z51.0] Encounter for antineoplastic radiation therapy"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "Z51.11",
+                  "display": "[Z51.11] Encounter for antineoplastic chemotherapy"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "Z51.12",
+                  "display": "[Z51.12] Encounter for antineoplastic immunotherapy"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1326"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1447",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "69930",
+                  "display": "IMPLANT COCHLEAR DEVICE"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "L8614",
+                  "display": "Cochlear device, includes all internal and external components (L8614)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "L8619",
+                  "display": "Cochlear implant, external speech processor and controller, integrated system, replacement (L8619)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "L8627",
+                  "display": "Cochlear implant, external speech processor, component, replacement (L8627)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "L8628",
+                  "display": "Cochlear implant, external controller component, replacement (L8628)"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "Z96.20",
+                  "display": "[Z96.20] Presence of otological and audiological implant, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "Z96.21",
+                  "display": "[Z96.21] Cochlear implant status"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "310012007",
+                  "display": "Cochlear implant service (qualifier value)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "310013002",
+                  "display": "Adult cochlear implant service (qualifier value)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "310014008",
+                  "display": "Pediatric cochlear implant service (qualifier value)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "467286008",
+                  "display": "Cochlear implant system coil cable (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "467396002",
+                  "display": "Cochlear implant system (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "467453006",
+                  "display": "Cochlear implant system sound processor (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "467600008",
+                  "display": "Cochlear implant system electrode array assembly (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "467624000",
+                  "display": "Cochlear implant system battery pack (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "468054007",
+                  "display": "Cochlear implant system coil (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "701524004",
+                  "display": "Cochlear implant evaluation/programming application software (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "701568002",
+                  "display": "Cochlear implant assessment system (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "708553008",
+                  "display": "Cochlear implant system component (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "711586008",
+                  "display": "Cochlear implant system coil cover (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "711587004",
+                  "display": "Cochlear implant system sound processor earhook (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "711588009",
+                  "display": "Cochlear implant system sound processor off-ear holder (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "711589001",
+                  "display": "Cochlear implant system connector (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "711590005",
+                  "display": "Cochlear implant system sound processor/coil decorative cover (physical object)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "711593007",
+                  "display": "Cochlear implant system sound processor audio earhook (physical object)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1447"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1448",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "G96.0",
+                  "display": "[G96.0] Cerebrospinal fluid leak"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "G97.0",
+                  "display": "[G97.0] Cerebrospinal fluid leak from spinal puncture"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68382005",
+                  "display": "Cerebrospinal fluid otorrhea (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "73965003",
+                  "display": "Cerebrospinal fluid leakage (morphologic abnormality)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85638002",
+                  "display": "Cerebrospinal fluid rhinorrhea (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "167719009",
+                  "display": "Cerebrospinal fluid lymphocytosis (finding)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "193064009",
+                  "display": "Cerebrospinal fluid leak from spinal puncture (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "213210005",
+                  "display": "Postoperative cerebrospinal fluid leak (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "230744007",
+                  "display": "Cerebrospinal fluid leak (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "232280003",
+                  "display": "Post-traumatic cerebrospinal otorrhea (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "232281004",
+                  "display": "Postoperative cerebrospinal otorrhea (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "427758000",
+                  "display": "Cerebrospinal fluid leak from mouth (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "429759002",
+                  "display": "Cerebrospinal fluid leak from nose and mouth (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1448"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1230.12",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1230.12",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "RT"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1230.12"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1042",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "0HTV0ZZ"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "85.48"
+                },
+                {
+                  "code": "85.44"
+                },
+                {
+                  "code": "85.46"
+                },
+                {
+                  "code": "85.42"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1042"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1331.6",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1331.6",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Z90.13"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1331.6"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1401",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "44249-1",
+                  "display": "PHQ-9 quick depression assessment panel [Reported.PHQ]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "44261-6",
+                  "display": "Patient Health Questionnaire 9 item (PHQ-9) total score [Reported]"
+                }
+              ]
+            },
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "54635-8",
+                  "display": "Resident mood interview (PHQ-9) [Reported PHQ-9 CMS]"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1401"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1325",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230AZ",
+                  "display": "[30230AZ] Transfusion of Embryonic Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230G0",
+                  "display": "[30230G0] Transfusion of Autologous Bone Marrow into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230G1",
+                  "display": "[30230G1] Transfusion of Nonautologous Bone Marrow into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230G2",
+                  "display": "[30230G2] Transfusion of Allogeneic Related Bone Marrow into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230G3",
+                  "display": "[30230G3] Transfusion of Allogeneic Unrelated Bone Marrow into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230G4",
+                  "display": "[30230G4] Transfusion of Allogeneic Unspecified Bone Marrow into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230X0",
+                  "display": "[30230X0] Transfusion of Autologous Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230X1",
+                  "display": "[30230X1] Transfusion of Nonautologous Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230X2",
+                  "display": "[30230X2] Transfusion of Allogeneic Related Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230X3",
+                  "display": "[30230X3] Transfusion of Allogeneic Unrelated Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230X4",
+                  "display": "[30230X4] Transfusion of Allogeneic Unspecified Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230Y0",
+                  "display": "[30230Y0] Transfusion of Autologous Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230Y1",
+                  "display": "[30230Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230Y2",
+                  "display": "[30230Y2] Transfusion of Allogeneic Related Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230Y3",
+                  "display": "[30230Y3] Transfusion of Allogeneic Unrelated Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30230Y4",
+                  "display": "[30230Y4] Transfusion of Allogeneic Unspecified Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233AZ",
+                  "display": "[30233AZ] Transfusion of Embryonic Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233G0",
+                  "display": "[30233G0] Transfusion of Autologous Bone Marrow into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233G1",
+                  "display": "[30233G1] Transfusion of Nonautologous Bone Marrow into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233G2",
+                  "display": "[30233G2] Transfusion of Allogeneic Related Bone Marrow into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233G3",
+                  "display": "[30233G3] Transfusion of Allogeneic Unrelated Bone Marrow into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233G4",
+                  "display": "[30233G4] Transfusion of Allogeneic Unspecified Bone Marrow into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233X0",
+                  "display": "[30233X0] Transfusion of Autologous Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233X1",
+                  "display": "[30233X1] Transfusion of Nonautologous Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233X2",
+                  "display": "[30233X2] Transfusion of Allogeneic Related Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233X3",
+                  "display": "[30233X3] Transfusion of Allogeneic Unrelated Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233X4",
+                  "display": "[30233X4] Transfusion of Allogeneic Unspecified Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233Y0",
+                  "display": "[30233Y0] Transfusion of Autologous Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233Y1",
+                  "display": "[30233Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233Y2",
+                  "display": "[30233Y2] Transfusion of Allogeneic Related Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233Y3",
+                  "display": "[30233Y3] Transfusion of Allogeneic Unrelated Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30233Y4",
+                  "display": "[30233Y4] Transfusion of Allogeneic Unspecified Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240AZ",
+                  "display": "[30240AZ] Transfusion of Embryonic Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240G0",
+                  "display": "[30240G0] Transfusion of Autologous Bone Marrow into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240G1",
+                  "display": "[30240G1] Transfusion of Nonautologous Bone Marrow into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240G2",
+                  "display": "[30240G2] Transfusion of Allogeneic Related Bone Marrow into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240G3",
+                  "display": "[30240G3] Transfusion of Allogeneic Unrelated Bone Marrow into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240G4",
+                  "display": "[30240G4] Transfusion of Allogeneic Unspecified Bone Marrow into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240X0",
+                  "display": "[30240X0] Transfusion of Autologous Cord Blood Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240X1",
+                  "display": "[30240X1] Transfusion of Nonautologous Cord Blood Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240X2",
+                  "display": "[30240X2] Transfusion of Allogeneic Related Cord Blood Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240X3",
+                  "display": "[30240X3] Transfusion of Allogeneic Unrelated Cord Blood Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240X4",
+                  "display": "[30240X4] Transfusion of Allogeneic Unspecified Cord Blood Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240Y0",
+                  "display": "[30240Y0] Transfusion of Autologous Hematopoietic Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240Y1",
+                  "display": "[30240Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240Y2",
+                  "display": "[30240Y2] Transfusion of Allogeneic Related Hematopoietic Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240Y3",
+                  "display": "[30240Y3] Transfusion of Allogeneic Unrelated Hematopoietic Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30240Y4",
+                  "display": "[30240Y4] Transfusion of Allogeneic Unspecified Hematopoietic Stem Cells into Central Vein, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243AZ",
+                  "display": "[30243AZ] Transfusion of Embryonic Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243G0",
+                  "display": "[30243G0] Transfusion of Autologous Bone Marrow into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243G1",
+                  "display": "[30243G1] Transfusion of Nonautologous Bone Marrow into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243G2",
+                  "display": "[30243G2] Transfusion of Allogeneic Related Bone Marrow into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243G3",
+                  "display": "[30243G3] Transfusion of Allogeneic Unrelated Bone Marrow into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243G4",
+                  "display": "[30243G4] Transfusion of Allogeneic Unspecified Bone Marrow into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243X0",
+                  "display": "[30243X0] Transfusion of Autologous Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243X1",
+                  "display": "[30243X1] Transfusion of Nonautologous Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243X2",
+                  "display": "[30243X2] Transfusion of Allogeneic Related Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243X3",
+                  "display": "[30243X3] Transfusion of Allogeneic Unrelated Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243X4",
+                  "display": "[30243X4] Transfusion of Allogeneic Unspecified Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243Y0",
+                  "display": "[30243Y0] Transfusion of Autologous Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243Y1",
+                  "display": "[30243Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243Y2",
+                  "display": "[30243Y2] Transfusion of Allogeneic Related Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243Y3",
+                  "display": "[30243Y3] Transfusion of Allogeneic Unrelated Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30243Y4",
+                  "display": "[30243Y4] Transfusion of Allogeneic Unspecified Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30250G0",
+                  "display": "[30250G0] Transfusion of Autologous Bone Marrow into Peripheral Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30250G1",
+                  "display": "[30250G1] Transfusion of Nonautologous Bone Marrow into Peripheral Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30250X0",
+                  "display": "[30250X0] Transfusion of Autologous Cord Blood Stem Cells into Peripheral Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30250X1",
+                  "display": "[30250X1] Transfusion of Nonautologous Cord Blood Stem Cells into Peripheral Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30250Y0",
+                  "display": "[30250Y0] Transfusion of Autologous Hematopoietic Stem Cells into Peripheral Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30250Y1",
+                  "display": "[30250Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Peripheral Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30253G0",
+                  "display": "[30253G0] Transfusion of Autologous Bone Marrow into Peripheral Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30253G1",
+                  "display": "[30253G1] Transfusion of Nonautologous Bone Marrow into Peripheral Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30253X0",
+                  "display": "[30253X0] Transfusion of Autologous Cord Blood Stem Cells into Peripheral Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30253X1",
+                  "display": "[30253X1] Transfusion of Nonautologous Cord Blood Stem Cells into Peripheral Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30253Y0",
+                  "display": "[30253Y0] Transfusion of Autologous Hematopoietic Stem Cells into Peripheral Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30253Y1",
+                  "display": "[30253Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Peripheral Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30260G0",
+                  "display": "[30260G0] Transfusion of Autologous Bone Marrow into Central Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30260G1",
+                  "display": "[30260G1] Transfusion of Nonautologous Bone Marrow into Central Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30260X0",
+                  "display": "[30260X0] Transfusion of Autologous Cord Blood Stem Cells into Central Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30260X1",
+                  "display": "[30260X1] Transfusion of Nonautologous Cord Blood Stem Cells into Central Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30260Y0",
+                  "display": "[30260Y0] Transfusion of Autologous Hematopoietic Stem Cells into Central Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30260Y1",
+                  "display": "[30260Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Central Artery, Open Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30263G0",
+                  "display": "[30263G0] Transfusion of Autologous Bone Marrow into Central Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30263G1",
+                  "display": "[30263G1] Transfusion of Nonautologous Bone Marrow into Central Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30263X0",
+                  "display": "[30263X0] Transfusion of Autologous Cord Blood Stem Cells into Central Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30263X1",
+                  "display": "[30263X1] Transfusion of Nonautologous Cord Blood Stem Cells into Central Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30263Y0",
+                  "display": "[30263Y0] Transfusion of Autologous Hematopoietic Stem Cells into Central Artery, Percutaneous Approach"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "30263Y1",
+                  "display": "[30263Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Central Artery, Percutaneous Approach"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1325"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "77066"
+                },
+                {
+                  "code": "77065"
+                },
+                {
+                  "code": "77062"
+                },
+                {
+                  "code": "77061"
+                },
+                {
+                  "code": "77056"
+                },
+                {
+                  "code": "77055"
+                },
+                {
+                  "code": "77063"
+                },
+                {
+                  "code": "77057"
+                },
+                {
+                  "code": "77067"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0202"
+                },
+                {
+                  "code": "G0204"
+                },
+                {
+                  "code": "G0206"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "87.37"
+                },
+                {
+                  "code": "87.36"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+              "version": "2012.05",
+              "concept": [
+                {
+                  "code": "0403"
+                },
+                {
+                  "code": "0401"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1441",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96401",
+                  "display": "CHEMO ANTI-NEOPL SQ/IM"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96402",
+                  "display": "CHEMO HORMON ANTINEOPL SQ/IM"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96405",
+                  "display": "CHEMO INTRALESIONAL UP TO 7"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96406",
+                  "display": "CHEMO INTRALESIONAL OVER 7"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96409",
+                  "display": "CHEMO IV PUSH SNGL DRUG"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96411",
+                  "display": "CHEMO IV PUSH ADDL DRUG"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96413",
+                  "display": "CHEMO IV INFUSION 1 HR"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96415",
+                  "display": "CHEMO IV INFUSION ADDL HR"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96416",
+                  "display": "CHEMO PROLONG INFUSE W/PUMP"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96417",
+                  "display": "CHEMO IV INFUS EACH ADDL SEQ"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96420",
+                  "display": "CHEMO IA PUSH TECNIQUE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96422",
+                  "display": "CHEMO IA INFUSION UP TO 1 HR"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96423",
+                  "display": "CHEMO IA INFUSE EACH ADDL HR"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96425",
+                  "display": "CHEMOTHERAPY INFUSION METHOD"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96440",
+                  "display": "CHEMOTHERAPY INTRACAVITARY"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96450",
+                  "display": "CHEMOTHERAPY INTO CNS"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96521",
+                  "display": "REFILL/MAINT PORTABLE PUMP"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96522",
+                  "display": "REFILL/MAINT PUMP/RESVR SYST"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96523",
+                  "display": "IRRIG DRUG DELIVERY DEVICE"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96542",
+                  "display": "CHEMOTHERAPY INJECTION"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "96549",
+                  "display": "CHEMOTHERAPY UNSPECIFIED"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "4114003",
+                  "display": "Parenteral chemotherapy for malignant neoplasm (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "6872008",
+                  "display": "Perfusion chemotherapy for malignant neoplasm (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "12149006",
+                  "display": "Chemotherapy administration, subcutaneous, with local anesthesia (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "22733003",
+                  "display": "Chemotherapy for non-malignant neoplasm (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29391003",
+                  "display": "Chemotherapy administration into peritoneal cavity requiring paracentesis (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31652009",
+                  "display": "Intracavitary chemotherapy for malignant neoplasm (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38216008",
+                  "display": "Infusion chemotherapy for malignant neoplasm (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "51534007",
+                  "display": "Oral chemotherapy for malignant neoplasm (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77738002",
+                  "display": "Local chemotherapy for malignant neoplasm (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "86036005",
+                  "display": "Intravenous chemotherapy administration by push technique (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "265760000",
+                  "display": "Intravenous chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "265761001",
+                  "display": "Intramuscular chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "265762008",
+                  "display": "Subcutaneous chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "266719004",
+                  "display": "Oral chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "309698005",
+                  "display": "Continuous infusion of chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "315601005",
+                  "display": "Ambulatory chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "367336001",
+                  "display": "Chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "394894008",
+                  "display": "Pre-operative chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "394895009",
+                  "display": "Postoperative chemotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "394935005",
+                  "display": "Combined post-operative chemotherapy and radiotherapy (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "399042005",
+                  "display": "Chemotherapy cycle (procedure)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1441"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1442",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19944001",
+                  "display": "Autologous bone marrow transplant without purging (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "23719005",
+                  "display": "Transplantation of bone marrow (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "46280001",
+                  "display": "Autologous bone marrow transplant with purging (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "58390007",
+                  "display": "Allogeneic bone marrow transplantation (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "58776007",
+                  "display": "Autologous bone marrow transplant (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234331007",
+                  "display": "Syngeneic bone marrow transplant (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234332000",
+                  "display": "T-cell depleted allogeneic bone marrow graft (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234333005",
+                  "display": "Imperfect T-cell depleted allogeneic bone marrow graft (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234334004",
+                  "display": "Allogeneic related bone marrow transplant (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234335003",
+                  "display": "Allogeneic unrelated bone marrow transplant (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "234336002",
+                  "display": "Hemopoietic stem cell transplant (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "426425001",
+                  "display": "Allograft of bone marrow from sibling donor (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "427423003",
+                  "display": "Allograft of bone marrow from matched unrelated donor (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "442557006",
+                  "display": "Grafting of bone marrow using allograft from unmatched unrelated donor (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "445757003",
+                  "display": "Allogeneic bone marrow transplantation without purging (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "446253009",
+                  "display": "Allogeneic bone marrow transplantation with purging (procedure)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1442"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168.9",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.9",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0202"
+                },
+                {
+                  "code": "G0204"
+                },
+                {
+                  "code": "G0206"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.9"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1044",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.10",
+                  "display": "[F30.10] Manic episode without psychotic symptoms, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.11",
+                  "display": "[F30.11] Manic episode without psychotic symptoms, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.12",
+                  "display": "[F30.12] Manic episode without psychotic symptoms, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.13",
+                  "display": "[F30.13] Manic episode, severe, without psychotic symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.2",
+                  "display": "[F30.2] Manic episode, severe with psychotic symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.3",
+                  "display": "[F30.3] Manic episode in partial remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.4",
+                  "display": "[F30.4] Manic episode in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.8",
+                  "display": "[F30.8] Other manic episodes"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F30.9",
+                  "display": "[F30.9] Manic episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.0",
+                  "display": "[F31.0] Bipolar disorder, current episode hypomanic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.10",
+                  "display": "[F31.10] Bipolar disorder, current episode manic without psychotic features, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.11",
+                  "display": "[F31.11] Bipolar disorder, current episode manic without psychotic features, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.12",
+                  "display": "[F31.12] Bipolar disorder, current episode manic without psychotic features, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.13",
+                  "display": "[F31.13] Bipolar disorder, current episode manic without psychotic features, severe"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.2",
+                  "display": "[F31.2] Bipolar disorder, current episode manic severe with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.30",
+                  "display": "[F31.30] Bipolar disorder, current episode depressed, mild or moderate severity, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.31",
+                  "display": "[F31.31] Bipolar disorder, current episode depressed, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.32",
+                  "display": "[F31.32] Bipolar disorder, current episode depressed, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.4",
+                  "display": "[F31.4] Bipolar disorder, current episode depressed, severe, without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.5",
+                  "display": "[F31.5] Bipolar disorder, current episode depressed, severe, with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.60",
+                  "display": "[F31.60] Bipolar disorder, current episode mixed, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.61",
+                  "display": "[F31.61] Bipolar disorder, current episode mixed, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.62",
+                  "display": "[F31.62] Bipolar disorder, current episode mixed, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.63",
+                  "display": "[F31.63] Bipolar disorder, current episode mixed, severe, without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.64",
+                  "display": "[F31.64] Bipolar disorder, current episode mixed, severe, with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.70",
+                  "display": "[F31.70] Bipolar disorder, currently in remission, most recent episode unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.71",
+                  "display": "[F31.71] Bipolar disorder, in partial remission, most recent episode hypomanic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.72",
+                  "display": "[F31.72] Bipolar disorder, in full remission, most recent episode hypomanic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.73",
+                  "display": "[F31.73] Bipolar disorder, in partial remission, most recent episode manic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.74",
+                  "display": "[F31.74] Bipolar disorder, in full remission, most recent episode manic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.75",
+                  "display": "[F31.75] Bipolar disorder, in partial remission, most recent episode depressed"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.76",
+                  "display": "[F31.76] Bipolar disorder, in full remission, most recent episode depressed"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.77",
+                  "display": "[F31.77] Bipolar disorder, in partial remission, most recent episode mixed"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.78",
+                  "display": "[F31.78] Bipolar disorder, in full remission, most recent episode mixed"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.00",
+                  "display": "Bipolar I disorder, single manic episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.01",
+                  "display": "Bipolar I disorder, single manic episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.02",
+                  "display": "Bipolar I disorder, single manic episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.03",
+                  "display": "Bipolar I disorder, single manic episode, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.04",
+                  "display": "Bipolar I disorder, single manic episode, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.05",
+                  "display": "Bipolar I disorder, single manic episode, in partial or unspecified remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.06",
+                  "display": "Bipolar I disorder, single manic episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.10",
+                  "display": "Manic affective disorder, recurrent episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.11",
+                  "display": "Manic affective disorder, recurrent episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.12",
+                  "display": "Manic affective disorder, recurrent episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.13",
+                  "display": "Manic affective disorder, recurrent episode, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.14",
+                  "display": "Manic affective disorder, recurrent episode, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.15",
+                  "display": "Manic affective disorder, recurrent episode, in partial or unspecified remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.16",
+                  "display": "Manic affective disorder, recurrent episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.40",
+                  "display": "Bipolar I disorder, most recent episode (or current) manic, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.41",
+                  "display": "Bipolar I disorder, most recent episode (or current) manic, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.42",
+                  "display": "Bipolar I disorder, most recent episode (or current) manic, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.43",
+                  "display": "Bipolar I disorder, most recent episode (or current) manic, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.44",
+                  "display": "Bipolar I disorder, most recent episode (or current) manic, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.45",
+                  "display": "Bipolar I disorder, most recent episode (or current) manic, in partial or unspecified remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.46",
+                  "display": "Bipolar I disorder, most recent episode (or current) manic, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.50",
+                  "display": "Bipolar I disorder, most recent episode (or current) depressed, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.51",
+                  "display": "Bipolar I disorder, most recent episode (or current) depressed, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.52",
+                  "display": "Bipolar I disorder, most recent episode (or current) depressed, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.53",
+                  "display": "Bipolar I disorder, most recent episode (or current) depressed, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.54",
+                  "display": "Bipolar I disorder, most recent episode (or current) depressed, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.55",
+                  "display": "Bipolar I disorder, most recent episode (or current) depressed, in partial or unspecified remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.56",
+                  "display": "Bipolar I disorder, most recent episode (or current) depressed, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.60",
+                  "display": "Bipolar I disorder, most recent episode (or current) mixed, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.61",
+                  "display": "Bipolar I disorder, most recent episode (or current) mixed, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.62",
+                  "display": "Bipolar I disorder, most recent episode (or current) mixed, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.63",
+                  "display": "Bipolar I disorder, most recent episode (or current) mixed, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.64",
+                  "display": "Bipolar I disorder, most recent episode (or current) mixed, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.65",
+                  "display": "Bipolar I disorder, most recent episode (or current) mixed, in partial or unspecified remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.66",
+                  "display": "Bipolar I disorder, most recent episode (or current) mixed, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.7",
+                  "display": "Bipolar I disorder, most recent episode (or current) unspecified"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1044"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1168.8",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.8",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "77066"
+                },
+                {
+                  "code": "77065"
+                },
+                {
+                  "code": "77062"
+                },
+                {
+                  "code": "77061"
+                },
+                {
+                  "code": "77056"
+                },
+                {
+                  "code": "77055"
+                },
+                {
+                  "code": "77063"
+                },
+                {
+                  "code": "77057"
+                },
+                {
+                  "code": "77067"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1168.8"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1440",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90732",
+                  "display": "PPSV23 VACC 2 YRS+ SUBQ/IM"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/cvx",
+              "version": "2016.10.18",
+              "concept": [
+                {
+                  "code": "33",
+                  "display": "pneumococcal polysaccharide vaccine, 23 valent"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1440"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1064.29",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.29",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "44388"
+                },
+                {
+                  "code": "44393"
+                },
+                {
+                  "code": "44389"
+                },
+                {
+                  "code": "44391"
+                },
+                {
+                  "code": "44390"
+                },
+                {
+                  "code": "44392"
+                },
+                {
+                  "code": "44394"
+                },
+                {
+                  "code": "44397"
+                },
+                {
+                  "code": "45378"
+                },
+                {
+                  "code": "44383"
+                },
+                {
+                  "code": "45380"
+                },
+                {
+                  "code": "45382"
+                },
+                {
+                  "code": "45386"
+                },
+                {
+                  "code": "45381"
+                },
+                {
+                  "code": "45391"
+                },
+                {
+                  "code": "45379"
+                },
+                {
+                  "code": "45384"
+                },
+                {
+                  "code": "45385"
+                },
+                {
+                  "code": "44387"
+                },
+                {
+                  "code": "44392"
+                },
+                {
+                  "code": "45355"
+                },
+                {
+                  "code": "44401"
+                },
+                {
+                  "code": "44402"
+                },
+                {
+                  "code": "44403"
+                },
+                {
+                  "code": "44404"
+                },
+                {
+                  "code": "44405"
+                },
+                {
+                  "code": "44406"
+                },
+                {
+                  "code": "44407"
+                },
+                {
+                  "code": "44408"
+                },
+                {
+                  "code": "45388"
+                },
+                {
+                  "code": "45389"
+                },
+                {
+                  "code": "45390"
+                },
+                {
+                  "code": "45393"
+                },
+                {
+                  "code": "45398"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1064.29"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1439",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "90670",
+                  "display": "PCV13 VACCINE IM"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/cvx",
+              "version": "2016.10.18",
+              "concept": [
+                {
+                  "code": "133",
+                  "display": "pneumococcal conjugate vaccine, 13 valent"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "448964007",
+                  "display": "Pneumococcal 13-valent conjugate vaccine (product)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1439"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1437",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99408",
+                  "display": "AUDIT/DAST 15-30 MIN"
+                }
+              ]
+            },
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.4.17AA",
+              "concept": [
+                {
+                  "code": "99409",
+                  "display": "AUDIT/DAST OVER 30 MIN"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0396",
+                  "display": "Alcohol and/or substance (other than tobacco) abuse structured assessment (e.g., audit, dast), and brief intervention 15 to 30 minutes (G0396)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0397",
+                  "display": "Alcohol and/or substance (other than tobacco) abuse structured assessment (e.g., audit, dast), and intervention, greater than 30 minutes (G0397)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "G0443",
+                  "display": "Brief face-to-face behavioral counseling for alcohol misuse, 15 minutes (G0443)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0005",
+                  "display": "Alcohol and/or drug services; group counseling by a clinician (H0005)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0007",
+                  "display": "Alcohol and/or drug services; crisis intervention (outpatient) (H0007)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0015",
+                  "display": "Alcohol and/or drug services; intensive outpatient (treatment program that operates at least 3 hours/day and at least 3 days/week and is based on an individualized treatment plan), including assessment, counseling; crisis intervention, and activity therapies or education (H0015)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0016",
+                  "display": "Alcohol and/or drug services; medical/somatic (medical intervention in ambulatory setting) (H0016)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0022",
+                  "display": "Alcohol and/or drug intervention service (planned facilitation) (H0022)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H0050",
+                  "display": "Alcohol and/or drug services, brief intervention, per 15 minutes (H0050)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2035",
+                  "display": "Alcohol and/or other drug treatment program, per hour (H2035)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "H2036",
+                  "display": "Alcohol and/or other drug treatment program, per diem (H2036)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T1006",
+                  "display": "Alcohol and/or substance abuse services, family/couple counseling (T1006)"
+                }
+              ]
+            },
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.3.17AA",
+              "concept": [
+                {
+                  "code": "T1012",
+                  "display": "Alcohol and/or substance abuse services, skills development (T1012)"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "Z71.41",
+                  "display": "[Z71.41] Alcohol abuse counseling and surveillance of alcoholic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "Z71.89",
+                  "display": "[Z71.89] Other specified counseling"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "20093000",
+                  "display": "Alcohol rehabilitation and detoxification (regime/therapy)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "23915005",
+                  "display": "Combined alcohol and drug rehabilitation and detoxification (regime/therapy)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "24165007",
+                  "display": "Alcoholism counseling (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "64297001",
+                  "display": "Detoxication psychiatric therapy for alcoholism (regime/therapy)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "386449006",
+                  "display": "Substance use treatment: alcohol withdrawal (regime/therapy)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "408945004",
+                  "display": "Alcohol abuse prevention (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "408947007",
+                  "display": "Alcohol abuse prevention education (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "408948002",
+                  "display": "Alcohol abuse prevention management (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "413473000",
+                  "display": "Counseling about alcohol consumption (procedure)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "707166002",
+                  "display": "Alcohol reduction program (regime/therapy)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "429291000124102",
+                  "display": "Alcohol brief intervention (procedure)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1437"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1065.32",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1065.32",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Z90.12"
+                },
+                {
+                  "code": "C18.0"
+                },
+                {
+                  "code": "C18.1"
+                },
+                {
+                  "code": "C18.2"
+                },
+                {
+                  "code": "C18.3"
+                },
+                {
+                  "code": "C18.4"
+                },
+                {
+                  "code": "C18.5"
+                },
+                {
+                  "code": "C18.6"
+                },
+                {
+                  "code": "C18.7"
+                },
+                {
+                  "code": "C18.8"
+                },
+                {
+                  "code": "C18.9"
+                },
+                {
+                  "code": "C19"
+                },
+                {
+                  "code": "C20"
+                },
+                {
+                  "code": "C21.2"
+                },
+                {
+                  "code": "C21.8"
+                },
+                {
+                  "code": "C78.5"
+                },
+                {
+                  "code": "Z85.038"
+                },
+                {
+                  "code": "Z85.048"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1065.32"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1065.33",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1065.33",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "153.0"
+                },
+                {
+                  "code": "153.1"
+                },
+                {
+                  "code": "153.2"
+                },
+                {
+                  "code": "153.3"
+                },
+                {
+                  "code": "153.4"
+                },
+                {
+                  "code": "153.5"
+                },
+                {
+                  "code": "153.6"
+                },
+                {
+                  "code": "153.7"
+                },
+                {
+                  "code": "153.8"
+                },
+                {
+                  "code": "153.9"
+                },
+                {
+                  "code": "154.0"
+                },
+                {
+                  "code": "154.1"
+                },
+                {
+                  "code": "197.5"
+                },
+                {
+                  "code": "V10.05"
+                },
+                {
+                  "code": "V10.06"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1065.33"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1074",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F01.50",
+                  "display": "[F01.50] Vascular dementia without behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F01.51",
+                  "display": "[F01.51] Vascular dementia with behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F02.80",
+                  "display": "[F02.80] Dementia in other diseases classified elsewhere without behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F02.81",
+                  "display": "[F02.81] Dementia in other diseases classified elsewhere with behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F03.90",
+                  "display": "[F03.90] Unspecified dementia without behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F03.91",
+                  "display": "[F03.91] Unspecified dementia with behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F04",
+                  "display": "[F04] Amnestic disorder due to known physiological condition"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.27",
+                  "display": "[F10.27] Alcohol dependence with alcohol-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F10.97",
+                  "display": "[F10.97] Alcohol use, unspecified with alcohol-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F13.27",
+                  "display": "[F13.27] Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F13.97",
+                  "display": "[F13.97] Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F18.17",
+                  "display": "[F18.17] Inhalant abuse with inhalant-induced dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F18.27",
+                  "display": "[F18.27] Inhalant dependence with inhalant-induced dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F18.97",
+                  "display": "[F18.97] Inhalant use, unspecified with inhalant-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F19.17",
+                  "display": "[F19.17] Other psychoactive substance abuse with psychoactive substance-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F19.27",
+                  "display": "[F19.27] Other psychoactive substance dependence with psychoactive substance-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F19.97",
+                  "display": "[F19.97] Other psychoactive substance use, unspecified with psychoactive substance-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "G30.0",
+                  "display": "[G30.0] Alzheimer's disease with early onset"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "G30.1",
+                  "display": "[G30.1] Alzheimer's disease with late onset"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "G30.8",
+                  "display": "[G30.8] Other Alzheimer's disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "G30.9",
+                  "display": "[G30.9] Alzheimer's disease, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "G31.83",
+                  "display": "[G31.83] Dementia with Lewy bodies"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.0",
+                  "display": "Senile dementia, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.10",
+                  "display": "Presenile dementia, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.11",
+                  "display": "Presenile dementia with delirium"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.12",
+                  "display": "Presenile dementia with delusional features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.13",
+                  "display": "Presenile dementia with depressive features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.20",
+                  "display": "Senile dementia with delusional features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.21",
+                  "display": "Senile dementia with depressive features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.3",
+                  "display": "Senile dementia with delirium"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.40",
+                  "display": "Vascular dementia, uncomplicated"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.41",
+                  "display": "Vascular dementia, with delirium"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.42",
+                  "display": "Vascular dementia, with delusions"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.43",
+                  "display": "Vascular dementia, with depressed mood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.8",
+                  "display": "Other specified senile psychotic conditions"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.9",
+                  "display": "Unspecified senile psychotic condition"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "291.2",
+                  "display": "Alcohol-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "292.82",
+                  "display": "Drug-induced persisting dementia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "294.0",
+                  "display": "Amnestic disorder in conditions classified elsewhere"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "294.10",
+                  "display": "Dementia in conditions classified elsewhere without behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "294.11",
+                  "display": "Dementia in conditions classified elsewhere with behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "294.20",
+                  "display": "Dementia, unspecified, without behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "294.21",
+                  "display": "Dementia, unspecified, with behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "331.0",
+                  "display": "Alzheimer's disease"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "331.82",
+                  "display": "Dementia with lewy bodies"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1074"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1390",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F01.51",
+                  "display": "[F01.51] Vascular dementia with behavioral disturbance"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.0",
+                  "display": "[F32.0] Major depressive disorder, single episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.1",
+                  "display": "[F32.1] Major depressive disorder, single episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.2",
+                  "display": "[F32.2] Major depressive disorder, single episode, severe without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.3",
+                  "display": "[F32.3] Major depressive disorder, single episode, severe with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.4",
+                  "display": "[F32.4] Major depressive disorder, single episode, in partial remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.5",
+                  "display": "[F32.5] Major depressive disorder, single episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.81",
+                  "display": "[F32.81] Premenstrual dysphoric disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.89",
+                  "display": "[F32.89] Other specified depressive episodes"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.9",
+                  "display": "[F32.9] Major depressive disorder, single episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.0",
+                  "display": "[F33.0] Major depressive disorder, recurrent, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.1",
+                  "display": "[F33.1] Major depressive disorder, recurrent, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.2",
+                  "display": "[F33.2] Major depressive disorder, recurrent severe without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.3",
+                  "display": "[F33.3] Major depressive disorder, recurrent, severe with psychotic symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.42",
+                  "display": "[F33.42] Major depressive disorder, recurrent, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.9",
+                  "display": "[F33.9] Major depressive disorder, recurrent, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.1",
+                  "display": "[F34.1] Dysthymic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.21",
+                  "display": "[F43.21] Adjustment disorder with depressed mood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F43.23",
+                  "display": "[F43.23] Adjustment disorder with mixed anxiety and depressed mood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.13",
+                  "display": "Presenile dementia with depressive features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.21",
+                  "display": "Senile dementia with depressive features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "290.43",
+                  "display": "Vascular dementia, with depressed mood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.21",
+                  "display": "Major depressive affective disorder, single episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.22",
+                  "display": "Major depressive affective disorder, single episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.23",
+                  "display": "Major depressive affective disorder, single episode, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.24",
+                  "display": "Major depressive affective disorder, single episode, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.25",
+                  "display": "Major depressive affective disorder, single episode, in partial or unspecified remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.26",
+                  "display": "Major depressive affective disorder, single episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.31",
+                  "display": "Major depressive affective disorder, recurrent episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.32",
+                  "display": "Major depressive affective disorder, recurrent episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.33",
+                  "display": "Major depressive affective disorder, recurrent episode, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.34",
+                  "display": "Major depressive affective disorder, recurrent episode, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.36",
+                  "display": "Major depressive affective disorder, recurrent episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.82",
+                  "display": "Atypical depressive disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "298.0",
+                  "display": "Depressive type psychosis"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "300.4",
+                  "display": "Dysthymic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "301.12",
+                  "display": "Chronic depressive personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "309.0",
+                  "display": "Adjustment disorder with depressed mood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "309.1",
+                  "display": "Prolonged depressive reaction"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "309.28",
+                  "display": "Adjustment disorder with mixed anxiety and depressed mood"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "311",
+                  "display": "Depressive disorder, not elsewhere classified"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "832007",
+                  "display": "Moderate major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "2506003",
+                  "display": "Early onset dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "2618002",
+                  "display": "Chronic recurrent major depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "3109008",
+                  "display": "Secondary dysthymia early onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14183003",
+                  "display": "Chronic major depressive disorder, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15193003",
+                  "display": "Severe recurrent major depression with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15639000",
+                  "display": "Moderate major depression, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18818009",
+                  "display": "Moderate recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19527009",
+                  "display": "Single episode of major depression in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19694002",
+                  "display": "Late onset dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "20250007",
+                  "display": "Severe major depression, single episode, with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "25922000",
+                  "display": "Major depressive disorder, single episode with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28475009",
+                  "display": "Severe recurrent major depression with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33078009",
+                  "display": "Severe recurrent major depression with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35489007",
+                  "display": "Depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36170009",
+                  "display": "Secondary dysthymia late onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36474008",
+                  "display": "Severe recurrent major depression without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36923009",
+                  "display": "Major depression, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38451003",
+                  "display": "Primary dysthymia early onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38694004",
+                  "display": "Recurrent major depressive disorder with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39809009",
+                  "display": "Recurrent major depressive disorder with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40379007",
+                  "display": "Mild recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40568001",
+                  "display": "Recurrent brief depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42925002",
+                  "display": "Major depressive disorder, single episode with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "48589009",
+                  "display": "Minor depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63778009",
+                  "display": "Major depressive disorder, single episode with melancholic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66344007",
+                  "display": "Recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "67711008",
+                  "display": "Primary dysthymia late onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "69392006",
+                  "display": "Major depressive disorder, single episode with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71336009",
+                  "display": "Recurrent major depressive disorder with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "73867007",
+                  "display": "Severe major depression with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "75084000",
+                  "display": "Severe major depression without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "75837004",
+                  "display": "Mood disorder with depressive features due to general medical condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "76441001",
+                  "display": "Severe major depression, single episode, without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77486005",
+                  "display": "Mood disorder with major depressive-like episode due to general medical condition (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77911002",
+                  "display": "Severe major depression, single episode, with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78667006",
+                  "display": "Dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79298009",
+                  "display": "Mild major depression, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "81319007",
+                  "display": "Severe bipolar II disorder, most recent episode major depressive without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83176005",
+                  "display": "Primary dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "84760002",
+                  "display": "Schizoaffective disorder, depressive type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85080004",
+                  "display": "Secondary dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87512008",
+                  "display": "Mild major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191610000",
+                  "display": "Recurrent major depressive episodes, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191611001",
+                  "display": "Recurrent major depressive episodes, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191613003",
+                  "display": "Recurrent major depressive episodes, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191616006",
+                  "display": "Recurrent depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191659001",
+                  "display": "Atypical depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "192080009",
+                  "display": "Chronic depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231504006",
+                  "display": "Mixed anxiety and depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231542000",
+                  "display": "Depressive conduct disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268621008",
+                  "display": "Recurrent major depressive episodes (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "319768000",
+                  "display": "Recurrent major depressive disorder with melancholic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "320751009",
+                  "display": "Major depression, melancholic type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "370143000",
+                  "display": "Major depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "430852001",
+                  "display": "Severe major depression, single episode, with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "442057004",
+                  "display": "Chronic depressive personality disorder (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1390"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1329.1",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1329.1",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2017.1.16AA",
+              "concept": [
+                {
+                  "code": "Z90.12"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1329.1"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1043.5",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1043.5",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "50"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1043.5"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1399",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.81",
+                  "display": "[F31.81] Bipolar II disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.89",
+                  "display": "[F31.89] Other bipolar disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F31.9",
+                  "display": "[F31.9] Bipolar disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.80",
+                  "display": "Bipolar disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.81",
+                  "display": "Atypical manic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.82",
+                  "display": "Atypical depressive disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.89",
+                  "display": "Other bipolar disorders"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1399"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1355",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.0",
+                  "display": "[F34.0] Cyclothymic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.3",
+                  "display": "[F60.3] Borderline personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F60.4",
+                  "display": "[F60.4] Histrionic personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.10",
+                  "display": "[F68.10] Factitious disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.11",
+                  "display": "[F68.11] Factitious disorder with predominantly psychological signs and symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.12",
+                  "display": "[F68.12] Factitious disorder with predominantly physical signs and symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F68.13",
+                  "display": "[F68.13] Factitious disorder with combined psychological and physical signs and symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "301.10",
+                  "display": "Affective personality disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "301.13",
+                  "display": "Cyclothymic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "301.3",
+                  "display": "Explosive personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "301.50",
+                  "display": "Histrionic personality disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "301.51",
+                  "display": "Chronic factitious illness with physical symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "301.59",
+                  "display": "Other histrionic personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "301.83",
+                  "display": "Borderline personality disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "20010003",
+                  "display": "Borderline personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "55341008",
+                  "display": "Histrionic personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191765005",
+                  "display": "Emotionally unstable personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191766006",
+                  "display": "Psychoinfantile personality (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191773001",
+                  "display": "Immature personality disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231527003",
+                  "display": "Explosive personality disorder (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1355"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1356",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.0",
+                  "display": "[F84.0] Autistic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.3",
+                  "display": "[F84.3] Other childhood disintegrative disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.8",
+                  "display": "[F84.8] Other pervasive developmental disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F84.9",
+                  "display": "[F84.9] Pervasive developmental disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "299.00",
+                  "display": "Autistic disorder, current or active state"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "299.01",
+                  "display": "Autistic disorder, residual state"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "299.10",
+                  "display": "Childhood disintegrative disorder, current or active state"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "299.11",
+                  "display": "Childhood disintegrative disorder, residual state"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "299.80",
+                  "display": "Other specified pervasive developmental disorders, current or active state"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "299.81",
+                  "display": "Other specified pervasive developmental disorders, residual state"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "299.90",
+                  "display": "Unspecified pervasive developmental disorder, current or active state"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "299.91",
+                  "display": "Unspecified pervasive developmental disorder, residual state"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35919005",
+                  "display": "Pervasive developmental disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "43614003",
+                  "display": "Autistic disorder of childhood onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71961003",
+                  "display": "Childhood disintegrative disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191689008",
+                  "display": "Active infantile autism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191690004",
+                  "display": "Residual infantile autism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231536004",
+                  "display": "Atypical autism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "373618009",
+                  "display": "Autistic spectrum disorder with isolated skills (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "408856003",
+                  "display": "Autistic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "408857007",
+                  "display": "Infantile autism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "442314000",
+                  "display": "Active but odd autism (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39951000119105",
+                  "display": "Pervasive developmental disorder of residual state (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1356"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1265.28",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.28",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "30167-1"
+                },
+                {
+                  "code": "49896-4"
+                },
+                {
+                  "code": "21440-3"
+                },
+                {
+                  "code": "38372-9"
+                },
+                {
+                  "code": "59420-0"
+                },
+                {
+                  "code": "75406-9"
+                },
+                {
+                  "code": "75694-0"
+                },
+                {
+                  "code": "69002-4"
+                },
+                {
+                  "code": "71431-1"
+                },
+                {
+                  "code": "59263-4"
+                },
+                {
+                  "code": "59264-2"
+                },
+                {
+                  "code": "77379-6"
+                },
+                {
+                  "code": "77399-4"
+                },
+                {
+                  "code": "77400-0"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.28"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1093.43",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.43",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://loinc.org",
+              "version": "2.61.17AA",
+              "concept": [
+                {
+                  "code": "12503-9"
+                },
+                {
+                  "code": "12504-7"
+                },
+                {
+                  "code": "14563-1"
+                },
+                {
+                  "code": "14564-9"
+                },
+                {
+                  "code": "14565-6"
+                },
+                {
+                  "code": "2335-8"
+                },
+                {
+                  "code": "27396-1"
+                },
+                {
+                  "code": "27401-9"
+                },
+                {
+                  "code": "27925-7"
+                },
+                {
+                  "code": "27926-5"
+                },
+                {
+                  "code": "29771-3"
+                },
+                {
+                  "code": "56490-6"
+                },
+                {
+                  "code": "56491-4"
+                },
+                {
+                  "code": "57905-2"
+                },
+                {
+                  "code": "58453-2"
+                },
+                {
+                  "code": "80372-6"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.43"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1351",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.0",
+                  "display": "[F32.0] Major depressive disorder, single episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.1",
+                  "display": "[F32.1] Major depressive disorder, single episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.2",
+                  "display": "[F32.2] Major depressive disorder, single episode, severe without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.3",
+                  "display": "[F32.3] Major depressive disorder, single episode, severe with psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.4",
+                  "display": "[F32.4] Major depressive disorder, single episode, in partial remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.5",
+                  "display": "[F32.5] Major depressive disorder, single episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F32.9",
+                  "display": "[F32.9] Major depressive disorder, single episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.0",
+                  "display": "[F33.0] Major depressive disorder, recurrent, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.1",
+                  "display": "[F33.1] Major depressive disorder, recurrent, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.2",
+                  "display": "[F33.2] Major depressive disorder, recurrent severe without psychotic features"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.3",
+                  "display": "[F33.3] Major depressive disorder, recurrent, severe with psychotic symptoms"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.40",
+                  "display": "[F33.40] Major depressive disorder, recurrent, in remission, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.41",
+                  "display": "[F33.41] Major depressive disorder, recurrent, in partial remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.42",
+                  "display": "[F33.42] Major depressive disorder, recurrent, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F33.9",
+                  "display": "[F33.9] Major depressive disorder, recurrent, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F34.1",
+                  "display": "[F34.1] Dysthymic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.20",
+                  "display": "Major depressive affective disorder, single episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.21",
+                  "display": "Major depressive affective disorder, single episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.22",
+                  "display": "Major depressive affective disorder, single episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.23",
+                  "display": "Major depressive affective disorder, single episode, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.24",
+                  "display": "Major depressive affective disorder, single episode, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.25",
+                  "display": "Major depressive affective disorder, single episode, in partial or unspecified remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.26",
+                  "display": "Major depressive affective disorder, single episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.30",
+                  "display": "Major depressive affective disorder, recurrent episode, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.31",
+                  "display": "Major depressive affective disorder, recurrent episode, mild"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.32",
+                  "display": "Major depressive affective disorder, recurrent episode, moderate"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.33",
+                  "display": "Major depressive affective disorder, recurrent episode, severe, without mention of psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.34",
+                  "display": "Major depressive affective disorder, recurrent episode, severe, specified as with psychotic behavior"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.35",
+                  "display": "Major depressive affective disorder, recurrent episode, in partial or unspecified remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "296.36",
+                  "display": "Major depressive affective disorder, recurrent episode, in full remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "300.4",
+                  "display": "Dysthymic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "832007",
+                  "display": "Moderate major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "2506003",
+                  "display": "Early onset dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "2618002",
+                  "display": "Chronic recurrent major depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "3109008",
+                  "display": "Secondary dysthymia early onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14183003",
+                  "display": "Chronic major depressive disorder, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15193003",
+                  "display": "Severe recurrent major depression with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "15639000",
+                  "display": "Moderate major depression, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "18818009",
+                  "display": "Moderate recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19527009",
+                  "display": "Single episode of major depression in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "19694002",
+                  "display": "Late onset dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "20250007",
+                  "display": "Severe major depression, single episode, with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "25922000",
+                  "display": "Major depressive disorder, single episode with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "28475009",
+                  "display": "Severe recurrent major depression with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30605009",
+                  "display": "Major depression in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33078009",
+                  "display": "Severe recurrent major depression with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33135002",
+                  "display": "Recurrent major depression in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "33736005",
+                  "display": "Severe major depression with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36170009",
+                  "display": "Secondary dysthymia late onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36474008",
+                  "display": "Severe recurrent major depression without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "36923009",
+                  "display": "Major depression, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38451003",
+                  "display": "Primary dysthymia early onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38694004",
+                  "display": "Recurrent major depressive disorder with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39809009",
+                  "display": "Recurrent major depressive disorder with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "40379007",
+                  "display": "Mild recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42810003",
+                  "display": "Major depression in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42925002",
+                  "display": "Major depressive disorder, single episode with atypical features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "46244001",
+                  "display": "Recurrent major depression in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "60099002",
+                  "display": "Severe major depression with psychotic features, mood-incongruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63412003",
+                  "display": "Major depression in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63778009",
+                  "display": "Major depressive disorder, single episode with melancholic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "66344007",
+                  "display": "Recurrent major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "67711008",
+                  "display": "Primary dysthymia late onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "69392006",
+                  "display": "Major depressive disorder, single episode with catatonic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "70747007",
+                  "display": "Major depression single episode, in partial remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71336009",
+                  "display": "Recurrent major depressive disorder with postpartum onset (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "73867007",
+                  "display": "Severe major depression with psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "75084000",
+                  "display": "Severe major depression without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "76441001",
+                  "display": "Severe major depression, single episode, without psychotic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "77911002",
+                  "display": "Severe major depression, single episode, with psychotic features, mood-congruent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "78667006",
+                  "display": "Dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79298009",
+                  "display": "Mild major depression, single episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83176005",
+                  "display": "Primary dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85080004",
+                  "display": "Secondary dysthymia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "87512008",
+                  "display": "Mild major depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191601008",
+                  "display": "Single major depressive episode, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191602001",
+                  "display": "Single major depressive episode, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191604000",
+                  "display": "Single major depressive episode, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191610000",
+                  "display": "Recurrent major depressive episodes, mild (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191611001",
+                  "display": "Recurrent major depressive episodes, moderate (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191613003",
+                  "display": "Recurrent major depressive episodes, severe, with psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191615005",
+                  "display": "Recurrent major depressive episodes, in full remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231499006",
+                  "display": "Endogenous depression first episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268620009",
+                  "display": "Single major depressive episode (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268621008",
+                  "display": "Recurrent major depressive episodes (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "274948002",
+                  "display": "Endogenous depression - recurrent (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "300706003",
+                  "display": "Endogenous depression (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "319768000",
+                  "display": "Recurrent major depressive disorder with melancholic features (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "320751009",
+                  "display": "Major depression, melancholic type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "370143000",
+                  "display": "Major depressive disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "430852001",
+                  "display": "Severe major depression, single episode, with psychotic features (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1351"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1265.26",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.26",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "87620"
+                },
+                {
+                  "code": "87621"
+                },
+                {
+                  "code": "87622"
+                },
+                {
+                  "code": "87624"
+                },
+                {
+                  "code": "87625"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.26"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1093.41",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.41",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "http://www.ama-assn.org/go/cpt",
+              "version": "2017.3.16AB",
+              "concept": [
+                {
+                  "code": "82274"
+                },
+                {
+                  "code": "82270"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.41"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1352",
+        "status": "draft",
+        "compose": {
+          "include": [
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.0",
+                  "display": "[F20.0] Paranoid schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.1",
+                  "display": "[F20.1] Disorganized schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.2",
+                  "display": "[F20.2] Catatonic schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.3",
+                  "display": "[F20.3] Undifferentiated schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.5",
+                  "display": "[F20.5] Residual schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.81",
+                  "display": "[F20.81] Schizophreniform disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.89",
+                  "display": "[F20.89] Other schizophrenia"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F20.9",
+                  "display": "[F20.9] Schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F23",
+                  "display": "[F23] Brief psychotic disorder"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F25.0",
+                  "display": "[F25.0] Schizoaffective disorder, bipolar type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F25.1",
+                  "display": "[F25.1] Schizoaffective disorder, depressive type"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F25.8",
+                  "display": "[F25.8] Other schizoaffective disorders"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F25.9",
+                  "display": "[F25.9] Schizoaffective disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-10-cm",
+              "version": "2018.1.17AA",
+              "concept": [
+                {
+                  "code": "F28",
+                  "display": "[F28] Other psychotic disorder not due to a substance or known physiological condition"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.00",
+                  "display": "Simple type schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.01",
+                  "display": "Simple type schizophrenia, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.02",
+                  "display": "Simple type schizophrenia, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.03",
+                  "display": "Simple type schizophrenia, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.04",
+                  "display": "Simple type schizophrenia, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.05",
+                  "display": "Simple type schizophrenia, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.10",
+                  "display": "Disorganized type schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.11",
+                  "display": "Disorganized type schizophrenia, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.12",
+                  "display": "Disorganized type schizophrenia, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.13",
+                  "display": "Disorganized type schizophrenia, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.14",
+                  "display": "Disorganized type schizophrenia, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.15",
+                  "display": "Disorganized type schizophrenia, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.20",
+                  "display": "Catatonic type schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.21",
+                  "display": "Catatonic type schizophrenia, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.22",
+                  "display": "Catatonic type schizophrenia, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.23",
+                  "display": "Catatonic type schizophrenia, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.24",
+                  "display": "Catatonic type schizophrenia, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.25",
+                  "display": "Catatonic type schizophrenia, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.30",
+                  "display": "Paranoid type schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.31",
+                  "display": "Paranoid type schizophrenia, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.32",
+                  "display": "Paranoid type schizophrenia, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.33",
+                  "display": "Paranoid type schizophrenia, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.34",
+                  "display": "Paranoid type schizophrenia, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.35",
+                  "display": "Paranoid type schizophrenia, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.40",
+                  "display": "Schizophreniform disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.41",
+                  "display": "Schizophreniform disorder, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.42",
+                  "display": "Schizophreniform disorder, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.43",
+                  "display": "Schizophreniform disorder, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.44",
+                  "display": "Schizophreniform disorder, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.45",
+                  "display": "Schizophreniform disorder, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.50",
+                  "display": "Latent schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.51",
+                  "display": "Latent schizophrenia, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.52",
+                  "display": "Latent schizophrenia, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.53",
+                  "display": "Latent schizophrenia, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.54",
+                  "display": "Latent schizophrenia, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.55",
+                  "display": "Latent schizophrenia, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.60",
+                  "display": "Schizophrenic disorders, residual type, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.61",
+                  "display": "Schizophrenic disorders, residual type, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.62",
+                  "display": "Schizophrenic disorders, residual type, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.63",
+                  "display": "Schizophrenic disorders, residual type, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.64",
+                  "display": "Schizophrenic disorders, residual type, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.65",
+                  "display": "Schizophrenic disorders, residual type, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.70",
+                  "display": "Schizoaffective disorder, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.71",
+                  "display": "Schizoaffective disorder, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.72",
+                  "display": "Schizoaffective disorder, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.73",
+                  "display": "Schizoaffective disorder, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.74",
+                  "display": "Schizoaffective disorder, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.75",
+                  "display": "Schizoaffective disorder, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.80",
+                  "display": "Other specified types of schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.81",
+                  "display": "Other specified types of schizophrenia, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.82",
+                  "display": "Other specified types of schizophrenia, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.83",
+                  "display": "Other specified types of schizophrenia, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.84",
+                  "display": "Other specified types of schizophrenia, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.85",
+                  "display": "Other specified types of schizophrenia, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.90",
+                  "display": "Unspecified schizophrenia, unspecified"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.91",
+                  "display": "Unspecified schizophrenia, subchronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.92",
+                  "display": "Unspecified schizophrenia, chronic"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.93",
+                  "display": "Unspecified schizophrenia, subchronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.94",
+                  "display": "Unspecified schizophrenia, chronic with acute exacerbation"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "295.95",
+                  "display": "Unspecified schizophrenia, in remission"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "298.0",
+                  "display": "Depressive type psychosis"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "298.1",
+                  "display": "Excitative type psychosis"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "298.2",
+                  "display": "Reactive confusion"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "298.3",
+                  "display": "Acute paranoid reaction"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "298.4",
+                  "display": "Psychogenic paranoid psychosis"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "298.8",
+                  "display": "Other and unspecified reactive psychosis"
+                }
+              ]
+            },
+            {
+              "system": "http://hl7.org/fhir/sid/icd-9-cm",
+              "version": "2014.1.13AA",
+              "concept": [
+                {
+                  "code": "298.9",
+                  "display": "Unspecified psychosis"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "4926007",
+                  "display": "Schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "5464005",
+                  "display": "Brief reactive psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "7025000",
+                  "display": "Subchronic undifferentiated schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "12939007",
+                  "display": "Chronic disorganized schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "14291003",
+                  "display": "Subchronic disorganized schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "16990005",
+                  "display": "Subchronic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "26025008",
+                  "display": "Residual schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "27387000",
+                  "display": "Subchronic disorganized schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "29599000",
+                  "display": "Chronic undifferentiated schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "30336007",
+                  "display": "Chronic residual schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31373002",
+                  "display": "Disorganized schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "31658008",
+                  "display": "Chronic paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35218008",
+                  "display": "Chronic disorganized schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "35252006",
+                  "display": "Disorganized schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "38368003",
+                  "display": "Schizoaffective disorder, bipolar type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "39610001",
+                  "display": "Undifferentiated schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "42868002",
+                  "display": "Subchronic catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "51133006",
+                  "display": "Residual schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "58214004",
+                  "display": "Schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "63181006",
+                  "display": "Paranoid schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "64905009",
+                  "display": "Paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68890003",
+                  "display": "Schizoaffective disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "68995007",
+                  "display": "Chronic catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "70814008",
+                  "display": "Subchronic residual schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "71103003",
+                  "display": "Chronic residual schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "76566000",
+                  "display": "Subchronic residual schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79204003",
+                  "display": "Chronic undifferentiated schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "79866005",
+                  "display": "Subchronic paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "83746006",
+                  "display": "Chronic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "84760002",
+                  "display": "Schizoaffective disorder, depressive type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "85861002",
+                  "display": "Subchronic undifferentiated schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111482003",
+                  "display": "Subchronic schizophrenia with acute exacerbations (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111483008",
+                  "display": "Catatonic schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "111484002",
+                  "display": "Undifferentiated schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191526005",
+                  "display": "Schizophrenic disorders (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191527001",
+                  "display": "Simple schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191530008",
+                  "display": "Acute exacerbation of subchronic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191531007",
+                  "display": "Acute exacerbation of chronic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191536002",
+                  "display": "Subchronic hebephrenic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191537006",
+                  "display": "Chronic hebephrenic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191538001",
+                  "display": "Acute exacerbation of subchronic hebephrenic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191539009",
+                  "display": "Acute exacerbation of chronic hebephrenic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191540006",
+                  "display": "Hebephrenic schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191542003",
+                  "display": "Catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191547009",
+                  "display": "Acute exacerbation of subchronic catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191548004",
+                  "display": "Acute exacerbation of chronic catatonic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191554003",
+                  "display": "Acute exacerbation of subchronic paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191555002",
+                  "display": "Acute exacerbation of chronic paranoid schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191559008",
+                  "display": "Latent schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191564007",
+                  "display": "Acute exacerbation of chronic latent schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191567000",
+                  "display": "Schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191569002",
+                  "display": "Subchronic schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191570001",
+                  "display": "Chronic schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191571002",
+                  "display": "Acute exacerbation of subchronic schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191572009",
+                  "display": "Acute exacerbation of chronic schizoaffective schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191574005",
+                  "display": "Schizoaffective schizophrenia in remission (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191577003",
+                  "display": "Cenesthopathic schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "191680007",
+                  "display": "Psychogenic paranoid psychosis (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231437006",
+                  "display": "Reactive psychoses (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "231489001",
+                  "display": "Acute transient psychotic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "268624000",
+                  "display": "Acute paranoid reaction (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "270901009",
+                  "display": "Schizoaffective disorder, mixed type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "271428004",
+                  "display": "Schizoaffective disorder, manic type (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "274952002",
+                  "display": "Borderline schizophrenia (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "278853003",
+                  "display": "Acute schizophrenia-like psychotic disorder (disorder)"
+                }
+              ]
+            },
+            {
+              "system": "http://snomed.info/sct",
+              "version": "2017.03.16AB",
+              "concept": [
+                {
+                  "code": "416340002",
+                  "display": "Late onset schizophrenia (disorder)"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1352"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1265.27",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.27",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0476"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1265.27"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "ValueSet",
+        "id": "2.16.840.1.113883.3.464.1004.1093.42",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.42",
+        "status": "active",
+        "compose": {
+          "include": [
+            {
+              "system": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+              "version": "2017.5.17AA",
+              "concept": [
+                {
+                  "code": "G0397"
+                }
+              ]
+            }
+          ]
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "ValueSet/2.16.840.1.113883.3.464.1004.1093.42"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.285",
+        "url": "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "G0396",
+            "display": "Alcohol and/or substance (other than tobacco) abuse structured assessment (e.g., audit, dast), and brief intervention 15 to 30 minutes (G0396)"
+          },
+          {
+            "code": "G0397",
+            "display": "Alcohol and/or substance (other than tobacco) abuse structured assessment (e.g., audit, dast), and intervention, greater than 30 minutes (G0397)"
+          },
+          {
+            "code": "G0443",
+            "display": "Brief face-to-face behavioral counseling for alcohol misuse, 15 minutes (G0443)"
+          },
+          {
+            "code": "H0005",
+            "display": "Alcohol and/or drug services; group counseling by a clinician (H0005)"
+          },
+          {
+            "code": "H0007",
+            "display": "Alcohol and/or drug services; crisis intervention (outpatient) (H0007)"
+          },
+          {
+            "code": "H0015",
+            "display": "Alcohol and/or drug services; intensive outpatient (treatment program that operates at least 3 hours/day and at least 3 days/week and is based on an individualized treatment plan), including assessment, counseling; crisis intervention, and activity therapies or education (H0015)"
+          },
+          {
+            "code": "H0016",
+            "display": "Alcohol and/or drug services; medical/somatic (medical intervention in ambulatory setting) (H0016)"
+          },
+          {
+            "code": "H0022",
+            "display": "Alcohol and/or drug intervention service (planned facilitation) (H0022)"
+          },
+          {
+            "code": "H0050",
+            "display": "Alcohol and/or drug services, brief intervention, per 15 minutes (H0050)"
+          },
+          {
+            "code": "H2035",
+            "display": "Alcohol and/or other drug treatment program, per hour (H2035)"
+          },
+          {
+            "code": "H2036",
+            "display": "Alcohol and/or other drug treatment program, per diem (H2036)"
+          },
+          {
+            "code": "T1006",
+            "display": "Alcohol and/or substance abuse services, family/couple counseling (T1006)"
+          },
+          {
+            "code": "T1012",
+            "display": "Alcohol and/or substance abuse services, skills development (T1012)"
+          },
+          {
+            "code": "G0442",
+            "display": "Annual alcohol misuse screening, 15 minutes (G0442)"
+          },
+          {
+            "code": "H0001",
+            "display": "Alcohol and/or drug assessment (H0001)"
+          },
+          {
+            "code": "H0049",
+            "display": "Alcohol and/or drug screening (H0049)"
+          },
+          {
+            "code": "G0182",
+            "display": "Physician supervision of a patient under a medicare-approved hospice (patient not present) requiring complex and multidisciplinary care modalities involving regular physician development and/or revision of care plans, review of subsequent reports of patient status, review of laboratory and other studies, communication (including telephone calls) with other health care professionals involved in the patient's care, integration of new information into the medical treatment plan and/or adjustment of medical therapy, within a calendar month, 30 minutes or more (G0182)"
+          },
+          {
+            "code": "G9473",
+            "display": "Services performed by chaplain in the hospice setting, each 15 minutes (G9473)"
+          },
+          {
+            "code": "G9474",
+            "display": "Services performed by dietary counselor in the hospice setting, each 15 minutes (G9474)"
+          },
+          {
+            "code": "G9475",
+            "display": "Services performed by other counselor in the hospice setting, each 15 minutes (G9475)"
+          },
+          {
+            "code": "G9476",
+            "display": "Services performed by volunteer in the hospice setting, each 15 minutes (G9476)"
+          },
+          {
+            "code": "G9477",
+            "display": "Services performed by care coordinator in the hospice setting, each 15 minutes (G9477)"
+          },
+          {
+            "code": "G9478",
+            "display": "Services performed by other qualified therapist in the hospice setting, each 15 minutes (G9478)"
+          },
+          {
+            "code": "G9479",
+            "display": "Services performed by qualified pharmacist in the hospice setting, each 15 minutes (G9479)"
+          },
+          {
+            "code": "Q5003",
+            "display": "Hospice care provided in nursing long term care facility (ltc) or non-skilled nursing facility (nf) (Q5003)"
+          },
+          {
+            "code": "Q5004",
+            "display": "Hospice care provided in skilled nursing facility (snf) (Q5004)"
+          },
+          {
+            "code": "Q5005",
+            "display": "Hospice care provided in inpatient hospital (Q5005)"
+          },
+          {
+            "code": "Q5006",
+            "display": "Hospice care provided in inpatient hospice facility (Q5006)"
+          },
+          {
+            "code": "Q5007",
+            "display": "Hospice care provided in long term care facility (Q5007)"
+          },
+          {
+            "code": "Q5008",
+            "display": "Hospice care provided in inpatient psychiatric facility (Q5008)"
+          },
+          {
+            "code": "Q5010",
+            "display": "Hospice home care provided in a hospice facility (Q5010)"
+          },
+          {
+            "code": "S9126",
+            "display": "Hospice care, in the home, per diem (S9126)"
+          },
+          {
+            "code": "T2042",
+            "display": "Hospice routine home care; per diem (T2042)"
+          },
+          {
+            "code": "T2043",
+            "display": "Hospice continuous home care; per hour (T2043)"
+          },
+          {
+            "code": "T2044",
+            "display": "Hospice inpatient respite care; per diem (T2044)"
+          },
+          {
+            "code": "T2045",
+            "display": "Hospice general inpatient care; per diem (T2045)"
+          },
+          {
+            "code": "T2046",
+            "display": "Hospice long term care, room and board only; per diem (T2046)"
+          },
+          {
+            "code": "G0155",
+            "display": "Services of clinical social worker in home health or hospice settings, each 15 minutes (G0155)"
+          },
+          {
+            "code": "G0176",
+            "display": "Activity therapy, such as music, dance, art or play therapies not for recreation, related to the care and treatment of patient's disabling mental health problems, per session (45 minutes or more) (G0176)"
+          },
+          {
+            "code": "G0177",
+            "display": "Training and educational services related to the care and treatment of patient's disabling mental health problems per session (45 minutes or more) (G0177)"
+          },
+          {
+            "code": "G0409",
+            "display": "Social work and psychological services, directly relating to and/or furthering the patient's rehabilitation goals, each 15 minutes, face-to-face; individual (services provided by a corf-qualified social worker or psychologist in a corf) (G0409)"
+          },
+          {
+            "code": "G0410",
+            "display": "Group psychotherapy other than of a multiple-family group, in a partial hospitalization setting, approximately 45 to 50 minutes (G0410)"
+          },
+          {
+            "code": "G0411",
+            "display": "Interactive group psychotherapy, in a partial hospitalization setting, approximately 45 to 50 minutes (G0411)"
+          },
+          {
+            "code": "G0463",
+            "display": "Hospital outpatient clinic visit for assessment and management of a patient (G0463)"
+          },
+          {
+            "code": "G0502",
+            "display": "Initial psychiatric collaborative care management, first 70 minutes in the first calendar month of behavioral health care manager activities, in consultation with a psychiatric consultant, and directed by the treating physician or other qualified health care professional, with the following required elements: outreach to and engagement in treatment of a patient directed by the treating physician or other qualified health care professional; initial assessment of the patient, including administration of validated rating scales, with the development of an individualized treatment plan; review by the psychiatric consultant with modifications of the plan if recommended; entering patient in a registry and tracking patient follow-up and (G0502)"
+          },
+          {
+            "code": "G0503",
+            "display": "Subsequent psychiatric collaborative care management, first 60 minutes in a subsequent month of behavioral health care manager activities, in consultation with a psychiatric consultant, and directed by the treating physician or other qualified health care professional, with the following required elements: tracking patient follow-up and progress using the registry, with appropriate documentation; participation in weekly caseload consultation with the psychiatric consultant; ongoing collaboration with and coordination of the patient's mental health care with the treating physician or other qualified health care professional and any other treating mental health providers; additional review of progress and recommendations for changes (G0503)"
+          },
+          {
+            "code": "G0507",
+            "display": "Care management services for behavioral health conditions, at least 20 minutes of clinical staff time, directed by a physician or other qualified health care professional, per calendar month, with the following required elements: initial assessment or follow-up monitoring, including the use of applicable validated rating scales; behavioral health care planning in relation to behavioral/psychiatric health problems, including revision for patients who are not progressing or whose status changes; facilitating and coordinating treatment such as psychotherapy, pharmacotherapy, counseling and/or psychiatric consultation; and continuity of care with a designated member of the care team (G0507)"
+          },
+          {
+            "code": "H0002",
+            "display": "Behavioral health screening to determine eligibility for admission to treatment program (H0002)"
+          },
+          {
+            "code": "H0004",
+            "display": "Behavioral health counseling and therapy, per 15 minutes (H0004)"
+          },
+          {
+            "code": "H0031",
+            "display": "Mental health assessment, by non-physician (H0031)"
+          },
+          {
+            "code": "H0034",
+            "display": "Medication training and support, per 15 minutes (H0034)"
+          },
+          {
+            "code": "H0035",
+            "display": "Mental health partial hospitalization, treatment, less than 24 hours (H0035)"
+          },
+          {
+            "code": "H0036",
+            "display": "Community psychiatric supportive treatment, face-to-face, per 15 minutes (H0036)"
+          },
+          {
+            "code": "H0037",
+            "display": "Community psychiatric supportive treatment program, per diem (H0037)"
+          },
+          {
+            "code": "H0039",
+            "display": "Assertive community treatment, face-to-face, per 15 minutes (H0039)"
+          },
+          {
+            "code": "H0040",
+            "display": "Assertive community treatment program, per diem (H0040)"
+          },
+          {
+            "code": "H2000",
+            "display": "Comprehensive multidisciplinary evaluation (H2000)"
+          },
+          {
+            "code": "H2001",
+            "display": "Rehabilitation program, per 1/2 day (H2001)"
+          },
+          {
+            "code": "H2010",
+            "display": "Comprehensive medication services, per 15 minutes (H2010)"
+          },
+          {
+            "code": "H2011",
+            "display": "Crisis intervention service, per 15 minutes (H2011)"
+          },
+          {
+            "code": "H2012",
+            "display": "Behavioral health day treatment, per hour (H2012)"
+          },
+          {
+            "code": "H2013",
+            "display": "Psychiatric health facility service, per diem (H2013)"
+          },
+          {
+            "code": "H2014",
+            "display": "Skills training and development, per 15 minutes (H2014)"
+          },
+          {
+            "code": "H2015",
+            "display": "Comprehensive community support services, per 15 minutes (H2015)"
+          },
+          {
+            "code": "H2016",
+            "display": "Comprehensive community support services, per diem (H2016)"
+          },
+          {
+            "code": "H2017",
+            "display": "Psychosocial rehabilitation services, per 15 minutes (H2017)"
+          },
+          {
+            "code": "H2018",
+            "display": "Psychosocial rehabilitation services, per diem (H2018)"
+          },
+          {
+            "code": "H2019",
+            "display": "Therapeutic behavioral services, per 15 minutes (H2019)"
+          },
+          {
+            "code": "H2020",
+            "display": "Therapeutic behavioral services, per diem (H2020)"
+          },
+          {
+            "code": "M0064",
+            "display": "Brief office visit for the sole purpose of monitoring or changing drug prescriptions used in the treatment of mental psychoneurotic and personality disorders (M0064)"
+          },
+          {
+            "code": "S0201",
+            "display": "Partial hospitalization services, less than 24 hours, per diem (S0201)"
+          },
+          {
+            "code": "S9480",
+            "display": "Intensive outpatient psychiatric services, per diem (S9480)"
+          },
+          {
+            "code": "S9484",
+            "display": "Crisis intervention mental health services, per hour (S9484)"
+          },
+          {
+            "code": "S9485",
+            "display": "Crisis intervention mental health services, per diem (S9485)"
+          },
+          {
+            "code": "T1015",
+            "display": "Clinic visit/encounter, all-inclusive (T1015)"
+          },
+          {
+            "code": "T1016",
+            "display": "Case management, each 15 minutes (T1016)"
+          },
+          {
+            "code": "T1017",
+            "display": "Targeted case management, each 15 minutes (T1017)"
+          },
+          {
+            "code": "T2022",
+            "display": "Case management, per month (T2022)"
+          },
+          {
+            "code": "T2023",
+            "display": "Targeted case management; per month (T2023)"
+          },
+          {
+            "code": "G8431",
+            "display": "Screening for depression is documented as being positive and a follow-up plan is documented (G8431)"
+          },
+          {
+            "code": "G8510",
+            "display": "Screening for depression is documented as negative, a follow-up plan is not required (G8510)"
+          },
+          {
+            "code": "G8511",
+            "display": "Screening for depression documented as positive, follow-up plan not documented, reason not given (G8511)"
+          },
+          {
+            "code": "G0202"
+          },
+          {
+            "code": "G0204"
+          },
+          {
+            "code": "G0206"
+          },
+          {
+            "code": "G0147"
+          },
+          {
+            "code": "G0148"
+          },
+          {
+            "code": "G0141"
+          },
+          {
+            "code": "G0124"
+          },
+          {
+            "code": "G0123"
+          },
+          {
+            "code": "G0143"
+          },
+          {
+            "code": "G0145"
+          },
+          {
+            "code": "G0144"
+          },
+          {
+            "code": "P3000"
+          },
+          {
+            "code": "P3001"
+          },
+          {
+            "code": "Q0091"
+          },
+          {
+            "code": "G0476"
+          },
+          {
+            "code": "G0245"
+          },
+          {
+            "code": "G0464"
+          },
+          {
+            "code": "L8614",
+            "display": "Cochlear device, includes all internal and external components (L8614)"
+          },
+          {
+            "code": "L8619",
+            "display": "Cochlear implant, external speech processor and controller, integrated system, replacement (L8619)"
+          },
+          {
+            "code": "L8627",
+            "display": "Cochlear implant, external speech processor, component, replacement (L8627)"
+          },
+          {
+            "code": "L8628",
+            "display": "Cochlear implant, external controller component, replacement (L8628)"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.285"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.42",
+        "url": "http://hl7.org/fhir/sid/icd-9-cm",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "290.0",
+            "display": "Senile dementia, uncomplicated"
+          },
+          {
+            "code": "290.10",
+            "display": "Presenile dementia, uncomplicated"
+          },
+          {
+            "code": "290.11",
+            "display": "Presenile dementia with delirium"
+          },
+          {
+            "code": "290.12",
+            "display": "Presenile dementia with delusional features"
+          },
+          {
+            "code": "290.13",
+            "display": "Presenile dementia with depressive features"
+          },
+          {
+            "code": "290.20",
+            "display": "Senile dementia with delusional features"
+          },
+          {
+            "code": "290.21",
+            "display": "Senile dementia with depressive features"
+          },
+          {
+            "code": "290.3",
+            "display": "Senile dementia with delirium"
+          },
+          {
+            "code": "290.40",
+            "display": "Vascular dementia, uncomplicated"
+          },
+          {
+            "code": "290.41",
+            "display": "Vascular dementia, with delirium"
+          },
+          {
+            "code": "290.42",
+            "display": "Vascular dementia, with delusions"
+          },
+          {
+            "code": "290.43",
+            "display": "Vascular dementia, with depressed mood"
+          },
+          {
+            "code": "290.8",
+            "display": "Other specified senile psychotic conditions"
+          },
+          {
+            "code": "290.9",
+            "display": "Unspecified senile psychotic condition"
+          },
+          {
+            "code": "291.2",
+            "display": "Alcohol-induced persisting dementia"
+          },
+          {
+            "code": "292.82",
+            "display": "Drug-induced persisting dementia"
+          },
+          {
+            "code": "294.0",
+            "display": "Amnestic disorder in conditions classified elsewhere"
+          },
+          {
+            "code": "294.10",
+            "display": "Dementia in conditions classified elsewhere without behavioral disturbance"
+          },
+          {
+            "code": "294.11",
+            "display": "Dementia in conditions classified elsewhere with behavioral disturbance"
+          },
+          {
+            "code": "294.20",
+            "display": "Dementia, unspecified, without behavioral disturbance"
+          },
+          {
+            "code": "294.21",
+            "display": "Dementia, unspecified, with behavioral disturbance"
+          },
+          {
+            "code": "331.0",
+            "display": "Alzheimer's disease"
+          },
+          {
+            "code": "331.82",
+            "display": "Dementia with lewy bodies"
+          },
+          {
+            "code": "296.00",
+            "display": "Bipolar I disorder, single manic episode, unspecified"
+          },
+          {
+            "code": "296.01",
+            "display": "Bipolar I disorder, single manic episode, mild"
+          },
+          {
+            "code": "296.02",
+            "display": "Bipolar I disorder, single manic episode, moderate"
+          },
+          {
+            "code": "296.03",
+            "display": "Bipolar I disorder, single manic episode, severe, without mention of psychotic behavior"
+          },
+          {
+            "code": "296.04",
+            "display": "Bipolar I disorder, single manic episode, severe, specified as with psychotic behavior"
+          },
+          {
+            "code": "296.05",
+            "display": "Bipolar I disorder, single manic episode, in partial or unspecified remission"
+          },
+          {
+            "code": "296.06",
+            "display": "Bipolar I disorder, single manic episode, in full remission"
+          },
+          {
+            "code": "296.10",
+            "display": "Manic affective disorder, recurrent episode, unspecified"
+          },
+          {
+            "code": "296.11",
+            "display": "Manic affective disorder, recurrent episode, mild"
+          },
+          {
+            "code": "296.12",
+            "display": "Manic affective disorder, recurrent episode, moderate"
+          },
+          {
+            "code": "296.13",
+            "display": "Manic affective disorder, recurrent episode, severe, without mention of psychotic behavior"
+          },
+          {
+            "code": "296.14",
+            "display": "Manic affective disorder, recurrent episode, severe, specified as with psychotic behavior"
+          },
+          {
+            "code": "296.15",
+            "display": "Manic affective disorder, recurrent episode, in partial or unspecified remission"
+          },
+          {
+            "code": "296.16",
+            "display": "Manic affective disorder, recurrent episode, in full remission"
+          },
+          {
+            "code": "296.40",
+            "display": "Bipolar I disorder, most recent episode (or current) manic, unspecified"
+          },
+          {
+            "code": "296.41",
+            "display": "Bipolar I disorder, most recent episode (or current) manic, mild"
+          },
+          {
+            "code": "296.42",
+            "display": "Bipolar I disorder, most recent episode (or current) manic, moderate"
+          },
+          {
+            "code": "296.43",
+            "display": "Bipolar I disorder, most recent episode (or current) manic, severe, without mention of psychotic behavior"
+          },
+          {
+            "code": "296.44",
+            "display": "Bipolar I disorder, most recent episode (or current) manic, severe, specified as with psychotic behavior"
+          },
+          {
+            "code": "296.45",
+            "display": "Bipolar I disorder, most recent episode (or current) manic, in partial or unspecified remission"
+          },
+          {
+            "code": "296.46",
+            "display": "Bipolar I disorder, most recent episode (or current) manic, in full remission"
+          },
+          {
+            "code": "296.50",
+            "display": "Bipolar I disorder, most recent episode (or current) depressed, unspecified"
+          },
+          {
+            "code": "296.51",
+            "display": "Bipolar I disorder, most recent episode (or current) depressed, mild"
+          },
+          {
+            "code": "296.52",
+            "display": "Bipolar I disorder, most recent episode (or current) depressed, moderate"
+          },
+          {
+            "code": "296.53",
+            "display": "Bipolar I disorder, most recent episode (or current) depressed, severe, without mention of psychotic behavior"
+          },
+          {
+            "code": "296.54",
+            "display": "Bipolar I disorder, most recent episode (or current) depressed, severe, specified as with psychotic behavior"
+          },
+          {
+            "code": "296.55",
+            "display": "Bipolar I disorder, most recent episode (or current) depressed, in partial or unspecified remission"
+          },
+          {
+            "code": "296.56",
+            "display": "Bipolar I disorder, most recent episode (or current) depressed, in full remission"
+          },
+          {
+            "code": "296.60",
+            "display": "Bipolar I disorder, most recent episode (or current) mixed, unspecified"
+          },
+          {
+            "code": "296.61",
+            "display": "Bipolar I disorder, most recent episode (or current) mixed, mild"
+          },
+          {
+            "code": "296.62",
+            "display": "Bipolar I disorder, most recent episode (or current) mixed, moderate"
+          },
+          {
+            "code": "296.63",
+            "display": "Bipolar I disorder, most recent episode (or current) mixed, severe, without mention of psychotic behavior"
+          },
+          {
+            "code": "296.64",
+            "display": "Bipolar I disorder, most recent episode (or current) mixed, severe, specified as with psychotic behavior"
+          },
+          {
+            "code": "296.65",
+            "display": "Bipolar I disorder, most recent episode (or current) mixed, in partial or unspecified remission"
+          },
+          {
+            "code": "296.66",
+            "display": "Bipolar I disorder, most recent episode (or current) mixed, in full remission"
+          },
+          {
+            "code": "296.7",
+            "display": "Bipolar I disorder, most recent episode (or current) unspecified"
+          },
+          {
+            "code": "296.20",
+            "display": "Major depressive affective disorder, single episode, unspecified"
+          },
+          {
+            "code": "296.21",
+            "display": "Major depressive affective disorder, single episode, mild"
+          },
+          {
+            "code": "296.22",
+            "display": "Major depressive affective disorder, single episode, moderate"
+          },
+          {
+            "code": "296.23",
+            "display": "Major depressive affective disorder, single episode, severe, without mention of psychotic behavior"
+          },
+          {
+            "code": "296.24",
+            "display": "Major depressive affective disorder, single episode, severe, specified as with psychotic behavior"
+          },
+          {
+            "code": "296.25",
+            "display": "Major depressive affective disorder, single episode, in partial or unspecified remission"
+          },
+          {
+            "code": "296.26",
+            "display": "Major depressive affective disorder, single episode, in full remission"
+          },
+          {
+            "code": "296.30",
+            "display": "Major depressive affective disorder, recurrent episode, unspecified"
+          },
+          {
+            "code": "296.31",
+            "display": "Major depressive affective disorder, recurrent episode, mild"
+          },
+          {
+            "code": "296.32",
+            "display": "Major depressive affective disorder, recurrent episode, moderate"
+          },
+          {
+            "code": "296.33",
+            "display": "Major depressive affective disorder, recurrent episode, severe, without mention of psychotic behavior"
+          },
+          {
+            "code": "296.34",
+            "display": "Major depressive affective disorder, recurrent episode, severe, specified as with psychotic behavior"
+          },
+          {
+            "code": "296.35",
+            "display": "Major depressive affective disorder, recurrent episode, in partial or unspecified remission"
+          },
+          {
+            "code": "296.36",
+            "display": "Major depressive affective disorder, recurrent episode, in full remission"
+          },
+          {
+            "code": "300.4",
+            "display": "Dysthymic disorder"
+          },
+          {
+            "code": "296.80",
+            "display": "Bipolar disorder, unspecified"
+          },
+          {
+            "code": "296.81",
+            "display": "Atypical manic disorder"
+          },
+          {
+            "code": "296.82",
+            "display": "Atypical depressive disorder"
+          },
+          {
+            "code": "296.89",
+            "display": "Other bipolar disorders"
+          },
+          {
+            "code": "301.10",
+            "display": "Affective personality disorder, unspecified"
+          },
+          {
+            "code": "301.13",
+            "display": "Cyclothymic disorder"
+          },
+          {
+            "code": "301.3",
+            "display": "Explosive personality disorder"
+          },
+          {
+            "code": "301.50",
+            "display": "Histrionic personality disorder, unspecified"
+          },
+          {
+            "code": "301.51",
+            "display": "Chronic factitious illness with physical symptoms"
+          },
+          {
+            "code": "301.59",
+            "display": "Other histrionic personality disorder"
+          },
+          {
+            "code": "301.83",
+            "display": "Borderline personality disorder"
+          },
+          {
+            "code": "299.00",
+            "display": "Autistic disorder, current or active state"
+          },
+          {
+            "code": "299.01",
+            "display": "Autistic disorder, residual state"
+          },
+          {
+            "code": "299.10",
+            "display": "Childhood disintegrative disorder, current or active state"
+          },
+          {
+            "code": "299.11",
+            "display": "Childhood disintegrative disorder, residual state"
+          },
+          {
+            "code": "299.80",
+            "display": "Other specified pervasive developmental disorders, current or active state"
+          },
+          {
+            "code": "299.81",
+            "display": "Other specified pervasive developmental disorders, residual state"
+          },
+          {
+            "code": "299.90",
+            "display": "Unspecified pervasive developmental disorder, current or active state"
+          },
+          {
+            "code": "299.91",
+            "display": "Unspecified pervasive developmental disorder, residual state"
+          },
+          {
+            "code": "295.00",
+            "display": "Simple type schizophrenia, unspecified"
+          },
+          {
+            "code": "295.01",
+            "display": "Simple type schizophrenia, subchronic"
+          },
+          {
+            "code": "295.02",
+            "display": "Simple type schizophrenia, chronic"
+          },
+          {
+            "code": "295.03",
+            "display": "Simple type schizophrenia, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.04",
+            "display": "Simple type schizophrenia, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.05",
+            "display": "Simple type schizophrenia, in remission"
+          },
+          {
+            "code": "295.10",
+            "display": "Disorganized type schizophrenia, unspecified"
+          },
+          {
+            "code": "295.11",
+            "display": "Disorganized type schizophrenia, subchronic"
+          },
+          {
+            "code": "295.12",
+            "display": "Disorganized type schizophrenia, chronic"
+          },
+          {
+            "code": "295.13",
+            "display": "Disorganized type schizophrenia, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.14",
+            "display": "Disorganized type schizophrenia, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.15",
+            "display": "Disorganized type schizophrenia, in remission"
+          },
+          {
+            "code": "295.20",
+            "display": "Catatonic type schizophrenia, unspecified"
+          },
+          {
+            "code": "295.21",
+            "display": "Catatonic type schizophrenia, subchronic"
+          },
+          {
+            "code": "295.22",
+            "display": "Catatonic type schizophrenia, chronic"
+          },
+          {
+            "code": "295.23",
+            "display": "Catatonic type schizophrenia, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.24",
+            "display": "Catatonic type schizophrenia, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.25",
+            "display": "Catatonic type schizophrenia, in remission"
+          },
+          {
+            "code": "295.30",
+            "display": "Paranoid type schizophrenia, unspecified"
+          },
+          {
+            "code": "295.31",
+            "display": "Paranoid type schizophrenia, subchronic"
+          },
+          {
+            "code": "295.32",
+            "display": "Paranoid type schizophrenia, chronic"
+          },
+          {
+            "code": "295.33",
+            "display": "Paranoid type schizophrenia, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.34",
+            "display": "Paranoid type schizophrenia, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.35",
+            "display": "Paranoid type schizophrenia, in remission"
+          },
+          {
+            "code": "295.40",
+            "display": "Schizophreniform disorder, unspecified"
+          },
+          {
+            "code": "295.41",
+            "display": "Schizophreniform disorder, subchronic"
+          },
+          {
+            "code": "295.42",
+            "display": "Schizophreniform disorder, chronic"
+          },
+          {
+            "code": "295.43",
+            "display": "Schizophreniform disorder, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.44",
+            "display": "Schizophreniform disorder, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.45",
+            "display": "Schizophreniform disorder, in remission"
+          },
+          {
+            "code": "295.50",
+            "display": "Latent schizophrenia, unspecified"
+          },
+          {
+            "code": "295.51",
+            "display": "Latent schizophrenia, subchronic"
+          },
+          {
+            "code": "295.52",
+            "display": "Latent schizophrenia, chronic"
+          },
+          {
+            "code": "295.53",
+            "display": "Latent schizophrenia, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.54",
+            "display": "Latent schizophrenia, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.55",
+            "display": "Latent schizophrenia, in remission"
+          },
+          {
+            "code": "295.60",
+            "display": "Schizophrenic disorders, residual type, unspecified"
+          },
+          {
+            "code": "295.61",
+            "display": "Schizophrenic disorders, residual type, subchronic"
+          },
+          {
+            "code": "295.62",
+            "display": "Schizophrenic disorders, residual type, chronic"
+          },
+          {
+            "code": "295.63",
+            "display": "Schizophrenic disorders, residual type, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.64",
+            "display": "Schizophrenic disorders, residual type, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.65",
+            "display": "Schizophrenic disorders, residual type, in remission"
+          },
+          {
+            "code": "295.70",
+            "display": "Schizoaffective disorder, unspecified"
+          },
+          {
+            "code": "295.71",
+            "display": "Schizoaffective disorder, subchronic"
+          },
+          {
+            "code": "295.72",
+            "display": "Schizoaffective disorder, chronic"
+          },
+          {
+            "code": "295.73",
+            "display": "Schizoaffective disorder, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.74",
+            "display": "Schizoaffective disorder, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.75",
+            "display": "Schizoaffective disorder, in remission"
+          },
+          {
+            "code": "295.80",
+            "display": "Other specified types of schizophrenia, unspecified"
+          },
+          {
+            "code": "295.81",
+            "display": "Other specified types of schizophrenia, subchronic"
+          },
+          {
+            "code": "295.82",
+            "display": "Other specified types of schizophrenia, chronic"
+          },
+          {
+            "code": "295.83",
+            "display": "Other specified types of schizophrenia, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.84",
+            "display": "Other specified types of schizophrenia, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.85",
+            "display": "Other specified types of schizophrenia, in remission"
+          },
+          {
+            "code": "295.90",
+            "display": "Unspecified schizophrenia, unspecified"
+          },
+          {
+            "code": "295.91",
+            "display": "Unspecified schizophrenia, subchronic"
+          },
+          {
+            "code": "295.92",
+            "display": "Unspecified schizophrenia, chronic"
+          },
+          {
+            "code": "295.93",
+            "display": "Unspecified schizophrenia, subchronic with acute exacerbation"
+          },
+          {
+            "code": "295.94",
+            "display": "Unspecified schizophrenia, chronic with acute exacerbation"
+          },
+          {
+            "code": "295.95",
+            "display": "Unspecified schizophrenia, in remission"
+          },
+          {
+            "code": "298.0",
+            "display": "Depressive type psychosis"
+          },
+          {
+            "code": "298.1",
+            "display": "Excitative type psychosis"
+          },
+          {
+            "code": "298.2",
+            "display": "Reactive confusion"
+          },
+          {
+            "code": "298.3",
+            "display": "Acute paranoid reaction"
+          },
+          {
+            "code": "298.4",
+            "display": "Psychogenic paranoid psychosis"
+          },
+          {
+            "code": "298.8",
+            "display": "Other and unspecified reactive psychosis"
+          },
+          {
+            "code": "298.9",
+            "display": "Unspecified psychosis"
+          },
+          {
+            "code": "301.12",
+            "display": "Chronic depressive personality disorder"
+          },
+          {
+            "code": "309.0",
+            "display": "Adjustment disorder with depressed mood"
+          },
+          {
+            "code": "309.1",
+            "display": "Prolonged depressive reaction"
+          },
+          {
+            "code": "309.28",
+            "display": "Adjustment disorder with mixed anxiety and depressed mood"
+          },
+          {
+            "code": "311",
+            "display": "Depressive disorder, not elsewhere classified"
+          },
+          {
+            "code": "85.48"
+          },
+          {
+            "code": "85.44"
+          },
+          {
+            "code": "85.46"
+          },
+          {
+            "code": "85.42"
+          },
+          {
+            "code": "87.37"
+          },
+          {
+            "code": "87.36"
+          },
+          {
+            "code": "85.47"
+          },
+          {
+            "code": "85.43"
+          },
+          {
+            "code": "85.45"
+          },
+          {
+            "code": "85.41"
+          },
+          {
+            "code": "V88.01"
+          },
+          {
+            "code": "V88.03"
+          },
+          {
+            "code": "752.43"
+          },
+          {
+            "code": "618.5"
+          },
+          {
+            "code": "68.61"
+          },
+          {
+            "code": "68.71"
+          },
+          {
+            "code": "68.41"
+          },
+          {
+            "code": "68.51"
+          },
+          {
+            "code": "68.69"
+          },
+          {
+            "code": "68.79"
+          },
+          {
+            "code": "68.49"
+          },
+          {
+            "code": "68.59"
+          },
+          {
+            "code": "68.8"
+          },
+          {
+            "code": "45.22"
+          },
+          {
+            "code": "45.23"
+          },
+          {
+            "code": "45.25"
+          },
+          {
+            "code": "45.42"
+          },
+          {
+            "code": "45.43"
+          },
+          {
+            "code": "153.0"
+          },
+          {
+            "code": "153.1"
+          },
+          {
+            "code": "153.2"
+          },
+          {
+            "code": "153.3"
+          },
+          {
+            "code": "153.4"
+          },
+          {
+            "code": "153.5"
+          },
+          {
+            "code": "153.6"
+          },
+          {
+            "code": "153.7"
+          },
+          {
+            "code": "153.8"
+          },
+          {
+            "code": "153.9"
+          },
+          {
+            "code": "154.0"
+          },
+          {
+            "code": "154.1"
+          },
+          {
+            "code": "197.5"
+          },
+          {
+            "code": "V10.05"
+          },
+          {
+            "code": "V10.06"
+          },
+          {
+            "code": "45.24"
+          },
+          {
+            "code": "45.81"
+          },
+          {
+            "code": "45.82"
+          },
+          {
+            "code": "45.83"
+          },
+          {
+            "code": "999.4",
+            "display": "Anaphylactic reaction due to serum [999.4]"
+          },
+          {
+            "code": "999.42",
+            "display": "Anaphylactic reaction due to vaccination"
+          },
+          {
+            "code": "279.00",
+            "display": "Hypogammaglobulinemia, unspecified"
+          },
+          {
+            "code": "279.01",
+            "display": "Selective IgA immunodeficiency"
+          },
+          {
+            "code": "279.02",
+            "display": "Selective IgM immunodeficiency"
+          },
+          {
+            "code": "279.03",
+            "display": "Other selective immunoglobulin deficiencies"
+          },
+          {
+            "code": "279.04",
+            "display": "Congenital hypogammaglobulinemia"
+          },
+          {
+            "code": "279.05",
+            "display": "Immunodeficiency with increased IgM"
+          },
+          {
+            "code": "279.06",
+            "display": "Common variable immunodeficiency"
+          },
+          {
+            "code": "279.09",
+            "display": "Other deficiency of humoral immunity"
+          },
+          {
+            "code": "279.10",
+            "display": "Immunodeficiency with predominant T-cell defect, unspecified"
+          },
+          {
+            "code": "279.11",
+            "display": "Digeorge's syndrome"
+          },
+          {
+            "code": "279.12",
+            "display": "Wiskott-aldrich syndrome"
+          },
+          {
+            "code": "279.13",
+            "display": "Nezelof's syndrome"
+          },
+          {
+            "code": "279.19",
+            "display": "Other deficiency of cell-mediated immunity"
+          },
+          {
+            "code": "279.2",
+            "display": "Combined immunity deficiency"
+          },
+          {
+            "code": "279.3",
+            "display": "Unspecified immunity deficiency"
+          },
+          {
+            "code": "279.41",
+            "display": "Autoimmune lymphoproliferative syndrome"
+          },
+          {
+            "code": "279.49",
+            "display": "Autoimmune disease, not elsewhere classified"
+          },
+          {
+            "code": "279.50",
+            "display": "Graft-versus-host disease, unspecified"
+          },
+          {
+            "code": "279.51",
+            "display": "Acute graft-versus-host disease"
+          },
+          {
+            "code": "279.52",
+            "display": "Chronic graft-versus-host disease"
+          },
+          {
+            "code": "279.53",
+            "display": "Acute on chronic graft-versus-host disease"
+          },
+          {
+            "code": "279.8",
+            "display": "Other specified disorders involving the immune mechanism"
+          },
+          {
+            "code": "279.9",
+            "display": "Unspecified disorder of immune mechanism"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.42"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.12",
+        "url": "http://www.ama-assn.org/go/cpt",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "99408",
+            "display": "AUDIT/DAST 15-30 MIN"
+          },
+          {
+            "code": "99409",
+            "display": "AUDIT/DAST OVER 30 MIN"
+          },
+          {
+            "code": "3016F",
+            "display": "PT SCRND UNHLTHY OH USE"
+          },
+          {
+            "code": "99377",
+            "display": "HOSPICE CARE SUPERVISION"
+          },
+          {
+            "code": "99378",
+            "display": "HOSPICE CARE SUPERVISION"
+          },
+          {
+            "code": "90791",
+            "display": "PSYCH DIAGNOSTIC EVALUATION"
+          },
+          {
+            "code": "90792",
+            "display": "PSYCH DIAG EVAL W/MED SRVCS"
+          },
+          {
+            "code": "90832",
+            "display": "PSYTX W PT 30 MINUTES"
+          },
+          {
+            "code": "90834",
+            "display": "PSYTX W PT 45 MINUTES"
+          },
+          {
+            "code": "90837",
+            "display": "PSYTX W PT 60 MINUTES"
+          },
+          {
+            "code": "98960",
+            "display": "SELF-MGMT EDUC & TRAIN 1 PT"
+          },
+          {
+            "code": "98961",
+            "display": "SELF-MGMT EDUC/TRAIN 2-4 PT"
+          },
+          {
+            "code": "98962",
+            "display": "SELF-MGMT EDUC/TRAIN 5-8 PT"
+          },
+          {
+            "code": "99078",
+            "display": "GROUP HEALTH EDUCATION"
+          },
+          {
+            "code": "99201",
+            "display": "OFFICE/OUTPATIENT VISIT NEW"
+          },
+          {
+            "code": "99202",
+            "display": "OFFICE/OUTPATIENT VISIT NEW"
+          },
+          {
+            "code": "99203",
+            "display": "OFFICE/OUTPATIENT VISIT NEW"
+          },
+          {
+            "code": "99204",
+            "display": "OFFICE/OUTPATIENT VISIT NEW"
+          },
+          {
+            "code": "99205",
+            "display": "OFFICE/OUTPATIENT VISIT NEW"
+          },
+          {
+            "code": "99211",
+            "display": "OFFICE/OUTPATIENT VISIT EST"
+          },
+          {
+            "code": "99212",
+            "display": "OFFICE/OUTPATIENT VISIT EST"
+          },
+          {
+            "code": "99213",
+            "display": "OFFICE/OUTPATIENT VISIT EST"
+          },
+          {
+            "code": "99214",
+            "display": "OFFICE/OUTPATIENT VISIT EST"
+          },
+          {
+            "code": "99215",
+            "display": "OFFICE/OUTPATIENT VISIT EST"
+          },
+          {
+            "code": "99217",
+            "display": "OBSERVATION CARE DISCHARGE"
+          },
+          {
+            "code": "99218",
+            "display": "INITIAL OBSERVATION CARE"
+          },
+          {
+            "code": "99219",
+            "display": "INITIAL OBSERVATION CARE"
+          },
+          {
+            "code": "99220",
+            "display": "INITIAL OBSERVATION CARE"
+          },
+          {
+            "code": "99241",
+            "display": "OFFICE CONSULTATION"
+          },
+          {
+            "code": "99242",
+            "display": "OFFICE CONSULTATION"
+          },
+          {
+            "code": "99243",
+            "display": "OFFICE CONSULTATION"
+          },
+          {
+            "code": "99244",
+            "display": "OFFICE CONSULTATION"
+          },
+          {
+            "code": "99245",
+            "display": "OFFICE CONSULTATION"
+          },
+          {
+            "code": "99341",
+            "display": "HOME VISIT NEW PATIENT"
+          },
+          {
+            "code": "99342",
+            "display": "HOME VISIT NEW PATIENT"
+          },
+          {
+            "code": "99343",
+            "display": "HOME VISIT NEW PATIENT"
+          },
+          {
+            "code": "99344",
+            "display": "HOME VISIT NEW PATIENT"
+          },
+          {
+            "code": "99345",
+            "display": "HOME VISIT NEW PATIENT"
+          },
+          {
+            "code": "99347",
+            "display": "HOME VISIT EST PATIENT"
+          },
+          {
+            "code": "99348",
+            "display": "HOME VISIT EST PATIENT"
+          },
+          {
+            "code": "99349",
+            "display": "HOME VISIT EST PATIENT"
+          },
+          {
+            "code": "99350",
+            "display": "HOME VISIT EST PATIENT"
+          },
+          {
+            "code": "99381",
+            "display": "INIT PM E/M NEW PAT INFANT"
+          },
+          {
+            "code": "99382",
+            "display": "INIT PM E/M NEW PAT 1-4 YRS"
+          },
+          {
+            "code": "99383",
+            "display": "PREV VISIT NEW AGE 5-11"
+          },
+          {
+            "code": "99384",
+            "display": "PREV VISIT NEW AGE 12-17"
+          },
+          {
+            "code": "99385",
+            "display": "PREV VISIT NEW AGE 18-39"
+          },
+          {
+            "code": "99386",
+            "display": "PREV VISIT NEW AGE 40-64"
+          },
+          {
+            "code": "99387",
+            "display": "INIT PM E/M NEW PAT 65+ YRS"
+          },
+          {
+            "code": "99391",
+            "display": "PER PM REEVAL EST PAT INFANT"
+          },
+          {
+            "code": "99392",
+            "display": "PREV VISIT EST AGE 1-4"
+          },
+          {
+            "code": "99393",
+            "display": "PREV VISIT EST AGE 5-11"
+          },
+          {
+            "code": "99394",
+            "display": "PREV VISIT EST AGE 12-17"
+          },
+          {
+            "code": "99395",
+            "display": "PREV VISIT EST AGE 18-39"
+          },
+          {
+            "code": "99396",
+            "display": "PREV VISIT EST AGE 40-64"
+          },
+          {
+            "code": "99397",
+            "display": "PER PM REEVAL EST PAT 65+ YR"
+          },
+          {
+            "code": "99401",
+            "display": "PREVENTIVE COUNSELING INDIV"
+          },
+          {
+            "code": "99402",
+            "display": "PREVENTIVE COUNSELING INDIV"
+          },
+          {
+            "code": "99403",
+            "display": "PREVENTIVE COUNSELING INDIV"
+          },
+          {
+            "code": "99404",
+            "display": "PREVENTIVE COUNSELING INDIV"
+          },
+          {
+            "code": "99411",
+            "display": "PREVENTIVE COUNSELING GROUP"
+          },
+          {
+            "code": "99412",
+            "display": "PREVENTIVE COUNSELING GROUP"
+          },
+          {
+            "code": "99510",
+            "display": "HOME VISIT SING/M/FAM COUNS"
+          },
+          {
+            "code": "90833",
+            "display": "PSYTX W PT W E/M 30 MIN"
+          },
+          {
+            "code": "90836",
+            "display": "PSYTX W PT W E/M 45 MIN"
+          },
+          {
+            "code": "90838",
+            "display": "PSYTX W PT W E/M 60 MIN"
+          },
+          {
+            "code": "90839",
+            "display": "PSYTX CRISIS INITIAL 60 MIN"
+          },
+          {
+            "code": "90845",
+            "display": "PSYCHOANALYSIS"
+          },
+          {
+            "code": "90846",
+            "display": "FAMILY PSYTX W/O PT 50 MIN"
+          },
+          {
+            "code": "90847",
+            "display": "FAMILY PSYTX W/PT 50 MIN"
+          },
+          {
+            "code": "90849",
+            "display": "MULTIPLE FAMILY GROUP PSYTX"
+          },
+          {
+            "code": "90853",
+            "display": "GROUP PSYCHOTHERAPY"
+          },
+          {
+            "code": "90865",
+            "display": "NARCOSYNTHESIS"
+          },
+          {
+            "code": "90867",
+            "display": "TCRANIAL MAGN STIM TX PLAN"
+          },
+          {
+            "code": "90868",
+            "display": "TCRANIAL MAGN STIM TX DELI"
+          },
+          {
+            "code": "90869",
+            "display": "TCRAN MAGN STIM REDETEMINE"
+          },
+          {
+            "code": "90870",
+            "display": "ELECTROCONVULSIVE THERAPY"
+          },
+          {
+            "code": "90875",
+            "display": "PSYCHOPHYSIOLOGICAL THERAPY"
+          },
+          {
+            "code": "90876",
+            "display": "PSYCHOPHYSIOLOGICAL THERAPY"
+          },
+          {
+            "code": "90880",
+            "display": "HYPNOTHERAPY"
+          },
+          {
+            "code": "90887",
+            "display": "CONSULTATION WITH FAMILY"
+          },
+          {
+            "code": "99366",
+            "display": "TEAM CONF W/PAT BY HC PROF"
+          },
+          {
+            "code": "50"
+          },
+          {
+            "code": "LT"
+          },
+          {
+            "code": "77066"
+          },
+          {
+            "code": "77065"
+          },
+          {
+            "code": "77062"
+          },
+          {
+            "code": "77061"
+          },
+          {
+            "code": "77056"
+          },
+          {
+            "code": "77055"
+          },
+          {
+            "code": "77063"
+          },
+          {
+            "code": "77057"
+          },
+          {
+            "code": "77067"
+          },
+          {
+            "code": "RT"
+          },
+          {
+            "code": "19307"
+          },
+          {
+            "code": "19306"
+          },
+          {
+            "code": "19305"
+          },
+          {
+            "code": "19303"
+          },
+          {
+            "code": "19304"
+          },
+          {
+            "code": "19240"
+          },
+          {
+            "code": "19220"
+          },
+          {
+            "code": "19200"
+          },
+          {
+            "code": "19180"
+          },
+          {
+            "code": "58953"
+          },
+          {
+            "code": "58954"
+          },
+          {
+            "code": "58956"
+          },
+          {
+            "code": "51925"
+          },
+          {
+            "code": "57540"
+          },
+          {
+            "code": "57545"
+          },
+          {
+            "code": "57550"
+          },
+          {
+            "code": "57555"
+          },
+          {
+            "code": "57556"
+          },
+          {
+            "code": "58548"
+          },
+          {
+            "code": "58570"
+          },
+          {
+            "code": "58571"
+          },
+          {
+            "code": "58572"
+          },
+          {
+            "code": "58573"
+          },
+          {
+            "code": "58550"
+          },
+          {
+            "code": "58552"
+          },
+          {
+            "code": "58553"
+          },
+          {
+            "code": "58554"
+          },
+          {
+            "code": "58240"
+          },
+          {
+            "code": "58210"
+          },
+          {
+            "code": "58951"
+          },
+          {
+            "code": "59135"
+          },
+          {
+            "code": "X1022450"
+          },
+          {
+            "code": "58150"
+          },
+          {
+            "code": "58152"
+          },
+          {
+            "code": "58200"
+          },
+          {
+            "code": "X1022451"
+          },
+          {
+            "code": "58260"
+          },
+          {
+            "code": "58267"
+          },
+          {
+            "code": "58262"
+          },
+          {
+            "code": "58263"
+          },
+          {
+            "code": "58270"
+          },
+          {
+            "code": "X1022567"
+          },
+          {
+            "code": "58290"
+          },
+          {
+            "code": "58293"
+          },
+          {
+            "code": "58291"
+          },
+          {
+            "code": "58292"
+          },
+          {
+            "code": "58294"
+          },
+          {
+            "code": "58285"
+          },
+          {
+            "code": "X1022452"
+          },
+          {
+            "code": "58275"
+          },
+          {
+            "code": "58280"
+          },
+          {
+            "code": "88147"
+          },
+          {
+            "code": "88148"
+          },
+          {
+            "code": "88142"
+          },
+          {
+            "code": "88174"
+          },
+          {
+            "code": "88143"
+          },
+          {
+            "code": "88175"
+          },
+          {
+            "code": "88141"
+          },
+          {
+            "code": "88164"
+          },
+          {
+            "code": "88166"
+          },
+          {
+            "code": "88167"
+          },
+          {
+            "code": "88165"
+          },
+          {
+            "code": "88150"
+          },
+          {
+            "code": "88152"
+          },
+          {
+            "code": "88154"
+          },
+          {
+            "code": "88153"
+          },
+          {
+            "code": "87620"
+          },
+          {
+            "code": "87621"
+          },
+          {
+            "code": "87622"
+          },
+          {
+            "code": "87624"
+          },
+          {
+            "code": "87625"
+          },
+          {
+            "code": "44388"
+          },
+          {
+            "code": "44393"
+          },
+          {
+            "code": "44389"
+          },
+          {
+            "code": "44391"
+          },
+          {
+            "code": "44390"
+          },
+          {
+            "code": "44392"
+          },
+          {
+            "code": "44394"
+          },
+          {
+            "code": "44397"
+          },
+          {
+            "code": "45378"
+          },
+          {
+            "code": "44383"
+          },
+          {
+            "code": "45380"
+          },
+          {
+            "code": "45382"
+          },
+          {
+            "code": "45386"
+          },
+          {
+            "code": "45381"
+          },
+          {
+            "code": "45391"
+          },
+          {
+            "code": "45379"
+          },
+          {
+            "code": "45384"
+          },
+          {
+            "code": "45385"
+          },
+          {
+            "code": "44387"
+          },
+          {
+            "code": "45355"
+          },
+          {
+            "code": "44401"
+          },
+          {
+            "code": "44402"
+          },
+          {
+            "code": "44403"
+          },
+          {
+            "code": "44404"
+          },
+          {
+            "code": "44405"
+          },
+          {
+            "code": "44406"
+          },
+          {
+            "code": "44407"
+          },
+          {
+            "code": "44408"
+          },
+          {
+            "code": "45388"
+          },
+          {
+            "code": "45389"
+          },
+          {
+            "code": "45390"
+          },
+          {
+            "code": "45393"
+          },
+          {
+            "code": "45398"
+          },
+          {
+            "code": "74263"
+          },
+          {
+            "code": "81528"
+          },
+          {
+            "code": "45330"
+          },
+          {
+            "code": "45339"
+          },
+          {
+            "code": "45331"
+          },
+          {
+            "code": "45334"
+          },
+          {
+            "code": "45337"
+          },
+          {
+            "code": "45340"
+          },
+          {
+            "code": "45335"
+          },
+          {
+            "code": "45341"
+          },
+          {
+            "code": "45332"
+          },
+          {
+            "code": "45333"
+          },
+          {
+            "code": "45338"
+          },
+          {
+            "code": "45345"
+          },
+          {
+            "code": "45342"
+          },
+          {
+            "code": "45346"
+          },
+          {
+            "code": "45347"
+          },
+          {
+            "code": "45349"
+          },
+          {
+            "code": "45350"
+          },
+          {
+            "code": "82274"
+          },
+          {
+            "code": "82270"
+          },
+          {
+            "code": "44156"
+          },
+          {
+            "code": "44158"
+          },
+          {
+            "code": "44157"
+          },
+          {
+            "code": "44155"
+          },
+          {
+            "code": "44151"
+          },
+          {
+            "code": "44150"
+          },
+          {
+            "code": "44211"
+          },
+          {
+            "code": "44212"
+          },
+          {
+            "code": "44210"
+          },
+          {
+            "code": "44153"
+          },
+          {
+            "code": "44152"
+          },
+          {
+            "code": "96401",
+            "display": "CHEMO ANTI-NEOPL SQ/IM"
+          },
+          {
+            "code": "96402",
+            "display": "CHEMO HORMON ANTINEOPL SQ/IM"
+          },
+          {
+            "code": "96405",
+            "display": "CHEMO INTRALESIONAL UP TO 7"
+          },
+          {
+            "code": "96406",
+            "display": "CHEMO INTRALESIONAL OVER 7"
+          },
+          {
+            "code": "96409",
+            "display": "CHEMO IV PUSH SNGL DRUG"
+          },
+          {
+            "code": "96411",
+            "display": "CHEMO IV PUSH ADDL DRUG"
+          },
+          {
+            "code": "96413",
+            "display": "CHEMO IV INFUSION 1 HR"
+          },
+          {
+            "code": "96415",
+            "display": "CHEMO IV INFUSION ADDL HR"
+          },
+          {
+            "code": "96416",
+            "display": "CHEMO PROLONG INFUSE W/PUMP"
+          },
+          {
+            "code": "96417",
+            "display": "CHEMO IV INFUS EACH ADDL SEQ"
+          },
+          {
+            "code": "96420",
+            "display": "CHEMO IA PUSH TECNIQUE"
+          },
+          {
+            "code": "96422",
+            "display": "CHEMO IA INFUSION UP TO 1 HR"
+          },
+          {
+            "code": "96423",
+            "display": "CHEMO IA INFUSE EACH ADDL HR"
+          },
+          {
+            "code": "96425",
+            "display": "CHEMOTHERAPY INFUSION METHOD"
+          },
+          {
+            "code": "96440",
+            "display": "CHEMOTHERAPY INTRACAVITARY"
+          },
+          {
+            "code": "96450",
+            "display": "CHEMOTHERAPY INTO CNS"
+          },
+          {
+            "code": "96521",
+            "display": "REFILL/MAINT PORTABLE PUMP"
+          },
+          {
+            "code": "96522",
+            "display": "REFILL/MAINT PUMP/RESVR SYST"
+          },
+          {
+            "code": "96523",
+            "display": "IRRIG DRUG DELIVERY DEVICE"
+          },
+          {
+            "code": "96542",
+            "display": "CHEMOTHERAPY INJECTION"
+          },
+          {
+            "code": "96549",
+            "display": "CHEMOTHERAPY UNSPECIFIED"
+          },
+          {
+            "code": "69930",
+            "display": "IMPLANT COCHLEAR DEVICE"
+          },
+          {
+            "code": "90670",
+            "display": "PCV13 VACCINE IM"
+          },
+          {
+            "code": "90732",
+            "display": "PPSV23 VACC 2 YRS+ SUBQ/IM"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.12"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.4",
+        "url": "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "0HTV0ZZ"
+          },
+          {
+            "code": "0HTU0ZZ"
+          },
+          {
+            "code": "0HTT0ZZ"
+          },
+          {
+            "code": "0UTC0ZZ"
+          },
+          {
+            "code": "0UTC4ZZ"
+          },
+          {
+            "code": "0UTC7ZZ"
+          },
+          {
+            "code": "0UTC8ZZ"
+          },
+          {
+            "code": "0DTE0ZZ"
+          },
+          {
+            "code": "0DTE4ZZ"
+          },
+          {
+            "code": "0DTE7ZZ"
+          },
+          {
+            "code": "0DTE8ZZ"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.4"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.90",
+        "url": "http://hl7.org/fhir/sid/icd-10-cm",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "Z71.41",
+            "display": "[Z71.41] Alcohol abuse counseling and surveillance of alcoholic"
+          },
+          {
+            "code": "Z71.89",
+            "display": "[Z71.89] Other specified counseling"
+          },
+          {
+            "code": "F10.10",
+            "display": "[F10.10] Alcohol abuse, uncomplicated"
+          },
+          {
+            "code": "F10.120",
+            "display": "[F10.120] Alcohol abuse with intoxication, uncomplicated"
+          },
+          {
+            "code": "F10.121",
+            "display": "[F10.121] Alcohol abuse with intoxication delirium"
+          },
+          {
+            "code": "F10.129",
+            "display": "[F10.129] Alcohol abuse with intoxication, unspecified"
+          },
+          {
+            "code": "F10.14",
+            "display": "[F10.14] Alcohol abuse with alcohol-induced mood disorder"
+          },
+          {
+            "code": "F10.150",
+            "display": "[F10.150] Alcohol abuse with alcohol-induced psychotic disorder with delusions"
+          },
+          {
+            "code": "F10.151",
+            "display": "[F10.151] Alcohol abuse with alcohol-induced psychotic disorder with hallucinations"
+          },
+          {
+            "code": "F10.159",
+            "display": "[F10.159] Alcohol abuse with alcohol-induced psychotic disorder, unspecified"
+          },
+          {
+            "code": "F10.180",
+            "display": "[F10.180] Alcohol abuse with alcohol-induced anxiety disorder"
+          },
+          {
+            "code": "F10.181",
+            "display": "[F10.181] Alcohol abuse with alcohol-induced sexual dysfunction"
+          },
+          {
+            "code": "F10.182",
+            "display": "[F10.182] Alcohol abuse with alcohol-induced sleep disorder"
+          },
+          {
+            "code": "F10.188",
+            "display": "[F10.188] Alcohol abuse with other alcohol-induced disorder"
+          },
+          {
+            "code": "F10.19",
+            "display": "[F10.19] Alcohol abuse with unspecified alcohol-induced disorder"
+          },
+          {
+            "code": "F10.20",
+            "display": "[F10.20] Alcohol dependence, uncomplicated"
+          },
+          {
+            "code": "F10.220",
+            "display": "[F10.220] Alcohol dependence with intoxication, uncomplicated"
+          },
+          {
+            "code": "F10.221",
+            "display": "[F10.221] Alcohol dependence with intoxication delirium"
+          },
+          {
+            "code": "F10.229",
+            "display": "[F10.229] Alcohol dependence with intoxication, unspecified"
+          },
+          {
+            "code": "F10.230",
+            "display": "[F10.230] Alcohol dependence with withdrawal, uncomplicated"
+          },
+          {
+            "code": "F10.231",
+            "display": "[F10.231] Alcohol dependence with withdrawal delirium"
+          },
+          {
+            "code": "F10.232",
+            "display": "[F10.232] Alcohol dependence with withdrawal with perceptual disturbance"
+          },
+          {
+            "code": "F10.239",
+            "display": "[F10.239] Alcohol dependence with withdrawal, unspecified"
+          },
+          {
+            "code": "F10.24",
+            "display": "[F10.24] Alcohol dependence with alcohol-induced mood disorder"
+          },
+          {
+            "code": "F10.250",
+            "display": "[F10.250] Alcohol dependence with alcohol-induced psychotic disorder with delusions"
+          },
+          {
+            "code": "F10.251",
+            "display": "[F10.251] Alcohol dependence with alcohol-induced psychotic disorder with hallucinations"
+          },
+          {
+            "code": "F10.259",
+            "display": "[F10.259] Alcohol dependence with alcohol-induced psychotic disorder, unspecified"
+          },
+          {
+            "code": "F10.26",
+            "display": "[F10.26] Alcohol dependence with alcohol-induced persisting amnestic disorder"
+          },
+          {
+            "code": "F10.27",
+            "display": "[F10.27] Alcohol dependence with alcohol-induced persisting dementia"
+          },
+          {
+            "code": "F10.280",
+            "display": "[F10.280] Alcohol dependence with alcohol-induced anxiety disorder"
+          },
+          {
+            "code": "F10.281",
+            "display": "[F10.281] Alcohol dependence with alcohol-induced sexual dysfunction"
+          },
+          {
+            "code": "F10.282",
+            "display": "[F10.282] Alcohol dependence with alcohol-induced sleep disorder"
+          },
+          {
+            "code": "F10.288",
+            "display": "[F10.288] Alcohol dependence with other alcohol-induced disorder"
+          },
+          {
+            "code": "F10.29",
+            "display": "[F10.29] Alcohol dependence with unspecified alcohol-induced disorder"
+          },
+          {
+            "code": "F10.920",
+            "display": "[F10.920] Alcohol use, unspecified with intoxication, uncomplicated"
+          },
+          {
+            "code": "F10.921",
+            "display": "[F10.921] Alcohol use, unspecified with intoxication delirium"
+          },
+          {
+            "code": "F10.929",
+            "display": "[F10.929] Alcohol use, unspecified with intoxication, unspecified"
+          },
+          {
+            "code": "F10.94",
+            "display": "[F10.94] Alcohol use, unspecified with alcohol-induced mood disorder"
+          },
+          {
+            "code": "F10.950",
+            "display": "[F10.950] Alcohol use, unspecified with alcohol-induced psychotic disorder with delusions"
+          },
+          {
+            "code": "F10.951",
+            "display": "[F10.951] Alcohol use, unspecified with alcohol-induced psychotic disorder with hallucinations"
+          },
+          {
+            "code": "F10.959",
+            "display": "[F10.959] Alcohol use, unspecified with alcohol-induced psychotic disorder, unspecified"
+          },
+          {
+            "code": "F10.96",
+            "display": "[F10.96] Alcohol use, unspecified with alcohol-induced persisting amnestic disorder"
+          },
+          {
+            "code": "F10.97",
+            "display": "[F10.97] Alcohol use, unspecified with alcohol-induced persisting dementia"
+          },
+          {
+            "code": "F10.980",
+            "display": "[F10.980] Alcohol use, unspecified with alcohol-induced anxiety disorder"
+          },
+          {
+            "code": "F10.981",
+            "display": "[F10.981] Alcohol use, unspecified with alcohol-induced sexual dysfunction"
+          },
+          {
+            "code": "F10.982",
+            "display": "[F10.982] Alcohol use, unspecified with alcohol-induced sleep disorder"
+          },
+          {
+            "code": "F10.988",
+            "display": "[F10.988] Alcohol use, unspecified with other alcohol-induced disorder"
+          },
+          {
+            "code": "F10.99",
+            "display": "[F10.99] Alcohol use, unspecified with unspecified alcohol-induced disorder"
+          },
+          {
+            "code": "K29.20",
+            "display": "[K29.20] Alcoholic gastritis without bleeding"
+          },
+          {
+            "code": "K29.21",
+            "display": "[K29.21] Alcoholic gastritis with bleeding"
+          },
+          {
+            "code": "K70.10",
+            "display": "[K70.10] Alcoholic hepatitis without ascites"
+          },
+          {
+            "code": "K70.11",
+            "display": "[K70.11] Alcoholic hepatitis with ascites"
+          },
+          {
+            "code": "F01.50",
+            "display": "[F01.50] Vascular dementia without behavioral disturbance"
+          },
+          {
+            "code": "F01.51",
+            "display": "[F01.51] Vascular dementia with behavioral disturbance"
+          },
+          {
+            "code": "F02.80",
+            "display": "[F02.80] Dementia in other diseases classified elsewhere without behavioral disturbance"
+          },
+          {
+            "code": "F02.81",
+            "display": "[F02.81] Dementia in other diseases classified elsewhere with behavioral disturbance"
+          },
+          {
+            "code": "F03.90",
+            "display": "[F03.90] Unspecified dementia without behavioral disturbance"
+          },
+          {
+            "code": "F03.91",
+            "display": "[F03.91] Unspecified dementia with behavioral disturbance"
+          },
+          {
+            "code": "F04",
+            "display": "[F04] Amnestic disorder due to known physiological condition"
+          },
+          {
+            "code": "F13.27",
+            "display": "[F13.27] Sedative, hypnotic or anxiolytic dependence with sedative, hypnotic or anxiolytic-induced persisting dementia"
+          },
+          {
+            "code": "F13.97",
+            "display": "[F13.97] Sedative, hypnotic or anxiolytic use, unspecified with sedative, hypnotic or anxiolytic-induced persisting dementia"
+          },
+          {
+            "code": "F18.17",
+            "display": "[F18.17] Inhalant abuse with inhalant-induced dementia"
+          },
+          {
+            "code": "F18.27",
+            "display": "[F18.27] Inhalant dependence with inhalant-induced dementia"
+          },
+          {
+            "code": "F18.97",
+            "display": "[F18.97] Inhalant use, unspecified with inhalant-induced persisting dementia"
+          },
+          {
+            "code": "F19.17",
+            "display": "[F19.17] Other psychoactive substance abuse with psychoactive substance-induced persisting dementia"
+          },
+          {
+            "code": "F19.27",
+            "display": "[F19.27] Other psychoactive substance dependence with psychoactive substance-induced persisting dementia"
+          },
+          {
+            "code": "F19.97",
+            "display": "[F19.97] Other psychoactive substance use, unspecified with psychoactive substance-induced persisting dementia"
+          },
+          {
+            "code": "G30.0",
+            "display": "[G30.0] Alzheimer's disease with early onset"
+          },
+          {
+            "code": "G30.1",
+            "display": "[G30.1] Alzheimer's disease with late onset"
+          },
+          {
+            "code": "G30.8",
+            "display": "[G30.8] Other Alzheimer's disease"
+          },
+          {
+            "code": "G30.9",
+            "display": "[G30.9] Alzheimer's disease, unspecified"
+          },
+          {
+            "code": "G31.83",
+            "display": "[G31.83] Dementia with Lewy bodies"
+          },
+          {
+            "code": "F30.10",
+            "display": "[F30.10] Manic episode without psychotic symptoms, unspecified"
+          },
+          {
+            "code": "F30.11",
+            "display": "[F30.11] Manic episode without psychotic symptoms, mild"
+          },
+          {
+            "code": "F30.12",
+            "display": "[F30.12] Manic episode without psychotic symptoms, moderate"
+          },
+          {
+            "code": "F30.13",
+            "display": "[F30.13] Manic episode, severe, without psychotic symptoms"
+          },
+          {
+            "code": "F30.2",
+            "display": "[F30.2] Manic episode, severe with psychotic symptoms"
+          },
+          {
+            "code": "F30.3",
+            "display": "[F30.3] Manic episode in partial remission"
+          },
+          {
+            "code": "F30.4",
+            "display": "[F30.4] Manic episode in full remission"
+          },
+          {
+            "code": "F30.8",
+            "display": "[F30.8] Other manic episodes"
+          },
+          {
+            "code": "F30.9",
+            "display": "[F30.9] Manic episode, unspecified"
+          },
+          {
+            "code": "F31.0",
+            "display": "[F31.0] Bipolar disorder, current episode hypomanic"
+          },
+          {
+            "code": "F31.10",
+            "display": "[F31.10] Bipolar disorder, current episode manic without psychotic features, unspecified"
+          },
+          {
+            "code": "F31.11",
+            "display": "[F31.11] Bipolar disorder, current episode manic without psychotic features, mild"
+          },
+          {
+            "code": "F31.12",
+            "display": "[F31.12] Bipolar disorder, current episode manic without psychotic features, moderate"
+          },
+          {
+            "code": "F31.13",
+            "display": "[F31.13] Bipolar disorder, current episode manic without psychotic features, severe"
+          },
+          {
+            "code": "F31.2",
+            "display": "[F31.2] Bipolar disorder, current episode manic severe with psychotic features"
+          },
+          {
+            "code": "F31.30",
+            "display": "[F31.30] Bipolar disorder, current episode depressed, mild or moderate severity, unspecified"
+          },
+          {
+            "code": "F31.31",
+            "display": "[F31.31] Bipolar disorder, current episode depressed, mild"
+          },
+          {
+            "code": "F31.32",
+            "display": "[F31.32] Bipolar disorder, current episode depressed, moderate"
+          },
+          {
+            "code": "F31.4",
+            "display": "[F31.4] Bipolar disorder, current episode depressed, severe, without psychotic features"
+          },
+          {
+            "code": "F31.5",
+            "display": "[F31.5] Bipolar disorder, current episode depressed, severe, with psychotic features"
+          },
+          {
+            "code": "F31.60",
+            "display": "[F31.60] Bipolar disorder, current episode mixed, unspecified"
+          },
+          {
+            "code": "F31.61",
+            "display": "[F31.61] Bipolar disorder, current episode mixed, mild"
+          },
+          {
+            "code": "F31.62",
+            "display": "[F31.62] Bipolar disorder, current episode mixed, moderate"
+          },
+          {
+            "code": "F31.63",
+            "display": "[F31.63] Bipolar disorder, current episode mixed, severe, without psychotic features"
+          },
+          {
+            "code": "F31.64",
+            "display": "[F31.64] Bipolar disorder, current episode mixed, severe, with psychotic features"
+          },
+          {
+            "code": "F31.70",
+            "display": "[F31.70] Bipolar disorder, currently in remission, most recent episode unspecified"
+          },
+          {
+            "code": "F31.71",
+            "display": "[F31.71] Bipolar disorder, in partial remission, most recent episode hypomanic"
+          },
+          {
+            "code": "F31.72",
+            "display": "[F31.72] Bipolar disorder, in full remission, most recent episode hypomanic"
+          },
+          {
+            "code": "F31.73",
+            "display": "[F31.73] Bipolar disorder, in partial remission, most recent episode manic"
+          },
+          {
+            "code": "F31.74",
+            "display": "[F31.74] Bipolar disorder, in full remission, most recent episode manic"
+          },
+          {
+            "code": "F31.75",
+            "display": "[F31.75] Bipolar disorder, in partial remission, most recent episode depressed"
+          },
+          {
+            "code": "F31.76",
+            "display": "[F31.76] Bipolar disorder, in full remission, most recent episode depressed"
+          },
+          {
+            "code": "F31.77",
+            "display": "[F31.77] Bipolar disorder, in partial remission, most recent episode mixed"
+          },
+          {
+            "code": "F31.78",
+            "display": "[F31.78] Bipolar disorder, in full remission, most recent episode mixed"
+          },
+          {
+            "code": "F32.0",
+            "display": "[F32.0] Major depressive disorder, single episode, mild"
+          },
+          {
+            "code": "F32.1",
+            "display": "[F32.1] Major depressive disorder, single episode, moderate"
+          },
+          {
+            "code": "F32.2",
+            "display": "[F32.2] Major depressive disorder, single episode, severe without psychotic features"
+          },
+          {
+            "code": "F32.3",
+            "display": "[F32.3] Major depressive disorder, single episode, severe with psychotic features"
+          },
+          {
+            "code": "F32.4",
+            "display": "[F32.4] Major depressive disorder, single episode, in partial remission"
+          },
+          {
+            "code": "F32.5",
+            "display": "[F32.5] Major depressive disorder, single episode, in full remission"
+          },
+          {
+            "code": "F32.9",
+            "display": "[F32.9] Major depressive disorder, single episode, unspecified"
+          },
+          {
+            "code": "F33.0",
+            "display": "[F33.0] Major depressive disorder, recurrent, mild"
+          },
+          {
+            "code": "F33.1",
+            "display": "[F33.1] Major depressive disorder, recurrent, moderate"
+          },
+          {
+            "code": "F33.2",
+            "display": "[F33.2] Major depressive disorder, recurrent severe without psychotic features"
+          },
+          {
+            "code": "F33.3",
+            "display": "[F33.3] Major depressive disorder, recurrent, severe with psychotic symptoms"
+          },
+          {
+            "code": "F33.40",
+            "display": "[F33.40] Major depressive disorder, recurrent, in remission, unspecified"
+          },
+          {
+            "code": "F33.41",
+            "display": "[F33.41] Major depressive disorder, recurrent, in partial remission"
+          },
+          {
+            "code": "F33.42",
+            "display": "[F33.42] Major depressive disorder, recurrent, in full remission"
+          },
+          {
+            "code": "F33.9",
+            "display": "[F33.9] Major depressive disorder, recurrent, unspecified"
+          },
+          {
+            "code": "F34.1",
+            "display": "[F34.1] Dysthymic disorder"
+          },
+          {
+            "code": "F31.81",
+            "display": "[F31.81] Bipolar II disorder"
+          },
+          {
+            "code": "F31.89",
+            "display": "[F31.89] Other bipolar disorder"
+          },
+          {
+            "code": "F31.9",
+            "display": "[F31.9] Bipolar disorder, unspecified"
+          },
+          {
+            "code": "F34.0",
+            "display": "[F34.0] Cyclothymic disorder"
+          },
+          {
+            "code": "F60.3",
+            "display": "[F60.3] Borderline personality disorder"
+          },
+          {
+            "code": "F60.4",
+            "display": "[F60.4] Histrionic personality disorder"
+          },
+          {
+            "code": "F68.10",
+            "display": "[F68.10] Factitious disorder, unspecified"
+          },
+          {
+            "code": "F68.11",
+            "display": "[F68.11] Factitious disorder with predominantly psychological signs and symptoms"
+          },
+          {
+            "code": "F68.12",
+            "display": "[F68.12] Factitious disorder with predominantly physical signs and symptoms"
+          },
+          {
+            "code": "F68.13",
+            "display": "[F68.13] Factitious disorder with combined psychological and physical signs and symptoms"
+          },
+          {
+            "code": "F84.0",
+            "display": "[F84.0] Autistic disorder"
+          },
+          {
+            "code": "F84.3",
+            "display": "[F84.3] Other childhood disintegrative disorder"
+          },
+          {
+            "code": "F84.8",
+            "display": "[F84.8] Other pervasive developmental disorders"
+          },
+          {
+            "code": "F84.9",
+            "display": "[F84.9] Pervasive developmental disorder, unspecified"
+          },
+          {
+            "code": "F20.0",
+            "display": "[F20.0] Paranoid schizophrenia"
+          },
+          {
+            "code": "F20.1",
+            "display": "[F20.1] Disorganized schizophrenia"
+          },
+          {
+            "code": "F20.2",
+            "display": "[F20.2] Catatonic schizophrenia"
+          },
+          {
+            "code": "F20.3",
+            "display": "[F20.3] Undifferentiated schizophrenia"
+          },
+          {
+            "code": "F20.5",
+            "display": "[F20.5] Residual schizophrenia"
+          },
+          {
+            "code": "F20.81",
+            "display": "[F20.81] Schizophreniform disorder"
+          },
+          {
+            "code": "F20.89",
+            "display": "[F20.89] Other schizophrenia"
+          },
+          {
+            "code": "F20.9",
+            "display": "[F20.9] Schizophrenia, unspecified"
+          },
+          {
+            "code": "F23",
+            "display": "[F23] Brief psychotic disorder"
+          },
+          {
+            "code": "F25.0",
+            "display": "[F25.0] Schizoaffective disorder, bipolar type"
+          },
+          {
+            "code": "F25.1",
+            "display": "[F25.1] Schizoaffective disorder, depressive type"
+          },
+          {
+            "code": "F25.8",
+            "display": "[F25.8] Other schizoaffective disorders"
+          },
+          {
+            "code": "F25.9",
+            "display": "[F25.9] Schizoaffective disorder, unspecified"
+          },
+          {
+            "code": "F28",
+            "display": "[F28] Other psychotic disorder not due to a substance or known physiological condition"
+          },
+          {
+            "code": "Z71.82",
+            "display": "[Z71.82] Exercise counseling"
+          },
+          {
+            "code": "F32.81",
+            "display": "[F32.81] Premenstrual dysphoric disorder"
+          },
+          {
+            "code": "F32.89",
+            "display": "[F32.89] Other specified depressive episodes"
+          },
+          {
+            "code": "F43.21",
+            "display": "[F43.21] Adjustment disorder with depressed mood"
+          },
+          {
+            "code": "F43.23",
+            "display": "[F43.23] Adjustment disorder with mixed anxiety and depressed mood"
+          },
+          {
+            "code": "F21",
+            "display": "[F21] Schizotypal disorder"
+          },
+          {
+            "code": "F22",
+            "display": "[F22] Delusional disorders"
+          },
+          {
+            "code": "F24",
+            "display": "[F24] Shared psychotic disorder"
+          },
+          {
+            "code": "F29",
+            "display": "[F29] Unspecified psychosis not due to a substance or known physiological condition"
+          },
+          {
+            "code": "F32.8",
+            "display": "[F32.8] Other depressive episodes"
+          },
+          {
+            "code": "F33.8",
+            "display": "[F33.8] Other recurrent depressive disorders"
+          },
+          {
+            "code": "F34.8",
+            "display": "[F34.8] Other persistent mood [affective] disorders"
+          },
+          {
+            "code": "F34.81",
+            "display": "[F34.81] Disruptive mood dysregulation disorder"
+          },
+          {
+            "code": "F34.89",
+            "display": "[F34.89] Other specified persistent mood disorders"
+          },
+          {
+            "code": "F34.9",
+            "display": "[F34.9] Persistent mood [affective] disorder, unspecified"
+          },
+          {
+            "code": "F39",
+            "display": "[F39] Unspecified mood [affective] disorder"
+          },
+          {
+            "code": "F42",
+            "display": "[F42] Obsessive-compulsive disorder"
+          },
+          {
+            "code": "F42.2",
+            "display": "[F42.2] Mixed obsessional thoughts and acts"
+          },
+          {
+            "code": "F42.3",
+            "display": "[F42.3] Hoarding disorder"
+          },
+          {
+            "code": "F42.4",
+            "display": "[F42.4] Excoriation (skin-picking) disorder"
+          },
+          {
+            "code": "F42.8",
+            "display": "[F42.8] Other obsessive-compulsive disorder"
+          },
+          {
+            "code": "F42.9",
+            "display": "[F42.9] Obsessive-compulsive disorder, unspecified"
+          },
+          {
+            "code": "F43.0",
+            "display": "[F43.0] Acute stress reaction"
+          },
+          {
+            "code": "F43.10",
+            "display": "[F43.10] Post-traumatic stress disorder, unspecified"
+          },
+          {
+            "code": "F43.11",
+            "display": "[F43.11] Post-traumatic stress disorder, acute"
+          },
+          {
+            "code": "F43.12",
+            "display": "[F43.12] Post-traumatic stress disorder, chronic"
+          },
+          {
+            "code": "F43.20",
+            "display": "[F43.20] Adjustment disorder, unspecified"
+          },
+          {
+            "code": "F43.22",
+            "display": "[F43.22] Adjustment disorder with anxiety"
+          },
+          {
+            "code": "F43.24",
+            "display": "[F43.24] Adjustment disorder with disturbance of conduct"
+          },
+          {
+            "code": "F43.25",
+            "display": "[F43.25] Adjustment disorder with mixed disturbance of emotions and conduct"
+          },
+          {
+            "code": "F43.29",
+            "display": "[F43.29] Adjustment disorder with other symptoms"
+          },
+          {
+            "code": "F43.8",
+            "display": "[F43.8] Other reactions to severe stress"
+          },
+          {
+            "code": "F43.9",
+            "display": "[F43.9] Reaction to severe stress, unspecified"
+          },
+          {
+            "code": "F44.89",
+            "display": "[F44.89] Other dissociative and conversion disorders"
+          },
+          {
+            "code": "F53",
+            "display": "[F53] Puerperal psychosis"
+          },
+          {
+            "code": "F60.0",
+            "display": "[F60.0] Paranoid personality disorder"
+          },
+          {
+            "code": "F60.1",
+            "display": "[F60.1] Schizoid personality disorder"
+          },
+          {
+            "code": "F60.2",
+            "display": "[F60.2] Antisocial personality disorder"
+          },
+          {
+            "code": "F60.5",
+            "display": "[F60.5] Obsessive-compulsive personality disorder"
+          },
+          {
+            "code": "F60.6",
+            "display": "[F60.6] Avoidant personality disorder"
+          },
+          {
+            "code": "F60.7",
+            "display": "[F60.7] Dependent personality disorder"
+          },
+          {
+            "code": "F60.81",
+            "display": "[F60.81] Narcissistic personality disorder"
+          },
+          {
+            "code": "F60.89",
+            "display": "[F60.89] Other specific personality disorders"
+          },
+          {
+            "code": "F60.9",
+            "display": "[F60.9] Personality disorder, unspecified"
+          },
+          {
+            "code": "F63.0",
+            "display": "[F63.0] Pathological gambling"
+          },
+          {
+            "code": "F63.1",
+            "display": "[F63.1] Pyromania"
+          },
+          {
+            "code": "F63.2",
+            "display": "[F63.2] Kleptomania"
+          },
+          {
+            "code": "F63.3",
+            "display": "[F63.3] Trichotillomania"
+          },
+          {
+            "code": "F63.81",
+            "display": "[F63.81] Intermittent explosive disorder"
+          },
+          {
+            "code": "F63.89",
+            "display": "[F63.89] Other impulse disorders"
+          },
+          {
+            "code": "F63.9",
+            "display": "[F63.9] Impulse disorder, unspecified"
+          },
+          {
+            "code": "F68.8",
+            "display": "[F68.8] Other specified disorders of adult personality and behavior"
+          },
+          {
+            "code": "F84.2",
+            "display": "[F84.2] Rett's syndrome"
+          },
+          {
+            "code": "F84.5",
+            "display": "[F84.5] Asperger's syndrome"
+          },
+          {
+            "code": "F90.0",
+            "display": "[F90.0] Attention-deficit hyperactivity disorder, predominantly inattentive type"
+          },
+          {
+            "code": "F90.1",
+            "display": "[F90.1] Attention-deficit hyperactivity disorder, predominantly hyperactive type"
+          },
+          {
+            "code": "F90.2",
+            "display": "[F90.2] Attention-deficit hyperactivity disorder, combined type"
+          },
+          {
+            "code": "F90.8",
+            "display": "[F90.8] Attention-deficit hyperactivity disorder, other type"
+          },
+          {
+            "code": "F90.9",
+            "display": "[F90.9] Attention-deficit hyperactivity disorder, unspecified type"
+          },
+          {
+            "code": "F91.0",
+            "display": "[F91.0] Conduct disorder confined to family context"
+          },
+          {
+            "code": "F91.1",
+            "display": "[F91.1] Conduct disorder, childhood-onset type"
+          },
+          {
+            "code": "F91.2",
+            "display": "[F91.2] Conduct disorder, adolescent-onset type"
+          },
+          {
+            "code": "F91.3",
+            "display": "[F91.3] Oppositional defiant disorder"
+          },
+          {
+            "code": "F91.8",
+            "display": "[F91.8] Other conduct disorders"
+          },
+          {
+            "code": "F91.9",
+            "display": "[F91.9] Conduct disorder, unspecified"
+          },
+          {
+            "code": "F93.0",
+            "display": "[F93.0] Separation anxiety disorder of childhood"
+          },
+          {
+            "code": "F93.8",
+            "display": "[F93.8] Other childhood emotional disorders"
+          },
+          {
+            "code": "F93.9",
+            "display": "[F93.9] Childhood emotional disorder, unspecified"
+          },
+          {
+            "code": "F94.0",
+            "display": "[F94.0] Selective mutism"
+          },
+          {
+            "code": "F94.1",
+            "display": "[F94.1] Reactive attachment disorder of childhood"
+          },
+          {
+            "code": "F94.2",
+            "display": "[F94.2] Disinhibited attachment disorder of childhood"
+          },
+          {
+            "code": "F94.8",
+            "display": "[F94.8] Other childhood disorders of social functioning"
+          },
+          {
+            "code": "F94.9",
+            "display": "[F94.9] Childhood disorder of social functioning, unspecified"
+          },
+          {
+            "code": "Z90.12"
+          },
+          {
+            "code": "Z90.11"
+          },
+          {
+            "code": "Z90.13"
+          },
+          {
+            "code": "Q51.5"
+          },
+          {
+            "code": "Z90.710"
+          },
+          {
+            "code": "Z90.712"
+          },
+          {
+            "code": "C18.0"
+          },
+          {
+            "code": "C18.1"
+          },
+          {
+            "code": "C18.2"
+          },
+          {
+            "code": "C18.3"
+          },
+          {
+            "code": "C18.4"
+          },
+          {
+            "code": "C18.5"
+          },
+          {
+            "code": "C18.6"
+          },
+          {
+            "code": "C18.7"
+          },
+          {
+            "code": "C18.8"
+          },
+          {
+            "code": "C18.9"
+          },
+          {
+            "code": "C19"
+          },
+          {
+            "code": "C20"
+          },
+          {
+            "code": "C21.2"
+          },
+          {
+            "code": "C21.8"
+          },
+          {
+            "code": "C78.5"
+          },
+          {
+            "code": "Z85.038"
+          },
+          {
+            "code": "Z85.048"
+          },
+          {
+            "code": "T80.52XA",
+            "display": "[T80.52XA] Anaphylactic reaction due to vaccination, initial encounter"
+          },
+          {
+            "code": "T80.52XD",
+            "display": "[T80.52XD] Anaphylactic reaction due to vaccination, subsequent encounter"
+          },
+          {
+            "code": "T80.52XS",
+            "display": "[T80.52XS] Anaphylactic reaction due to vaccination, sequela"
+          },
+          {
+            "code": "30230AZ",
+            "display": "[30230AZ] Transfusion of Embryonic Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230G0",
+            "display": "[30230G0] Transfusion of Autologous Bone Marrow into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230G1",
+            "display": "[30230G1] Transfusion of Nonautologous Bone Marrow into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230G2",
+            "display": "[30230G2] Transfusion of Allogeneic Related Bone Marrow into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230G3",
+            "display": "[30230G3] Transfusion of Allogeneic Unrelated Bone Marrow into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230G4",
+            "display": "[30230G4] Transfusion of Allogeneic Unspecified Bone Marrow into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230X0",
+            "display": "[30230X0] Transfusion of Autologous Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230X1",
+            "display": "[30230X1] Transfusion of Nonautologous Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230X2",
+            "display": "[30230X2] Transfusion of Allogeneic Related Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230X3",
+            "display": "[30230X3] Transfusion of Allogeneic Unrelated Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230X4",
+            "display": "[30230X4] Transfusion of Allogeneic Unspecified Cord Blood Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230Y0",
+            "display": "[30230Y0] Transfusion of Autologous Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230Y1",
+            "display": "[30230Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230Y2",
+            "display": "[30230Y2] Transfusion of Allogeneic Related Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230Y3",
+            "display": "[30230Y3] Transfusion of Allogeneic Unrelated Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30230Y4",
+            "display": "[30230Y4] Transfusion of Allogeneic Unspecified Hematopoietic Stem Cells into Peripheral Vein, Open Approach"
+          },
+          {
+            "code": "30233AZ",
+            "display": "[30233AZ] Transfusion of Embryonic Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233G0",
+            "display": "[30233G0] Transfusion of Autologous Bone Marrow into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233G1",
+            "display": "[30233G1] Transfusion of Nonautologous Bone Marrow into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233G2",
+            "display": "[30233G2] Transfusion of Allogeneic Related Bone Marrow into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233G3",
+            "display": "[30233G3] Transfusion of Allogeneic Unrelated Bone Marrow into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233G4",
+            "display": "[30233G4] Transfusion of Allogeneic Unspecified Bone Marrow into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233X0",
+            "display": "[30233X0] Transfusion of Autologous Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233X1",
+            "display": "[30233X1] Transfusion of Nonautologous Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233X2",
+            "display": "[30233X2] Transfusion of Allogeneic Related Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233X3",
+            "display": "[30233X3] Transfusion of Allogeneic Unrelated Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233X4",
+            "display": "[30233X4] Transfusion of Allogeneic Unspecified Cord Blood Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233Y0",
+            "display": "[30233Y0] Transfusion of Autologous Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233Y1",
+            "display": "[30233Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233Y2",
+            "display": "[30233Y2] Transfusion of Allogeneic Related Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233Y3",
+            "display": "[30233Y3] Transfusion of Allogeneic Unrelated Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30233Y4",
+            "display": "[30233Y4] Transfusion of Allogeneic Unspecified Hematopoietic Stem Cells into Peripheral Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30240AZ",
+            "display": "[30240AZ] Transfusion of Embryonic Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240G0",
+            "display": "[30240G0] Transfusion of Autologous Bone Marrow into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240G1",
+            "display": "[30240G1] Transfusion of Nonautologous Bone Marrow into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240G2",
+            "display": "[30240G2] Transfusion of Allogeneic Related Bone Marrow into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240G3",
+            "display": "[30240G3] Transfusion of Allogeneic Unrelated Bone Marrow into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240G4",
+            "display": "[30240G4] Transfusion of Allogeneic Unspecified Bone Marrow into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240X0",
+            "display": "[30240X0] Transfusion of Autologous Cord Blood Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240X1",
+            "display": "[30240X1] Transfusion of Nonautologous Cord Blood Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240X2",
+            "display": "[30240X2] Transfusion of Allogeneic Related Cord Blood Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240X3",
+            "display": "[30240X3] Transfusion of Allogeneic Unrelated Cord Blood Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240X4",
+            "display": "[30240X4] Transfusion of Allogeneic Unspecified Cord Blood Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240Y0",
+            "display": "[30240Y0] Transfusion of Autologous Hematopoietic Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240Y1",
+            "display": "[30240Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240Y2",
+            "display": "[30240Y2] Transfusion of Allogeneic Related Hematopoietic Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240Y3",
+            "display": "[30240Y3] Transfusion of Allogeneic Unrelated Hematopoietic Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30240Y4",
+            "display": "[30240Y4] Transfusion of Allogeneic Unspecified Hematopoietic Stem Cells into Central Vein, Open Approach"
+          },
+          {
+            "code": "30243AZ",
+            "display": "[30243AZ] Transfusion of Embryonic Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243G0",
+            "display": "[30243G0] Transfusion of Autologous Bone Marrow into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243G1",
+            "display": "[30243G1] Transfusion of Nonautologous Bone Marrow into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243G2",
+            "display": "[30243G2] Transfusion of Allogeneic Related Bone Marrow into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243G3",
+            "display": "[30243G3] Transfusion of Allogeneic Unrelated Bone Marrow into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243G4",
+            "display": "[30243G4] Transfusion of Allogeneic Unspecified Bone Marrow into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243X0",
+            "display": "[30243X0] Transfusion of Autologous Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243X1",
+            "display": "[30243X1] Transfusion of Nonautologous Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243X2",
+            "display": "[30243X2] Transfusion of Allogeneic Related Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243X3",
+            "display": "[30243X3] Transfusion of Allogeneic Unrelated Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243X4",
+            "display": "[30243X4] Transfusion of Allogeneic Unspecified Cord Blood Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243Y0",
+            "display": "[30243Y0] Transfusion of Autologous Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243Y1",
+            "display": "[30243Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243Y2",
+            "display": "[30243Y2] Transfusion of Allogeneic Related Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243Y3",
+            "display": "[30243Y3] Transfusion of Allogeneic Unrelated Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30243Y4",
+            "display": "[30243Y4] Transfusion of Allogeneic Unspecified Hematopoietic Stem Cells into Central Vein, Percutaneous Approach"
+          },
+          {
+            "code": "30250G0",
+            "display": "[30250G0] Transfusion of Autologous Bone Marrow into Peripheral Artery, Open Approach"
+          },
+          {
+            "code": "30250G1",
+            "display": "[30250G1] Transfusion of Nonautologous Bone Marrow into Peripheral Artery, Open Approach"
+          },
+          {
+            "code": "30250X0",
+            "display": "[30250X0] Transfusion of Autologous Cord Blood Stem Cells into Peripheral Artery, Open Approach"
+          },
+          {
+            "code": "30250X1",
+            "display": "[30250X1] Transfusion of Nonautologous Cord Blood Stem Cells into Peripheral Artery, Open Approach"
+          },
+          {
+            "code": "30250Y0",
+            "display": "[30250Y0] Transfusion of Autologous Hematopoietic Stem Cells into Peripheral Artery, Open Approach"
+          },
+          {
+            "code": "30250Y1",
+            "display": "[30250Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Peripheral Artery, Open Approach"
+          },
+          {
+            "code": "30253G0",
+            "display": "[30253G0] Transfusion of Autologous Bone Marrow into Peripheral Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30253G1",
+            "display": "[30253G1] Transfusion of Nonautologous Bone Marrow into Peripheral Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30253X0",
+            "display": "[30253X0] Transfusion of Autologous Cord Blood Stem Cells into Peripheral Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30253X1",
+            "display": "[30253X1] Transfusion of Nonautologous Cord Blood Stem Cells into Peripheral Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30253Y0",
+            "display": "[30253Y0] Transfusion of Autologous Hematopoietic Stem Cells into Peripheral Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30253Y1",
+            "display": "[30253Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Peripheral Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30260G0",
+            "display": "[30260G0] Transfusion of Autologous Bone Marrow into Central Artery, Open Approach"
+          },
+          {
+            "code": "30260G1",
+            "display": "[30260G1] Transfusion of Nonautologous Bone Marrow into Central Artery, Open Approach"
+          },
+          {
+            "code": "30260X0",
+            "display": "[30260X0] Transfusion of Autologous Cord Blood Stem Cells into Central Artery, Open Approach"
+          },
+          {
+            "code": "30260X1",
+            "display": "[30260X1] Transfusion of Nonautologous Cord Blood Stem Cells into Central Artery, Open Approach"
+          },
+          {
+            "code": "30260Y0",
+            "display": "[30260Y0] Transfusion of Autologous Hematopoietic Stem Cells into Central Artery, Open Approach"
+          },
+          {
+            "code": "30260Y1",
+            "display": "[30260Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Central Artery, Open Approach"
+          },
+          {
+            "code": "30263G0",
+            "display": "[30263G0] Transfusion of Autologous Bone Marrow into Central Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30263G1",
+            "display": "[30263G1] Transfusion of Nonautologous Bone Marrow into Central Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30263X0",
+            "display": "[30263X0] Transfusion of Autologous Cord Blood Stem Cells into Central Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30263X1",
+            "display": "[30263X1] Transfusion of Nonautologous Cord Blood Stem Cells into Central Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30263Y0",
+            "display": "[30263Y0] Transfusion of Autologous Hematopoietic Stem Cells into Central Artery, Percutaneous Approach"
+          },
+          {
+            "code": "30263Y1",
+            "display": "[30263Y1] Transfusion of Nonautologous Hematopoietic Stem Cells into Central Artery, Percutaneous Approach"
+          },
+          {
+            "code": "G96.0",
+            "display": "[G96.0] Cerebrospinal fluid leak"
+          },
+          {
+            "code": "G97.0",
+            "display": "[G97.0] Cerebrospinal fluid leak from spinal puncture"
+          },
+          {
+            "code": "Z51.0",
+            "display": "[Z51.0] Encounter for antineoplastic radiation therapy"
+          },
+          {
+            "code": "Z51.11",
+            "display": "[Z51.11] Encounter for antineoplastic chemotherapy"
+          },
+          {
+            "code": "Z51.12",
+            "display": "[Z51.12] Encounter for antineoplastic immunotherapy"
+          },
+          {
+            "code": "Z96.20",
+            "display": "[Z96.20] Presence of otological and audiological implant, unspecified"
+          },
+          {
+            "code": "Z96.21",
+            "display": "[Z96.21] Cochlear implant status"
+          },
+          {
+            "code": "D80.0",
+            "display": "[D80.0] Hereditary hypogammaglobulinemia"
+          },
+          {
+            "code": "D80.1",
+            "display": "[D80.1] Nonfamilial hypogammaglobulinemia"
+          },
+          {
+            "code": "D80.2",
+            "display": "[D80.2] Selective deficiency of immunoglobulin A [IgA]"
+          },
+          {
+            "code": "D80.3",
+            "display": "[D80.3] Selective deficiency of immunoglobulin G [IgG] subclasses"
+          },
+          {
+            "code": "D80.4",
+            "display": "[D80.4] Selective deficiency of immunoglobulin M [IgM]"
+          },
+          {
+            "code": "D80.5",
+            "display": "[D80.5] Immunodeficiency with increased immunoglobulin M [IgM]"
+          },
+          {
+            "code": "D80.6",
+            "display": "[D80.6] Antibody deficiency with near-normal immunoglobulins or with hyperimmunoglobulinemia"
+          },
+          {
+            "code": "D80.7",
+            "display": "[D80.7] Transient hypogammaglobulinemia of infancy"
+          },
+          {
+            "code": "D80.8",
+            "display": "[D80.8] Other immunodeficiencies with predominantly antibody defects"
+          },
+          {
+            "code": "D80.9",
+            "display": "[D80.9] Immunodeficiency with predominantly antibody defects, unspecified"
+          },
+          {
+            "code": "D81.0",
+            "display": "[D81.0] Severe combined immunodeficiency [SCID] with reticular dysgenesis"
+          },
+          {
+            "code": "D81.1",
+            "display": "[D81.1] Severe combined immunodeficiency [SCID] with low T- and B-cell numbers"
+          },
+          {
+            "code": "D81.2",
+            "display": "[D81.2] Severe combined immunodeficiency [SCID] with low or normal B-cell numbers"
+          },
+          {
+            "code": "D81.4",
+            "display": "[D81.4] Nezelof's syndrome"
+          },
+          {
+            "code": "D81.6",
+            "display": "[D81.6] Major histocompatibility complex class I deficiency"
+          },
+          {
+            "code": "D81.7",
+            "display": "[D81.7] Major histocompatibility complex class II deficiency"
+          },
+          {
+            "code": "D81.89",
+            "display": "[D81.89] Other combined immunodeficiencies"
+          },
+          {
+            "code": "D81.9",
+            "display": "[D81.9] Combined immunodeficiency, unspecified"
+          },
+          {
+            "code": "D82.0",
+            "display": "[D82.0] Wiskott-Aldrich syndrome"
+          },
+          {
+            "code": "D82.1",
+            "display": "[D82.1] Di George's syndrome"
+          },
+          {
+            "code": "D82.2",
+            "display": "[D82.2] Immunodeficiency with short-limbed stature"
+          },
+          {
+            "code": "D82.3",
+            "display": "[D82.3] Immunodeficiency following hereditary defective response to Epstein-Barr virus"
+          },
+          {
+            "code": "D82.4",
+            "display": "[D82.4] Hyperimmunoglobulin E [IgE] syndrome"
+          },
+          {
+            "code": "D82.8",
+            "display": "[D82.8] Immunodeficiency associated with other specified major defects"
+          },
+          {
+            "code": "D82.9",
+            "display": "[D82.9] Immunodeficiency associated with major defect, unspecified"
+          },
+          {
+            "code": "D83.0",
+            "display": "[D83.0] Common variable immunodeficiency with predominant abnormalities of B-cell numbers and function"
+          },
+          {
+            "code": "D83.1",
+            "display": "[D83.1] Common variable immunodeficiency with predominant immunoregulatory T-cell disorders"
+          },
+          {
+            "code": "D83.2",
+            "display": "[D83.2] Common variable immunodeficiency with autoantibodies to B- or T-cells"
+          },
+          {
+            "code": "D83.8",
+            "display": "[D83.8] Other common variable immunodeficiencies"
+          },
+          {
+            "code": "D83.9",
+            "display": "[D83.9] Common variable immunodeficiency, unspecified"
+          },
+          {
+            "code": "D84.0",
+            "display": "[D84.0] Lymphocyte function antigen-1 [LFA-1] defect"
+          },
+          {
+            "code": "D84.1",
+            "display": "[D84.1] Defects in the complement system"
+          },
+          {
+            "code": "D84.8",
+            "display": "[D84.8] Other specified immunodeficiencies"
+          },
+          {
+            "code": "D84.9",
+            "display": "[D84.9] Immunodeficiency, unspecified"
+          },
+          {
+            "code": "D89.3",
+            "display": "[D89.3] Immune reconstitution syndrome"
+          },
+          {
+            "code": "D89.810",
+            "display": "[D89.810] Acute graft-versus-host disease"
+          },
+          {
+            "code": "D89.811",
+            "display": "[D89.811] Chronic graft-versus-host disease"
+          },
+          {
+            "code": "D89.812",
+            "display": "[D89.812] Acute on chronic graft-versus-host disease"
+          },
+          {
+            "code": "D89.813",
+            "display": "[D89.813] Graft-versus-host disease, unspecified"
+          },
+          {
+            "code": "D89.82",
+            "display": "[D89.82] Autoimmune lymphoproliferative syndrome [ALPS]"
+          },
+          {
+            "code": "D89.89",
+            "display": "[D89.89] Other specified disorders involving the immune mechanism, not elsewhere classified"
+          },
+          {
+            "code": "D89.9",
+            "display": "[D89.9] Disorder involving the immune mechanism, unspecified"
+          },
+          {
+            "code": "D60.0",
+            "display": "[D60.0] Chronic acquired pure red cell aplasia"
+          },
+          {
+            "code": "D60.1",
+            "display": "[D60.1] Transient acquired pure red cell aplasia"
+          },
+          {
+            "code": "D60.8",
+            "display": "[D60.8] Other acquired pure red cell aplasias"
+          },
+          {
+            "code": "D60.9",
+            "display": "[D60.9] Acquired pure red cell aplasia, unspecified"
+          },
+          {
+            "code": "D61.01",
+            "display": "[D61.01] Constitutional (pure) red blood cell aplasia"
+          },
+          {
+            "code": "D61.09",
+            "display": "[D61.09] Other constitutional aplastic anemia"
+          },
+          {
+            "code": "D61.1",
+            "display": "[D61.1] Drug-induced aplastic anemia"
+          },
+          {
+            "code": "D61.2",
+            "display": "[D61.2] Aplastic anemia due to other external agents"
+          },
+          {
+            "code": "D61.3",
+            "display": "[D61.3] Idiopathic aplastic anemia"
+          },
+          {
+            "code": "D61.810",
+            "display": "[D61.810] Antineoplastic chemotherapy induced pancytopenia"
+          },
+          {
+            "code": "D61.811",
+            "display": "[D61.811] Other drug-induced pancytopenia"
+          },
+          {
+            "code": "D61.818",
+            "display": "[D61.818] Other pancytopenia"
+          },
+          {
+            "code": "D61.82",
+            "display": "[D61.82] Myelophthisis"
+          },
+          {
+            "code": "D61.89",
+            "display": "[D61.89] Other specified aplastic anemias and other bone marrow failure syndromes"
+          },
+          {
+            "code": "D61.9",
+            "display": "[D61.9] Aplastic anemia, unspecified"
+          },
+          {
+            "code": "D62",
+            "display": "[D62] Acute posthemorrhagic anemia"
+          },
+          {
+            "code": "D63.0",
+            "display": "[D63.0] Anemia in neoplastic disease"
+          },
+          {
+            "code": "D63.1",
+            "display": "[D63.1] Anemia in chronic kidney disease"
+          },
+          {
+            "code": "D63.8",
+            "display": "[D63.8] Anemia in other chronic diseases classified elsewhere"
+          },
+          {
+            "code": "D64.0",
+            "display": "[D64.0] Hereditary sideroblastic anemia"
+          },
+          {
+            "code": "D64.1",
+            "display": "[D64.1] Secondary sideroblastic anemia due to disease"
+          },
+          {
+            "code": "D64.2",
+            "display": "[D64.2] Secondary sideroblastic anemia due to drugs and toxins"
+          },
+          {
+            "code": "D64.3",
+            "display": "[D64.3] Other sideroblastic anemias"
+          },
+          {
+            "code": "D64.4",
+            "display": "[D64.4] Congenital dyserythropoietic anemia"
+          },
+          {
+            "code": "D64.81",
+            "display": "[D64.81] Anemia due to antineoplastic chemotherapy"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.90"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.1",
+        "url": "http://loinc.org",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "68517-2",
+            "display": "How many times in the past year have you have X or more drinks in a day [SAMHSA]"
+          },
+          {
+            "code": "68519-8",
+            "display": "How many standard drinks containing alcohol do you have on a typical day [SAMHSA]"
+          },
+          {
+            "code": "68520-6",
+            "display": "How often do you have 6 or more drinks on 1 occasion [SAMHSA]"
+          },
+          {
+            "code": "72109-2",
+            "display": "Alcohol Use Disorder Identification Test - Consumption [AUDIT-C]"
+          },
+          {
+            "code": "72110-0",
+            "display": "Alcohol Use Disorder Identification Test [AUDIT]"
+          },
+          {
+            "code": "75624-7",
+            "display": "Total score [AUDIT]"
+          },
+          {
+            "code": "75626-2",
+            "display": "Total score [AUDIT-C]"
+          },
+          {
+            "code": "44249-1",
+            "display": "PHQ-9 quick depression assessment panel [Reported.PHQ]"
+          },
+          {
+            "code": "44261-6",
+            "display": "Patient Health Questionnaire 9 item (PHQ-9) total score [Reported]"
+          },
+          {
+            "code": "54635-8",
+            "display": "Resident mood interview (PHQ-9) [Reported PHQ-9 CMS]"
+          },
+          {
+            "code": "48544-1",
+            "display": "Geriatric depression scale (GDS) total"
+          },
+          {
+            "code": "48545-8",
+            "display": "Geriatric depression scale (GDS) short version total"
+          },
+          {
+            "code": "55758-7",
+            "display": "Patient Health Questionnaire 2 item (PHQ-2) total score [Reported]"
+          },
+          {
+            "code": "70271-2",
+            "display": "Patient Health Questionnaire - Somatic, Anxiety, and Depressive Symptoms (PHQ-SADS) total score [Reported]"
+          },
+          {
+            "code": "70272-0",
+            "display": "Patient Health Questionnaire 4 item (PHQ-4) total score [Reported]"
+          },
+          {
+            "code": "71354-5",
+            "display": "Edinburgh Postnatal Depression Scale [EPDS]"
+          },
+          {
+            "code": "71965-8",
+            "display": "PROMIS-29 Depression score T-score"
+          },
+          {
+            "code": "71966-6",
+            "display": "PROMIS-29 Depression score"
+          },
+          {
+            "code": "73831-0",
+            "display": "Adolescent depression screening assessment"
+          },
+          {
+            "code": "73832-8",
+            "display": "Adult depression screening assessment"
+          },
+          {
+            "code": "77688-0",
+            "display": "Depression scale [UPDRS]"
+          },
+          {
+            "code": "77821-7",
+            "display": "PROMIS short form - emotional distress - depression 4a - version 1.0 raw score"
+          },
+          {
+            "code": "77835-7",
+            "display": "PROMIS short form - emotional distress - depression 8b - version 1.0 raw score"
+          },
+          {
+            "code": "77847-2",
+            "display": "PROMIS pediatric short form - depressive symptoms - version 1.0 raw score"
+          },
+          {
+            "code": "77861-3",
+            "display": "PROMIS emotional distress - depression - version 1.0 Tscore"
+          },
+          {
+            "code": "33717-0"
+          },
+          {
+            "code": "47528-5"
+          },
+          {
+            "code": "47527-7"
+          },
+          {
+            "code": "19774-9"
+          },
+          {
+            "code": "19762-4"
+          },
+          {
+            "code": "19765-7"
+          },
+          {
+            "code": "19766-5"
+          },
+          {
+            "code": "10524-7"
+          },
+          {
+            "code": "18500-9"
+          },
+          {
+            "code": "19764-0"
+          },
+          {
+            "code": "30167-1"
+          },
+          {
+            "code": "49896-4"
+          },
+          {
+            "code": "21440-3"
+          },
+          {
+            "code": "38372-9"
+          },
+          {
+            "code": "59420-0"
+          },
+          {
+            "code": "75406-9"
+          },
+          {
+            "code": "75694-0"
+          },
+          {
+            "code": "69002-4"
+          },
+          {
+            "code": "71431-1"
+          },
+          {
+            "code": "59263-4"
+          },
+          {
+            "code": "59264-2"
+          },
+          {
+            "code": "77379-6"
+          },
+          {
+            "code": "77399-4"
+          },
+          {
+            "code": "77400-0"
+          },
+          {
+            "code": "77353-1"
+          },
+          {
+            "code": "77354-9"
+          },
+          {
+            "code": "12503-9"
+          },
+          {
+            "code": "12504-7"
+          },
+          {
+            "code": "14563-1"
+          },
+          {
+            "code": "14564-9"
+          },
+          {
+            "code": "14565-6"
+          },
+          {
+            "code": "2335-8"
+          },
+          {
+            "code": "27396-1"
+          },
+          {
+            "code": "27401-9"
+          },
+          {
+            "code": "27925-7"
+          },
+          {
+            "code": "27926-5"
+          },
+          {
+            "code": "29771-3"
+          },
+          {
+            "code": "56490-6"
+          },
+          {
+            "code": "56491-4"
+          },
+          {
+            "code": "57905-2"
+          },
+          {
+            "code": "58453-2"
+          },
+          {
+            "code": "80372-6"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.1"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.4.340",
+        "url": "https://www.cms.gov/Medicare/CMS-Forms/CMS-Forms/CMS-Forms-Items/CMS1196256.html/fl42",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "0403"
+          },
+          {
+            "code": "0401"
+          },
+          {
+            "code": "0923"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.4.340"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.12.292",
+        "url": "http://hl7.org/fhir/sid/cvx",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "133",
+            "display": "pneumococcal conjugate vaccine, 13 valent"
+          },
+          {
+            "code": "33",
+            "display": "pneumococcal polysaccharide vaccine, 23 valent"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.12.292"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.96",
+        "url": "http://snomed.info/sct",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "20093000",
+            "display": "Alcohol rehabilitation and detoxification (regime/therapy)"
+          },
+          {
+            "code": "23915005",
+            "display": "Combined alcohol and drug rehabilitation and detoxification (regime/therapy)"
+          },
+          {
+            "code": "24165007",
+            "display": "Alcoholism counseling (procedure)"
+          },
+          {
+            "code": "64297001",
+            "display": "Detoxication psychiatric therapy for alcoholism (regime/therapy)"
+          },
+          {
+            "code": "386449006",
+            "display": "Substance use treatment: alcohol withdrawal (regime/therapy)"
+          },
+          {
+            "code": "408945004",
+            "display": "Alcohol abuse prevention (procedure)"
+          },
+          {
+            "code": "408947007",
+            "display": "Alcohol abuse prevention education (procedure)"
+          },
+          {
+            "code": "408948002",
+            "display": "Alcohol abuse prevention management (procedure)"
+          },
+          {
+            "code": "413473000",
+            "display": "Counseling about alcohol consumption (procedure)"
+          },
+          {
+            "code": "707166002",
+            "display": "Alcohol reduction program (regime/therapy)"
+          },
+          {
+            "code": "429291000124102",
+            "display": "Alcohol brief intervention (procedure)"
+          },
+          {
+            "code": "171208001",
+            "display": "Alcohol consumption screening (procedure)"
+          },
+          {
+            "code": "408946003",
+            "display": "Alcohol abuse prevention assessment (procedure)"
+          },
+          {
+            "code": "713107002",
+            "display": "Screening for alcohol abuse (procedure)"
+          },
+          {
+            "code": "281004",
+            "display": "Dementia associated with alcoholism (disorder)"
+          },
+          {
+            "code": "7052005",
+            "display": "Alcohol hallucinosis (disorder)"
+          },
+          {
+            "code": "7200002",
+            "display": "Alcoholism (disorder)"
+          },
+          {
+            "code": "8635005",
+            "display": "Alcohol withdrawal delirium (disorder)"
+          },
+          {
+            "code": "15167005",
+            "display": "Alcohol abuse (disorder)"
+          },
+          {
+            "code": "18653004",
+            "display": "Alcohol intoxication delirium (disorder)"
+          },
+          {
+            "code": "29212009",
+            "display": "Alcohol-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "34938008",
+            "display": "Alcohol-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "41083005",
+            "display": "Alcohol-induced sleep disorder (disorder)"
+          },
+          {
+            "code": "42344001",
+            "display": "Alcohol-induced psychosis (disorder)"
+          },
+          {
+            "code": "53936005",
+            "display": "Alcohol-induced mood disorder (disorder)"
+          },
+          {
+            "code": "61144001",
+            "display": "Alcohol-induced psychotic disorder with delusions (disorder)"
+          },
+          {
+            "code": "66590003",
+            "display": "Alcohol dependence (disorder)"
+          },
+          {
+            "code": "73097000",
+            "display": "Alcohol amnestic disorder (disorder)"
+          },
+          {
+            "code": "78524005",
+            "display": "Alcohol-induced sexual dysfunction (finding)"
+          },
+          {
+            "code": "79578000",
+            "display": "Alcohol paranoia (disorder)"
+          },
+          {
+            "code": "85561006",
+            "display": "Uncomplicated alcohol withdrawal (disorder)"
+          },
+          {
+            "code": "191471000",
+            "display": "Korsakov's alcoholic psychosis with peripheral neuritis (disorder)"
+          },
+          {
+            "code": "191475009",
+            "display": "Chronic alcoholic brain syndrome (disorder)"
+          },
+          {
+            "code": "191476005",
+            "display": "Alcohol withdrawal hallucinosis (disorder)"
+          },
+          {
+            "code": "191477001",
+            "display": "Pathological alcohol intoxication (disorder)"
+          },
+          {
+            "code": "191478006",
+            "display": "Alcoholic paranoia (disorder)"
+          },
+          {
+            "code": "191480000",
+            "display": "Alcohol withdrawal syndrome (disorder)"
+          },
+          {
+            "code": "191802004",
+            "display": "Acute alcoholic intoxication in alcoholism (disorder)"
+          },
+          {
+            "code": "191804003",
+            "display": "Continuous acute alcoholic intoxication in alcoholism (disorder)"
+          },
+          {
+            "code": "191805002",
+            "display": "Episodic acute alcoholic intoxication in alcoholism (disorder)"
+          },
+          {
+            "code": "191806001",
+            "display": "Acute alcoholic intoxication in remission, in alcoholism (disorder)"
+          },
+          {
+            "code": "191811004",
+            "display": "Continuous chronic alcoholism (disorder)"
+          },
+          {
+            "code": "191812006",
+            "display": "Episodic chronic alcoholism (disorder)"
+          },
+          {
+            "code": "191813001",
+            "display": "Chronic alcoholism in remission (disorder)"
+          },
+          {
+            "code": "191882002",
+            "display": "Nondependent alcohol abuse, continuous (disorder)"
+          },
+          {
+            "code": "191883007",
+            "display": "Nondependent alcohol abuse, episodic (disorder)"
+          },
+          {
+            "code": "191884001",
+            "display": "Nondependent alcohol abuse in remission (disorder)"
+          },
+          {
+            "code": "268645007",
+            "display": "Nondependent alcohol abuse (disorder)"
+          },
+          {
+            "code": "284591009",
+            "display": "Persistent alcohol abuse (disorder)"
+          },
+          {
+            "code": "713583005",
+            "display": "Mild alcohol dependence (disorder)"
+          },
+          {
+            "code": "713862009",
+            "display": "Severe alcohol dependence (disorder)"
+          },
+          {
+            "code": "714829008",
+            "display": "Moderate alcohol dependence (disorder)"
+          },
+          {
+            "code": "97571000119109",
+            "display": "Thrombocytopenia co-occurrent and due to alcoholism (disorder)"
+          },
+          {
+            "code": "135311000119100",
+            "display": "Insomnia caused by alcohol (disorder)"
+          },
+          {
+            "code": "10741871000119101",
+            "display": "Alcohol dependence in pregnancy (disorder)"
+          },
+          {
+            "code": "10755041000119100",
+            "display": "Alcohol dependence in childbirth (disorder)"
+          },
+          {
+            "code": "162004",
+            "display": "Severe manic bipolar I disorder without psychotic features (disorder)"
+          },
+          {
+            "code": "1196001",
+            "display": "Chronic bipolar II disorder, most recent episode major depressive (disorder)"
+          },
+          {
+            "code": "1499003",
+            "display": "Bipolar I disorder, single manic episode with postpartum onset (disorder)"
+          },
+          {
+            "code": "3530005",
+            "display": "Bipolar I disorder, single manic episode, in full remission (disorder)"
+          },
+          {
+            "code": "4441000",
+            "display": "Severe bipolar disorder with psychotic features (disorder)"
+          },
+          {
+            "code": "5703000",
+            "display": "Bipolar disorder in partial remission (disorder)"
+          },
+          {
+            "code": "9340000",
+            "display": "Bipolar I disorder, single manic episode (disorder)"
+          },
+          {
+            "code": "10875004",
+            "display": "Severe mixed bipolar I disorder with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "10981006",
+            "display": "Severe mixed bipolar I disorder with psychotic features (disorder)"
+          },
+          {
+            "code": "12969000",
+            "display": "Severe bipolar II disorder, most recent episode major depressive, in full remission (disorder)"
+          },
+          {
+            "code": "13313007",
+            "display": "Mild bipolar disorder (disorder)"
+          },
+          {
+            "code": "13581000",
+            "display": "Severe bipolar I disorder, single manic episode with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "13746004",
+            "display": "Bipolar disorder (disorder)"
+          },
+          {
+            "code": "14495005",
+            "display": "Severe bipolar I disorder, single manic episode without psychotic features (disorder)"
+          },
+          {
+            "code": "16295005",
+            "display": "Bipolar II disorder, most recent episode major depressive (disorder)"
+          },
+          {
+            "code": "16506000",
+            "display": "Mixed bipolar I disorder (disorder)"
+          },
+          {
+            "code": "17782008",
+            "display": "Bipolar I disorder, most recent episode manic with catatonic features (disorder)"
+          },
+          {
+            "code": "19300006",
+            "display": "Severe bipolar II disorder, most recent episode major depressive with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "20960007",
+            "display": "Severe bipolar II disorder, most recent episode major depressive with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "21900002",
+            "display": "Bipolar I disorder, most recent episode depressed with catatonic features (disorder)"
+          },
+          {
+            "code": "22121000",
+            "display": "Depressed bipolar I disorder in full remission (disorder)"
+          },
+          {
+            "code": "22407005",
+            "display": "Bipolar II disorder, most recent episode major depressive with catatonic features (disorder)"
+          },
+          {
+            "code": "26203008",
+            "display": "Severe depressed bipolar I disorder with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "26530004",
+            "display": "Severe bipolar disorder with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "28663008",
+            "display": "Severe manic bipolar I disorder with psychotic features (disorder)"
+          },
+          {
+            "code": "28884001",
+            "display": "Moderate bipolar I disorder, single manic episode (disorder)"
+          },
+          {
+            "code": "29929003",
+            "display": "Bipolar I disorder, most recent episode depressed with atypical features (disorder)"
+          },
+          {
+            "code": "30520009",
+            "display": "Severe bipolar II disorder, most recent episode major depressive with psychotic features (disorder)"
+          },
+          {
+            "code": "30687003",
+            "display": "Bipolar II disorder, most recent episode major depressive with postpartum onset (disorder)"
+          },
+          {
+            "code": "30935000",
+            "display": "Manic bipolar I disorder in full remission (disorder)"
+          },
+          {
+            "code": "31446002",
+            "display": "Bipolar I disorder, most recent episode hypomanic (disorder)"
+          },
+          {
+            "code": "33380008",
+            "display": "Severe manic bipolar I disorder with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "34315001",
+            "display": "Bipolar II disorder, most recent episode major depressive with melancholic features (disorder)"
+          },
+          {
+            "code": "35481005",
+            "display": "Mixed bipolar I disorder in remission (disorder)"
+          },
+          {
+            "code": "35722002",
+            "display": "Severe bipolar II disorder, most recent episode major depressive, in remission (disorder)"
+          },
+          {
+            "code": "35846004",
+            "display": "Moderate bipolar II disorder, most recent episode major depressive (disorder)"
+          },
+          {
+            "code": "36583000",
+            "display": "Mixed bipolar I disorder in partial remission (disorder)"
+          },
+          {
+            "code": "40926005",
+            "display": "Moderate mixed bipolar I disorder (disorder)"
+          },
+          {
+            "code": "41552001",
+            "display": "Mild bipolar I disorder, single manic episode (disorder)"
+          },
+          {
+            "code": "41832009",
+            "display": "Severe bipolar I disorder, single manic episode with psychotic features (disorder)"
+          },
+          {
+            "code": "41836007",
+            "display": "Bipolar disorder in full remission (disorder)"
+          },
+          {
+            "code": "43568002",
+            "display": "Bipolar II disorder, most recent episode major depressive with atypical features (disorder)"
+          },
+          {
+            "code": "43769008",
+            "display": "Mild mixed bipolar I disorder (disorder)"
+          },
+          {
+            "code": "45479006",
+            "display": "Manic bipolar I disorder in remission (disorder)"
+          },
+          {
+            "code": "46229002",
+            "display": "Severe mixed bipolar I disorder without psychotic features (disorder)"
+          },
+          {
+            "code": "48937005",
+            "display": "Bipolar II disorder, most recent episode hypomanic (disorder)"
+          },
+          {
+            "code": "49468007",
+            "display": "Depressed bipolar I disorder (disorder)"
+          },
+          {
+            "code": "49512000",
+            "display": "Depressed bipolar I disorder in partial remission (disorder)"
+          },
+          {
+            "code": "51637008",
+            "display": "Chronic bipolar I disorder, most recent episode depressed (disorder)"
+          },
+          {
+            "code": "53049002",
+            "display": "Severe bipolar disorder without psychotic features (disorder)"
+          },
+          {
+            "code": "53607008",
+            "display": "Depressed bipolar I disorder in remission (disorder)"
+          },
+          {
+            "code": "54761006",
+            "display": "Severe depressed bipolar I disorder with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "55516002",
+            "display": "Bipolar I disorder, most recent episode manic with postpartum onset (disorder)"
+          },
+          {
+            "code": "59617007",
+            "display": "Severe depressed bipolar I disorder with psychotic features (disorder)"
+          },
+          {
+            "code": "61403008",
+            "display": "Severe depressed bipolar I disorder without psychotic features (disorder)"
+          },
+          {
+            "code": "63249007",
+            "display": "Manic bipolar I disorder in partial remission (disorder)"
+          },
+          {
+            "code": "64731001",
+            "display": "Severe mixed bipolar I disorder with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "65042007",
+            "display": "Bipolar I disorder, most recent episode mixed with postpartum onset (disorder)"
+          },
+          {
+            "code": "66631006",
+            "display": "Moderate depressed bipolar I disorder (disorder)"
+          },
+          {
+            "code": "67002003",
+            "display": "Severe bipolar II disorder, most recent episode major depressive, in partial remission (disorder)"
+          },
+          {
+            "code": "68569003",
+            "display": "Manic bipolar I disorder (disorder)"
+          },
+          {
+            "code": "70546001",
+            "display": "Severe bipolar disorder with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "71294008",
+            "display": "Mild bipolar II disorder, most recent episode major depressive (disorder)"
+          },
+          {
+            "code": "71984005",
+            "display": "Mild manic bipolar I disorder (disorder)"
+          },
+          {
+            "code": "73471000",
+            "display": "Bipolar I disorder, most recent episode mixed with catatonic features (disorder)"
+          },
+          {
+            "code": "74686005",
+            "display": "Mild depressed bipolar I disorder (disorder)"
+          },
+          {
+            "code": "75360000",
+            "display": "Bipolar I disorder, single manic episode, in remission (disorder)"
+          },
+          {
+            "code": "78269000",
+            "display": "Bipolar I disorder, single manic episode, in partial remission (disorder)"
+          },
+          {
+            "code": "78640000",
+            "display": "Severe manic bipolar I disorder with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "79584002",
+            "display": "Moderate bipolar disorder (disorder)"
+          },
+          {
+            "code": "81319007",
+            "display": "Severe bipolar II disorder, most recent episode major depressive without psychotic features (disorder)"
+          },
+          {
+            "code": "82998009",
+            "display": "Moderate manic bipolar I disorder (disorder)"
+          },
+          {
+            "code": "83225003",
+            "display": "Bipolar II disorder (disorder)"
+          },
+          {
+            "code": "85248005",
+            "display": "Bipolar disorder in remission (disorder)"
+          },
+          {
+            "code": "86058007",
+            "display": "Severe bipolar I disorder, single manic episode with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "87950005",
+            "display": "Bipolar I disorder, single manic episode with catatonic features (disorder)"
+          },
+          {
+            "code": "111485001",
+            "display": "Mixed bipolar I disorder in full remission (disorder)"
+          },
+          {
+            "code": "191618007",
+            "display": "Bipolar affective disorder, current episode manic (disorder)"
+          },
+          {
+            "code": "191620005",
+            "display": "Bipolar affective disorder, currently manic, mild (disorder)"
+          },
+          {
+            "code": "191621009",
+            "display": "Bipolar affective disorder, currently manic, moderate (disorder)"
+          },
+          {
+            "code": "191623007",
+            "display": "Bipolar affective disorder, currently manic, severe, with psychosis (disorder)"
+          },
+          {
+            "code": "191625000",
+            "display": "Bipolar affective disorder, currently manic, in full remission (disorder)"
+          },
+          {
+            "code": "191627008",
+            "display": "Bipolar affective disorder, current episode depression (disorder)"
+          },
+          {
+            "code": "191629006",
+            "display": "Bipolar affective disorder, currently depressed, mild (disorder)"
+          },
+          {
+            "code": "191630001",
+            "display": "Bipolar affective disorder, currently depressed, moderate (disorder)"
+          },
+          {
+            "code": "191632009",
+            "display": "Bipolar affective disorder, currently depressed, severe, with psychosis (disorder)"
+          },
+          {
+            "code": "191634005",
+            "display": "Bipolar affective disorder, currently depressed, in full remission (disorder)"
+          },
+          {
+            "code": "191636007",
+            "display": "Mixed bipolar affective disorder (disorder)"
+          },
+          {
+            "code": "191638008",
+            "display": "Mixed bipolar affective disorder, mild (disorder)"
+          },
+          {
+            "code": "191639000",
+            "display": "Mixed bipolar affective disorder, moderate (disorder)"
+          },
+          {
+            "code": "191641004",
+            "display": "Mixed bipolar affective disorder, severe, with psychosis (disorder)"
+          },
+          {
+            "code": "191643001",
+            "display": "Mixed bipolar affective disorder, in full remission (disorder)"
+          },
+          {
+            "code": "192362008",
+            "display": "Bipolar affective disorder, current episode mixed (disorder)"
+          },
+          {
+            "code": "371596008",
+            "display": "Bipolar I disorder (disorder)"
+          },
+          {
+            "code": "371599001",
+            "display": "Severe bipolar I disorder (disorder)"
+          },
+          {
+            "code": "371600003",
+            "display": "Severe bipolar disorder (disorder)"
+          },
+          {
+            "code": "371604007",
+            "display": "Severe bipolar II disorder (disorder)"
+          },
+          {
+            "code": "12843005",
+            "display": "Subsequent hospital visit by physician (procedure)"
+          },
+          {
+            "code": "18170008",
+            "display": "Subsequent nursing facility visit (procedure)"
+          },
+          {
+            "code": "19681004",
+            "display": "Nursing evaluation of patient and report (procedure)"
+          },
+          {
+            "code": "87790002",
+            "display": "Follow-up inpatient consultation visit (procedure)"
+          },
+          {
+            "code": "90526000",
+            "display": "Initial evaluation and management of healthy individual (procedure)"
+          },
+          {
+            "code": "185349003",
+            "display": "Encounter for check up (procedure)"
+          },
+          {
+            "code": "185463005",
+            "display": "Visit out of hours (procedure)"
+          },
+          {
+            "code": "185465003",
+            "display": "Weekend visit (procedure)"
+          },
+          {
+            "code": "207195004",
+            "display": "History and physical examination with evaluation and management of nursing facility patient (procedure)"
+          },
+          {
+            "code": "270427003",
+            "display": "Patient-initiated encounter (procedure)"
+          },
+          {
+            "code": "270430005",
+            "display": "Provider-initiated encounter (procedure)"
+          },
+          {
+            "code": "308335008",
+            "display": "Patient encounter procedure (procedure)"
+          },
+          {
+            "code": "390906007",
+            "display": "Follow-up encounter (procedure)"
+          },
+          {
+            "code": "406547006",
+            "display": "Urgent follow-up (procedure)"
+          },
+          {
+            "code": "439708006",
+            "display": "Home visit (procedure)"
+          },
+          {
+            "code": "832007",
+            "display": "Moderate major depression (disorder)"
+          },
+          {
+            "code": "2506003",
+            "display": "Early onset dysthymia (disorder)"
+          },
+          {
+            "code": "2618002",
+            "display": "Chronic recurrent major depressive disorder (disorder)"
+          },
+          {
+            "code": "3109008",
+            "display": "Secondary dysthymia early onset (disorder)"
+          },
+          {
+            "code": "14183003",
+            "display": "Chronic major depressive disorder, single episode (disorder)"
+          },
+          {
+            "code": "15193003",
+            "display": "Severe recurrent major depression with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "15639000",
+            "display": "Moderate major depression, single episode (disorder)"
+          },
+          {
+            "code": "18818009",
+            "display": "Moderate recurrent major depression (disorder)"
+          },
+          {
+            "code": "19527009",
+            "display": "Single episode of major depression in full remission (disorder)"
+          },
+          {
+            "code": "19694002",
+            "display": "Late onset dysthymia (disorder)"
+          },
+          {
+            "code": "20250007",
+            "display": "Severe major depression, single episode, with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "25922000",
+            "display": "Major depressive disorder, single episode with postpartum onset (disorder)"
+          },
+          {
+            "code": "28475009",
+            "display": "Severe recurrent major depression with psychotic features (disorder)"
+          },
+          {
+            "code": "30605009",
+            "display": "Major depression in partial remission (disorder)"
+          },
+          {
+            "code": "33078009",
+            "display": "Severe recurrent major depression with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "33135002",
+            "display": "Recurrent major depression in partial remission (disorder)"
+          },
+          {
+            "code": "33736005",
+            "display": "Severe major depression with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "36170009",
+            "display": "Secondary dysthymia late onset (disorder)"
+          },
+          {
+            "code": "36474008",
+            "display": "Severe recurrent major depression without psychotic features (disorder)"
+          },
+          {
+            "code": "36923009",
+            "display": "Major depression, single episode (disorder)"
+          },
+          {
+            "code": "38451003",
+            "display": "Primary dysthymia early onset (disorder)"
+          },
+          {
+            "code": "38694004",
+            "display": "Recurrent major depressive disorder with atypical features (disorder)"
+          },
+          {
+            "code": "39809009",
+            "display": "Recurrent major depressive disorder with catatonic features (disorder)"
+          },
+          {
+            "code": "40379007",
+            "display": "Mild recurrent major depression (disorder)"
+          },
+          {
+            "code": "42810003",
+            "display": "Major depression in remission (disorder)"
+          },
+          {
+            "code": "42925002",
+            "display": "Major depressive disorder, single episode with atypical features (disorder)"
+          },
+          {
+            "code": "46244001",
+            "display": "Recurrent major depression in full remission (disorder)"
+          },
+          {
+            "code": "60099002",
+            "display": "Severe major depression with psychotic features, mood-incongruent (disorder)"
+          },
+          {
+            "code": "63412003",
+            "display": "Major depression in full remission (disorder)"
+          },
+          {
+            "code": "63778009",
+            "display": "Major depressive disorder, single episode with melancholic features (disorder)"
+          },
+          {
+            "code": "66344007",
+            "display": "Recurrent major depression (disorder)"
+          },
+          {
+            "code": "67711008",
+            "display": "Primary dysthymia late onset (disorder)"
+          },
+          {
+            "code": "69392006",
+            "display": "Major depressive disorder, single episode with catatonic features (disorder)"
+          },
+          {
+            "code": "70747007",
+            "display": "Major depression single episode, in partial remission (disorder)"
+          },
+          {
+            "code": "71336009",
+            "display": "Recurrent major depressive disorder with postpartum onset (disorder)"
+          },
+          {
+            "code": "73867007",
+            "display": "Severe major depression with psychotic features (disorder)"
+          },
+          {
+            "code": "75084000",
+            "display": "Severe major depression without psychotic features (disorder)"
+          },
+          {
+            "code": "76441001",
+            "display": "Severe major depression, single episode, without psychotic features (disorder)"
+          },
+          {
+            "code": "77911002",
+            "display": "Severe major depression, single episode, with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "78667006",
+            "display": "Dysthymia (disorder)"
+          },
+          {
+            "code": "79298009",
+            "display": "Mild major depression, single episode (disorder)"
+          },
+          {
+            "code": "83176005",
+            "display": "Primary dysthymia (disorder)"
+          },
+          {
+            "code": "85080004",
+            "display": "Secondary dysthymia (disorder)"
+          },
+          {
+            "code": "87512008",
+            "display": "Mild major depression (disorder)"
+          },
+          {
+            "code": "191601008",
+            "display": "Single major depressive episode, mild (disorder)"
+          },
+          {
+            "code": "191602001",
+            "display": "Single major depressive episode, moderate (disorder)"
+          },
+          {
+            "code": "191604000",
+            "display": "Single major depressive episode, severe, with psychosis (disorder)"
+          },
+          {
+            "code": "191610000",
+            "display": "Recurrent major depressive episodes, mild (disorder)"
+          },
+          {
+            "code": "191611001",
+            "display": "Recurrent major depressive episodes, moderate (disorder)"
+          },
+          {
+            "code": "191613003",
+            "display": "Recurrent major depressive episodes, severe, with psychosis (disorder)"
+          },
+          {
+            "code": "191615005",
+            "display": "Recurrent major depressive episodes, in full remission (disorder)"
+          },
+          {
+            "code": "231499006",
+            "display": "Endogenous depression first episode (disorder)"
+          },
+          {
+            "code": "268620009",
+            "display": "Single major depressive episode (disorder)"
+          },
+          {
+            "code": "268621008",
+            "display": "Recurrent major depressive episodes (disorder)"
+          },
+          {
+            "code": "274948002",
+            "display": "Endogenous depression - recurrent (disorder)"
+          },
+          {
+            "code": "300706003",
+            "display": "Endogenous depression (disorder)"
+          },
+          {
+            "code": "319768000",
+            "display": "Recurrent major depressive disorder with melancholic features (disorder)"
+          },
+          {
+            "code": "320751009",
+            "display": "Major depression, melancholic type (disorder)"
+          },
+          {
+            "code": "370143000",
+            "display": "Major depressive disorder (disorder)"
+          },
+          {
+            "code": "430852001",
+            "display": "Severe major depression, single episode, with psychotic features (disorder)"
+          },
+          {
+            "code": "20010003",
+            "display": "Borderline personality disorder (disorder)"
+          },
+          {
+            "code": "55341008",
+            "display": "Histrionic personality disorder (disorder)"
+          },
+          {
+            "code": "191765005",
+            "display": "Emotionally unstable personality disorder (disorder)"
+          },
+          {
+            "code": "191766006",
+            "display": "Psychoinfantile personality (disorder)"
+          },
+          {
+            "code": "191773001",
+            "display": "Immature personality disorder (disorder)"
+          },
+          {
+            "code": "231527003",
+            "display": "Explosive personality disorder (disorder)"
+          },
+          {
+            "code": "35919005",
+            "display": "Pervasive developmental disorder (disorder)"
+          },
+          {
+            "code": "43614003",
+            "display": "Autistic disorder of childhood onset (disorder)"
+          },
+          {
+            "code": "71961003",
+            "display": "Childhood disintegrative disorder (disorder)"
+          },
+          {
+            "code": "191689008",
+            "display": "Active infantile autism (disorder)"
+          },
+          {
+            "code": "191690004",
+            "display": "Residual infantile autism (disorder)"
+          },
+          {
+            "code": "231536004",
+            "display": "Atypical autism (disorder)"
+          },
+          {
+            "code": "373618009",
+            "display": "Autistic spectrum disorder with isolated skills (disorder)"
+          },
+          {
+            "code": "408856003",
+            "display": "Autistic disorder (disorder)"
+          },
+          {
+            "code": "408857007",
+            "display": "Infantile autism (disorder)"
+          },
+          {
+            "code": "442314000",
+            "display": "Active but odd autism (disorder)"
+          },
+          {
+            "code": "39951000119105",
+            "display": "Pervasive developmental disorder of residual state (disorder)"
+          },
+          {
+            "code": "4926007",
+            "display": "Schizophrenia in remission (disorder)"
+          },
+          {
+            "code": "5464005",
+            "display": "Brief reactive psychosis (disorder)"
+          },
+          {
+            "code": "7025000",
+            "display": "Subchronic undifferentiated schizophrenia with acute exacerbations (disorder)"
+          },
+          {
+            "code": "12939007",
+            "display": "Chronic disorganized schizophrenia (disorder)"
+          },
+          {
+            "code": "14291003",
+            "display": "Subchronic disorganized schizophrenia with acute exacerbations (disorder)"
+          },
+          {
+            "code": "16990005",
+            "display": "Subchronic schizophrenia (disorder)"
+          },
+          {
+            "code": "26025008",
+            "display": "Residual schizophrenia (disorder)"
+          },
+          {
+            "code": "27387000",
+            "display": "Subchronic disorganized schizophrenia (disorder)"
+          },
+          {
+            "code": "29599000",
+            "display": "Chronic undifferentiated schizophrenia (disorder)"
+          },
+          {
+            "code": "30336007",
+            "display": "Chronic residual schizophrenia with acute exacerbations (disorder)"
+          },
+          {
+            "code": "31373002",
+            "display": "Disorganized schizophrenia in remission (disorder)"
+          },
+          {
+            "code": "31658008",
+            "display": "Chronic paranoid schizophrenia (disorder)"
+          },
+          {
+            "code": "35218008",
+            "display": "Chronic disorganized schizophrenia with acute exacerbations (disorder)"
+          },
+          {
+            "code": "35252006",
+            "display": "Disorganized schizophrenia (disorder)"
+          },
+          {
+            "code": "38368003",
+            "display": "Schizoaffective disorder, bipolar type (disorder)"
+          },
+          {
+            "code": "39610001",
+            "display": "Undifferentiated schizophrenia in remission (disorder)"
+          },
+          {
+            "code": "42868002",
+            "display": "Subchronic catatonic schizophrenia (disorder)"
+          },
+          {
+            "code": "51133006",
+            "display": "Residual schizophrenia in remission (disorder)"
+          },
+          {
+            "code": "58214004",
+            "display": "Schizophrenia (disorder)"
+          },
+          {
+            "code": "63181006",
+            "display": "Paranoid schizophrenia in remission (disorder)"
+          },
+          {
+            "code": "64905009",
+            "display": "Paranoid schizophrenia (disorder)"
+          },
+          {
+            "code": "68890003",
+            "display": "Schizoaffective disorder (disorder)"
+          },
+          {
+            "code": "68995007",
+            "display": "Chronic catatonic schizophrenia (disorder)"
+          },
+          {
+            "code": "70814008",
+            "display": "Subchronic residual schizophrenia with acute exacerbations (disorder)"
+          },
+          {
+            "code": "71103003",
+            "display": "Chronic residual schizophrenia (disorder)"
+          },
+          {
+            "code": "76566000",
+            "display": "Subchronic residual schizophrenia (disorder)"
+          },
+          {
+            "code": "79204003",
+            "display": "Chronic undifferentiated schizophrenia with acute exacerbations (disorder)"
+          },
+          {
+            "code": "79866005",
+            "display": "Subchronic paranoid schizophrenia (disorder)"
+          },
+          {
+            "code": "83746006",
+            "display": "Chronic schizophrenia (disorder)"
+          },
+          {
+            "code": "84760002",
+            "display": "Schizoaffective disorder, depressive type (disorder)"
+          },
+          {
+            "code": "85861002",
+            "display": "Subchronic undifferentiated schizophrenia (disorder)"
+          },
+          {
+            "code": "111482003",
+            "display": "Subchronic schizophrenia with acute exacerbations (disorder)"
+          },
+          {
+            "code": "111483008",
+            "display": "Catatonic schizophrenia in remission (disorder)"
+          },
+          {
+            "code": "111484002",
+            "display": "Undifferentiated schizophrenia (disorder)"
+          },
+          {
+            "code": "191526005",
+            "display": "Schizophrenic disorders (disorder)"
+          },
+          {
+            "code": "191527001",
+            "display": "Simple schizophrenia (disorder)"
+          },
+          {
+            "code": "191530008",
+            "display": "Acute exacerbation of subchronic schizophrenia (disorder)"
+          },
+          {
+            "code": "191531007",
+            "display": "Acute exacerbation of chronic schizophrenia (disorder)"
+          },
+          {
+            "code": "191536002",
+            "display": "Subchronic hebephrenic schizophrenia (disorder)"
+          },
+          {
+            "code": "191537006",
+            "display": "Chronic hebephrenic schizophrenia (disorder)"
+          },
+          {
+            "code": "191538001",
+            "display": "Acute exacerbation of subchronic hebephrenic schizophrenia (disorder)"
+          },
+          {
+            "code": "191539009",
+            "display": "Acute exacerbation of chronic hebephrenic schizophrenia (disorder)"
+          },
+          {
+            "code": "191540006",
+            "display": "Hebephrenic schizophrenia in remission (disorder)"
+          },
+          {
+            "code": "191542003",
+            "display": "Catatonic schizophrenia (disorder)"
+          },
+          {
+            "code": "191547009",
+            "display": "Acute exacerbation of subchronic catatonic schizophrenia (disorder)"
+          },
+          {
+            "code": "191548004",
+            "display": "Acute exacerbation of chronic catatonic schizophrenia (disorder)"
+          },
+          {
+            "code": "191554003",
+            "display": "Acute exacerbation of subchronic paranoid schizophrenia (disorder)"
+          },
+          {
+            "code": "191555002",
+            "display": "Acute exacerbation of chronic paranoid schizophrenia (disorder)"
+          },
+          {
+            "code": "191559008",
+            "display": "Latent schizophrenia (disorder)"
+          },
+          {
+            "code": "191564007",
+            "display": "Acute exacerbation of chronic latent schizophrenia (disorder)"
+          },
+          {
+            "code": "191567000",
+            "display": "Schizoaffective schizophrenia (disorder)"
+          },
+          {
+            "code": "191569002",
+            "display": "Subchronic schizoaffective schizophrenia (disorder)"
+          },
+          {
+            "code": "191570001",
+            "display": "Chronic schizoaffective schizophrenia (disorder)"
+          },
+          {
+            "code": "191571002",
+            "display": "Acute exacerbation of subchronic schizoaffective schizophrenia (disorder)"
+          },
+          {
+            "code": "191572009",
+            "display": "Acute exacerbation of chronic schizoaffective schizophrenia (disorder)"
+          },
+          {
+            "code": "191574005",
+            "display": "Schizoaffective schizophrenia in remission (disorder)"
+          },
+          {
+            "code": "191577003",
+            "display": "Cenesthopathic schizophrenia (disorder)"
+          },
+          {
+            "code": "191680007",
+            "display": "Psychogenic paranoid psychosis (disorder)"
+          },
+          {
+            "code": "231437006",
+            "display": "Reactive psychoses (disorder)"
+          },
+          {
+            "code": "231489001",
+            "display": "Acute transient psychotic disorder (disorder)"
+          },
+          {
+            "code": "268624000",
+            "display": "Acute paranoid reaction (disorder)"
+          },
+          {
+            "code": "270901009",
+            "display": "Schizoaffective disorder, mixed type (disorder)"
+          },
+          {
+            "code": "271428004",
+            "display": "Schizoaffective disorder, manic type (disorder)"
+          },
+          {
+            "code": "274952002",
+            "display": "Borderline schizophrenia (disorder)"
+          },
+          {
+            "code": "278853003",
+            "display": "Acute schizophrenia-like psychotic disorder (disorder)"
+          },
+          {
+            "code": "416340002",
+            "display": "Late onset schizophrenia (disorder)"
+          },
+          {
+            "code": "5694008",
+            "display": "Crisis intervention with follow-up (regime/therapy)"
+          },
+          {
+            "code": "10197000",
+            "display": "Psychiatric interview and evaluation (procedure)"
+          },
+          {
+            "code": "10997001",
+            "display": "Psychiatric evaluation of patient for testimentary capacity with report (procedure)"
+          },
+          {
+            "code": "38756009",
+            "display": "Psychiatric evaluation of patient for criminal responsibility with report (procedure)"
+          },
+          {
+            "code": "45392008",
+            "display": "Psychologic evaluation or test procedure (procedure)"
+          },
+          {
+            "code": "79094001",
+            "display": "Initial psychiatric interview with mental status and evaluation (procedure)"
+          },
+          {
+            "code": "88848003",
+            "display": "Psychiatric follow-up (procedure)"
+          },
+          {
+            "code": "90407005",
+            "display": "Evaluation of psychiatric state of patient (procedure)"
+          },
+          {
+            "code": "91310009",
+            "display": "Patient follow-up to return when and if necessary (procedure)"
+          },
+          {
+            "code": "165171009",
+            "display": "Initial psychiatric evaluation (procedure)"
+          },
+          {
+            "code": "165190001",
+            "display": "Psychiatric evaluation for rehabilitation (procedure)"
+          },
+          {
+            "code": "225337009",
+            "display": "Suicide risk assessment (procedure)"
+          },
+          {
+            "code": "370803007",
+            "display": "Evaluation of psychosocial impact on plan of care (procedure)"
+          },
+          {
+            "code": "372067001",
+            "display": "Implementation of measures to provide psychological support (regime/therapy)"
+          },
+          {
+            "code": "385721005",
+            "display": "Coping support assessment (procedure)"
+          },
+          {
+            "code": "385724002",
+            "display": "Coping support management (procedure)"
+          },
+          {
+            "code": "385725001",
+            "display": "Emotional support assessment (procedure)"
+          },
+          {
+            "code": "385726000",
+            "display": "Emotional support education (procedure)"
+          },
+          {
+            "code": "385727009",
+            "display": "Emotional support management (procedure)"
+          },
+          {
+            "code": "385887004",
+            "display": "Mental health history taking assessment (procedure)"
+          },
+          {
+            "code": "385889001",
+            "display": "Mental health history taking education (procedure)"
+          },
+          {
+            "code": "385890005",
+            "display": "Mental health history taking management (procedure)"
+          },
+          {
+            "code": "401277000",
+            "display": "Completion of mental health crisis plan (procedure)"
+          },
+          {
+            "code": "410223002",
+            "display": "Mental health care assessment (procedure)"
+          },
+          {
+            "code": "410224008",
+            "display": "Mental health care education (procedure)"
+          },
+          {
+            "code": "410225009",
+            "display": "Mental health care management (procedure)"
+          },
+          {
+            "code": "410226005",
+            "display": "Mental health promotion assessment (procedure)"
+          },
+          {
+            "code": "410227001",
+            "display": "Mental health promotion education (procedure)"
+          },
+          {
+            "code": "410228006",
+            "display": "Mental health promotion management (procedure)"
+          },
+          {
+            "code": "410229003",
+            "display": "Mental health screening assessment (procedure)"
+          },
+          {
+            "code": "410230008",
+            "display": "Mental health screening education (procedure)"
+          },
+          {
+            "code": "410231007",
+            "display": "Mental health screening management (procedure)"
+          },
+          {
+            "code": "410232000",
+            "display": "Mental health treatment assessment (procedure)"
+          },
+          {
+            "code": "410233005",
+            "display": "Mental health treatment education (procedure)"
+          },
+          {
+            "code": "410234004",
+            "display": "Management of mental health treatment (procedure)"
+          },
+          {
+            "code": "425604002",
+            "display": "Case management follow up (procedure)"
+          },
+          {
+            "code": "439141002",
+            "display": "Discharge by mental health primary care worker (procedure)"
+          },
+          {
+            "code": "35489007",
+            "display": "Depressive disorder (disorder)"
+          },
+          {
+            "code": "40568001",
+            "display": "Recurrent brief depressive disorder (disorder)"
+          },
+          {
+            "code": "48589009",
+            "display": "Minor depressive disorder (disorder)"
+          },
+          {
+            "code": "75837004",
+            "display": "Mood disorder with depressive features due to general medical condition (disorder)"
+          },
+          {
+            "code": "77486005",
+            "display": "Mood disorder with major depressive-like episode due to general medical condition (disorder)"
+          },
+          {
+            "code": "191616006",
+            "display": "Recurrent depression (disorder)"
+          },
+          {
+            "code": "191659001",
+            "display": "Atypical depressive disorder (disorder)"
+          },
+          {
+            "code": "192080009",
+            "display": "Chronic depression (disorder)"
+          },
+          {
+            "code": "231504006",
+            "display": "Mixed anxiety and depressive disorder (disorder)"
+          },
+          {
+            "code": "231542000",
+            "display": "Depressive conduct disorder (disorder)"
+          },
+          {
+            "code": "442057004",
+            "display": "Chronic depressive personality disorder (disorder)"
+          },
+          {
+            "code": "182832007",
+            "display": "Procedure related to management of drug administration (procedure)"
+          },
+          {
+            "code": "225333008",
+            "display": "Behavior management (regime/therapy)"
+          },
+          {
+            "code": "385828006",
+            "display": "Health promotion management (procedure)"
+          },
+          {
+            "code": "386230005",
+            "display": "Case management (procedure)"
+          },
+          {
+            "code": "409022004",
+            "display": "Dispensing medication management (procedure)"
+          },
+          {
+            "code": "410216003",
+            "display": "Communication care management (procedure)"
+          },
+          {
+            "code": "410219005",
+            "display": "Personal care management (procedure)"
+          },
+          {
+            "code": "410328009",
+            "display": "Coping skills case management (procedure)"
+          },
+          {
+            "code": "410335001",
+            "display": "Exercises case management (procedure)"
+          },
+          {
+            "code": "410346003",
+            "display": "Medication action/side effects case management (procedure)"
+          },
+          {
+            "code": "410347007",
+            "display": "Medication set-up case management (procedure)"
+          },
+          {
+            "code": "410351009",
+            "display": "Relaxation/breathing techniques case management (procedure)"
+          },
+          {
+            "code": "410352002",
+            "display": "Rest/sleep case management (procedure)"
+          },
+          {
+            "code": "410353007",
+            "display": "Safety case management (procedure)"
+          },
+          {
+            "code": "410354001",
+            "display": "Screening case management (procedure)"
+          },
+          {
+            "code": "410356004",
+            "display": "Signs/symptoms-mental/emotional case management (procedure)"
+          },
+          {
+            "code": "410358003",
+            "display": "Social work/counseling case management (procedure)"
+          },
+          {
+            "code": "410360001",
+            "display": "Spiritual care case management (procedure)"
+          },
+          {
+            "code": "410363004",
+            "display": "Support group case management (procedure)"
+          },
+          {
+            "code": "410364005",
+            "display": "Support system case management (procedure)"
+          },
+          {
+            "code": "410366007",
+            "display": "Wellness case management (procedure)"
+          },
+          {
+            "code": "416341003",
+            "display": "Case management started (situation)"
+          },
+          {
+            "code": "416584001",
+            "display": "Case management ended (situation)"
+          },
+          {
+            "code": "424490002",
+            "display": "Medication prescription case management (procedure)"
+          },
+          {
+            "code": "428151000124107",
+            "display": "Standardized adult depression screening tool completed (situation)"
+          },
+          {
+            "code": "428161000124109",
+            "display": "Standardized adolescent depression screening tool completed (situation)"
+          },
+          {
+            "code": "428171000124102",
+            "display": "Depression screening negative (finding)"
+          },
+          {
+            "code": "428181000124104",
+            "display": "Depression screening positive (situation)"
+          },
+          {
+            "code": "109006",
+            "display": "Anxiety disorder of childhood OR adolescence (disorder)"
+          },
+          {
+            "code": "600009",
+            "display": "Pyromania (disorder)"
+          },
+          {
+            "code": "899001",
+            "display": "Axis I diagnosis (disorder)"
+          },
+          {
+            "code": "1145003",
+            "display": "Developmental speech disorder (disorder)"
+          },
+          {
+            "code": "1376001",
+            "display": "Obsessive compulsive personality disorder (disorder)"
+          },
+          {
+            "code": "1380006",
+            "display": "Agoraphobia without history of panic disorder with limited symptom attacks (disorder)"
+          },
+          {
+            "code": "1383008",
+            "display": "Hallucinogen mood disorder (disorder)"
+          },
+          {
+            "code": "1686006",
+            "display": "Sedative, hypnotic AND/OR anxiolytic-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "1816003",
+            "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND mild panic attacks (disorder)"
+          },
+          {
+            "code": "1855002",
+            "display": "Developmental academic disorder (disorder)"
+          },
+          {
+            "code": "1973000",
+            "display": "Sedative, hypnotic AND/OR anxiolytic-induced psychotic disorder with delusions (disorder)"
+          },
+          {
+            "code": "2312009",
+            "display": "Reactive attachment disorder of infancy OR early childhood, inhibited type (disorder)"
+          },
+          {
+            "code": "2403008",
+            "display": "Psychoactive substance dependence (disorder)"
+          },
+          {
+            "code": "3158007",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND panic attacks in partial remission (disorder)"
+          },
+          {
+            "code": "3503000",
+            "display": "Gender identity disorder of adolescence, previously asexual (disorder)"
+          },
+          {
+            "code": "3914008",
+            "display": "Mental disorder in childhood (disorder)"
+          },
+          {
+            "code": "4306003",
+            "display": "Cluster B personality disorder (disorder)"
+          },
+          {
+            "code": "4932002",
+            "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND mild panic attacks (disorder)"
+          },
+          {
+            "code": "5095008",
+            "display": "Gender identity disorder of childhood (disorder)"
+          },
+          {
+            "code": "5158005",
+            "display": "Gilles de la Tourette's syndrome (disorder)"
+          },
+          {
+            "code": "5444000",
+            "display": "Sedative, hypnotic AND/OR anxiolytic intoxication delirium (disorder)"
+          },
+          {
+            "code": "5507002",
+            "display": "Stereotypy habit disorder (disorder)"
+          },
+          {
+            "code": "5509004",
+            "display": "Panic disorder with agoraphobia AND severe panic attacks (disorder)"
+          },
+          {
+            "code": "5510009",
+            "display": "Organic delusional disorder (disorder)"
+          },
+          {
+            "code": "6348008",
+            "display": "Cocaine-induced psychotic disorder with hallucinations (disorder)"
+          },
+          {
+            "code": "7291006",
+            "display": "Reactive attachment disorder of infancy (disorder)"
+          },
+          {
+            "code": "7397008",
+            "display": "Aggressor identification syndrome (disorder)"
+          },
+          {
+            "code": "7461003",
+            "display": "Attention deficit hyperactivity disorder, predominantly hyperactive impulsive type (disorder)"
+          },
+          {
+            "code": "7794004",
+            "display": "Chronic motor tic disorder (disorder)"
+          },
+          {
+            "code": "8185002",
+            "display": "Panic disorder with agoraphobia AND moderate panic attacks (disorder)"
+          },
+          {
+            "code": "8837000",
+            "display": "Amphetamine delirium (disorder)"
+          },
+          {
+            "code": "9167000",
+            "display": "Moderate mood disorder (disorder)"
+          },
+          {
+            "code": "9674006",
+            "display": "Adjustment disorder with withdrawal (disorder)"
+          },
+          {
+            "code": "9760005",
+            "display": "Deferred diagnosis on Axis I (disorder)"
+          },
+          {
+            "code": "10278007",
+            "display": "Factitious purpura (disorder)"
+          },
+          {
+            "code": "10327003",
+            "display": "Cocaine-induced mood disorder (disorder)"
+          },
+          {
+            "code": "10586006",
+            "display": "Occupation-related stress disorder (disorder)"
+          },
+          {
+            "code": "11061003",
+            "display": "Psychoactive substance use disorder (disorder)"
+          },
+          {
+            "code": "11806006",
+            "display": "Separation anxiety disorder of childhood (disorder)"
+          },
+          {
+            "code": "11941006",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND panic attacks in full remission (disorder)"
+          },
+          {
+            "code": "13438001",
+            "display": "Overanxious disorder of childhood (disorder)"
+          },
+          {
+            "code": "13601005",
+            "display": "Paranoid personality disorder (disorder)"
+          },
+          {
+            "code": "13670005",
+            "display": "Gender identity disorder of adulthood, previously heterosexual (disorder)"
+          },
+          {
+            "code": "14070001",
+            "display": "Multi-infarct dementia with depression (disorder)"
+          },
+          {
+            "code": "14077003",
+            "display": "Pica (disorder)"
+          },
+          {
+            "code": "14784000",
+            "display": "Opioid-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "15277004",
+            "display": "Hallucinogen-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "15945005",
+            "display": "Psychogenic polydipsia (disorder)"
+          },
+          {
+            "code": "15977008",
+            "display": "Adjustment disorder with academic inhibition (disorder)"
+          },
+          {
+            "code": "16805009",
+            "display": "Cluster A personality disorder (disorder)"
+          },
+          {
+            "code": "16966009",
+            "display": "Factitious hypoglycemia (disorder)"
+          },
+          {
+            "code": "17155009",
+            "display": "Trichotillomania (disorder)"
+          },
+          {
+            "code": "17226007",
+            "display": "Adjustment disorder (disorder)"
+          },
+          {
+            "code": "17262008",
+            "display": "Non-alcoholic Korsakoff's psychosis (disorder)"
+          },
+          {
+            "code": "17496003",
+            "display": "Organic anxiety disorder (disorder)"
+          },
+          {
+            "code": "18003009",
+            "display": "Gender identity disorder of adulthood (disorder)"
+          },
+          {
+            "code": "18085000",
+            "display": "Compulsive gambling (disorder)"
+          },
+          {
+            "code": "18260003",
+            "display": "Postpartum psychosis (disorder)"
+          },
+          {
+            "code": "18478005",
+            "display": "Adjustment disorder with physical complaints (disorder)"
+          },
+          {
+            "code": "18689007",
+            "display": "Inhalant intoxication delirium (disorder)"
+          },
+          {
+            "code": "19445006",
+            "display": "Opioid-induced psychotic disorder with hallucinations (disorder)"
+          },
+          {
+            "code": "19766004",
+            "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND severe panic attacks (disorder)"
+          },
+          {
+            "code": "20385005",
+            "display": "Opioid-induced psychotic disorder with delusions (disorder)"
+          },
+          {
+            "code": "20876004",
+            "display": "Inhalant-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "21000000",
+            "display": "Idiosyncratic intoxication (disorder)"
+          },
+          {
+            "code": "21586000",
+            "display": "Munchausen's syndrome (disorder)"
+          },
+          {
+            "code": "21634003",
+            "display": "Borjeson-Forssman-Lehmann syndrome (disorder)"
+          },
+          {
+            "code": "21897009",
+            "display": "Generalized anxiety disorder (disorder)"
+          },
+          {
+            "code": "22230001",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND panic attacks in full remission (disorder)"
+          },
+          {
+            "code": "22419002",
+            "display": "Mood disorder with mixed features due to general medical condition (disorder)"
+          },
+          {
+            "code": "23148009",
+            "display": "Undifferentiated attention deficit disorder (disorder)"
+          },
+          {
+            "code": "23560001",
+            "display": "Asperger's disorder (disorder)"
+          },
+          {
+            "code": "23645006",
+            "display": "Organic mood disorder (disorder)"
+          },
+          {
+            "code": "24121004",
+            "display": "Insomnia disorder related to another mental disorder (disorder)"
+          },
+          {
+            "code": "24125008",
+            "display": "Mental disorder in infancy (disorder)"
+          },
+          {
+            "code": "24315006",
+            "display": "Factitious disorder with combined physical AND psychological symptoms (disorder)"
+          },
+          {
+            "code": "24781009",
+            "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND panic attacks in full remission (disorder)"
+          },
+          {
+            "code": "25501002",
+            "display": "Social phobia (disorder)"
+          },
+          {
+            "code": "25766007",
+            "display": "Mixed receptive-expressive language disorder (disorder)"
+          },
+          {
+            "code": "26453000",
+            "display": "Mental disorder in adolescence (disorder)"
+          },
+          {
+            "code": "26472000",
+            "display": "Paraphrenia (disorder)"
+          },
+          {
+            "code": "26516009",
+            "display": "Severe mood disorder with psychotic features (disorder)"
+          },
+          {
+            "code": "26665006",
+            "display": "Antisocial personality disorder (disorder)"
+          },
+          {
+            "code": "26714005",
+            "display": "Cannabis-induced psychotic disorder with hallucinations (disorder)"
+          },
+          {
+            "code": "27544004",
+            "display": "Developmental coordination disorder (disorder)"
+          },
+          {
+            "code": "27956007",
+            "display": "Cocaine intoxication (disorder)"
+          },
+          {
+            "code": "28357009",
+            "display": "Transitory postpartum mood disturbance (disorder)"
+          },
+          {
+            "code": "28368009",
+            "display": "Psychoactive substance-induced organic hallucinosis (disorder)"
+          },
+          {
+            "code": "28676002",
+            "display": "Mood disorder with manic features due to general medical condition (disorder)"
+          },
+          {
+            "code": "28857002",
+            "display": "Reactive attachment disorder of infancy OR early childhood (disorder)"
+          },
+          {
+            "code": "28864000",
+            "display": "Sedative, hypnotic AND/OR anxiolytic-induced mood disorder (disorder)"
+          },
+          {
+            "code": "29733004",
+            "display": "Opioid-induced mood disorder (disorder)"
+          },
+          {
+            "code": "30059008",
+            "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND moderate panic attacks (disorder)"
+          },
+          {
+            "code": "30310000",
+            "display": "Nicotine-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "30491001",
+            "display": "Cocaine delusional disorder (disorder)"
+          },
+          {
+            "code": "30509009",
+            "display": "Gender identity disorder of adolescence, previously homosexual (disorder)"
+          },
+          {
+            "code": "31027006",
+            "display": "Schizotypal personality disorder (disorder)"
+          },
+          {
+            "code": "31177006",
+            "display": "Attention deficit hyperactivity disorder, combined type (disorder)"
+          },
+          {
+            "code": "31358003",
+            "display": "Coprophilia (disorder)"
+          },
+          {
+            "code": "31611000",
+            "display": "Multiple personality disorder (disorder)"
+          },
+          {
+            "code": "31648009",
+            "display": "Unaggressive type unsocialized behavior disorder (disorder)"
+          },
+          {
+            "code": "31715000",
+            "display": "Phencyclidine delirium (disorder)"
+          },
+          {
+            "code": "31781004",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND mild panic attacks (disorder)"
+          },
+          {
+            "code": "32009006",
+            "display": "Hallucinogen hallucinosis (disorder)"
+          },
+          {
+            "code": "32174002",
+            "display": "Voice disorder due to psychosexual conflict (disorder)"
+          },
+          {
+            "code": "32358001",
+            "display": "Amphetamine delusional disorder (disorder)"
+          },
+          {
+            "code": "32388005",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND moderate panic attacks (disorder)"
+          },
+          {
+            "code": "32552001",
+            "display": "Psychoactive substance-induced organic delusional disorder (disorder)"
+          },
+          {
+            "code": "32721004",
+            "display": "Bulimia nervosa, purging type (disorder)"
+          },
+          {
+            "code": "32875003",
+            "display": "Inhalant-induced persisting dementia (disorder)"
+          },
+          {
+            "code": "32880007",
+            "display": "Adjustment disorder with work inhibition (disorder)"
+          },
+          {
+            "code": "33323008",
+            "display": "Somatic delusion disorder (disorder)"
+          },
+          {
+            "code": "33449004",
+            "display": "Personality disorder (disorder)"
+          },
+          {
+            "code": "33693007",
+            "display": "Compensation neurosis (disorder)"
+          },
+          {
+            "code": "33871004",
+            "display": "Phencyclidine-induced psychotic disorder with hallucinations (disorder)"
+          },
+          {
+            "code": "34116005",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND severe panic attacks (disorder)"
+          },
+          {
+            "code": "35253001",
+            "display": "Attention deficit hyperactivity disorder, predominantly inattentive type (disorder)"
+          },
+          {
+            "code": "35607004",
+            "display": "Panic disorder with agoraphobia (disorder)"
+          },
+          {
+            "code": "35827000",
+            "display": "Recurrent conversion disorder (disorder)"
+          },
+          {
+            "code": "36217008",
+            "display": "Organic personality disorder (disorder)"
+          },
+          {
+            "code": "36622002",
+            "display": "Mild mood disorder (disorder)"
+          },
+          {
+            "code": "37331004",
+            "display": "Psychoactive substance-induced organic mood disorder (disorder)"
+          },
+          {
+            "code": "37739004",
+            "display": "Mood disorder due to a general medical condition (disorder)"
+          },
+          {
+            "code": "37746008",
+            "display": "Avoidant personality disorder (disorder)"
+          },
+          {
+            "code": "37868008",
+            "display": "Anxiety disorder of adolescence (disorder)"
+          },
+          {
+            "code": "37872007",
+            "display": "Avoidant disorder of childhood OR adolescence (disorder)"
+          },
+          {
+            "code": "37941009",
+            "display": "Rumination disorder (disorder)"
+          },
+          {
+            "code": "38295006",
+            "display": "Involutional paraphrenia (disorder)"
+          },
+          {
+            "code": "38328002",
+            "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND panic attacks in full remission (disorder)"
+          },
+          {
+            "code": "38547003",
+            "display": "Mood disorder in full remission (disorder)"
+          },
+          {
+            "code": "39003006",
+            "display": "Psychoactive substance-induced organic delirium (disorder)"
+          },
+          {
+            "code": "39465007",
+            "display": "Emotional deprivation syndrome (disorder)"
+          },
+          {
+            "code": "39807006",
+            "display": "Cannabis intoxication delirium (disorder)"
+          },
+          {
+            "code": "39951001",
+            "display": "Cannabis-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "40571009",
+            "display": "Hallucinogen intoxication delirium (disorder)"
+          },
+          {
+            "code": "40673001",
+            "display": "Post-encephalitic syndrome (disorder)"
+          },
+          {
+            "code": "40987004",
+            "display": "Intermittent explosive disorder (disorder)"
+          },
+          {
+            "code": "41021005",
+            "display": "Psychologic dyspareunia (disorder)"
+          },
+          {
+            "code": "41526007",
+            "display": "Reactive attachment disorder (disorder)"
+          },
+          {
+            "code": "42594001",
+            "display": "Organic mood disorder of depressed type (disorder)"
+          },
+          {
+            "code": "43150009",
+            "display": "Panic disorder without agoraphobia with severe panic attacks (disorder)"
+          },
+          {
+            "code": "43497001",
+            "display": "Amphetamine-induced mood disorder (disorder)"
+          },
+          {
+            "code": "44031002",
+            "display": "Postseizure confusion (disorder)"
+          },
+          {
+            "code": "44124003",
+            "display": "Reactive attachment disorder of early childhood (disorder)"
+          },
+          {
+            "code": "44966003",
+            "display": "Passive aggressive personality disorder (disorder)"
+          },
+          {
+            "code": "45677003",
+            "display": "Developmental expressive writing disorder (disorder)"
+          },
+          {
+            "code": "45912004",
+            "display": "Organic hallucinosis (disorder)"
+          },
+          {
+            "code": "46206005",
+            "display": "Mood disorder (disorder)"
+          },
+          {
+            "code": "46721000",
+            "display": "Psychoactive substance-induced organic personality disorder (disorder)"
+          },
+          {
+            "code": "46975003",
+            "display": "Cocaine-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "47372000",
+            "display": "Adjustment disorder with anxious mood (disorder)"
+          },
+          {
+            "code": "47447001",
+            "display": "Grandiose delusion disorder (disorder)"
+          },
+          {
+            "code": "47505003",
+            "display": "Posttraumatic stress disorder (disorder)"
+          },
+          {
+            "code": "47664006",
+            "display": "Sedative, hypnotic AND/OR anxiolytic-induced psychotic disorder with hallucinations (disorder)"
+          },
+          {
+            "code": "47916000",
+            "display": "Developmental arithmetic disorder (disorder)"
+          },
+          {
+            "code": "48500005",
+            "display": "Delusional disorder (disorder)"
+          },
+          {
+            "code": "49271002",
+            "display": "Deferred diagnosis on Axis II (disorder)"
+          },
+          {
+            "code": "49481000",
+            "display": "Postseizure delirium (disorder)"
+          },
+          {
+            "code": "49564006",
+            "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND moderate panic attacks (disorder)"
+          },
+          {
+            "code": "50026000",
+            "display": "Psychoactive substance-induced organic anxiety disorder (disorder)"
+          },
+          {
+            "code": "50320000",
+            "display": "Hallucinogen intoxication (disorder)"
+          },
+          {
+            "code": "50705009",
+            "display": "Factitious disorder (disorder)"
+          },
+          {
+            "code": "50722006",
+            "display": "Phencyclidine delusional disorder (disorder)"
+          },
+          {
+            "code": "50878001",
+            "display": "Gender identity disorder of adulthood, previously asexual (disorder)"
+          },
+          {
+            "code": "50933003",
+            "display": "Hallucinogen delusional disorder (disorder)"
+          },
+          {
+            "code": "50983008",
+            "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND panic attacks in partial remission (disorder)"
+          },
+          {
+            "code": "51443000",
+            "display": "Amphetamine-induced psychotic disorder with hallucinations (disorder)"
+          },
+          {
+            "code": "51493001",
+            "display": "Cocaine-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "51771007",
+            "display": "Postviral fatigue syndrome (disorder)"
+          },
+          {
+            "code": "52702003",
+            "display": "Chronic fatigue syndrome (disorder)"
+          },
+          {
+            "code": "52824009",
+            "display": "Developmental reading disorder (disorder)"
+          },
+          {
+            "code": "52866005",
+            "display": "Opioid intoxication delirium (disorder)"
+          },
+          {
+            "code": "52910006",
+            "display": "Anxiety disorder due to a general medical condition (disorder)"
+          },
+          {
+            "code": "52954000",
+            "display": "Schizoid personality disorder (disorder)"
+          },
+          {
+            "code": "53050002",
+            "display": "Hallucinogen-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "53467004",
+            "display": "Anxiety disorder of childhood (disorder)"
+          },
+          {
+            "code": "53956006",
+            "display": "Panic disorder without agoraphobia with panic attacks in partial remission (disorder)"
+          },
+          {
+            "code": "54319003",
+            "display": "Disruptive behavior disorder (disorder)"
+          },
+          {
+            "code": "54417002",
+            "display": "Adult gender identity disorder, sexually attracted to females (disorder)"
+          },
+          {
+            "code": "54587008",
+            "display": "Simple phobia (disorder)"
+          },
+          {
+            "code": "55668003",
+            "display": "Adjustment disorder with mixed emotional features (disorder)"
+          },
+          {
+            "code": "55967005",
+            "display": "Phencyclidine-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "56194001",
+            "display": "Caffeine-induced sleep disorder (disorder)"
+          },
+          {
+            "code": "56576003",
+            "display": "Panic disorder without agoraphobia (disorder)"
+          },
+          {
+            "code": "56627002",
+            "display": "Psychosexual disorder (disorder)"
+          },
+          {
+            "code": "56641006",
+            "display": "Axis II diagnosis (disorder)"
+          },
+          {
+            "code": "56882008",
+            "display": "Anorexia nervosa (disorder)"
+          },
+          {
+            "code": "57194009",
+            "display": "Adjustment disorder with depressed mood (disorder)"
+          },
+          {
+            "code": "57588009",
+            "display": "Sedative, hypnotic AND/OR anxiolytic-induced sleep disorder (disorder)"
+          },
+          {
+            "code": "57715001",
+            "display": "Gender identity disorder of adolescence (disorder)"
+          },
+          {
+            "code": "58329000",
+            "display": "Organic mood disorder of manic type (disorder)"
+          },
+          {
+            "code": "58535001",
+            "display": "Physical AND emotional exhaustion state (disorder)"
+          },
+          {
+            "code": "58647003",
+            "display": "Severe mood disorder with psychotic features, mood-congruent (disorder)"
+          },
+          {
+            "code": "58703003",
+            "display": "Postpartum depression (disorder)"
+          },
+          {
+            "code": "59216005",
+            "display": "Adult gender identity disorder, sexually attracted to males (disorder)"
+          },
+          {
+            "code": "59645001",
+            "display": "Bulimia nervosa, nonpurging type (disorder)"
+          },
+          {
+            "code": "59651006",
+            "display": "Sedative, hypnotic AND/OR anxiolytic-induced persisting dementia (disorder)"
+          },
+          {
+            "code": "59923000",
+            "display": "Panic disorder with agoraphobia AND panic attacks in full remission (disorder)"
+          },
+          {
+            "code": "60123008",
+            "display": "Delusional disorder, mixed type (disorder)"
+          },
+          {
+            "code": "61104008",
+            "display": "Inhalant-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "61157009",
+            "display": "Combat fatigue (disorder)"
+          },
+          {
+            "code": "61180001",
+            "display": "Adult gender identity disorder, sexually attracted to neither sex (disorder)"
+          },
+          {
+            "code": "61212007",
+            "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND severe panic attacks (disorder)"
+          },
+          {
+            "code": "61569007",
+            "display": "Agoraphobia without history of panic disorder (disorder)"
+          },
+          {
+            "code": "61831009",
+            "display": "Induced psychotic disorder (disorder)"
+          },
+          {
+            "code": "62239001",
+            "display": "Parkinson-dementia complex of Guam (disorder)"
+          },
+          {
+            "code": "62351001",
+            "display": "Generalized social phobia (disorder)"
+          },
+          {
+            "code": "63204009",
+            "display": "Bouffée délirante (disorder)"
+          },
+          {
+            "code": "63393005",
+            "display": "Anorexia nervosa, binge-eating purging type (disorder)"
+          },
+          {
+            "code": "63649001",
+            "display": "Cannabis delusional disorder (disorder)"
+          },
+          {
+            "code": "63701002",
+            "display": "Panic disorder with agoraphobia, mild agoraphobic avoidance AND mild panic attacks (disorder)"
+          },
+          {
+            "code": "63909006",
+            "display": "Panic disorder with agoraphobia AND panic attacks in partial remission (disorder)"
+          },
+          {
+            "code": "63983005",
+            "display": "Inhalant-induced psychotic disorder with hallucinations (disorder)"
+          },
+          {
+            "code": "64060000",
+            "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND panic attacks in full remission (disorder)"
+          },
+          {
+            "code": "64165008",
+            "display": "Avoidant disorder of childhood (disorder)"
+          },
+          {
+            "code": "65064003",
+            "display": "Panic disorder without agoraphobia with moderate panic attacks (disorder)"
+          },
+          {
+            "code": "66347000",
+            "display": "Impulse control disorder (disorder)"
+          },
+          {
+            "code": "66381006",
+            "display": "Adjustment disorder with mixed disturbance of emotions AND conduct (disorder)"
+          },
+          {
+            "code": "66936004",
+            "display": "Identity disorder (disorder)"
+          },
+          {
+            "code": "67123006",
+            "display": "Adult gender identity disorder, sexually attracted to both sexes (disorder)"
+          },
+          {
+            "code": "67195008",
+            "display": "Acute stress disorder (disorder)"
+          },
+          {
+            "code": "68019004",
+            "display": "Recurrent major depression in remission (disorder)"
+          },
+          {
+            "code": "68618008",
+            "display": "Rett's disorder (disorder)"
+          },
+          {
+            "code": "68963006",
+            "display": "Gender identity disorder of adolescence, previously heterosexual (disorder)"
+          },
+          {
+            "code": "69322001",
+            "display": "Psychotic disorder (disorder)"
+          },
+          {
+            "code": "69361009",
+            "display": "Kleptomania (disorder)"
+          },
+          {
+            "code": "69479009",
+            "display": "Anxiety hyperventilation (disorder)"
+          },
+          {
+            "code": "69482004",
+            "display": "Korsakoff's psychosis (disorder)"
+          },
+          {
+            "code": "70328006",
+            "display": "Cocaine delirium (disorder)"
+          },
+          {
+            "code": "70655008",
+            "display": "Caffeine-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "70691001",
+            "display": "Agoraphobia (disorder)"
+          },
+          {
+            "code": "70932007",
+            "display": "Amphetamine-induced sexual dysfunction (disorder)"
+          },
+          {
+            "code": "71328000",
+            "display": "Opioid-induced sexual dysfunction (disorder)"
+          },
+          {
+            "code": "71787009",
+            "display": "Psychologic vaginismus (disorder)"
+          },
+          {
+            "code": "71959007",
+            "display": "Elective mutism (disorder)"
+          },
+          {
+            "code": "72366004",
+            "display": "Eating disorder (disorder)"
+          },
+          {
+            "code": "72861004",
+            "display": "Panic disorder without agoraphobia with mild panic attacks (disorder)"
+          },
+          {
+            "code": "73462009",
+            "display": "Chronic vocal tic disorder (disorder)"
+          },
+          {
+            "code": "74010007",
+            "display": "Panic disorder with agoraphobia, severe agoraphobic avoidance AND panic attacks in partial remission (disorder)"
+          },
+          {
+            "code": "74266001",
+            "display": "Mood disorder in partial remission (disorder)"
+          },
+          {
+            "code": "74732009",
+            "display": "Mental disorder (disorder)"
+          },
+          {
+            "code": "74934004",
+            "display": "Psychoactive substance-induced organic withdrawal (disorder)"
+          },
+          {
+            "code": "75122001",
+            "display": "Inhalant-induced psychotic disorder with delusions (disorder)"
+          },
+          {
+            "code": "75752004",
+            "display": "Bipolar I disorder, most recent episode depressed with melancholic features (disorder)"
+          },
+          {
+            "code": "76105009",
+            "display": "Cyclothymia (disorder)"
+          },
+          {
+            "code": "76236006",
+            "display": "Atypical tic disorder (disorder)"
+          },
+          {
+            "code": "76812003",
+            "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND panic attacks in partial remission (disorder)"
+          },
+          {
+            "code": "76868007",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND mild panic attacks (disorder)"
+          },
+          {
+            "code": "77355000",
+            "display": "Cannabis-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "77383003",
+            "display": "Marfanoid mental retardation syndrome (disorder)"
+          },
+          {
+            "code": "77475008",
+            "display": "Jealous delusion disorder (disorder)"
+          },
+          {
+            "code": "77675002",
+            "display": "Anorexia nervosa, restricting type (disorder)"
+          },
+          {
+            "code": "77815007",
+            "display": "Gender identity disorder of adulthood, previously homosexual (disorder)"
+          },
+          {
+            "code": "78004001",
+            "display": "Bulimia nervosa (disorder)"
+          },
+          {
+            "code": "78358001",
+            "display": "Amphetamine withdrawal (disorder)"
+          },
+          {
+            "code": "79524000",
+            "display": "Ecouteurism (disorder)"
+          },
+          {
+            "code": "79842004",
+            "display": "Stuporous depression (disorder)"
+          },
+          {
+            "code": "80711002",
+            "display": "Narcissistic personality disorder (disorder)"
+          },
+          {
+            "code": "80868005",
+            "display": "Cocaine withdrawal (disorder)"
+          },
+          {
+            "code": "81463002",
+            "display": "Bestiality (disorder)"
+          },
+          {
+            "code": "82096005",
+            "display": "Aggressive type unsocialized behavior disorder (disorder)"
+          },
+          {
+            "code": "82218004",
+            "display": "Postoperative depression (disorder)"
+          },
+          {
+            "code": "82339009",
+            "display": "Amphetamine-induced anxiety disorder (disorder)"
+          },
+          {
+            "code": "82415003",
+            "display": "Agoraphobia without history of panic disorder without limited symptom attacks (disorder)"
+          },
+          {
+            "code": "82494000",
+            "display": "Panic disorder without agoraphobia with panic attacks in full remission (disorder)"
+          },
+          {
+            "code": "82738004",
+            "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND moderate panic attacks (disorder)"
+          },
+          {
+            "code": "83168008",
+            "display": "Psychoactive substance-induced organic amnestic disorder (disorder)"
+          },
+          {
+            "code": "83253003",
+            "display": "Shyness disorder of childhood (disorder)"
+          },
+          {
+            "code": "83367009",
+            "display": "Amphetamine-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "83458005",
+            "display": "Agitated depression (disorder)"
+          },
+          {
+            "code": "83501007",
+            "display": "Organic mood disorder of mixed type (disorder)"
+          },
+          {
+            "code": "83631006",
+            "display": "Panic disorder with agoraphobia, moderate agoraphobic avoidance AND severe panic attacks (disorder)"
+          },
+          {
+            "code": "83890006",
+            "display": "Cluster C personality disorder (disorder)"
+          },
+          {
+            "code": "84466009",
+            "display": "Dependent personality disorder (disorder)"
+          },
+          {
+            "code": "84788008",
+            "display": "Menopausal depression (disorder)"
+          },
+          {
+            "code": "84984002",
+            "display": "Adjustment disorder with disturbance of conduct (disorder)"
+          },
+          {
+            "code": "85061001",
+            "display": "Separation anxiety disorder of childhood, early onset (disorder)"
+          },
+          {
+            "code": "85762002",
+            "display": "Voice disorder due to transsexualism (disorder)"
+          },
+          {
+            "code": "85821003",
+            "display": "Acute non-psychotic brain syndrome (disorder)"
+          },
+          {
+            "code": "87132004",
+            "display": "Opioid withdrawal (disorder)"
+          },
+          {
+            "code": "87203005",
+            "display": "Bipolar I disorder, most recent episode depressed with postpartum onset (disorder)"
+          },
+          {
+            "code": "87414006",
+            "display": "Reactive depression (situational) (disorder)"
+          },
+          {
+            "code": "87798009",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND moderate panic attacks (disorder)"
+          },
+          {
+            "code": "87991007",
+            "display": "Gender identity disorder (disorder)"
+          },
+          {
+            "code": "88845000",
+            "display": "Explosive type organic personality disorder (disorder)"
+          },
+          {
+            "code": "88939009",
+            "display": "Severe mood disorder without psychotic features (disorder)"
+          },
+          {
+            "code": "88975006",
+            "display": "Schizophreniform disorder (disorder)"
+          },
+          {
+            "code": "89415002",
+            "display": "Hypersomnia disorder related to another mental disorder (disorder)"
+          },
+          {
+            "code": "89451009",
+            "display": "Inhalant-induced mood disorder (disorder)"
+          },
+          {
+            "code": "89618007",
+            "display": "Persecutory delusion disorder (disorder)"
+          },
+          {
+            "code": "89948007",
+            "display": "Panic disorder with agoraphobia AND mild panic attacks (disorder)"
+          },
+          {
+            "code": "90755006",
+            "display": "Nicotine withdrawal (disorder)"
+          },
+          {
+            "code": "90790003",
+            "display": "Avoidant disorder of adolescence (disorder)"
+          },
+          {
+            "code": "93461009",
+            "display": "Gender dysphoria (disorder)"
+          },
+          {
+            "code": "95635002",
+            "display": "Caffeine withdrawal (disorder)"
+          },
+          {
+            "code": "95637005",
+            "display": "Munchausen syndrome by proxy (disorder)"
+          },
+          {
+            "code": "106013002",
+            "display": "Mental disorder of infancy, childhood or adolescence (disorder)"
+          },
+          {
+            "code": "106014008",
+            "display": "Organic mental disorder of unknown etiology (disorder)"
+          },
+          {
+            "code": "106015009",
+            "display": "Mental disorder AND/OR culture bound syndrome (disorder)"
+          },
+          {
+            "code": "109805003",
+            "display": "Factitious cheilitis (disorder)"
+          },
+          {
+            "code": "111475002",
+            "display": "Neurosis (disorder)"
+          },
+          {
+            "code": "111476001",
+            "display": "Mental disorder usually first evident in infancy, childhood AND/OR adolescence (disorder)"
+          },
+          {
+            "code": "111477005",
+            "display": "Reactive attachment disorder of infancy OR early childhood, disinhibited type (disorder)"
+          },
+          {
+            "code": "111479008",
+            "display": "Organic mental disorder (disorder)"
+          },
+          {
+            "code": "111480006",
+            "display": "Psychoactive substance-induced organic dementia (disorder)"
+          },
+          {
+            "code": "111487009",
+            "display": "Dream anxiety disorder (disorder)"
+          },
+          {
+            "code": "111490003",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in partial remission AND severe panic attacks (disorder)"
+          },
+          {
+            "code": "111491004",
+            "display": "Panic disorder with agoraphobia, agoraphobic avoidance in full remission AND panic attacks in partial remission (disorder)"
+          },
+          {
+            "code": "126943008",
+            "display": "Separation anxiety (disorder)"
+          },
+          {
+            "code": "128293007",
+            "display": "Chronic mental disorder (disorder)"
+          },
+          {
+            "code": "129104009",
+            "display": "Developmental mental disorder (disorder)"
+          },
+          {
+            "code": "129604005",
+            "display": "Delusion of heart disease syndrome (disorder)"
+          },
+          {
+            "code": "162313000",
+            "display": "Morbid jealousy (disorder)"
+          },
+          {
+            "code": "162702000",
+            "display": "On examination - mentally confused (disorder)"
+          },
+          {
+            "code": "162722001",
+            "display": "On examination - depressed (disorder)"
+          },
+          {
+            "code": "187921002",
+            "display": "Developmental receptive language disorder (disorder)"
+          },
+          {
+            "code": "191447007",
+            "display": "Organic psychotic condition (disorder)"
+          },
+          {
+            "code": "191455000",
+            "display": "Presenile dementia with depression (disorder)"
+          },
+          {
+            "code": "191457008",
+            "display": "Senile dementia with depressive or paranoid features (disorder)"
+          },
+          {
+            "code": "191458003",
+            "display": "Senile dementia with paranoia (disorder)"
+          },
+          {
+            "code": "191459006",
+            "display": "Senile dementia with depression (disorder)"
+          },
+          {
+            "code": "191466007",
+            "display": "Arteriosclerotic dementia with depression (disorder)"
+          },
+          {
+            "code": "191483003",
+            "display": "Drug-induced psychosis (disorder)"
+          },
+          {
+            "code": "191484009",
+            "display": "Drug-induced paranoia or hallucinatory states (disorder)"
+          },
+          {
+            "code": "191485005",
+            "display": "Drug-induced paranoid state (disorder)"
+          },
+          {
+            "code": "191486006",
+            "display": "Drug-induced hallucinosis (disorder)"
+          },
+          {
+            "code": "191492000",
+            "display": "Drug-induced delirium (disorder)"
+          },
+          {
+            "code": "191493005",
+            "display": "Drug-induced dementia (disorder)"
+          },
+          {
+            "code": "191494004",
+            "display": "Drug-induced amnestic syndrome (disorder)"
+          },
+          {
+            "code": "191495003",
+            "display": "Drug-induced depressive state (disorder)"
+          },
+          {
+            "code": "191496002",
+            "display": "Drug-induced personality disorder (disorder)"
+          },
+          {
+            "code": "191499009",
+            "display": "Transient organic psychoses (disorder)"
+          },
+          {
+            "code": "191501001",
+            "display": "Acute confusional state, post-traumatic (disorder)"
+          },
+          {
+            "code": "191508007",
+            "display": "Subacute confusional state, post-traumatic (disorder)"
+          },
+          {
+            "code": "191590005",
+            "display": "Recurrent manic episodes (disorder)"
+          },
+          {
+            "code": "191592002",
+            "display": "Recurrent manic episodes, mild (disorder)"
+          },
+          {
+            "code": "191593007",
+            "display": "Recurrent manic episodes, moderate (disorder)"
+          },
+          {
+            "code": "191595000",
+            "display": "Recurrent manic episodes, severe, with psychosis (disorder)"
+          },
+          {
+            "code": "191597008",
+            "display": "Recurrent manic episodes, in full remission (disorder)"
+          },
+          {
+            "code": "191667009",
+            "display": "Paranoid disorder (disorder)"
+          },
+          {
+            "code": "191668004",
+            "display": "Simple paranoid state (disorder)"
+          },
+          {
+            "code": "191670008",
+            "display": "Shared paranoid disorder (disorder)"
+          },
+          {
+            "code": "191672000",
+            "display": "Paranoia querulans (disorder)"
+          },
+          {
+            "code": "191676002",
+            "display": "Reactive depressive psychosis (disorder)"
+          },
+          {
+            "code": "191678001",
+            "display": "Reactive confusion (disorder)"
+          },
+          {
+            "code": "191687005",
+            "display": "Psychosis with origin in childhood (disorder)"
+          },
+          {
+            "code": "191692007",
+            "display": "Active disintegrative psychoses (disorder)"
+          },
+          {
+            "code": "191693002",
+            "display": "Residual disintegrative psychoses (disorder)"
+          },
+          {
+            "code": "191696005",
+            "display": "Atypical childhood psychoses (disorder)"
+          },
+          {
+            "code": "191697001",
+            "display": "Borderline psychosis of childhood (disorder)"
+          },
+          {
+            "code": "191714002",
+            "display": "Dissociative convulsions (disorder)"
+          },
+          {
+            "code": "191722009",
+            "display": "Agoraphobia with panic attacks (disorder)"
+          },
+          {
+            "code": "191724005",
+            "display": "Social phobia, fear of eating in public (disorder)"
+          },
+          {
+            "code": "191725006",
+            "display": "Social phobia, fear of public speaking (disorder)"
+          },
+          {
+            "code": "191726007",
+            "display": "Social phobia, fear of public washing (disorder)"
+          },
+          {
+            "code": "191736004",
+            "display": "Obsessive-compulsive disorder (disorder)"
+          },
+          {
+            "code": "191737008",
+            "display": "Compulsive neurosis (disorder)"
+          },
+          {
+            "code": "191738003",
+            "display": "Obsessional neurosis (disorder)"
+          },
+          {
+            "code": "191753006",
+            "display": "Hypomanic personality disorder (disorder)"
+          },
+          {
+            "code": "191772006",
+            "display": "Eccentric personality disorder (disorder)"
+          },
+          {
+            "code": "191774007",
+            "display": "Masochistic personality disorder (disorder)"
+          },
+          {
+            "code": "191787001",
+            "display": "Psychosexual identity disorder (disorder)"
+          },
+          {
+            "code": "191966002",
+            "display": "Psychogenic pruritus (disorder)"
+          },
+          {
+            "code": "192014006",
+            "display": "Psychogenic rumination (disorder)"
+          },
+          {
+            "code": "192037000",
+            "display": "Acute panic state due to acute stress reaction (disorder)"
+          },
+          {
+            "code": "192038005",
+            "display": "Acute fugue state due to acute stress reaction (disorder)"
+          },
+          {
+            "code": "192039002",
+            "display": "Acute stupor state due to acute stress reaction (disorder)"
+          },
+          {
+            "code": "192041001",
+            "display": "Acute situational disturbance (disorder)"
+          },
+          {
+            "code": "192042008",
+            "display": "Acute post-trauma stress state (disorder)"
+          },
+          {
+            "code": "192044009",
+            "display": "Stress reaction causing mixed disturbance of emotion and conduct (disorder)"
+          },
+          {
+            "code": "192046006",
+            "display": "Brief depressive adjustment reaction (disorder)"
+          },
+          {
+            "code": "192049004",
+            "display": "Prolonged depressive adjustment reaction (disorder)"
+          },
+          {
+            "code": "192051000",
+            "display": "Adolescent emancipation disorder (disorder)"
+          },
+          {
+            "code": "192052007",
+            "display": "Early adult emancipation disorder (disorder)"
+          },
+          {
+            "code": "192054008",
+            "display": "Culture shock (disorder)"
+          },
+          {
+            "code": "192056005",
+            "display": "Adjustment reaction with aggression (disorder)"
+          },
+          {
+            "code": "192057001",
+            "display": "Adjustment reaction with antisocial behavior (disorder)"
+          },
+          {
+            "code": "192058006",
+            "display": "Adjustment reaction with destructiveness (disorder)"
+          },
+          {
+            "code": "192061007",
+            "display": "Concentration camp syndrome (disorder)"
+          },
+          {
+            "code": "192063005",
+            "display": "Adjustment reaction with physical symptoms (disorder)"
+          },
+          {
+            "code": "192064004",
+            "display": "Elective mutism due to an adjustment reaction (disorder)"
+          },
+          {
+            "code": "192069009",
+            "display": "Specific nonpsychotic mental disorders following organic brain damage (disorder)"
+          },
+          {
+            "code": "192072002",
+            "display": "Organic memory impairment (disorder)"
+          },
+          {
+            "code": "192073007",
+            "display": "Change in personality (disorder)"
+          },
+          {
+            "code": "192079006",
+            "display": "Postviral depression (disorder)"
+          },
+          {
+            "code": "192097003",
+            "display": "Isolated explosive disorder (disorder)"
+          },
+          {
+            "code": "192099000",
+            "display": "Childhood disorder of conduct and emotion (disorder)"
+          },
+          {
+            "code": "192108001",
+            "display": "Disturbance of anxiety and fearfulness in childhood and adolescence (disorder)"
+          },
+          {
+            "code": "192110004",
+            "display": "Childhood and adolescent fearfulness disturbance (disorder)"
+          },
+          {
+            "code": "192122001",
+            "display": "Childhood or adolescent identity disorder (disorder)"
+          },
+          {
+            "code": "192127007",
+            "display": "Child attention deficit disorder (disorder)"
+          },
+          {
+            "code": "192147004",
+            "display": "Mixed disorder of psychological development (disorder)"
+          },
+          {
+            "code": "192527004",
+            "display": "Elaboration of physical symptoms for psychological reasons (disorder)"
+          },
+          {
+            "code": "192562009",
+            "display": "Disorder of psychological development (disorder)"
+          },
+          {
+            "code": "192611004",
+            "display": "Childhood phobic anxiety disorder (disorder)"
+          },
+          {
+            "code": "192616009",
+            "display": "Childhood or adolescent disorder of social functioning (disorder)"
+          },
+          {
+            "code": "192631000",
+            "display": "Pica of infancy and childhood (disorder)"
+          },
+          {
+            "code": "197480006",
+            "display": "Anxiety disorder (disorder)"
+          },
+          {
+            "code": "199257008",
+            "display": "Mental disorders during pregnancy, childbirth and the puerperium (disorder)"
+          },
+          {
+            "code": "199259006",
+            "display": "Mental disorder during pregnancy - baby delivered (disorder)"
+          },
+          {
+            "code": "199260001",
+            "display": "Mental disorder in the puerperium - baby delivered (disorder)"
+          },
+          {
+            "code": "199261002",
+            "display": "Mental disorder during pregnancy - baby not yet delivered (disorder)"
+          },
+          {
+            "code": "199262009",
+            "display": "Mental disorder in the puerperium - baby delivered during previous episode of care (disorder)"
+          },
+          {
+            "code": "229623002",
+            "display": "Developmental dysfluency (disorder)"
+          },
+          {
+            "code": "229699006",
+            "display": "Immature articulatory praxis (disorder)"
+          },
+          {
+            "code": "229700007",
+            "display": "Developmental motor speech disorder (disorder)"
+          },
+          {
+            "code": "229701006",
+            "display": "Developmental articulatory dyspraxia (disorder)"
+          },
+          {
+            "code": "229715008",
+            "display": "Deficits in attention motor control and perception (disorder)"
+          },
+          {
+            "code": "229729009",
+            "display": "Developmental language impairment (disorder)"
+          },
+          {
+            "code": "229740001",
+            "display": "Delayed pre-verbal development (disorder)"
+          },
+          {
+            "code": "229744005",
+            "display": "Developmental syntactic impairment (disorder)"
+          },
+          {
+            "code": "229745006",
+            "display": "Developmental semantic impairment (disorder)"
+          },
+          {
+            "code": "230334008",
+            "display": "Drug-induced tic (disorder)"
+          },
+          {
+            "code": "230455006",
+            "display": "Self-induced non-photosensitive epilepsy (disorder)"
+          },
+          {
+            "code": "231438001",
+            "display": "Presbyophrenic psychosis (disorder)"
+          },
+          {
+            "code": "231442003",
+            "display": "Organic catatonic disorder (disorder)"
+          },
+          {
+            "code": "231443008",
+            "display": "Right hemispheric organic affective disorder (disorder)"
+          },
+          {
+            "code": "231444002",
+            "display": "Organic bipolar disorder (disorder)"
+          },
+          {
+            "code": "231445001",
+            "display": "Organic dissociative disorder (disorder)"
+          },
+          {
+            "code": "231446000",
+            "display": "Organic emotionally labile disorder (disorder)"
+          },
+          {
+            "code": "231449007",
+            "display": "Epileptic psychosis (disorder)"
+          },
+          {
+            "code": "231450007",
+            "display": "Psychosis associated with intensive care (disorder)"
+          },
+          {
+            "code": "231451006",
+            "display": "Drug-induced intensive care psychosis (disorder)"
+          },
+          {
+            "code": "231452004",
+            "display": "Limbic epilepsy personality syndrome (disorder)"
+          },
+          {
+            "code": "231454003",
+            "display": "Organic pseudopsychopathic personality (disorder)"
+          },
+          {
+            "code": "231455002",
+            "display": "Organic pseudoretarded personality (disorder)"
+          },
+          {
+            "code": "231457005",
+            "display": "Organic psychosyndrome (disorder)"
+          },
+          {
+            "code": "231467000",
+            "display": "Absinthe addiction (disorder)"
+          },
+          {
+            "code": "231485007",
+            "display": "Post-schizophrenic depression (disorder)"
+          },
+          {
+            "code": "231487004",
+            "display": "Persistent delusional disorder (disorder)"
+          },
+          {
+            "code": "231494001",
+            "display": "Mania (disorder)"
+          },
+          {
+            "code": "231496004",
+            "display": "Hypomania (disorder)"
+          },
+          {
+            "code": "231500002",
+            "display": "Masked depression (disorder)"
+          },
+          {
+            "code": "231516000",
+            "display": "Cutaneous hypochondriasis (disorder)"
+          },
+          {
+            "code": "231520001",
+            "display": "Behavioral syndrome associated with physiological disturbance and physical factors (disorder)"
+          },
+          {
+            "code": "231521002",
+            "display": "Weight fixation (disorder)"
+          },
+          {
+            "code": "231522009",
+            "display": "Atypical anorexia nervosa (disorder)"
+          },
+          {
+            "code": "231523004",
+            "display": "Atypical bulimia nervosa (disorder)"
+          },
+          {
+            "code": "231524005",
+            "display": "Interictal behavior disorder (disorder)"
+          },
+          {
+            "code": "231525006",
+            "display": "Manipulative personality disorder (disorder)"
+          },
+          {
+            "code": "231526007",
+            "display": "Fanatic personality (disorder)"
+          },
+          {
+            "code": "231528008",
+            "display": "Anxious personality disorder (disorder)"
+          },
+          {
+            "code": "231530005",
+            "display": "Post-concussional personality disorder (disorder)"
+          },
+          {
+            "code": "231537008",
+            "display": "Developmental agnosia (disorder)"
+          },
+          {
+            "code": "231538003",
+            "display": "Behavioral and emotional disorder with onset in childhood (disorder)"
+          },
+          {
+            "code": "231539006",
+            "display": "Adolescent - emotional problem (disorder)"
+          },
+          {
+            "code": "233690008",
+            "display": "Factitious asthma (disorder)"
+          },
+          {
+            "code": "237351003",
+            "display": "Mild postnatal psychosis (disorder)"
+          },
+          {
+            "code": "238110009",
+            "display": "Nutritional mental retardation (disorder)"
+          },
+          {
+            "code": "238961003",
+            "display": "Trichophobia (disorder)"
+          },
+          {
+            "code": "238966008",
+            "display": "Syphilophobia (disorder)"
+          },
+          {
+            "code": "238967004",
+            "display": "Psychogenic sensory disturbance of skin (disorder)"
+          },
+          {
+            "code": "238972008",
+            "display": "Cutaneous monosymptomatic delusional psychosis (disorder)"
+          },
+          {
+            "code": "238973003",
+            "display": "Delusions of parasitosis (disorder)"
+          },
+          {
+            "code": "238974009",
+            "display": "Delusions of infestation (disorder)"
+          },
+          {
+            "code": "238975005",
+            "display": "Delusion of foul odor (disorder)"
+          },
+          {
+            "code": "238976006",
+            "display": "Bromisodrophobia (disorder)"
+          },
+          {
+            "code": "238977002",
+            "display": "Delusional hyperhidrosis (disorder)"
+          },
+          {
+            "code": "238978007",
+            "display": "Hyperschemazia (disorder)"
+          },
+          {
+            "code": "238979004",
+            "display": "Hyposchemazia (disorder)"
+          },
+          {
+            "code": "247803002",
+            "display": "Seasonal affective disorder (disorder)"
+          },
+          {
+            "code": "247804008",
+            "display": "Schizophrenic prodrome (disorder)"
+          },
+          {
+            "code": "267320004",
+            "display": "Pregnancy with mental disorders (disorder)"
+          },
+          {
+            "code": "268612007",
+            "display": "Senile and presenile organic psychotic conditions (disorder)"
+          },
+          {
+            "code": "268617001",
+            "display": "Acute schizophrenic episode (disorder)"
+          },
+          {
+            "code": "268622001",
+            "display": "Chronic paranoid psychosis (disorder)"
+          },
+          {
+            "code": "268633003",
+            "display": "Introverted personality disorder (disorder)"
+          },
+          {
+            "code": "268634009",
+            "display": "Psychoneurotic personality disorder (disorder)"
+          },
+          {
+            "code": "268664001",
+            "display": "Childhood emotional disorder (disorder)"
+          },
+          {
+            "code": "268666004",
+            "display": "Childhood and adolescent disturbance with sensitivity (disorder)"
+          },
+          {
+            "code": "268667008",
+            "display": "Childhood and adolescent disturbance with shyness (disorder)"
+          },
+          {
+            "code": "268668003",
+            "display": "Childhood and adolescent disturbance with introversion (disorder)"
+          },
+          {
+            "code": "268669006",
+            "display": "Childhood and adolescent disturbance with elective mutism (disorder)"
+          },
+          {
+            "code": "268673009",
+            "display": "Developmental aphasia (disorder)"
+          },
+          {
+            "code": "268734000",
+            "display": "Developmental expressive language disorder (disorder)"
+          },
+          {
+            "code": "270902002",
+            "display": "Overeating associated with other psychological disturbances (disorder)"
+          },
+          {
+            "code": "270905000",
+            "display": "Childhood disinhibited attachment disorder (disorder)"
+          },
+          {
+            "code": "271952001",
+            "display": "Stress and adjustment reaction (disorder)"
+          },
+          {
+            "code": "274953007",
+            "display": "Acute polymorphic psychotic disorder (disorder)"
+          },
+          {
+            "code": "275474009",
+            "display": "Psychogenic overeating (disorder)"
+          },
+          {
+            "code": "278506006",
+            "display": "Involutional paranoid state (disorder)"
+          },
+          {
+            "code": "278508007",
+            "display": "Delusional dysmorphophobia (disorder)"
+          },
+          {
+            "code": "278852008",
+            "display": "Paranoid-hallucinatory epileptic psychosis (disorder)"
+          },
+          {
+            "code": "279611005",
+            "display": "Shell shock (disorder)"
+          },
+          {
+            "code": "280032002",
+            "display": "Developmental language disorder (disorder)"
+          },
+          {
+            "code": "280375000",
+            "display": "Psychological disorder associated with sexual development (disorder)"
+          },
+          {
+            "code": "280994000",
+            "display": "Chronic confusional state (disorder)"
+          },
+          {
+            "code": "286933003",
+            "display": "Confusional state (disorder)"
+          },
+          {
+            "code": "301643003",
+            "display": "Sedative, hypnotic AND/OR anxiolytic-induced persisting amnestic disorder (disorder)"
+          },
+          {
+            "code": "302507002",
+            "display": "Sedative amnestic disorder (disorder)"
+          },
+          {
+            "code": "307417003",
+            "display": "Cycloid psychosis (disorder)"
+          },
+          {
+            "code": "309279000",
+            "display": "Caffeine-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "310495003",
+            "display": "Mild depression (disorder)"
+          },
+          {
+            "code": "310496002",
+            "display": "Moderate depression (disorder)"
+          },
+          {
+            "code": "310497006",
+            "display": "Severe depression (disorder)"
+          },
+          {
+            "code": "311173003",
+            "display": "Phencyclidine-related disorder (disorder)"
+          },
+          {
+            "code": "312098001",
+            "display": "Sedative, hypnotic AND/OR anxiolytic-related disorder (disorder)"
+          },
+          {
+            "code": "312936002",
+            "display": "Anxiolytic-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "313182004",
+            "display": "Chronic post-traumatic stress disorder (disorder)"
+          },
+          {
+            "code": "313224008",
+            "display": "Dysmorphophobia (disorder)"
+          },
+          {
+            "code": "313915006",
+            "display": "Hypnotic-induced organic mental disorder (disorder)"
+          },
+          {
+            "code": "317816007",
+            "display": "Stockholm syndrome (disorder)"
+          },
+          {
+            "code": "318784009",
+            "display": "Posttraumatic stress disorder, delayed onset (disorder)"
+          },
+          {
+            "code": "357705009",
+            "display": "Cotard's syndrome (disorder)"
+          },
+          {
+            "code": "371026009",
+            "display": "Senile dementia with psychosis (disorder)"
+          },
+          {
+            "code": "371631005",
+            "display": "Panic disorder (disorder)"
+          },
+          {
+            "code": "386701004",
+            "display": "Developmental articulation disorder (disorder)"
+          },
+          {
+            "code": "386810004",
+            "display": "Phobic disorder (disorder)"
+          },
+          {
+            "code": "386822001",
+            "display": "Adjustment reaction of adolescence (disorder)"
+          },
+          {
+            "code": "386823006",
+            "display": "Adjustment reaction of adult life (disorder)"
+          },
+          {
+            "code": "386824000",
+            "display": "Adjustment reaction of childhood (disorder)"
+          },
+          {
+            "code": "386825004",
+            "display": "Adjustment reaction of late life (disorder)"
+          },
+          {
+            "code": "398066007",
+            "display": "Intensive care psychiatric disorder (disorder)"
+          },
+          {
+            "code": "402732001",
+            "display": "Habit tic (disorder)"
+          },
+          {
+            "code": "402733006",
+            "display": "Habit tic affecting skin (disorder)"
+          },
+          {
+            "code": "402735004",
+            "display": "Habit tic affecting hair (disorder)"
+          },
+          {
+            "code": "403590001",
+            "display": "Cutaneous Munchausen syndrome by proxy (disorder)"
+          },
+          {
+            "code": "403593004",
+            "display": "Phobic fear of skin cancer (disorder)"
+          },
+          {
+            "code": "403594005",
+            "display": "Psychogenic formication (disorder)"
+          },
+          {
+            "code": "404906000",
+            "display": "Postoperative confusion (disorder)"
+          },
+          {
+            "code": "406506008",
+            "display": "Attention deficit hyperactivity disorder (disorder)"
+          },
+          {
+            "code": "417143004",
+            "display": "Short duration flashbacks (disorder)"
+          },
+          {
+            "code": "420774007",
+            "display": "Organic brain syndrome associated with acquired immunodeficiency syndrome (disorder)"
+          },
+          {
+            "code": "425914008",
+            "display": "Adjustment reaction to medical therapy (disorder)"
+          },
+          {
+            "code": "425919003",
+            "display": "Chronic organic mental disorder (disorder)"
+          },
+          {
+            "code": "426041005",
+            "display": "Developmental dyslalia (disorder)"
+          },
+          {
+            "code": "426174008",
+            "display": "Chronic stress disorder (disorder)"
+          },
+          {
+            "code": "426881004",
+            "display": "Developmental delay in feeding (disorder)"
+          },
+          {
+            "code": "427469003",
+            "display": "Eating disorder in remission (disorder)"
+          },
+          {
+            "code": "427975003",
+            "display": "Drug-induced delusional disorder (disorder)"
+          },
+          {
+            "code": "428687006",
+            "display": "Nightmares associated with chronic post-traumatic stress disorder (disorder)"
+          },
+          {
+            "code": "428703001",
+            "display": "Transient organic mental disorder (disorder)"
+          },
+          {
+            "code": "429672007",
+            "display": "Drug-induced mood disorder (disorder)"
+          },
+          {
+            "code": "430744005",
+            "display": "Factitious disorder with predominantly physical signs and symptoms (disorder)"
+          },
+          {
+            "code": "430751001",
+            "display": "Factitious disorder with predominantly psychological signs and symptoms (disorder)"
+          },
+          {
+            "code": "430909002",
+            "display": "Conduct disorder (disorder)"
+          },
+          {
+            "code": "439960005",
+            "display": "Binge eating disorder (disorder)"
+          },
+          {
+            "code": "441704009",
+            "display": "Affective psychosis (disorder)"
+          },
+          {
+            "code": "441711008",
+            "display": "Chronic psychogenic pain (disorder)"
+          },
+          {
+            "code": "441716003",
+            "display": "Residual childhood psychosis (disorder)"
+          },
+          {
+            "code": "441833000",
+            "display": "Lethal catatonia (disorder)"
+          },
+          {
+            "code": "442245003",
+            "display": "Chronic hypomanic personality disorder (disorder)"
+          },
+          {
+            "code": "442351006",
+            "display": "Mental disorder caused by drug (disorder)"
+          },
+          {
+            "code": "443919007",
+            "display": "Complex posttraumatic stress disorder (disorder)"
+          },
+          {
+            "code": "450714000",
+            "display": "Severe major depression (disorder)"
+          },
+          {
+            "code": "473452003",
+            "display": "Atypical psychosis (disorder)"
+          },
+          {
+            "code": "473456000",
+            "display": "Compulsive personality disorder (disorder)"
+          },
+          {
+            "code": "473457009",
+            "display": "Obsessional personality disorder (disorder)"
+          },
+          {
+            "code": "609225004",
+            "display": "Developmental regression (disorder)"
+          },
+          {
+            "code": "712823008",
+            "display": "Acute depression (disorder)"
+          },
+          {
+            "code": "712824002",
+            "display": "Acute polymorphic psychotic disorder without symptoms of schizophrenia (disorder)"
+          },
+          {
+            "code": "712850003",
+            "display": "Acute polymorphic psychotic disorder co-occurrent with symptoms of schizophrenia (disorder)"
+          },
+          {
+            "code": "712884004",
+            "display": "Pathological demand avoidance (disorder)"
+          },
+          {
+            "code": "713491003",
+            "display": "Organic brain syndrome co-occurrent with human immunodeficiency virus infection (disorder)"
+          },
+          {
+            "code": "715737004",
+            "display": "Parkinsonism co-occurrent with dementia of Guadeloupe (disorder)"
+          },
+          {
+            "code": "715924009",
+            "display": "Disruptive mood dysregulation disorder (disorder)"
+          },
+          {
+            "code": "716096005",
+            "display": "Hypospadias and intellectual disability syndrome Goldblatt type (disorder)"
+          },
+          {
+            "code": "716199000",
+            "display": "Delayed speech and facial asymmetry with strabismus and ear lobe skin crease syndrome (disorder)"
+          },
+          {
+            "code": "716578009",
+            "display": "Developmental language comprehension impairment (disorder)"
+          },
+          {
+            "code": "718393002",
+            "display": "Atypical Rett syndrome (disorder)"
+          },
+          {
+            "code": "251000119105",
+            "display": "Severe major depression, single episode (disorder)"
+          },
+          {
+            "code": "261000119107",
+            "display": "Severe depressed bipolar I disorder (disorder)"
+          },
+          {
+            "code": "271000119101",
+            "display": "Severe mixed bipolar I disorder (disorder)"
+          },
+          {
+            "code": "281000119103",
+            "display": "Severe recurrent major depression (disorder)"
+          },
+          {
+            "code": "18491000119109",
+            "display": "Psychological disorder during pregnancy (disorder)"
+          },
+          {
+            "code": "21071000119101",
+            "display": "Mood disorder of manic type (disorder)"
+          },
+          {
+            "code": "22641000119109",
+            "display": "Psychosis in early childhood (disorder)"
+          },
+          {
+            "code": "22981000119106",
+            "display": "Recurrent severe manic episodes (disorder)"
+          },
+          {
+            "code": "23601000119102",
+            "display": "Sedative withdrawal (disorder)"
+          },
+          {
+            "code": "23741000119105",
+            "display": "Severe manic bipolar I disorder (disorder)"
+          },
+          {
+            "code": "61771000119106",
+            "display": "Bipolar II disorder, most recent episode rapid cycling (disorder)"
+          },
+          {
+            "code": "62211000119103",
+            "display": "Moderate expressive language delay (disorder)"
+          },
+          {
+            "code": "62231000119108",
+            "display": "Mild expressive language delay (disorder)"
+          },
+          {
+            "code": "89381000119107",
+            "display": "Moderate receptive language delay (disorder)"
+          },
+          {
+            "code": "89501000119108",
+            "display": "Mild receptive language delay (disorder)"
+          },
+          {
+            "code": "94631000119100",
+            "display": "Depressive disorder in mother complicating pregnancy (disorder)"
+          },
+          {
+            "code": "130121000119104",
+            "display": "Dementia due to Rett's syndrome (disorder)"
+          },
+          {
+            "code": "133091000119105",
+            "display": "Rapid cycling bipolar I disorder (disorder)"
+          },
+          {
+            "code": "133121000119109",
+            "display": "Severe seasonal affective disorder (disorder)"
+          },
+          {
+            "code": "153071000119108",
+            "display": "Recurrent manic episodes in partial remission (disorder)"
+          },
+          {
+            "code": "270291000119109",
+            "display": "Identity disorder of childhood (disorder)"
+          },
+          {
+            "code": "288271000119103",
+            "display": "Childhood onset fluency disorder (disorder)"
+          },
+          {
+            "code": "288421000119100",
+            "display": "Hyposomnia co-occurrent and due to psychological disorder (disorder)"
+          },
+          {
+            "code": "288511000119108",
+            "display": "Chronic mood disorder (disorder)"
+          },
+          {
+            "code": "288751000119101",
+            "display": "Reactive depressive psychosis, single episode (disorder)"
+          },
+          {
+            "code": "288851000119106",
+            "display": "Opioid-induced mood disorder due to opioid abuse (disorder)"
+          },
+          {
+            "code": "288861000119108",
+            "display": "Opioid-induced mood disorder due to opioid dependence (disorder)"
+          },
+          {
+            "code": "434971000124109",
+            "display": "Amphetamine induced psychotic disorder (disorder)"
+          },
+          {
+            "code": "19944001",
+            "display": "Autologous bone marrow transplant without purging (procedure)"
+          },
+          {
+            "code": "23719005",
+            "display": "Transplantation of bone marrow (procedure)"
+          },
+          {
+            "code": "46280001",
+            "display": "Autologous bone marrow transplant with purging (procedure)"
+          },
+          {
+            "code": "58390007",
+            "display": "Allogeneic bone marrow transplantation (procedure)"
+          },
+          {
+            "code": "58776007",
+            "display": "Autologous bone marrow transplant (procedure)"
+          },
+          {
+            "code": "234331007",
+            "display": "Syngeneic bone marrow transplant (procedure)"
+          },
+          {
+            "code": "234332000",
+            "display": "T-cell depleted allogeneic bone marrow graft (procedure)"
+          },
+          {
+            "code": "234333005",
+            "display": "Imperfect T-cell depleted allogeneic bone marrow graft (procedure)"
+          },
+          {
+            "code": "234334004",
+            "display": "Allogeneic related bone marrow transplant (procedure)"
+          },
+          {
+            "code": "234335003",
+            "display": "Allogeneic unrelated bone marrow transplant (procedure)"
+          },
+          {
+            "code": "234336002",
+            "display": "Hemopoietic stem cell transplant (procedure)"
+          },
+          {
+            "code": "426425001",
+            "display": "Allograft of bone marrow from sibling donor (procedure)"
+          },
+          {
+            "code": "427423003",
+            "display": "Allograft of bone marrow from matched unrelated donor (procedure)"
+          },
+          {
+            "code": "442557006",
+            "display": "Grafting of bone marrow using allograft from unmatched unrelated donor (procedure)"
+          },
+          {
+            "code": "445757003",
+            "display": "Allogeneic bone marrow transplantation without purging (procedure)"
+          },
+          {
+            "code": "446253009",
+            "display": "Allogeneic bone marrow transplantation with purging (procedure)"
+          },
+          {
+            "code": "68382005",
+            "display": "Cerebrospinal fluid otorrhea (disorder)"
+          },
+          {
+            "code": "73965003",
+            "display": "Cerebrospinal fluid leakage (morphologic abnormality)"
+          },
+          {
+            "code": "85638002",
+            "display": "Cerebrospinal fluid rhinorrhea (disorder)"
+          },
+          {
+            "code": "167719009",
+            "display": "Cerebrospinal fluid lymphocytosis (finding)"
+          },
+          {
+            "code": "193064009",
+            "display": "Cerebrospinal fluid leak from spinal puncture (disorder)"
+          },
+          {
+            "code": "213210005",
+            "display": "Postoperative cerebrospinal fluid leak (disorder)"
+          },
+          {
+            "code": "230744007",
+            "display": "Cerebrospinal fluid leak (disorder)"
+          },
+          {
+            "code": "232280003",
+            "display": "Post-traumatic cerebrospinal otorrhea (disorder)"
+          },
+          {
+            "code": "232281004",
+            "display": "Postoperative cerebrospinal otorrhea (disorder)"
+          },
+          {
+            "code": "427758000",
+            "display": "Cerebrospinal fluid leak from mouth (disorder)"
+          },
+          {
+            "code": "429759002",
+            "display": "Cerebrospinal fluid leak from nose and mouth (disorder)"
+          },
+          {
+            "code": "4114003",
+            "display": "Parenteral chemotherapy for malignant neoplasm (procedure)"
+          },
+          {
+            "code": "6872008",
+            "display": "Perfusion chemotherapy for malignant neoplasm (procedure)"
+          },
+          {
+            "code": "12149006",
+            "display": "Chemotherapy administration, subcutaneous, with local anesthesia (procedure)"
+          },
+          {
+            "code": "22733003",
+            "display": "Chemotherapy for non-malignant neoplasm (procedure)"
+          },
+          {
+            "code": "29391003",
+            "display": "Chemotherapy administration into peritoneal cavity requiring paracentesis (procedure)"
+          },
+          {
+            "code": "31652009",
+            "display": "Intracavitary chemotherapy for malignant neoplasm (procedure)"
+          },
+          {
+            "code": "38216008",
+            "display": "Infusion chemotherapy for malignant neoplasm (procedure)"
+          },
+          {
+            "code": "51534007",
+            "display": "Oral chemotherapy for malignant neoplasm (procedure)"
+          },
+          {
+            "code": "77738002",
+            "display": "Local chemotherapy for malignant neoplasm (procedure)"
+          },
+          {
+            "code": "86036005",
+            "display": "Intravenous chemotherapy administration by push technique (procedure)"
+          },
+          {
+            "code": "265760000",
+            "display": "Intravenous chemotherapy (procedure)"
+          },
+          {
+            "code": "265761001",
+            "display": "Intramuscular chemotherapy (procedure)"
+          },
+          {
+            "code": "265762008",
+            "display": "Subcutaneous chemotherapy (procedure)"
+          },
+          {
+            "code": "266719004",
+            "display": "Oral chemotherapy (procedure)"
+          },
+          {
+            "code": "309698005",
+            "display": "Continuous infusion of chemotherapy (procedure)"
+          },
+          {
+            "code": "315601005",
+            "display": "Ambulatory chemotherapy (procedure)"
+          },
+          {
+            "code": "367336001",
+            "display": "Chemotherapy (procedure)"
+          },
+          {
+            "code": "394894008",
+            "display": "Pre-operative chemotherapy (procedure)"
+          },
+          {
+            "code": "394895009",
+            "display": "Postoperative chemotherapy (procedure)"
+          },
+          {
+            "code": "394935005",
+            "display": "Combined post-operative chemotherapy and radiotherapy (procedure)"
+          },
+          {
+            "code": "399042005",
+            "display": "Chemotherapy cycle (procedure)"
+          },
+          {
+            "code": "310012007",
+            "display": "Cochlear implant service (qualifier value)"
+          },
+          {
+            "code": "310013002",
+            "display": "Adult cochlear implant service (qualifier value)"
+          },
+          {
+            "code": "310014008",
+            "display": "Pediatric cochlear implant service (qualifier value)"
+          },
+          {
+            "code": "467286008",
+            "display": "Cochlear implant system coil cable (physical object)"
+          },
+          {
+            "code": "467396002",
+            "display": "Cochlear implant system (physical object)"
+          },
+          {
+            "code": "467453006",
+            "display": "Cochlear implant system sound processor (physical object)"
+          },
+          {
+            "code": "467600008",
+            "display": "Cochlear implant system electrode array assembly (physical object)"
+          },
+          {
+            "code": "467624000",
+            "display": "Cochlear implant system battery pack (physical object)"
+          },
+          {
+            "code": "468054007",
+            "display": "Cochlear implant system coil (physical object)"
+          },
+          {
+            "code": "701524004",
+            "display": "Cochlear implant evaluation/programming application software (physical object)"
+          },
+          {
+            "code": "701568002",
+            "display": "Cochlear implant assessment system (physical object)"
+          },
+          {
+            "code": "708553008",
+            "display": "Cochlear implant system component (physical object)"
+          },
+          {
+            "code": "711586008",
+            "display": "Cochlear implant system coil cover (physical object)"
+          },
+          {
+            "code": "711587004",
+            "display": "Cochlear implant system sound processor earhook (physical object)"
+          },
+          {
+            "code": "711588009",
+            "display": "Cochlear implant system sound processor off-ear holder (physical object)"
+          },
+          {
+            "code": "711589001",
+            "display": "Cochlear implant system connector (physical object)"
+          },
+          {
+            "code": "711590005",
+            "display": "Cochlear implant system sound processor/coil decorative cover (physical object)"
+          },
+          {
+            "code": "711593007",
+            "display": "Cochlear implant system sound processor audio earhook (physical object)"
+          },
+          {
+            "code": "183005",
+            "display": "Autoimmune pancytopenia (disorder)"
+          },
+          {
+            "code": "862001",
+            "display": "Anemia caused by chlorate (disorder)"
+          },
+          {
+            "code": "5603006",
+            "display": "Autoimmune hemolytic anemia caused by immunoglobulin G (disorder)"
+          },
+          {
+            "code": "5876000",
+            "display": "Acquired pancytopenia (disorder)"
+          },
+          {
+            "code": "9764001",
+            "display": "Anemia caused by radiation (disorder)"
+          },
+          {
+            "code": "11781007",
+            "display": "Autoimmune hemolytic anemia caused by complement (disorder)"
+          },
+          {
+            "code": "14126008",
+            "display": "Autosomal-linked pyridoxine refractory sideroblastic anemia (disorder)"
+          },
+          {
+            "code": "15276008",
+            "display": "Drug-induced enzyme deficiency anemia (disorder)"
+          },
+          {
+            "code": "16645003",
+            "display": "Anemia caused by insect venom (disorder)"
+          },
+          {
+            "code": "18323000",
+            "display": "Drug-induced immune hemolytic anemia, immune complex type (disorder)"
+          },
+          {
+            "code": "22098000",
+            "display": "Chronic idiopathic autoimmune hemolytic anemia (disorder)"
+          },
+          {
+            "code": "26944003",
+            "display": "Acute megaloblastic anemia due to dialysis (disorder)"
+          },
+          {
+            "code": "28975000",
+            "display": "Constitutional aplastic anemia (disorder)"
+          },
+          {
+            "code": "29551000",
+            "display": "Anemia caused by oxygen (disorder)"
+          },
+          {
+            "code": "33491002",
+            "display": "Autoimmune hemolytic anemia caused by immunoglobulin A plus complement (disorder)"
+          },
+          {
+            "code": "34247008",
+            "display": "Anemia due to mechanical damage (disorder)"
+          },
+          {
+            "code": "36919001",
+            "display": "Anemia caused by lead (disorder)"
+          },
+          {
+            "code": "41841004",
+            "display": "Sideroblastic anemia (disorder)"
+          },
+          {
+            "code": "42461002",
+            "display": "Anemia caused by copper (disorder)"
+          },
+          {
+            "code": "43707008",
+            "display": "Anemia caused by heat (disorder)"
+          },
+          {
+            "code": "43858000",
+            "display": "Secondary aplastic anemia (disorder)"
+          },
+          {
+            "code": "44288006",
+            "display": "Anemia due to abnormality extrinsic to the red cell (disorder)"
+          },
+          {
+            "code": "50220002",
+            "display": "Cellular immunologic aplastic anemia (disorder)"
+          },
+          {
+            "code": "50253007",
+            "display": "Secondary paroxysmal cold hemoglobinuria (disorder)"
+          },
+          {
+            "code": "57192008",
+            "display": "Acute pure red cell aplasia (disorder)"
+          },
+          {
+            "code": "62389006",
+            "display": "Acute megaloblastic anemia due to severe illness (disorder)"
+          },
+          {
+            "code": "62609001",
+            "display": "Autoimmune hemolytic anemia caused by immunoglobulin G plus complement (disorder)"
+          },
+          {
+            "code": "71832003",
+            "display": "Autoimmune hemolytic anemia caused by immunoglobulin M (disorder)"
+          },
+          {
+            "code": "71855000",
+            "display": "Acute megaloblastic anemia secondary to total parenteral nutrition (disorder)"
+          },
+          {
+            "code": "72501006",
+            "display": "Anemia caused by arsenic hydride (disorder)"
+          },
+          {
+            "code": "73891003",
+            "display": "Acute megaloblastic anemia caused by nitrous oxide (disorder)"
+          },
+          {
+            "code": "77084001",
+            "display": "Immunologic aplastic anemia (disorder)"
+          },
+          {
+            "code": "77607006",
+            "display": "Drug-induced sideroblastic anemia (disorder)"
+          },
+          {
+            "code": "82430007",
+            "display": "Acute megaloblastic anemia (disorder)"
+          },
+          {
+            "code": "90175006",
+            "display": "Secondary acquired sideroblastic anemia (disorder)"
+          },
+          {
+            "code": "90414007",
+            "display": "Chronic acquired pure red cell aplasia (disorder)"
+          },
+          {
+            "code": "91411007",
+            "display": "Autoimmune hemolytic anemia caused by immunoglobulin A (disorder)"
+          },
+          {
+            "code": "111576004",
+            "display": "Acquired stomatocytosis (disorder)"
+          },
+          {
+            "code": "111581008",
+            "display": "Anemia caused by physical agent (disorder)"
+          },
+          {
+            "code": "127050002",
+            "display": "Secondary autoimmune hemolytic anemia (disorder)"
+          },
+          {
+            "code": "127054006",
+            "display": "Cold agglutinin disease caused by Epstein-Barr virus infection (disorder)"
+          },
+          {
+            "code": "127059001",
+            "display": "Drug-induced immune hemolytic anemia (disorder)"
+          },
+          {
+            "code": "127060006",
+            "display": "Drug-induced immune hemolytic anemia, hapten type (disorder)"
+          },
+          {
+            "code": "127061005",
+            "display": "Autoimmune hemolytic anemia, categorized by antibody class AND/OR complement (disorder)"
+          },
+          {
+            "code": "127319005",
+            "display": "Anemia caused by alloimmune destruction of transfused red cells (disorder)"
+          },
+          {
+            "code": "191212002",
+            "display": "Secondary cold-type hemolytic anemia (disorder)"
+          },
+          {
+            "code": "191228007",
+            "display": "Acquired spherocytosis (disorder)"
+          },
+          {
+            "code": "191244003",
+            "display": "Aplastic anemia due to chronic disease (disorder)"
+          },
+          {
+            "code": "191246001",
+            "display": "Aplastic anemia due to infection (disorder)"
+          },
+          {
+            "code": "191247005",
+            "display": "Aplastic anemia caused by radiation (disorder)"
+          },
+          {
+            "code": "191248000",
+            "display": "Aplastic anemia caused by toxic cause (disorder)"
+          },
+          {
+            "code": "191256002",
+            "display": "Idiopathic aplastic anemia (disorder)"
+          },
+          {
+            "code": "191261000",
+            "display": "Secondary sideroblastic anemia due to disease (disorder)"
+          },
+          {
+            "code": "191262007",
+            "display": "Secondary sideroblastic anemia caused by drugs and toxins (disorder)"
+          },
+          {
+            "code": "191265009",
+            "display": "Anemia in neoplastic disease (disorder)"
+          },
+          {
+            "code": "234366009",
+            "display": "Alcohol-related sideroblastic anemia (disorder)"
+          },
+          {
+            "code": "234371002",
+            "display": "Congenital pure red cell aplasia (disorder)"
+          },
+          {
+            "code": "234372009",
+            "display": "Congenital red cell hypoplasia (disorder)"
+          },
+          {
+            "code": "234373004",
+            "display": "Constitutional red cell hypoplasia (disorder)"
+          },
+          {
+            "code": "234376007",
+            "display": "Acquired red cell aplasia (disorder)"
+          },
+          {
+            "code": "267524009",
+            "display": "Constitutional aplastic anemia with malformation (disorder)"
+          },
+          {
+            "code": "267525005",
+            "display": "Constitutional red cell aplasia and hypoplasia (disorder)"
+          },
+          {
+            "code": "267527002",
+            "display": "Aplastic anemia due to drugs (disorder)"
+          },
+          {
+            "code": "273985002",
+            "display": "Anemia due to isoimmunization (disorder)"
+          },
+          {
+            "code": "276448005",
+            "display": "Idiopathic sideroblastic anemia (disorder)"
+          },
+          {
+            "code": "278363000",
+            "display": "Alcoholic macrocytosis (disorder)"
+          },
+          {
+            "code": "290246007",
+            "display": "Sideropenic anemia with reticuloendothelial siderosis (disorder)"
+          },
+          {
+            "code": "303266002",
+            "display": "Aplastic bone marrow (disorder)"
+          },
+          {
+            "code": "306058006",
+            "display": "Aplastic anemia (disorder)"
+          },
+          {
+            "code": "307726001",
+            "display": "Anemia in ovarian carcinoma (disorder)"
+          },
+          {
+            "code": "309742004",
+            "display": "Drug-induced autoimmune hemolytic anemia (disorder)"
+          },
+          {
+            "code": "398937006",
+            "display": "Cold autoimmune hemolytic anemia (disorder)"
+          },
+          {
+            "code": "413565006",
+            "display": "Aplastic anemia associated with metabolic alteration (disorder)"
+          },
+          {
+            "code": "413566007",
+            "display": "Aplastic anemia associated with pancreatitis (disorder)"
+          },
+          {
+            "code": "413567003",
+            "display": "Aplastic anemia associated with pregnancy (disorder)"
+          },
+          {
+            "code": "413603009",
+            "display": "Autoimmune hemolytic anemia (disorder)"
+          },
+          {
+            "code": "420543008",
+            "display": "Anemia associated with acquired immunodeficiency syndrome (disorder)"
+          },
+          {
+            "code": "421102007",
+            "display": "Aplastic anemia associated with acquired immunodeficiency syndrome (disorder)"
+          },
+          {
+            "code": "424988008",
+            "display": "Anemia caused by substance (disorder)"
+          },
+          {
+            "code": "428383000",
+            "display": "Anemia caused by medication (disorder)"
+          },
+          {
+            "code": "429564000",
+            "display": "Anemia caused by chemotherapy (disorder)"
+          },
+          {
+            "code": "438476003",
+            "display": "Autoimmune thrombotic thrombocytopenic purpura (disorder)"
+          },
+          {
+            "code": "439007008",
+            "display": "Acquired thrombotic thrombocytopenic purpura (disorder)"
+          },
+          {
+            "code": "441322009",
+            "display": "Drug induced thrombotic thrombocytopenic purpura (disorder)"
+          },
+          {
+            "code": "713496008",
+            "display": "Anemia caused by zidovudine (disorder)"
+          },
+          {
+            "code": "713508003",
+            "display": "Aplastic anemia co-occurrent with human immunodeficiency virus infection (disorder)"
+          },
+          {
+            "code": "717050005",
+            "display": "Autosomal recessive sideroblastic anemia (disorder)"
+          },
+          {
+            "code": "118791000119106",
+            "display": "Aplastic anemia caused by antineoplastic agent (disorder)"
+          },
+          {
+            "code": "448964007",
+            "display": "Pneumococcal 13-valent conjugate vaccine (product)"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.96"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "CodeSystem",
+        "id": "2.16.840.1.113883.6.301",
+        "url": "http://www.nubc.org",
+        "status": "draft",
+        "concept": [
+          {
+            "code": "0115",
+            "display": "Hospice"
+          },
+          {
+            "code": "0125",
+            "display": "Hospice"
+          },
+          {
+            "code": "0135",
+            "display": "Hospice"
+          },
+          {
+            "code": "0145",
+            "display": "Hospice"
+          },
+          {
+            "code": "0155",
+            "display": "Hospice"
+          },
+          {
+            "code": "0235",
+            "display": "Hospice"
+          },
+          {
+            "code": "0650",
+            "display": "General"
+          },
+          {
+            "code": "0651",
+            "display": "Routine home care"
+          },
+          {
+            "code": "0652",
+            "display": "Continuous home care"
+          },
+          {
+            "code": "0655",
+            "display": "Inpatient respite care"
+          },
+          {
+            "code": "0656",
+            "display": "General inpatient care nonrespite"
+          },
+          {
+            "code": "0657",
+            "display": "Physician services"
+          },
+          {
+            "code": "0658",
+            "display": "Hospice room & board-nursing facility"
+          },
+          {
+            "code": "0659",
+            "display": "Other hospice"
+          },
+          {
+            "code": "0810",
+            "display": "Nonpayment/Zero Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "0811",
+            "display": "Admit-Through-Discharge Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "0812",
+            "display": "Interim - First Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "0813",
+            "display": "Interim - Continuing Claim (Not Valid for Medicare PPS Claims), Hospice (non-hospital based)"
+          },
+          {
+            "code": "0814",
+            "display": "Interim - Last Claim (Not Valid for Medicare Inpatient Hospital PPS Claims), Hospice (non-hospital based)"
+          },
+          {
+            "code": "0815",
+            "display": "Late Charges Only Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "0817",
+            "display": "Replacement of Prior Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "0818",
+            "display": "Void/Cancel of a Prior Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "0819",
+            "display": "Final Claim for a Home Health PPS Episode, Hospice (non-hospital based)"
+          },
+          {
+            "code": "0820",
+            "display": "Nonpayment/Zero Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "0821",
+            "display": "Admit-Through-Discharge Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "0822",
+            "display": "Interim - First Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "0823",
+            "display": "Interim - Continuing Claim (Not Valid for Medicare PPS Claims), Hospice (hospital-based)"
+          },
+          {
+            "code": "0824",
+            "display": "Interim - Last Claim (Not Valid for Medicare Inpatient Hospital PPS Claims), Hospice (hospital-based)"
+          },
+          {
+            "code": "0825",
+            "display": "Late Charges Only Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "0827",
+            "display": "Replacement of Prior Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "0828",
+            "display": "Void/Cancel of a Prior Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "0829",
+            "display": "Final Claim for a Home Health PPS Episode, Hospice (hospital-based)"
+          },
+          {
+            "code": "081A",
+            "display": "Hospice Admission/Election Notice, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081B",
+            "display": "Termination/Revocation Notice - Hospice/Medicare Coordinated Care Demonstration/Religious Nonmedica, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081C",
+            "display": "Hospice Change of Provider Notice, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081D",
+            "display": "Void/Cancel - Hospice/Medicare Coordinated Care Demonstration/Religious Nonmedical Health Care Inst, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081E",
+            "display": "Hospice Change of Ownership, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081F",
+            "display": "Beneficiary Initiated Adjustment Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081G",
+            "display": "CWF Initiated Adjustment Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081H",
+            "display": "CMS Initiated Adjustment Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081I",
+            "display": "Intermediary Adjustment Claim (Other Than PRO or Provider), Hospice (non-hospital based)"
+          },
+          {
+            "code": "081J",
+            "display": "Initiated Adjustment Claim - Other, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081K",
+            "display": "OIG Initiated Adjustment Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081M",
+            "display": "MSP Initiated Adjustment Claim, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081O",
+            "display": "Nonpayment/Zero Claims, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081X",
+            "display": "Void/Cancel a Prior Abbreviated Encounter Submission, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081Y",
+            "display": "Replacement of a Prior Abbreviated Encounter Submission, Hospice (non-hospital based)"
+          },
+          {
+            "code": "081Z",
+            "display": "New Abbreviated Encounter Submission, Hospice (non-hospital based)"
+          },
+          {
+            "code": "082A",
+            "display": "Hospice Admission/Election Notice, Hospice (hospital-based)"
+          },
+          {
+            "code": "082B",
+            "display": "Termination/Revocation Notice - Hospice/Medicare Coordinated Care Demonstration/Religious Nonmedica, Hospice (hospital-based)"
+          },
+          {
+            "code": "082C",
+            "display": "Hospice Change of Provider Notice, Hospice (hospital-based)"
+          },
+          {
+            "code": "082D",
+            "display": "Void/Cancel - Hospice/Medicare Coordinated Care Demonstration/Religious Nonmedical Health Care Inst, Hospice (hospital-based)"
+          },
+          {
+            "code": "082E",
+            "display": "Hospice Change of Ownership, Hospice (hospital-based)"
+          },
+          {
+            "code": "082F",
+            "display": "Beneficiary Initiated Adjustment Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "082G",
+            "display": "CWF Initiated Adjustment Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "082H",
+            "display": "CMS Initiated Adjustment Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "082I",
+            "display": "Intermediary Adjustment Claim (Other Than PRO or Provider), Hospice (hospital-based)"
+          },
+          {
+            "code": "082J",
+            "display": "Initiated Adjustment Claim - Other, Hospice (hospital-based)"
+          },
+          {
+            "code": "082K",
+            "display": "OIG Initiated Adjustment Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "082M",
+            "display": "MSP Initiated Adjustment Claim, Hospice (hospital-based)"
+          },
+          {
+            "code": "082O",
+            "display": "Nonpayment/Zero Claims, Hospice (hospital-based)"
+          },
+          {
+            "code": "082X",
+            "display": "Void/Cancel a Prior Abbreviated Encounter Submission, Hospice (hospital-based)"
+          },
+          {
+            "code": "082Y",
+            "display": "Replacement of a Prior Abbreviated Encounter Submission, Hospice (hospital-based)"
+          },
+          {
+            "code": "082Z",
+            "display": "New Abbreviated Encounter Submission, Hospice (hospital-based)"
+          },
+          {
+            "code": "0510",
+            "display": "General"
+          },
+          {
+            "code": "0513",
+            "display": "Psychiatric clinic"
+          },
+          {
+            "code": "0516",
+            "display": "Urgent care clinic"
+          },
+          {
+            "code": "0517",
+            "display": "Family practice clinic"
+          },
+          {
+            "code": "0519",
+            "display": "Other clinic"
+          },
+          {
+            "code": "0520",
+            "display": "General"
+          },
+          {
+            "code": "0521",
+            "display": "Clinic visit by member to RHC/FQHC"
+          },
+          {
+            "code": "0522",
+            "display": "Home visit by RHC/FQHC practitioner"
+          },
+          {
+            "code": "0523",
+            "display": "Family practice clinic"
+          },
+          {
+            "code": "0526",
+            "display": "Urgent care clinic"
+          },
+          {
+            "code": "0527",
+            "display": "Visit nurse service to a member's home in a home health shortage area"
+          },
+          {
+            "code": "0528",
+            "display": "Visit by RHC/FQHC practitioner to other non-RHC/FQHC site (e.g., scene of accident)"
+          },
+          {
+            "code": "0529",
+            "display": "Other freestanding clinic"
+          },
+          {
+            "code": "0900",
+            "display": "General"
+          },
+          {
+            "code": "0901",
+            "display": "Electroshock treatment (ECT)"
+          },
+          {
+            "code": "0902",
+            "display": "Milieu therapy"
+          },
+          {
+            "code": "0903",
+            "display": "Play therapy"
+          },
+          {
+            "code": "0904",
+            "display": "Activity therapy"
+          },
+          {
+            "code": "0905",
+            "display": "Intensive outpatient services-psychiatric"
+          },
+          {
+            "code": "0907",
+            "display": "Community behavioral health program (day treatment)"
+          },
+          {
+            "code": "0911",
+            "display": "Rehabilitation"
+          },
+          {
+            "code": "0912",
+            "display": "Partial hospitalization-less intensive"
+          },
+          {
+            "code": "0913",
+            "display": "Partial hospitalization-intensive"
+          },
+          {
+            "code": "0914",
+            "display": "Individual therapy"
+          },
+          {
+            "code": "0915",
+            "display": "Group therapy"
+          },
+          {
+            "code": "0916",
+            "display": "Family therapy"
+          },
+          {
+            "code": "0917",
+            "display": "Biofeedback"
+          },
+          {
+            "code": "0919",
+            "display": "Other Behavioral health treatments"
+          },
+          {
+            "code": "0982",
+            "display": "Outpatient services"
+          },
+          {
+            "code": "0983",
+            "display": "Clinic"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "CodeSystem/2.16.840.1.113883.6.301"
+      }
+    }
+  ]
+}
+
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/patient-list-measure-test-bundle.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/patient-list-measure-test-bundle.json
new file mode 100644
index 00000000000..7d47dd33bef
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/patient-list-measure-test-bundle.json
@@ -0,0 +1,374 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2520",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002520"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992520"
+          }
+        ],
+        "name": [
+          {
+            "family": "Ashley",
+            "given": [
+              "Kimberly",
+              "Christy"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-4614",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-5392",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "32 E Mississippi Street"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48224"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1966-12-27"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2520"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6483",
+        "active": true,
+        "name": [
+          {
+            "family": "Richard",
+            "given": [
+              "Terrance",
+              "Clyde"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-3325",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-0390",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1953-04-27",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "724 E View Avenue"
+            ],
+            "city": "Freeport",
+            "district": "Barry County",
+            "state": "MI",
+            "postalCode": "49325"
+          }
+        ],
+        "generalPractitioner": [
+          {
+            "reference": "Practitioner/Practitioner-2520"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6483"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6523",
+        "active": true,
+        "name": [
+          {
+            "family": "Vaughn",
+            "given": [
+              "Wendy",
+              "Danielle"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-0492",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-2012",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1936-04-15",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "588 N Fifth Street",
+              "#24"
+            ],
+            "city": "Novi",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48374"
+          }
+        ],
+        "generalPractitioner": [
+          {
+            "reference": "Practitioner/Practitioner-2520"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6523"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Library",
+        "id": "library-ccs-logic",
+        "version": "1.0.1",
+        "status": "active",
+        "experimental": true,
+        "type": {
+          "coding": [
+            {
+              "code": "logic-library"
+            }
+          ]
+        },
+        "dataRequirement": [
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Cervical Cytology Value Set"
+              }
+            ]
+          },
+          {
+            "type": "DiagnosticReport",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Cervical Cytology Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Cervical Cytology Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "HPV Tests Value Set"
+              }
+            ]
+          },
+          {
+            "type": "DiagnosticReport",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "HPV Tests Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "HPV Tests Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Absence of Cervix Value Set"
+              }
+            ]
+          }
+        ],
+        "content": [
+          {
+            "contentType": "application/elm+xml",
+            "data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjc2IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI3NiIgZW5kQ2hhcj0iNDQiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjgwIiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI4MCIgZW5kQ2hhcj0iNTEiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjg0IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI4NCIgZW5kQ2hhcj0iNDYiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjg5IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI4OSIgZW5kQ2hhcj0iMzYiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjkzIiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI5MyIgZW5kQ2hhcj0iNDMiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjk3IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI5NyIgZW5kQ2hhcj0iMzgiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMzA2IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjMwNiIgZW5kQ2hhcj0iNDQiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxpZGVudGlmaWVyIGlkPSJDQ1NfRkhJUiIgdmVyc2lvbj0iMS4wLjEiLz4KICAgPHNjaGVtYUlkZW50aWZpZXIgaWQ9InVybjpobDctb3JnOmVsbSIgdmVyc2lvbj0icjEiLz4KICAgPHVzaW5ncz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IlN5c3RlbSIgdXJpPSJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxIiBsb2NhbElkZW50aWZpZXI9IkZISVIiIHVyaT0iaHR0cDovL2hsNy5vcmcvZmhpciIgdmVyc2lvbj0iMy4wLjAiLz4KICAgPC91c2luZ3M+CiAgIDxwYXJhbWV0ZXJzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjYiIG5hbWU9IlByb2R1Y3QgTGluZSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjUiIG5hbWU9InQ6U3RyaW5nIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjkiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjgiIHhzaTp0eXBlPSJJbnRlcnZhbFR5cGVTcGVjaWZpZXIiPgogICAgICAgICAgICA8cG9pbnRUeXBlIGxvY2FsSWQ9IjciIG5hbWU9InQ6RGF0ZVRpbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9wYXJhbWV0ZXJUeXBlU3BlY2lmaWVyPgogICAgICA8L2RlZj4KICAgPC9wYXJhbWV0ZXJzPgogICA8dmFsdWVTZXRzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIiIG5hbWU9IkFic2VuY2Ugb2YgQ2Vydml4IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTEyMy4xNyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMiIG5hbWU9IkNlcnZpY2FsIEN5dG9sb2d5IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTIwOCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQiIG5hbWU9IkhQViBUZXN0cyBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEyNjUuMjYiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgPC92YWx1ZVNldHM+CiAgIDxzdGF0ZW1lbnRzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE5IiBuYW1lPSJGaXJzdCBQcmVkZWNlc3NvciBZZWFyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMTkiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtGaXJzdCBQcmVkZWNlc3NvciBZZWFyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTgiPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjEgeWVhcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MSB5ZWFyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxOCIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJmYWxzZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSIxMyIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTEiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMiIgdmFsdWU9IjEiIHVuaXQ9InllYXIiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgPGhpZ2ggbG9jYWxJZD0iMTciIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE1IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTQiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2IiB2YWx1ZT0iMSIgdW5pdD0ieWVhciIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIyOSIgbmFtZT0iU2Vjb25kIFByZWRlY2Vzc29yIFllYXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyOSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O1NlY29uZCBQcmVkZWNlc3NvciBZZWFyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjgiPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjIgeWVhcnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjciPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjIgeWVhcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjgiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0iZmFsc2UiIHhzaTp0eXBlPSJJbnRlcnZhbCI+CiAgICAgICAgICAgIDxsb3cgbG9jYWxJZD0iMjMiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxIiB4c2k6dHlwZT0iU3RhcnQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjIiIHZhbHVlPSIyIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIyNyIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjUiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjYiIHZhbHVlPSIyIiB1bml0PSJ5ZWFyIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjQxIiBuYW1lPSJUaGlyZCBQcmVkZWNlc3NvciBRdWFydGVyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNDEiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtUaGlyZCBQcmVkZWNlc3NvciBRdWFydGVyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDAiPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4yIHllYXJzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MyBtb250aHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzkiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzgiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjMgeWVhcnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQwIiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9ImZhbHNlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjM1IiB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMyIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzEiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMwIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMiIgdmFsdWU9IjIiIHVuaXQ9InllYXJzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNCIgdmFsdWU9IjMiIHVuaXQ9Im1vbnRocyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIzOSIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzciIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNiIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzgiIHZhbHVlPSIzIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0OSIgbmFtZT0iTG9va2JhY2sgSW50ZXJ2YWwgVHdvIE1vcmUgWWVhcnMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0OSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0xvb2tiYWNrIEludGVydmFsIFR3byBNb3JlIFllYXJzJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDgiPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjIgeWVhcnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDciPgogICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0OCIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJmYWxzZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSI0NSIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDMiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQyIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NCIgdmFsdWU9IjIiIHVuaXQ9InllYXJzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9IjQ3IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDYiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICA8L2hpZ2g+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTciIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIEZvdXIgTW9yZSBZZWFycyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjU3Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7TG9va2JhY2sgSW50ZXJ2YWwgRm91ciBNb3JlIFllYXJzJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTYiPgogICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjQgeWVhcnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTUiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1NiIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJmYWxzZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSI1MyIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTEiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUwIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MiIgdmFsdWU9IjQiIHVuaXQ9InllYXJzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9IjU1IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTQiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICA8L2hpZ2g+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbmFtZT0iUGF0aWVudCIgY29udGV4dD0iUGF0aWVudCI+CiAgICAgICAgIDxleHByZXNzaW9uIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgPG9wZXJhbmQgZGF0YVR5cGU9ImZoaXI6UGF0aWVudCIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNjMiIG5hbWU9IklzIEZlbWFsZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjYzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgRmVtYWxlJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNjIiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjYwIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1OSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBhdGllbnQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5nZW5kZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjYxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmVtYWxlJzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjYyIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2MCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTkiIHBhdGg9ImdlbmRlciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1OCIgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNjEiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJmZW1hbGUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iODciIG5hbWU9IlRvRGF0ZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iODciPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSBmdW5jdGlvbiAmcXVvdDtUb0RhdGUmcXVvdDsoVmFsdWUgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNzMiPgogICAgICAgICAgICAgICAgICA8YTpzPkRhdGVUaW1lPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPiApOgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iODYiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg2Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5EYXRlVGltZSg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3NSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+eWVhciBmcm9tIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5WYWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3NyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+bW9udGggZnJvbSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzkiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRheSBmcm9tIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5WYWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCAwLCAwLCAwLCAwLCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dGltZXpvbmUgZnJvbSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI4NiIgeHNpOnR5cGU9IkRhdGVUaW1lIj4KICAgICAgICAgICAgPHllYXIgbG9jYWxJZD0iNzUiIHByZWNpc2lvbj0iWWVhciIgeHNpOnR5cGU9IkRhdGVUaW1lQ29tcG9uZW50RnJvbSI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijc0IiBuYW1lPSJWYWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC95ZWFyPgogICAgICAgICAgICA8bW9udGggbG9jYWxJZD0iNzciIHByZWNpc2lvbj0iTW9udGgiIHhzaTp0eXBlPSJEYXRlVGltZUNvbXBvbmVudEZyb20iPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3NiIgbmFtZT0iVmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvbW9udGg+CiAgICAgICAgICAgIDxkYXkgbG9jYWxJZD0iNzkiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iRGF0ZVRpbWVDb21wb25lbnRGcm9tIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNzgiIG5hbWU9IlZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8L2RheT4KICAgICAgICAgICAgPGhvdXIgbG9jYWxJZD0iODAiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPG1pbnV0ZSBsb2NhbElkPSI4MSIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8c2Vjb25kIGxvY2FsSWQ9IjgyIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDxtaWxsaXNlY29uZCBsb2NhbElkPSI4MyIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8dGltZXpvbmVPZmZzZXQgbG9jYWxJZD0iODUiIHhzaTp0eXBlPSJUaW1lem9uZUZyb20iPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4NCIgbmFtZT0iVmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvdGltZXpvbmVPZmZzZXQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVmFsdWUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iNzMiIG5hbWU9InQ6RGF0ZVRpbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI5MiIgbmFtZT0iQ2FsZW5kYXJBZ2VJblllYXJzQXQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjkyIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgZnVuY3Rpb24gQ2FsZW5kYXJBZ2VJblllYXJzQXQoQmlydGhEYXRlVGltZSA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI3MCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+RGF0ZVRpbWU8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+LCBBc09mIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjcxIj4KICAgICAgICAgICAgICAgICAgPGE6cz5EYXRlVGltZTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4pOgogICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iOTEiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjkxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz55ZWFycyBiZXR3ZWVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub0RhdGUoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJpcnRoRGF0ZVRpbWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5hbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTAiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlRvRGF0ZSg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QXNPZjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjkxIiBwcmVjaXNpb249IlllYXIiIHhzaTp0eXBlPSJEdXJhdGlvbkJldHdlZW4iPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4OCIgbmFtZT0iVG9EYXRlIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3MiIgbmFtZT0iQmlydGhEYXRlVGltZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5MCIgbmFtZT0iVG9EYXRlIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4OSIgbmFtZT0iQXNPZiIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9IkJpcnRoRGF0ZVRpbWUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iNzAiIG5hbWU9InQ6RGF0ZVRpbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJBc09mIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjcxIiBuYW1lPSJ0OkRhdGVUaW1lIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iOTciIG5hbWU9IklzIEFnZSAyNCB0byA2NCBhdCBFbmQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI5NyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIEFnZSAyNCB0byA2NCBhdCBFbmQmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI5NiI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkNhbGVuZGFyQWdlSW5ZZWFyc0F0KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjY3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBhdGllbnQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5iaXJ0aERhdGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjkiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiBiZXR3ZWVuIDI0IGFuZCA2NDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iOTYiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5MyIgbmFtZT0iQ2FsZW5kYXJBZ2VJblllYXJzQXQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY3IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI2NiIgcGF0aD0iYmlydGhEYXRlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjY1IiBuYW1lPSJQYXRpZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2OSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY4IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijk0IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjI0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJMZXNzT3JFcXVhbCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjkzIiBuYW1lPSJDYWxlbmRhckFnZUluWWVhcnNBdCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNjciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjY2IiBwYXRoPSJiaXJ0aERhdGUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNjUiIG5hbWU9IlBhdGllbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY5IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNjgiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTUiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iNjQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIxMDAiIG5hbWU9IkluaXRpYWwgUG9wdWxhdGlvbiIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjEwMCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0luaXRpYWwgUG9wdWxhdGlvbiZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9Ijk5Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgRmVtYWxlJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI5OCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgQWdlIDI0IHRvIDY0IGF0IEVuZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9Ijk5IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNjQiIG5hbWU9IklzIEZlbWFsZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTgiIG5hbWU9IklzIEFnZSAyNCB0byA2NCBhdCBFbmQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTAyIiBuYW1lPSJEZW5vbWluYXRvciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjEwMiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0Rlbm9taW5hdG9yJnF1b3Q7OgoJLy8gd2FzICZxdW90O0luaXRpYWwgUG9wdWxhdGlvbiZxdW90OywgYnV0IHRoYXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSBpZiB0aGlzIGV4cHJlc3Npb24gaXMgZXhlY3V0ZWQKICAgIHRydWU8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTAxIiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9InRydWUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEyMCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjEyMCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIFBlcmlvZFRvSW50ZXJ2YWxPZkRUKHZhbHVlIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjExMiI+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5QZXJpb2Q8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+KToKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjExOSI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE5Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5JbnRlcnZhbFs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtzdGFydCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7ZW5kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjExOSIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJ0cnVlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjExNSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTE0IiBwYXRoPSJzdGFydCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMTMiIG5hbWU9InZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9IjExOCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTE3IiBwYXRoPSJlbmQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTE2IiBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJ2YWx1ZSI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBsb2NhbElkPSIxMTIiIG5hbWU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTU5IiBuYW1lPSJEYXRlVGltZVRvSW50ZXJ2YWwiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjE1OSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIERhdGVUaW1lVG9JbnRlcnZhbChkYXRlIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjE1MyI+CiAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5kYXRlVGltZTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4pOgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTU4Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTgiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kYXRlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kYXRlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTU4IiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9InRydWUiIHhzaTp0eXBlPSJJbnRlcnZhbCI+CiAgICAgICAgICAgIDxsb3cgbG9jYWxJZD0iMTU1IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxNTQiIG5hbWU9ImRhdGUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIxNTciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE1NiIgbmFtZT0iZGF0ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9ImRhdGUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMTUzIiBuYW1lPSJmaGlyOmRhdGVUaW1lIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTY0IiBuYW1lPSJEYXRlcyBvZiBDZXJ2aWNhbCBDeXRvbG9neSBUZXN0cyIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjE2NCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0RhdGVzIG9mIENlcnZpY2FsIEN5dG9sb2d5IFRlc3RzJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTYzIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7Q2VydmljYWwgQ3l0b2xvZ3kgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5yZXR1cm4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTExIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJdW5pb24KCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W0RpYWdub3N0aWNSZXBvcnQ6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0NlcnZpY2FsIEN5dG9sb2d5IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gRGlhZ1JlcDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkRpYWdSZXA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGluIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+eyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidwcmVsaW1pbmFyeSc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidmaW5hbCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhbWVuZGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvcnJlY3RlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhcHBlbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnJldHVybiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5EaWFnUmVwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVmZmVjdGl2ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJdW5pb24KCTwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W09ic2VydmF0aW9uOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtDZXJ2aWNhbCBDeXRvbG9neSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IE9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz57IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2ZpbmFsJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2FtZW5kZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB9PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5yZXR1cm4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5EYXRlVGltZVRvSW50ZXJ2YWwoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTYzIiB4c2k6dHlwZT0iVW5pb24iPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDEiIHhzaTp0eXBlPSJVbmlvbiI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEyMyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMDQiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTAzIiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkNlcnZpY2FsIEN5dG9sb2d5IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIxMDkiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwNyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTA2IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMDgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgIDxyZXR1cm4gbG9jYWxJZD0iMTIyIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTIxIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTExIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE0MCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMjUiIGFsaWFzPSJEaWFnUmVwIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTI0IiBkYXRhVHlwZT0iZmhpcjpEaWFnbm9zdGljUmVwb3J0IiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJDZXJ2aWNhbCBDeXRvbG9neSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTM1IiB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjEyNyIgcGF0aD0ic3RhdHVzIiBzY29wZT0iRGlhZ1JlcCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTM0IiB4c2k6dHlwZT0iTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjEyOSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9InByZWxpbWluYXJ5IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIxMzAiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJmaW5hbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMTMxIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYW1lbmRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMTMyIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29ycmVjdGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIxMzMiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhcHBlbmRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICA8cmV0dXJuIGxvY2FsSWQ9IjEzOSI+CiAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEzOCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEzNyIgcGF0aD0iZWZmZWN0aXZlIiBzY29wZT0iRGlhZ1JlcCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2MiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxNDMiIGFsaWFzPSJPYnMiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxNDIiIGRhdGFUeXBlPSJmaGlyOk9ic2VydmF0aW9uIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJDZXJ2aWNhbCBDeXRvbG9neSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTUwIiB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDYiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE0NSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iT2JzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDkiIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMTQ3IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iZmluYWwiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjE0OCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFtZW5kZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgPHJldHVybiBsb2NhbElkPSIxNjEiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxNjAiIG5hbWU9IkRhdGVUaW1lVG9JbnRlcnZhbCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOmRhdGVUaW1lIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNTIiIHBhdGg9ImVmZmVjdGl2ZSIgc2NvcGU9Ik9icyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE3MiIgbmFtZT0iSXMgQ2VydmljYWwgQ3l0b2xvZ3kgVGVzdCBJbiBMYXN0IDMgWWVhcnMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxNzIiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBDZXJ2aWNhbCBDeXRvbG9neSBUZXN0IEluIExhc3QgMyBZZWFycyZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjE3MSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTcwIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7RGF0ZXMgb2YgQ2VydmljYWwgQ3l0b2xvZ3kgVGVzdHMmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBXaGVuQ0M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5XaGVuQ0M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGluY2x1ZGVkIGluIGRheSBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0xvb2tiYWNrIEludGVydmFsIFR3byBNb3JlIFllYXJzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE3MSIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE3MCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxNjYiIGFsaWFzPSJXaGVuQ0MiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxNjUiIG5hbWU9IkRhdGVzIG9mIENlcnZpY2FsIEN5dG9sb2d5IFRlc3RzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjE2OSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJJbmNsdWRlZEluIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTY3IiBuYW1lPSJXaGVuQ0MiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNjgiIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIFR3byBNb3JlIFllYXJzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTg1IiBuYW1lPSJJcyBBZ2UgMzAgdG8gNjQgYXQgRW5kIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMTg1Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgQWdlIDMwIHRvIDY0IGF0IEVuZCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjE4NCI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5DYWxlbmRhckFnZUluWWVhcnNBdCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzgiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QYXRpZW50PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmJpcnRoRGF0ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+IGJldHdlZW4gMzAgYW5kIDY0PC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxODQiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODEiIG5hbWU9IkNhbGVuZGFyQWdlSW5ZZWFyc0F0IiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNzgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE3NyIgcGF0aD0iYmlydGhEYXRlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE3NiIgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTgwIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTc5IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE4MiIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIzMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTGVzc09yRXF1YWwiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODEiIG5hbWU9IkNhbGVuZGFyQWdlSW5ZZWFyc0F0IiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNzgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE3NyIgcGF0aD0iYmlydGhEYXRlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE3NiIgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTgwIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTc5IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE4MyIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI2NCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjIzNyIgbmFtZT0iRGF0ZXMgb2YgSFBWIFRlc3RzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjM3Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7RGF0ZXMgb2YgSFBWIFRlc3RzJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjM2Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SFBWIFRlc3RzIFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cmV0dXJuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCXVuaW9uCgk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjAiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltEaWFnbm9zdGljUmVwb3J0OiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtIUFYgVGVzdHMgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBEaWFnUmVwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RGlhZ1JlcDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz57IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J3ByZWxpbWluYXJ5JzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2ZpbmFsJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2FtZW5kZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29ycmVjdGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2FwcGVuZGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cmV0dXJuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkRpYWdSZXA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZWZmZWN0aXZlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+Cgl1bmlvbgoJPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bT2JzZXJ2YXRpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0hQViBUZXN0cyBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IE9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz57IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2ZpbmFsJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2FtZW5kZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB9PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5yZXR1cm4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5EYXRlVGltZVRvSW50ZXJ2YWwoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjM2IiB4c2k6dHlwZT0iVW5pb24iPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjEiIHhzaTp0eXBlPSJVbmlvbiI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwMyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxOTMiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTkyIiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkhQViBUZXN0cyBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTk4IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOTYiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE5NSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTk3IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICA8cmV0dXJuIGxvY2FsSWQ9IjIwMiI+CiAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIwMSIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwMCIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjAiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjA1IiBhbGlhcz0iRGlhZ1JlcCI+CiAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIwNCIgZGF0YVR5cGU9ImZoaXI6RGlhZ25vc3RpY1JlcG9ydCIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iSFBWIFRlc3RzIFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIyMTUiIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwOCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjA3IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJEaWFnUmVwIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTQiIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMjA5IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0icHJlbGltaW5hcnkiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjIxMCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZpbmFsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIyMTEiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhbWVuZGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIyMTIiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb3JyZWN0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjIxMyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFwcGVuZGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgIDxyZXR1cm4gbG9jYWxJZD0iMjE5Ij4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjE4IiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjE3IiBwYXRoPSJlZmZlY3RpdmUiIHNjb3BlPSJEaWFnUmVwIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvcmV0dXJuPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjM1IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjIyMyIgYWxpYXM9Ik9icyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIyMiIgZGF0YVR5cGU9ImZoaXI6T2JzZXJ2YXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkhQViBUZXN0cyBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMjMwIiB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjYiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjIyNSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iT2JzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjkiIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMjI3IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iZmluYWwiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjIyOCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFtZW5kZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgPHJldHVybiBsb2NhbElkPSIyMzQiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMzMiIG5hbWU9IkRhdGVUaW1lVG9JbnRlcnZhbCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOmRhdGVUaW1lIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzIiIHBhdGg9ImVmZmVjdGl2ZSIgc2NvcGU9Ik9icyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjI3NiIgbmFtZT0iSXMgQ2VydmljYWwgQ3l0b2xvZ3kgUGx1cyBIUFYgVGVzdCBJbiBMYXN0IDUgWWVhcnMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyNzYiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBDZXJ2aWNhbCBDeXRvbG9neSBQbHVzIEhQViBUZXN0IEluIExhc3QgNSBZZWFycyZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI3NSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc0Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7RGF0ZXMgb2YgQ2VydmljYWwgQ3l0b2xvZ3kgVGVzdHMmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBXaGVuQ0M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndpdGggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0RhdGVzIG9mIEhQViBUZXN0cyZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFdoZW5IUFY8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlzdWNoIHRoYXQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGlmZmVyZW5jZSBpbiBkYXlzIGJldHdlZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPldoZW5DQzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+V2hlbkhQVjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICZsdDs9IDQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNhbGVuZGFyQWdlSW5ZZWFyc0F0KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBhdGllbnQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+YmlydGhEYXRlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+V2hlbkNDPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA+PSAzMDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5DYWxlbmRhckFnZUluWWVhcnNBdCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QYXRpZW50PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmJpcnRoRGF0ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPldoZW5IUFY8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID49IDMwPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPldoZW5DQzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW5jbHVkZWQgaW4gZGF5IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TG9va2JhY2sgSW50ZXJ2YWwgRm91ciBNb3JlIFllYXJzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5XaGVuSFBWPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbmNsdWRlZCBpbiBkYXkgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtMb29rYmFjayBJbnRlcnZhbCBGb3VyIE1vcmUgWWVhcnMmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjc1IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjc0IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE5MSIgYWxpYXM9IldoZW5DQyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE5MCIgbmFtZT0iRGF0ZXMgb2YgQ2VydmljYWwgQ3l0b2xvZ3kgVGVzdHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8cmVsYXRpb25zaGlwIGxvY2FsSWQ9IjI3MyIgYWxpYXM9IldoZW5IUFYiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjM4IiBuYW1lPSJEYXRlcyBvZiBIUFYgVGVzdHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSIyNzIiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjgiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjQiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTUiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDYiIHhzaTp0eXBlPSJMZXNzT3JFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI0NCIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJEaWZmZXJlbmNlQmV0d2VlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI0MSIgeHNpOnR5cGU9IlN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQwIiBuYW1lPSJXaGVuQ0MiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI0MyIgeHNpOnR5cGU9IlN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQyIiBuYW1lPSJXaGVuSFBWIiB4c2k6dHlwZT0iQWxpYXNSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI0NSIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1NCIgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjUyIiBuYW1lPSJDYWxlbmRhckFnZUluWWVhcnNBdCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQ5IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyNDgiIHBhdGg9ImJpcnRoRGF0ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyNDciIG5hbWU9IlBhdGllbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1MSIgeHNpOnR5cGU9IlN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjUwIiBuYW1lPSJXaGVuQ0MiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjUzIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjMwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjYzIiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjEiIG5hbWU9IkNhbGVuZGFyQWdlSW5ZZWFyc0F0IiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI1NyIgcGF0aD0iYmlydGhEYXRlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI1NiIgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjYwIiB4c2k6dHlwZT0iU3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTkiIG5hbWU9IldoZW5IUFYiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjYyIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjMwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjY3IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkluY2x1ZGVkSW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjUiIG5hbWU9IldoZW5DQyIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2NiIgbmFtZT0iTG9va2JhY2sgSW50ZXJ2YWwgRm91ciBNb3JlIFllYXJzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjcxIiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkluY2x1ZGVkSW4iPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjkiIG5hbWU9IldoZW5IUFYiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNzAiIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIEZvdXIgTW9yZSBZZWFycyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjI4MiIgbmFtZT0iTnVtZXJhdG9yIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjgyIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7TnVtZXJhdG9yJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjgxIj4KICAgICAgICAgICAgICAgICAgPGE6cz5jYXNlCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgQ2VydmljYWwgQ3l0b2xvZ3kgVGVzdCBJbiBMYXN0IDMgWWVhcnMmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHRoZW4gdHJ1ZTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODkiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5ub3QgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBBZ2UgMzAgdG8gNjQgYXQgRW5kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiB0aGVuIGZhbHNlPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJCTwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3OSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIENlcnZpY2FsIEN5dG9sb2d5IFBsdXMgSFBWIFRlc3QgSW4gTGFzdCA1IFllYXJzJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiB0aGVuIHRydWU8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CgkJZWxzZSBmYWxzZQoJZW5kPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyODEiIHhzaTp0eXBlPSJDYXNlIj4KICAgICAgICAgICAgPGNhc2VJdGVtIGxvY2FsSWQ9IjE3NSI+CiAgICAgICAgICAgICAgIDx3aGVuIGxvY2FsSWQ9IjE3MyIgbmFtZT0iSXMgQ2VydmljYWwgQ3l0b2xvZ3kgVGVzdCBJbiBMYXN0IDMgWWVhcnMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjE3NCIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJ0cnVlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMTg5Ij4KICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iMTg3IiB4c2k6dHlwZT0iTm90Ij4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTg2IiBuYW1lPSJJcyBBZ2UgMzAgdG8gNjQgYXQgRW5kIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L3doZW4+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjE4OCIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9jYXNlSXRlbT4KICAgICAgICAgICAgPGNhc2VJdGVtIGxvY2FsSWQ9IjI3OSI+CiAgICAgICAgICAgICAgIDx3aGVuIGxvY2FsSWQ9IjI3NyIgbmFtZT0iSXMgQ2VydmljYWwgQ3l0b2xvZ3kgUGx1cyBIUFYgVGVzdCBJbiBMYXN0IDUgWWVhcnMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjI3OCIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJ0cnVlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L2Nhc2VJdGVtPgogICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSIyODAiIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMzE5IiBuYW1lPSJJcyBIeXN0ZXJlY3RvbXkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzMTkiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBIeXN0ZXJlY3RvbXkmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzMTgiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7QWJzZW5jZSBvZiBDZXJ2aXggVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y2FzZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjkxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkRhdGVUaW1lPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBlbHNlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7c3RhcnQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O2VuZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGVuZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjMxOCIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMxNyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyODQiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjgzIiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkFic2VuY2Ugb2YgQ2Vydml4IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzMTYiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODkiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI4NyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjg2IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzE1IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMxMiIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMxMSIgeHNpOnR5cGU9IkNhc2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2FzZUl0ZW0gbG9jYWxJZD0iMzAxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZW4gbG9jYWxJZD0iMjkzIiB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyOTEiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjI5MiIgbmFtZT0idDpEYXRlVGltZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjMwMCIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJ0cnVlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjI5NiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjk1IiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9IjI5OSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjk4IiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2FzZUl0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbHNlIGxvY2FsSWQ9IjMxMCIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJ0cnVlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjMwNSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzA0IiBwYXRoPSJzdGFydCIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMDMiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9IjMwOSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzA4IiBwYXRoPSJlbmQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzA3IiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbHNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzE0IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzEzIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIzMjEiIG5hbWU9IkRlbm9taW5hdG9yIEV4Y2x1c2lvbiIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjMyMSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0Rlbm9taW5hdG9yIEV4Y2x1c2lvbiZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjMyMCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgSHlzdGVyZWN0b215JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMjAiIG5hbWU9IklzIEh5c3RlcmVjdG9teSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMzQwIiBuYW1lPSJDb2RpbmdUb0NvZGUiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiIHhzaTp0eXBlPSJGdW5jdGlvbkRlZiI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjM0MCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIENvZGluZ1RvQ29kZShjb2RpbmcgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMzI2Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLkNvZGluZzwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cz4pOgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMzM5Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzkiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPlN5c3RlbS5Db2RlIHsKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2RlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y29kZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3lzdGVtOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3lzdGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52ZXJzaW9uOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmVyc2lvbjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGlzcGxheTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Y29kaW5nPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRpc3BsYXk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+Cgl9PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzM5IiBjbGFzc1R5cGU9InQ6Q29kZSIgeHNpOnR5cGU9Ikluc3RhbmNlIj4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY29kZSI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBsb2NhbElkPSIzMjkiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMyOCIgcGF0aD0iY29kZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMjciIG5hbWU9ImNvZGluZyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic3lzdGVtIj4KICAgICAgICAgICAgICAgPHZhbHVlIGxvY2FsSWQ9IjMzMiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzMxIiBwYXRoPSJzeXN0ZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzMwIiBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InZlcnNpb24iPgogICAgICAgICAgICAgICA8dmFsdWUgbG9jYWxJZD0iMzM1IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMzQiIHBhdGg9InZlcnNpb24iIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzMzIiBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRpc3BsYXkiPgogICAgICAgICAgICAgICA8dmFsdWUgbG9jYWxJZD0iMzM4IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMzciIHBhdGg9ImRpc3BsYXkiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzM2IiBuYW1lPSJjb2RpbmciIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8L3ZhbHVlPgogICAgICAgICAgICA8L2VsZW1lbnQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iY29kaW5nIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjMyNiIgbmFtZT0iZmhpcjpDb2RpbmciIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9vcGVyYW5kPgogICAgICA8L2RlZj4KICAgPC9zdGF0ZW1lbnRzPgo8L2xpYnJhcnk+Cg=="
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Library/library-ccs-logic"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Measure",
+        "id": "measure-ccs",
+        "text": {
+          "status": "generated"
+        },
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://hl7.org/fhir/cqi/ecqm/Measure/Identifier/payer-extract",
+            "value": "CCS"
+          }
+        ],
+        "version": "1.0.0",
+        "title": "Cervical Cancer Screening. Cohort Definition",
+        "status": "active",
+        "experimental": true,
+        "date": "2015-03-08",
+        "description": "Cervical Cancer Screening. Cohort Definition",
+        "topic": [
+          {
+            "coding": {
+              "system": "http://hl7.org/fhir/c80-doc-typecodes",
+              "code": "57024-2"
+            }
+          }
+        ],
+        "library": [
+          {
+            "reference": "Library/library-ccs-logic"
+          }
+        ],
+        "scoring": {
+          "coding": [
+            {
+              "code": "proportion"
+            }
+          ]
+        },
+        "group": [
+          {
+            "population": [
+              {
+                "identifier": {
+                  "value": "initial-population"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "initial-population"
+                    }
+                  ]
+                },
+                "criteria": "Initial Population"
+              },
+              {
+                "identifier": {
+                  "value": "numerator"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "numerator"
+                    }
+                  ]
+                },
+                "criteria": "Numerator"
+              },
+              {
+                "identifier": {
+                  "value": "denominator"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "denominator"
+                    }
+                  ]
+                },
+                "criteria": "Denominator"
+              }
+            ]
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Measure/measure-ccs"
+      }
+    }
+  ]
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/patient-measure-test-bundle.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/patient-measure-test-bundle.json
new file mode 100644
index 00000000000..857d23a33a4
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/patient-measure-test-bundle.json
@@ -0,0 +1,1316 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2526",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002526"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992526"
+          }
+        ],
+        "name": [
+          {
+            "family": "Wilkins",
+            "given": [
+              "James",
+              "Woodward"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-6322",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-7293",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "322 W Atlantic Drive"
+            ],
+            "city": "Zeeland",
+            "district": "Ottawa County",
+            "state": "MI",
+            "postalCode": "49464"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1988-11-18"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2526"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6529",
+        "active": true,
+        "name": [
+          {
+            "family": "Shea",
+            "given": [
+              "Alan",
+              "Everett"
+            ],
+            "suffix": [
+              "III"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-0522",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-1474",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1962-06-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "627 S Elm Place"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48238"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6529"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1105",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1105"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001105"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Practice"
+          }
+        ],
+        "name": "Bayside Medical Group",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-1514",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "616 Peach Street"
+            ],
+            "city": "Flint",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1105"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1105",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1105"
+          }
+        ],
+        "status": "active",
+        "name": "Bayside Medical Group",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(616) 555-2806",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "616 Peach Street"
+          ],
+          "city": "Flint",
+          "district": "Genesee County",
+          "state": "MI",
+          "postalCode": "48503"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -85.63506928883693,
+          "latitude": 42.98123440264812
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1105",
+          "display": "Bayside Medical Group"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1105"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Encounter",
+        "id": "Encounter-1485",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-encounter"
+          ]
+        },
+        "status": "finished",
+        "class": {
+          "system": "http://hl7.org/fhir/encounter-class",
+          "code": "outpatient",
+          "display": "Outpatient"
+        },
+        "type": [
+          {
+            "coding": [
+              {
+                "system": "http://snomed.info/sct",
+                "code": "185349003",
+                "display": "Wellness Visit"
+              }
+            ]
+          }
+        ],
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "participant": [
+          {
+            "period": {
+              "start": "2003-12-19T00:00:00-05:00",
+              "end": "2003-12-19T00:00:00-05:00"
+            },
+            "individual": {
+              "reference": "Practitioner/Practitioner-2526",
+              "display": "James Woodward Wilkins MD"
+            }
+          }
+        ],
+        "period": {
+          "start": "2003-12-19T00:00:00-05:00",
+          "end": "2003-12-19T00:00:00-05:00"
+        },
+        "location": [
+          {
+            "location": {
+              "reference": "Location/Location-1105",
+              "display": "Bayside Medical Group"
+            }
+          }
+        ],
+        "serviceProvider": {
+          "reference": "Organization/Organization-1105",
+          "display": "Bayside Medical Group"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Encounter/Encounter-1485"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Immunization",
+        "id": "Immunization-304616",
+        "status": "completed",
+        "notGiven": false,
+        "vaccineCode": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/sid/cvx",
+              "code": "140",
+              "display": "Influenza, seasonal, injectable, preservative free"
+            }
+          ]
+        },
+        "patient": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "date": "2003-12-19T00:00:00-05:00",
+        "primarySource": true,
+        "location": {
+          "reference": "Location/Location-1105",
+          "display": "Bayside Medical Group"
+        },
+        "practitioner": [
+          {
+            "actor": {
+              "reference": "Practitioner/Practitioner-2526",
+              "display": "James Woodward Wilkins MD"
+            }
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Immunization/Immunization-304616"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Procedure",
+        "id": "Procedure-327162",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+        "status": "completed",
+        "code": {
+          "coding": [
+            {
+              "system": "http://snomed.info/sct",
+              "code": "713107002",
+              "display": "Screening for alcohol abuse (procedure)"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "performedPeriod": {
+          "start": "2003-12-19T00:00:00-05:00",
+          "end": "2003-12-19T00:00:00-05:00"
+        },
+        "performer": [
+          {
+            "actor": {
+              "reference": "Practitioner/Practitioner-2526",
+              "display": "James Woodward Wilkins MD"
+            }
+          }
+        ],
+        "location": {
+          "reference": "Location/Location-1105",
+          "display": "Bayside Medical Group"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Procedure/Procedure-327162"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327163",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://cqframework.info/codesystem/placeholder",
+              "code": "00005",
+              "display": "Five or more drinks per day"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 8.0,
+          "unit": "score"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327163"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327164",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "75626-2",
+              "display": "AUDIT-C Total Score (in points)"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 7.0,
+          "unit": "score"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327164"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327165",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "8480-6",
+              "display": "Systolic blood pressure"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 137.7206413335362,
+          "unit": "mmHg"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327165"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327166",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "8462-4",
+              "display": "Diastolic blood pressure"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 77.17077243482738,
+          "unit": "mmHg"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327166"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327167",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "8302-2",
+              "display": "Body Height"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 176.8,
+          "unit": "cm"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327167"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327168",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "29463-7",
+              "display": "Body Weight"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 79.2350826835658,
+          "unit": "kg"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327168"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327169",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "39156-5",
+              "display": "Body Mass Index"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 25.348542555040144,
+          "unit": "kg/m2"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327169"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327172",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "55284-4",
+              "display": "Blood Pressure"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "valueQuantity": {
+          "value": 77.17077243482738,
+          "unit": "mmHg"
+        },
+        "component": [
+          {
+            "code": {
+              "coding": [
+                {
+                  "system": "http://loinc.org",
+                  "code": "8480-6",
+                  "display": "Systolic Blood Pressure"
+                }
+              ]
+            }
+          },
+          {
+            "code": {
+              "coding": [
+                {
+                  "system": "http://loinc.org",
+                  "code": "8462-4",
+                  "display": "Diastolic Blood Pressure"
+                }
+              ]
+            }
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327172"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327174",
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "8302-2",
+              "display": "Height"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 176.8,
+          "unit": "cm"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327174"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327175",
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "29463-7",
+              "display": "Weight"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 79.2350826835658,
+          "unit": "kg"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327175"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327176",
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "39156-5",
+              "display": "BMI"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 25.348542555040144,
+          "unit": "kg/m2"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327176"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327177",
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "8310-5",
+              "display": "Temperature"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 37.0,
+          "unit": "C"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327177"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327178",
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "8459-0",
+              "display": "Systolic Blood Pressure"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 137.7206413335362,
+          "unit": "mmHg"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327178"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Observation",
+        "id": "Observation-327179",
+        "status": "final",
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "8453-3",
+              "display": "Diastolic Blood Pressure"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectiveDateTime": "2003-12-19T00:00:00-05:00",
+        "performer": [
+          {
+            "reference": "Practitioner/Practitioner-2526",
+            "display": "James Woodward Wilkins MD"
+          }
+        ],
+        "valueQuantity": {
+          "value": 77.17077243482738,
+          "unit": "mmHg"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Observation/Observation-327179"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "DiagnosticReport",
+        "id": "DiagnosticReport-327173",
+        "meta": {
+          "profile": [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+        "status": "final",
+        "category": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code": "LAB",
+              "display": "Laboratory"
+            }
+          ]
+        },
+        "code": {
+          "coding": [
+            {
+              "system": "http://loinc.org",
+              "code": "8716-3",
+              "display": "Vital Signs Panel"
+            }
+          ]
+        },
+        "subject": {
+          "reference": "Patient/Patient-6529",
+          "display": "Alan Everett Shea III"
+        },
+        "context": {
+          "reference": "Encounter/Encounter-1485",
+          "display": "Wellness Visit"
+        },
+        "effectivePeriod": {
+          "start": "2003-12-19T00:00:00-05:00",
+          "end": "2003-12-19T00:00:00-05:00"
+        },
+        "issued": "2003-12-19T00:00:00.000-05:00",
+        "result": [
+          {
+            "reference": "Observation/Observation-327174",
+            "display": "Height"
+          },
+          {
+            "reference": "Observation/Observation-327175",
+            "display": "Weight"
+          },
+          {
+            "reference": "Observation/Observation-327176",
+            "display": "BMI"
+          },
+          {
+            "reference": "Observation/Observation-327177",
+            "display": "Temperature"
+          },
+          {
+            "reference": "Observation/Observation-327178",
+            "display": "Systolic Blood Pressure"
+          },
+          {
+            "reference": "Observation/Observation-327179",
+            "display": "Diastolic Blood Pressure"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "DiagnosticReport/DiagnosticReport-327173"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Measure",
+        "id": "measure-asf",
+        "status": "active",
+        "experimental": true,
+        "library": [
+          {
+            "reference": "Library/library-asf-logic"
+          }
+        ],
+        "scoring": {
+          "coding": [
+            {
+              "code": "proportion"
+            }
+          ]
+        },
+        "group": [
+          {
+            "identifier": {
+              "value": "ASF-cohort"
+            },
+            "population": [
+              {
+                "identifier": {
+                  "value": "initial-population"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "initial-population"
+                    }
+                  ]
+                },
+                "criteria": "Initial Population"
+              },
+              {
+                "identifier": {
+                  "value": "numerator 1"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "numerator"
+                    }
+                  ]
+                },
+                "criteria": "Numerator 1"
+              },
+              {
+                "identifier": {
+                  "value": "denominator 1"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "denominator"
+                    }
+                  ]
+                },
+                "criteria": "Denominator 1"
+              },
+              {
+                "identifier": {
+                  "value": "numerator 2"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "numerator"
+                    }
+                  ]
+                },
+                "criteria": "Numerator 2"
+              },
+              {
+                "identifier": {
+                  "value": "denominator 2"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "denominator"
+                    }
+                  ]
+                },
+                "criteria": "Denominator 2"
+              }
+            ],
+            "stratifier": [
+              {
+                "identifier": {
+                  "value": "stratifier 1"
+                },
+                "criteria": "Stratifier 1"
+              },
+              {
+                "identifier": {
+                  "value": "stratifier 2"
+                },
+                "criteria": "Stratifier 2"
+              },
+              {
+                "identifier": {
+                  "value": "stratifier 3"
+                },
+                "criteria": "Stratifier 3"
+              },
+              {
+                "identifier": {
+                  "value": "stratifier 4"
+                },
+                "criteria": "Stratifier 4"
+              }
+            ]
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Measure/measure-asf"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Library",
+        "id": "library-asf-logic",
+        "version": "1.0.0",
+        "status": "active",
+        "experimental": true,
+        "type": {
+          "coding": [
+            {
+              "code": "logic-library"
+            }
+          ]
+        },
+        "dataRequirement": [
+          {
+            "type": "DiagnosticReport",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Alcohol use disorder"
+              }
+            ]
+          },
+          {
+            "type": "DiagnosticReport",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Dementia"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Alcohol Counseling and Treatment"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Alcohol Counseling and Treatment"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Alcohol Screening"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Alcohol Screening"
+              }
+            ]
+          }
+        ],
+        "content": [
+          {
+            "contentType": "application/elm+xml",
+            "data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNjkiIHN0YXJ0Q2hhcj0iMTEiIGVuZExpbmU9IjY5IiBlbmRDaGFyPSI1OCIgbWVzc2FnZT0iQm9vbGVhbi12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgcHJvbW90ZWQgdG8gYSBsaXN0LiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjEyNCIgc3RhcnRDaGFyPSIyIiBlbmRMaW5lPSIxMjQiIGVuZENoYXI9IjQ5IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjEzMCIgc3RhcnRDaGFyPSIyIiBlbmRMaW5lPSIxMzAiIGVuZENoYXI9IjQ3IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjEzOSIgc3RhcnRDaGFyPSIyIiBlbmRMaW5lPSIxMzkiIGVuZENoYXI9IjQ1IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjE1MSIgc3RhcnRDaGFyPSIyIiBlbmRMaW5lPSIxNTEiIGVuZENoYXI9IjQ1IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8aWRlbnRpZmllciBpZD0iQVNGX0ZISVIiIHZlcnNpb249IjEuMC4wIi8+CiAgIDxzY2hlbWFJZGVudGlmaWVyIGlkPSJ1cm46aGw3LW9yZzplbG0iIHZlcnNpb249InIxIi8+CiAgIDx1c2luZ3M+CiAgICAgIDxkZWYgbG9jYWxJZGVudGlmaWVyPSJTeXN0ZW0iIHVyaT0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iMSIgbG9jYWxJZGVudGlmaWVyPSJGSElSIiB1cmk9Imh0dHA6Ly9obDcub3JnL2ZoaXIiIHZlcnNpb249IjMuMC4wIi8+CiAgIDwvdXNpbmdzPgogICA8aW5jbHVkZXM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMiIgbG9jYWxJZGVudGlmaWVyPSJGSElSSGVscGVycyIgcGF0aD0iRkhJUkhlbHBlcnMiIHZlcnNpb249IjMuMC4wIi8+CiAgIDwvaW5jbHVkZXM+CiAgIDxwYXJhbWV0ZXJzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE5IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8cGFyYW1ldGVyVHlwZVNwZWNpZmllciBsb2NhbElkPSIxOCIgeHNpOnR5cGU9IkludGVydmFsVHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgIDxwb2ludFR5cGUgbG9jYWxJZD0iMTciIG5hbWU9InQ6RGF0ZVRpbWUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgPC9wYXJhbWV0ZXJUeXBlU3BlY2lmaWVyPgogICAgICA8L2RlZj4KICAgPC9wYXJhbWV0ZXJzPgogICA8Y29kZVN5c3RlbXM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMyIgbmFtZT0iTE9JTkMiIGlkPSJodHRwOi8vbG9pbmMub3JnIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iNCIgbmFtZT0iQ1FGcmFtZXdvcmsiIGlkPSJodHRwOi8vY3FmcmFtZXdvcmsuaW5mby9jb2Rlc3lzdGVtL3BsYWNlaG9sZGVyIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgIDwvY29kZVN5c3RlbXM+CiAgIDx2YWx1ZVNldHM+CiAgICAgIDxkZWYgbG9jYWxJZD0iNSIgbmFtZT0iQWxjb2hvbCBDb3Vuc2VsaW5nIGFuZCBUcmVhdG1lbnQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjE0MzciIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSI2IiBuYW1lPSJBbGNvaG9sIFNjcmVlbmluZyIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTMzNyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjciIG5hbWU9IkFsY29ob2wgdXNlIGRpc29yZGVyIiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMzM5IiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iOCIgbmFtZT0iRGVtZW50aWEiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEwNzQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgPC92YWx1ZVNldHM+CiAgIDxjb2Rlcz4KICAgICAgPGRlZiBsb2NhbElkPSIxMCIgbmFtZT0iRml2ZSBvciBtb3JlIGRyaW5rcyBwZXIgZGF5IiBpZD0iMDAwMDUiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8Y29kZVN5c3RlbSBsb2NhbElkPSI5IiBuYW1lPSJDUUZyYW1ld29yayIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIxMiIgbmFtZT0iRm91ciBvciBtb3JlIGRyaW5rcyBwZXIgZGF5IiBpZD0iMDAwMDQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8Y29kZVN5c3RlbSBsb2NhbElkPSIxMSIgbmFtZT0iQ1FGcmFtZXdvcmsiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTQiIG5hbWU9IkFVRElUIFRvdGFsIFNjb3JlIChpbiBwb2ludHMpIiBpZD0iNzU2MjQtNyIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxjb2RlU3lzdGVtIGxvY2FsSWQ9IjEzIiBuYW1lPSJMT0lOQyIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIxNiIgbmFtZT0iQVVESVQtQyBUb3RhbCBTY29yZSAoaW4gcG9pbnRzKSIgaWQ9Ijc1NjI2LTIiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8Y29kZVN5c3RlbSBsb2NhbElkPSIxNSIgbmFtZT0iTE9JTkMiLz4KICAgICAgPC9kZWY+CiAgIDwvY29kZXM+CiAgIDxzdGF0ZW1lbnRzPgogICAgICA8ZGVmIG5hbWU9IlBhdGllbnQiIGNvbnRleHQ9IlBhdGllbnQiPgogICAgICAgICA8ZXhwcmVzc2lvbiB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgIDxvcGVyYW5kIGRhdGFUeXBlPSJmaGlyOlBhdGllbnQiIHhzaTp0eXBlPSJSZXRyaWV2ZSIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjI2IiBuYW1lPSJJbml0aWFsIFBvcHVsYXRpb24iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyNiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0luaXRpYWwgUG9wdWxhdGlvbiZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI1Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHMgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BZ2VJblllYXJzQXQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Pj0gMTg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyNSIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0xpc3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNCIgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjIiIHByZWNpc2lvbj0iWWVhciIgeHNpOnR5cGU9IkNhbGN1bGF0ZUFnZUF0Ij4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgcGF0aD0iYmlydGhEYXRlLnZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIG5hbWU9IlBhdGllbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjEiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjE4IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI3MCIgbmFtZT0iRGVub21pbmF0b3IgRXhjbHVzaW9uIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNzAiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtEZW5vbWluYXRvciBFeGNsdXNpb24mcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI2OSI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDciPgogICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0cyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bQ29uZGl0aW9uOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtBbGNvaG9sIHVzZSBkaXNvcmRlciZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQWxjb2hvbFVzZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QWxjb2hvbFVzZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNsaW5pY2FsU3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnsgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhY3RpdmUnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidyZWN1cnJlbmNlJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BbGNvaG9sVXNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+YXNzZXJ0ZWREYXRlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gZHVyaW5nIGRheSBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MSB5ZWFyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KICAgIG9yIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjY4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W0NvbmRpdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7RGVtZW50aWEmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jbGluaWNhbFN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGluIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz57IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYWN0aXZlJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4ncmVjdXJyZW5jZSc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICBhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmFzc2VydGVkRGF0ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGR1cmluZyBkYXkgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz42MCBkYXlzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNjkiIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDYiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjgiIGFsaWFzPSJBbGNvaG9sVXNlIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjciIGRhdGFUeXBlPSJmaGlyOkNvbmRpdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQWxjb2hvbCB1c2UgZGlzb3JkZXIiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iNDUiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNCIgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9TdHJpbmciIGxpYnJhcnlOYW1lPSJGSElSSGVscGVycyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzAiIHBhdGg9ImNsaW5pY2FsU3RhdHVzIiBzY29wZT0iQWxjb2hvbFVzZSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzMiIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMzEiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhY3RpdmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjMyIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0icmVjdXJyZW5jZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ0IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbmFtZT0iVG9EYXRlVGltZSIgbGlicmFyeU5hbWU9IkZISVJIZWxwZXJzIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNiIgcGF0aD0iYXNzZXJ0ZWREYXRlIiBzY29wZT0iQWxjb2hvbFVzZSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDMiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxvdyBsb2NhbElkPSI0MCIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzgiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzOSIgdmFsdWU9IjEiIHVuaXQ9InllYXIiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhpZ2ggbG9jYWxJZD0iNDIiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MSIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2OCIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY3IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQ5IiBhbGlhcz0iRCI+CiAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ4IiBkYXRhVHlwZT0iZmhpcjpDb25kaXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkRlbWVudGlhIiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjY2IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTUiIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvU3RyaW5nIiBsaWJyYXJ5TmFtZT0iRkhJUkhlbHBlcnMiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUxIiBwYXRoPSJjbGluaWNhbFN0YXR1cyIgc2NvcGU9IkQiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjU0IiB4c2k6dHlwZT0iTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjUyIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYWN0aXZlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSI1MyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9InJlY3VycmVuY2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2NSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlRvRGF0ZVRpbWUiIGxpYnJhcnlOYW1lPSJGSElSSGVscGVycyIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTciIHBhdGg9ImFzc2VydGVkRGF0ZSIgc2NvcGU9IkQiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY0IiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9InRydWUiIHhzaTp0eXBlPSJJbnRlcnZhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsb3cgbG9jYWxJZD0iNTkiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjU4IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9IjYzIiB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2MSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjYwIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2MiIgdmFsdWU9IjYwIiB1bml0PSJkYXlzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNzIiIG5hbWU9IkRlbm9taW5hdG9yIDEiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI3MiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0Rlbm9taW5hdG9yIDEmcXVvdDs6CgkvLyAmcXVvdDtJbml0aWFsIFBvcHVsYXRpb24mcXVvdDsKCXRydWU8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNzEiIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0idHJ1ZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iOTQiIG5hbWU9IkFVRElULUMgQXNzZXNzbWVudCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9Ijk0Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7QVVESVQtQyBBc3Nlc3NtZW50JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iOTMiPgogICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltPYnNlcnZhdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7QVVESVQtQyBUb3RhbCBTY29yZSAoaW4gcG9pbnRzKSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+eyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2ZpbmFsJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYW1lbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvcnJlY3RlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiBkYXkgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgbm90IG51bGw8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjkzIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijc0IiBhbGlhcz0iQSI+CiAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjczIiBkYXRhVHlwZT0iZmhpcjpPYnNlcnZhdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiBkYXRlUHJvcGVydHk9ImVmZmVjdGl2ZS52YWx1ZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkFVRElULUMgVG90YWwgU2NvcmUgKGluIHBvaW50cykiIHhzaTp0eXBlPSJDb2RlUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxkYXRlUmFuZ2UgbG9jYWxJZD0iODYiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iOTIiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4MiIgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNzciIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9Ijc2IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJBIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI4MSIgeHNpOnR5cGU9Ikxpc3QiPgogICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSI3OCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZpbmFsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSI3OSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFtZW5kZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjgwIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29ycmVjdGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTEiIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTAiIHBhdGg9InZhbHVlIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L3doZXJlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjExOCIgbmFtZT0iQVVESVQgQXNzZXNzbWVudCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjExOCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0FVRElUIEFzc2Vzc21lbnQmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxMTciPgogICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltPYnNlcnZhdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7QVVESVQgVG90YWwgU2NvcmUgKGluIHBvaW50cykmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJCTwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnsgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmluYWwnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYW1lbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb3JyZWN0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB9PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW4gZGF5IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgbm90IG51bGw8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjExNyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI5OCIgYWxpYXM9IkEiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI5NyIgZGF0YVR5cGU9ImZoaXI6T2JzZXJ2YXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgZGF0ZVByb3BlcnR5PSJlZmZlY3RpdmUudmFsdWUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJBVURJVCBUb3RhbCBTY29yZSAoaW4gcG9pbnRzKSIgeHNpOnR5cGU9IkNvZGVSZWYiLz4KICAgICAgICAgICAgICAgICAgPGRhdGVSYW5nZSBsb2NhbElkPSIxMTAiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTE2IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTA2IiB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMDEiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjEwMCIgcGF0aD0ic3RhdHVzIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTA1IiB4c2k6dHlwZT0iTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjEwMiIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZpbmFsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIxMDMiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhbWVuZGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIxMDQiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb3JyZWN0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMTUiIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTE0IiBwYXRoPSJ2YWx1ZSIgc2NvcGU9IkEiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIxMjciIG5hbWU9IlBhdGllbnQgaXMgTWFsZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjEyNyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O1BhdGllbnQgaXMgTWFsZSZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjEyNiI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI0Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGF0aWVudDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5nZW5kZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjUiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPidtYWxlJzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEyNiIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTI0IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMjMiIHBhdGg9ImdlbmRlciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMjIiIG5hbWU9IlBhdGllbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEyNSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9Im1hbGUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTUwIiBuYW1lPSJGaXZlIG9yIG1vcmUgZHJpbmtzIHBlciBkYXkgQXNzZXNzbWVudCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjE1MCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0ZpdmUgb3IgbW9yZSBkcmlua3MgcGVyIGRheSBBc3Nlc3NtZW50JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ5Ij4KICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzAiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bT2JzZXJ2YXRpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0ZpdmUgb3IgbW9yZSBkcmlua3MgcGVyIGRheSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDgiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTMxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnsgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmluYWwnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYW1lbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb3JyZWN0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB9PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW4gZGF5IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgbm90IG51bGw8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE0OSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMzAiIGFsaWFzPSJBIj4KICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTI5IiBkYXRhVHlwZT0iZmhpcjpPYnNlcnZhdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiBkYXRlUHJvcGVydHk9ImVmZmVjdGl2ZS52YWx1ZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkZpdmUgb3IgbW9yZSBkcmlua3MgcGVyIGRheSIgeHNpOnR5cGU9IkNvZGVSZWYiLz4KICAgICAgICAgICAgICAgICAgPGRhdGVSYW5nZSBsb2NhbElkPSIxNDIiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTQ4IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTM4IiB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzMiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjEzMiIgcGF0aD0ic3RhdHVzIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTM3IiB4c2k6dHlwZT0iTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjEzNCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZpbmFsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIxMzUiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhbWVuZGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIxMzYiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb3JyZWN0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDciIHhzaTp0eXBlPSJOb3QiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iSXNOdWxsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTQ2IiBwYXRoPSJ2YWx1ZSIgc2NvcGU9IkEiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIxNjAiIG5hbWU9IlBhdGllbnQgaXMgRmVtYWxlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMTYwIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7UGF0aWVudCBpcyBGZW1hbGUmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxNTkiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBhdGllbnQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Z2VuZGVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmVtYWxlJzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE1OSIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTU3IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxNTYiIHBhdGg9ImdlbmRlciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxNTUiIG5hbWU9IlBhdGllbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE1OCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZlbWFsZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIxODMiIG5hbWU9IkZvdXIgb3IgbW9yZSBkcmlua3MgcGVyIGRheSBBc3Nlc3NtZW50IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMTgzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7Rm91ciBvciBtb3JlIGRyaW5rcyBwZXIgZGF5IEFzc2Vzc21lbnQmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxODIiPgogICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltPYnNlcnZhdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7Rm91ciBvciBtb3JlIGRyaW5rcyBwZXIgZGF5JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBBPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGluIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+eyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidmaW5hbCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhbWVuZGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvcnJlY3RlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVmZmVjdGl2ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiBkYXkgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyBub3QgbnVsbDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTgyIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE2MyIgYWxpYXM9IkEiPgogICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxNjIiIGRhdGFUeXBlPSJmaGlyOk9ic2VydmF0aW9uIiBjb2RlUHJvcGVydHk9ImNvZGUiIGRhdGVQcm9wZXJ0eT0iZWZmZWN0aXZlLnZhbHVlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iRm91ciBvciBtb3JlIGRyaW5rcyBwZXIgZGF5IiB4c2k6dHlwZT0iQ29kZVJlZiIvPgogICAgICAgICAgICAgICAgICA8ZGF0ZVJhbmdlIGxvY2FsSWQ9IjE3NSIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIxODEiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNzEiIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2NiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTY1IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJBIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNzAiIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMTY3IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iZmluYWwiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjE2OCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFtZW5kZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjE2OSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvcnJlY3RlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE4MCIgeHNpOnR5cGU9Ik5vdCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJJc051bGwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNzkiIHBhdGg9InZhbHVlIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L3doZXJlPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE5NiIgbmFtZT0iUGF0aWVudCBpcyA2NSBvciBPdmVyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMTk2Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7UGF0aWVudCBpcyA2NSBvciBPdmVyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTk1Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkFnZUluWWVhcnNBdCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPj49IDY1PC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxOTUiIHhzaTp0eXBlPSJHcmVhdGVyT3JFcXVhbCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE5MyIgcHJlY2lzaW9uPSJZZWFyIiB4c2k6dHlwZT0iQ2FsY3VsYXRlQWdlQXQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJiaXJ0aERhdGUudmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOTIiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE5MSIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOTQiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iNjUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjA1IiBuYW1lPSJOdW1lcmF0b3IgMSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjIwNSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O051bWVyYXRvciAxJnF1b3Q7OgoJLy8gJnF1b3Q7SW5pdGlhbCBQb3B1bGF0aW9uJnF1b3Q7Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyMDQiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0FVRElULUMgQXNzZXNzbWVudCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICBvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0cyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtBVURJVCBBc3Nlc3NtZW50JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICBvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7UGF0aWVudCBpcyBNYWxlJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0cyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtGaXZlIG9yIG1vcmUgZHJpbmtzIHBlciBkYXkgQXNzZXNzbWVudCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICBvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODkiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7UGF0aWVudCBpcyBGZW1hbGUmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0ZvdXIgb3IgbW9yZSBkcmlua3MgcGVyIGRheSBBc3Nlc3NtZW50JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7Rml2ZSBvciBtb3JlIGRyaW5rcyBwZXIgZGF5IEFzc2Vzc21lbnQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgogICAgb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCiAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O1BhdGllbnQgaXMgNjUgb3IgT3ZlciZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAogICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0cyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtGb3VyIG9yIG1vcmUgZHJpbmtzIHBlciBkYXkgQXNzZXNzbWVudCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICBvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0cyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtGaXZlIG9yIG1vcmUgZHJpbmtzIHBlciBkYXkgQXNzZXNzbWVudCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMDQiIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE5MCIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTU0IiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjEiIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijk2IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTUiIG5hbWU9IkFVRElULUMgQXNzZXNzbWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjAiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMTkiIG5hbWU9IkFVRElUIEFzc2Vzc21lbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNTMiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjgiIG5hbWU9IlBhdGllbnQgaXMgTWFsZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTUyIiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTUxIiBuYW1lPSJGaXZlIG9yIG1vcmUgZHJpbmtzIHBlciBkYXkgQXNzZXNzbWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTg5IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTYxIiBuYW1lPSJQYXRpZW50IGlzIEZlbWFsZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTg4IiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODUiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODQiIG5hbWU9IkZvdXIgb3IgbW9yZSBkcmlua3MgcGVyIGRheSBBc3Nlc3NtZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE4NyIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE4NiIgbmFtZT0iRml2ZSBvciBtb3JlIGRyaW5rcyBwZXIgZGF5IEFzc2Vzc21lbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjAzIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTk3IiBuYW1lPSJQYXRpZW50IGlzIDY1IG9yIE92ZXIiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwMiIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTk5IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTk4IiBuYW1lPSJGb3VyIG9yIG1vcmUgZHJpbmtzIHBlciBkYXkgQXNzZXNzbWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMDEiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMDAiIG5hbWU9IkZpdmUgb3IgbW9yZSBkcmlua3MgcGVyIGRheSBBc3Nlc3NtZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjI3MiIgbmFtZT0iUG9zaXRpdmUgQXNzZXNzbWVudCBmb3IgVW5oZWFsdGh5IEFsY29ob2wgVXNlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjcyIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7UG9zaXRpdmUgQXNzZXNzbWVudCBmb3IgVW5oZWFsdGh5IEFsY29ob2wgVXNlJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjcxIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTUiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7QVVESVQgQXNzZXNzbWVudCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5RdWFudGl0eTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPj0gODwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgIHVuaW9uIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAogICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0FVRElULUMgQXNzZXNzbWVudCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlCiAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAogICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtQYXRpZW50IGlzIE1hbGUmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UXVhbnRpdHk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID49IDQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtQYXRpZW50IGlzIEZlbWFsZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5RdWFudGl0eTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPj0gMzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICB1bmlvbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTQiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtGaXZlIG9yIG1vcmUgZHJpbmtzIHBlciBkYXkgQXNzZXNzbWVudCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtQYXRpZW50IGlzIE1hbGUmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UXVhbnRpdHk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID49IDE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KICAgIHVuaW9uIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3MCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAogICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0ZvdXIgb3IgbW9yZSBkcmlua3MgcGVyIGRheSBBc3Nlc3NtZW50JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtQYXRpZW50IGlzIEZlbWFsZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICBvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O1BhdGllbnQgaXMgNjUgb3IgT3ZlciZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgIGFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UXVhbnRpdHk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiApPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID49IDE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICApPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjcxIiB4c2k6dHlwZT0iVW5pb24iPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTUiIHhzaTp0eXBlPSJVbmlvbiI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI0MSIgeHNpOnR5cGU9IlVuaW9uIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjE2IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjIwNyIgYWxpYXM9IkEiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMDYiIG5hbWU9IkFVRElUIEFzc2Vzc21lbnQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMjE1IiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTMiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjIxMiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjExIiBzdHJpY3Q9ImZhbHNlIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMDkiIHBhdGg9InZhbHVlIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjEwIiBuYW1lPSJmaGlyOlF1YW50aXR5IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjE0IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjgiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDAiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjE4IiBhbGlhcz0iQSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjIxNyIgbmFtZT0iQVVESVQtQyBBc3Nlc3NtZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjIzOSIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjI4IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjE5IiBuYW1lPSJQYXRpZW50IGlzIE1hbGUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyNyIgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjI1IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyMjQiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjIyMyIgc3RyaWN0PSJmYWxzZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjIxIiBwYXRoPSJ2YWx1ZSIgc2NvcGU9IkEiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjIyMiIgbmFtZT0iZmhpcjpRdWFudGl0eSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlRvRGVjaW1hbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyNiIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzgiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMjkiIG5hbWU9IlBhdGllbnQgaXMgRmVtYWxlIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzciIHhzaTp0eXBlPSJHcmVhdGVyT3JFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzNSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjM0IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyMzMiIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzMSIgcGF0aD0idmFsdWUiIHNjb3BlPSJBIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSIyMzIiIG5hbWU9ImZoaXI6UXVhbnRpdHkiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJUb0RlY2ltYWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMzYiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMyIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1NCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyNDMiIGFsaWFzPSJBIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjQyIiBuYW1lPSJGaXZlIG9yIG1vcmUgZHJpbmtzIHBlciBkYXkgQXNzZXNzbWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIyNTMiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDQiIG5hbWU9IlBhdGllbnQgaXMgTWFsZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjUyIiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTAiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI0OSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjQ4IiBzdHJpY3Q9ImZhbHNlIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDYiIHBhdGg9InZhbHVlIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjQ3IiBuYW1lPSJmaGlyOlF1YW50aXR5IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjUxIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjEiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjcwIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI1NyIgYWxpYXM9IkEiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyNTYiIG5hbWU9IkZvdXIgb3IgbW9yZSBkcmlua3MgcGVyIGRheSBBc3Nlc3NtZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjI2OSIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI2MCIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjU4IiBuYW1lPSJQYXRpZW50IGlzIEZlbWFsZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjU5IiBuYW1lPSJQYXRpZW50IGlzIDY1IG9yIE92ZXIiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjY4IiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjYiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI2NSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjY0IiBzdHJpY3Q9ImZhbHNlIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjIiIHBhdGg9InZhbHVlIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjYzIiBuYW1lPSJmaGlyOlF1YW50aXR5IiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iVG9EZWNpbWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjY3IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjEiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjc1IiBuYW1lPSJEZW5vbWluYXRvciAyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjc1Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7RGVub21pbmF0b3IgMiZxdW90OzoKCS8vICZxdW90O0luaXRpYWwgUG9wdWxhdGlvbiZxdW90OwoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMjc0Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHMgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjczIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtQb3NpdGl2ZSBBc3Nlc3NtZW50IGZvciBVbmhlYWx0aHkgQWxjb2hvbCBVc2UmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyNzQiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNzMiIG5hbWU9IlBvc2l0aXZlIEFzc2Vzc21lbnQgZm9yIFVuaGVhbHRoeSBBbGNvaG9sIFVzZSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIyODUiIG5hbWU9IkluaXRpYWwgUG9zaXRpdmUgQXNzZXNzbWVudCBmb3IgVW5oZWFsdGh5IEFsY29ob2wgVXNlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjg1Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SW5pdGlhbCBQb3NpdGl2ZSBBc3Nlc3NtZW50IGZvciBVbmhlYWx0aHkgQWxjb2hvbCBVc2UmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyODQiPgogICAgICAgICAgICAgICAgICA8YTpzPnsKCSAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODMiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkZpcnN0KAoJICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtQb3NpdGl2ZSBBc3Nlc3NtZW50IGZvciBVbmhlYWx0aHkgQWxjb2hvbCBVc2UmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBBPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c29ydCBieSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICB9PC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyODQiIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMjgzIiB4c2k6dHlwZT0iRmlyc3QiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI4MiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyNzciIGFsaWFzPSJBIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjc2IiBuYW1lPSJQb3NpdGl2ZSBBc3Nlc3NtZW50IGZvciBVbmhlYWx0aHkgQWxjb2hvbCBVc2UiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8c29ydCBsb2NhbElkPSIyODEiPgogICAgICAgICAgICAgICAgICAgICA8YnkgbG9jYWxJZD0iMjgwIiBkaXJlY3Rpb249ImFzYyIgeHNpOnR5cGU9IkJ5RXhwcmVzc2lvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI3OSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjc4IiBuYW1lPSJlZmZlY3RpdmUiIHhzaTp0eXBlPSJJZGVudGlmaWVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgPC9ieT4KICAgICAgICAgICAgICAgICAgPC9zb3J0PgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMyOSIgbmFtZT0iRm9sbG93dXAgQWZ0ZXIgUG9zaXRpdmUgU2NyZWVuIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMzI5Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7Rm9sbG93dXAgQWZ0ZXIgUG9zaXRpdmUgU2NyZWVuJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMzI4Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTYiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtBbGNvaG9sIENvdW5zZWxpbmcgYW5kIFRyZWF0bWVudCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgdW5pb24gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCiAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bT2JzZXJ2YXRpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0FsY29ob2wgQ291bnNlbGluZyBhbmQgVHJlYXRtZW50JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBPYnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+T2JzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnsgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmluYWwnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYW1lbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb3JyZWN0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB9PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICB1bmlvbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0FsY29ob2wgU2NyZWVuaW5nJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzExIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgogICAgdW5pb24gPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI3Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCiAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bT2JzZXJ2YXRpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0FsY29ob2wgU2NyZWVuaW5nJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBPYnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+T2JzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnsgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nZmluYWwnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYW1lbmRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb3JyZWN0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB9PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjMyOCIgeHNpOnR5cGU9IlVuaW9uIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzE2IiB4c2k6dHlwZT0iVW5pb24iPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMDciIHhzaTp0eXBlPSJVbmlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5NSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyODkiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjg4IiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkFsY29ob2wgQ291bnNlbGluZyBhbmQgVHJlYXRtZW50IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjI5NCIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjkyIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyOTEiIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5MyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSB4c2k6dHlwZT0iQ2hvaWNlVHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlIG5hbWU9ImZoaXI6UHJvY2VkdXJlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlIG5hbWU9ImZoaXI6T2JzZXJ2YXRpb24iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50VHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hc1R5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzA2IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI5NyIgYWxpYXM9Ik9icyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI5NiIgZGF0YVR5cGU9ImZoaXI6T2JzZXJ2YXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkFsY29ob2wgQ291bnNlbGluZyBhbmQgVHJlYXRtZW50IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjMwNSIgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzAwIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyOTkiIHBhdGg9InN0YXR1cyIgc2NvcGU9Ik9icyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzA0IiB4c2k6dHlwZT0iTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjMwMSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZpbmFsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIzMDIiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhbWVuZGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSIzMDMiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb3JyZWN0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSB4c2k6dHlwZT0iQ2hvaWNlVHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlIG5hbWU9ImZoaXI6UHJvY2VkdXJlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlIG5hbWU9ImZoaXI6T2JzZXJ2YXRpb24iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50VHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hc1R5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIHhzaTp0eXBlPSJMaXN0VHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50VHlwZSB4c2k6dHlwZT0iQ2hvaWNlVHlwZVNwZWNpZmllciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlIG5hbWU9ImZoaXI6UHJvY2VkdXJlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlIG5hbWU9ImZoaXI6T2JzZXJ2YXRpb24iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50VHlwZT4KICAgICAgICAgICAgICAgICAgICAgPC9hc1R5cGVTcGVjaWZpZXI+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzE1IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMwOSIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMDgiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQWxjb2hvbCBTY3JlZW5pbmciIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMzE0IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMTIiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMxMSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzEzIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIHhzaTp0eXBlPSJDaG9pY2VUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGUgbmFtZT0iZmhpcjpQcm9jZWR1cmUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGUgbmFtZT0iZmhpcjpPYnNlcnZhdGlvbiIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2VsZW1lbnRUeXBlPgogICAgICAgICAgICAgICAgICAgICA8L2FzVHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIHhzaTp0eXBlPSJDaG9pY2VUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgICAgPHR5cGUgbmFtZT0iZmhpcjpQcm9jZWR1cmUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgPHR5cGUgbmFtZT0iZmhpcjpPYnNlcnZhdGlvbiIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnRUeXBlPgogICAgICAgICAgICAgICA8L2FzVHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjciIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzE4IiBhbGlhcz0iT2JzIj4KICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzE3IiBkYXRhVHlwZT0iZmhpcjpPYnNlcnZhdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQWxjb2hvbCBTY3JlZW5pbmciIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMzI2IiB4c2k6dHlwZT0iSW4iPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjEiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMyMCIgcGF0aD0ic3RhdHVzIiBzY29wZT0iT2JzIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMjUiIHhzaTp0eXBlPSJMaXN0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iMzIyIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iZmluYWwiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjMyMyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFtZW5kZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjMyNCIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvcnJlY3RlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgeHNpOnR5cGU9Ikxpc3RUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgPGVsZW1lbnRUeXBlIHhzaTp0eXBlPSJDaG9pY2VUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgICAgICAgICAgPHR5cGUgbmFtZT0iZmhpcjpQcm9jZWR1cmUiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgPHR5cGUgbmFtZT0iZmhpcjpPYnNlcnZhdGlvbiIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICA8L2VsZW1lbnRUeXBlPgogICAgICAgICAgICAgICA8L2FzVHlwZVNwZWNpZmllcj4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjM1NiIgbmFtZT0iTnVtZXJhdG9yIDIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzNTYiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtOdW1lcmF0b3IgMiZxdW90OzoKCS8vICZxdW90O0luaXRpYWwgUG9wdWxhdGlvbiZxdW90OwogICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMzU1Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHMgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU0Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCiAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SW5pdGlhbCBQb3NpdGl2ZSBBc3Nlc3NtZW50IGZvciBVbmhlYWx0aHkgQWxjb2hvbCBVc2UmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBBPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtGb2xsb3d1cCBBZnRlciBQb3NpdGl2ZSBTY3JlZW4mcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBGPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgc3VjaCB0aGF0CiAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlmIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9ic2VydmF0aW9uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkY8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZWZmZWN0aXZlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4yIG1vbnRoczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gb3IgbGVzcyBvbiBvciBhZnRlciBkYXkgb2Y8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZWZmZWN0aXZlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgZWxzZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O2VuZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MiBtb250aHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IG9yIGxlc3Mgb24gb3IgYWZ0ZXIgZGF5IG9mPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5BPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVmZmVjdGl2ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNTUiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNTQiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjg3IiBhbGlhcz0iQSI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI4NiIgbmFtZT0iSW5pdGlhbCBQb3NpdGl2ZSBBc3Nlc3NtZW50IGZvciBVbmhlYWx0aHkgQWxjb2hvbCBVc2UiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8cmVsYXRpb25zaGlwIGxvY2FsSWQ9IjM1MyIgYWxpYXM9IkYiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzMwIiBuYW1lPSJGb2xsb3d1cCBBZnRlciBQb3NpdGl2ZSBTY3JlZW4iIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSIzNTIiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMzNCIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzMyIiBuYW1lPSJGIiB4c2k6dHlwZT0iQWxpYXNSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlzVHlwZVNwZWNpZmllciBsb2NhbElkPSIzMzMiIG5hbWU9ImZoaXI6T2JzZXJ2YXRpb24iIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iMzQyIiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzM3IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMzYiIHBhdGg9ImVmZmVjdGl2ZSIgc2NvcGU9IkYiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxvdyBsb2NhbElkPSIzNDAiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMzOSIgcGF0aD0iZWZmZWN0aXZlIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICAgICAgICAgICAgICAgICA8aGlnaCB4c2k6dHlwZT0iQWRkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzQwIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMzkiIHBhdGg9ImVmZmVjdGl2ZSIgc2NvcGU9IkEiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM0MSIgdmFsdWU9IjIiIHVuaXQ9Im1vbnRocyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgICAgIDxlbHNlIGxvY2FsSWQ9IjM1MSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM0NiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzQ1IiBwYXRoPSJlbmQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzQ0IiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJGIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJ0cnVlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjM0OSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzQ4IiBwYXRoPSJlZmZlY3RpdmUiIHNjb3BlPSJBIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sb3c+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoaWdoIHhzaTp0eXBlPSJBZGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNDkiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM0OCIgcGF0aD0iZWZmZWN0aXZlIiBzY29wZT0iQSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzUwIiB2YWx1ZT0iMiIgdW5pdD0ibW9udGhzIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvZWxzZT4KICAgICAgICAgICAgICAgICAgPC9zdWNoVGhhdD4KICAgICAgICAgICAgICAgPC9yZWxhdGlvbnNoaXA+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIzNjQiIG5hbWU9IlN0cmF0aWZpZXIgMSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjM2NCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O1N0cmF0aWZpZXIgMSZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjM2MyI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU5Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5BZ2VJblllYXJzQXQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz5pbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkludGVydmFsWzE4LCA0NF08L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNjMiIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1OSIgcHJlY2lzaW9uPSJZZWFyIiB4c2k6dHlwZT0iQ2FsY3VsYXRlQWdlQXQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBwYXRoPSJiaXJ0aERhdGUudmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNTgiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1NyIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNjIiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgICAgPGxvdyBsb2NhbElkPSIzNjAiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMTgiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgIDxoaWdoIGxvY2FsSWQ9IjM2MSIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI0NCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjM3MiIgbmFtZT0iU3RyYXRpZmllciAyIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMzcyIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7U3RyYXRpZmllciAyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMzcxIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjciPgogICAgICAgICAgICAgICAgICAgICA8YTpzPkFnZUluWWVhcnNBdCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjYiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPmluIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3MCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbNDUsIDY0XTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjM3MSIgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzY3IiBwcmVjaXNpb249IlllYXIiIHhzaTp0eXBlPSJDYWxjdWxhdGVBZ2VBdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImJpcnRoRGF0ZS52YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJQYXRpZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM2NiIgeHNpOnR5cGU9IlN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzY1IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3MCIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJ0cnVlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjM2OCIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI0NSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgPGhpZ2ggbG9jYWxJZD0iMzY5IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjY0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMzc4IiBuYW1lPSJTdHJhdGlmaWVyIDMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzNzgiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtTdHJhdGlmaWVyIDMmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzNzciPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3NSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+QWdlSW5ZZWFyc0F0KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+Pj0gNjU8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjM3NyIgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzc1IiBwcmVjaXNpb249IlllYXIiIHhzaTp0eXBlPSJDYWxjdWxhdGVBZ2VBdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIHBhdGg9ImJpcnRoRGF0ZS52YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBuYW1lPSJQYXRpZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3NCIgeHNpOnR5cGU9IlN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzczIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3NiIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI2NSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIzODciIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzODciPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSBmdW5jdGlvbiBQZXJpb2RUb0ludGVydmFsT2ZEVCh2YWx1ZSA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzNzkiPgogICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUGVyaW9kPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPik6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzODYiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4NiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7c3RhcnQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O2VuZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzODYiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSIzODIiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM4MSIgcGF0aD0ic3RhcnQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzgwIiBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIzODUiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM4NCIgcGF0aD0iZW5kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM4MyIgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L2hpZ2g+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0idmFsdWUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMzc5IiBuYW1lPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICA8L3N0YXRlbWVudHM+CjwvbGlicmFyeT4K"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Library/library-asf-logic"
+      }
+    }
+  ]
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/plandefinition-apply.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/plandefinition-apply.json
index 77e0f7253d8..d41b3fd83ce 100644
--- a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/plandefinition-apply.json
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/plandefinition-apply.json
@@ -1,10 +1,6 @@
 {
   "resourceType": "PlanDefinition",
   "id": "apply-example",
-  "text": {
-    "status": "generated",
-    "div": "<div xmlns=\"http://www.w3.org/1999/xhtml\">General PlanDefinition $apply example resource</div>"
-  },
   "identifier": [
     {
       "use": "official",
@@ -56,4 +52,4 @@
       ]
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-network-bundle.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-network-bundle.json
new file mode 100644
index 00000000000..3a3a0049810
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-network-bundle.json
@@ -0,0 +1,2526 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1002",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1002"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001002"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Acute Care Hospital"
+          }
+        ],
+        "name": "Gift of Mercy Hospital",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "657-555-9543",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "565 S Rhine Street"
+            ],
+            "city": "Warren",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48093"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1002"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1002",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1002"
+          }
+        ],
+        "status": "active",
+        "name": "Gift of Mercy Hospital",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(269) 555-2117",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "565 S Rhine Street"
+          ],
+          "city": "Warren",
+          "district": "Macomb County",
+          "state": "MI",
+          "postalCode": "48093"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -86.04832751844613,
+          "latitude": 42.21198036944899
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1002",
+          "display": "Gift of Mercy Hospital"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1002"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1001",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1001"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001001"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Acute Care Hospital"
+          }
+        ],
+        "name": "Windward General Hospital",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "781-555-1962",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "749 Hudson Avenue"
+            ],
+            "city": "Ann Arbor",
+            "district": "Washtenaw County",
+            "state": "MI",
+            "postalCode": "48103"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1001"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1001",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1001"
+          }
+        ],
+        "status": "active",
+        "name": "Windward General Hospital",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(586) 555-8588",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "749 Hudson Avenue"
+          ],
+          "city": "Ann Arbor",
+          "district": "Washtenaw County",
+          "state": "MI",
+          "postalCode": "48103"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -82.99668786918522,
+          "latitude": 42.62799327336516
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1001",
+          "display": "Windward General Hospital"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1001"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1103",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1103"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001103"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Practice"
+          }
+        ],
+        "name": "Acme Medical Center",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-6055",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "167 N Oak Drive"
+            ],
+            "city": "Warren",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48093"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1103"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1103",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1103"
+          }
+        ],
+        "status": "active",
+        "name": "Acme Medical Center",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(586) 555-8152",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "167 N Oak Drive"
+          ],
+          "city": "Warren",
+          "district": "Macomb County",
+          "state": "MI",
+          "postalCode": "48093"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -82.78691558412172,
+          "latitude": 42.584066645760025
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1103",
+          "display": "Acme Medical Center"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1103"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1104",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1104"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001104"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Practice"
+          }
+        ],
+        "name": "Bay Area Family Practice",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-5671",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "761 NE Ninth Circle"
+            ],
+            "city": "Ann Arbor",
+            "district": "Washtenaw County",
+            "state": "MI",
+            "postalCode": "48103"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1104"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1104",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1104"
+          }
+        ],
+        "status": "active",
+        "name": "Bay Area Family Practice",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(734) 555-2740",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "761 NE Ninth Circle"
+          ],
+          "city": "Ann Arbor",
+          "district": "Washtenaw County",
+          "state": "MI",
+          "postalCode": "48103"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -83.24852592902265,
+          "latitude": 42.22498322238487
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1104",
+          "display": "Bay Area Family Practice"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1104"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1105",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1105"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001105"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Practice"
+          }
+        ],
+        "name": "Bayside Medical Group",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-1514",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "616 Peach Street"
+            ],
+            "city": "Flint",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1105"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1105",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1105"
+          }
+        ],
+        "status": "active",
+        "name": "Bayside Medical Group",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(616) 555-2806",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "616 Peach Street"
+          ],
+          "city": "Flint",
+          "district": "Genesee County",
+          "state": "MI",
+          "postalCode": "48503"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -85.63506928883693,
+          "latitude": 42.98123440264812
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1105",
+          "display": "Bayside Medical Group"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1105"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1106",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1106"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001106"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Practice"
+          }
+        ],
+        "name": "Cranston Family Medical",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-3517",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "910 SE Columbia Avenue"
+            ],
+            "city": "Dearborn",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48126"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1106"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1106",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1106"
+          }
+        ],
+        "status": "active",
+        "name": "Cranston Family Medical",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(616) 555-1930",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "910 SE Columbia Avenue"
+          ],
+          "city": "Dearborn",
+          "district": "Wayne County",
+          "state": "MI",
+          "postalCode": "48126"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -85.6343800035714,
+          "latitude": 42.97765947569625
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1106",
+          "display": "Cranston Family Medical"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1106"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1101",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1101"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001101"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Practice"
+          }
+        ],
+        "name": "McKinley Health Center",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-6712",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "428 E Eighth Drive"
+            ],
+            "city": "Southfield",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48037"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1101"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1101",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1101"
+          }
+        ],
+        "status": "active",
+        "name": "McKinley Health Center",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(734) 555-3131",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "428 E Eighth Drive"
+          ],
+          "city": "Southfield",
+          "district": "Oakland County",
+          "state": "MI",
+          "postalCode": "48037"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -83.72731866148872,
+          "latitude": 42.2814465218414
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1101",
+          "display": "McKinley Health Center"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1101"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Organization",
+        "id": "Organization-1102",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1102"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "TAX",
+                  "display": "Tax ID number"
+                }
+              ],
+              "text": "US Employer Identification Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-tax",
+            "value": "000001102"
+          }
+        ],
+        "active": true,
+        "type": [
+          {
+            "text": "General Practice"
+          }
+        ],
+        "name": "Pediatric and Adult Medicine",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-0939",
+            "use": "work"
+          }
+        ],
+        "address": [
+          {
+            "line": [
+              "663 Deleware Circle"
+            ],
+            "city": "Warren",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48093"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Organization/Organization-1102"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Location",
+        "id": "Location-1102",
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://www.hl7.org/oid/",
+            "value": "1.2.3.4.1102"
+          }
+        ],
+        "status": "active",
+        "name": "Pediatric and Adult Medicine",
+        "mode": "instance",
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "(810) 555-1217",
+            "use": "work"
+          }
+        ],
+        "address": {
+          "use": "work",
+          "type": "physical",
+          "line": [
+            "663 Deleware Circle"
+          ],
+          "city": "Warren",
+          "district": "Macomb County",
+          "state": "MI",
+          "postalCode": "48093"
+        },
+        "physicalType": {
+          "coding": [
+            {
+              "system": "http://hl7.org/fhir/location-physical-type",
+              "code": "bu",
+              "display": "Building"
+            }
+          ]
+        },
+        "position": {
+          "longitude": -82.48692837350966,
+          "latitude": 42.71162414519594
+        },
+        "managingOrganization": {
+          "reference": "Organization/Organization-1102",
+          "display": "Pediatric and Adult Medicine"
+        }
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Location/Location-1102"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2516",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002516"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992516"
+          }
+        ],
+        "name": [
+          {
+            "family": "Larson",
+            "given": [
+              "Agnes",
+              "Tammy"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-8298",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-2068",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "578 Cherry Court"
+            ],
+            "city": "Flint",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48503"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1964-11-11"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2516"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2517",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002517"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992517"
+          }
+        ],
+        "name": [
+          {
+            "family": "Warner",
+            "given": [
+              "Cathy",
+              "Shannon"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-9543",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-3505",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "362 NW Cherry Street",
+              "#82"
+            ],
+            "city": "Fort Gratiot",
+            "district": "St Clair County",
+            "state": "MI",
+            "postalCode": "48059"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1973-09-18"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2517"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2532",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002532"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992532"
+          }
+        ],
+        "name": [
+          {
+            "family": "Potter",
+            "given": [
+              "Chad",
+              "Espinoza"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-6227",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-0749",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "422 E Fifth Court"
+            ],
+            "city": "Kincheloe",
+            "district": "Chippewa County",
+            "state": "MI",
+            "postalCode": "49788"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1973-02-08"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2532"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2535",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002535"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992535"
+          }
+        ],
+        "name": [
+          {
+            "family": "Carey",
+            "given": [
+              "Clifton",
+              "Terrence"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-5993",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-6902",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "937 Pecan Avenue"
+            ],
+            "city": "Sterling Heights",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48310"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1952-09-15"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2535"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2523",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002523"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992523"
+          }
+        ],
+        "name": [
+          {
+            "family": "Davis",
+            "given": [
+              "Dean",
+              "Andrew"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "906-555-1042",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "906-555-1374",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "288 E Jefferson Road"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49548"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1991-02-02"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2523"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2521",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002521"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992521"
+          }
+        ],
+        "name": [
+          {
+            "family": "Guerra",
+            "given": [
+              "Heather",
+              "Fuentes"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "231-555-8261",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "231-555-6965",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "906 SW Elm Street"
+            ],
+            "city": "Elmira",
+            "district": "Antrim County",
+            "state": "MI",
+            "postalCode": "49730"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1975-12-08"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2521"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2526",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002526"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992526"
+          }
+        ],
+        "name": [
+          {
+            "family": "Wilkins",
+            "given": [
+              "James",
+              "Woodward"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-6322",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-7293",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "322 W Atlantic Drive"
+            ],
+            "city": "Zeeland",
+            "district": "Ottawa County",
+            "state": "MI",
+            "postalCode": "49464"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1988-11-18"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2526"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2518",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002518"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992518"
+          }
+        ],
+        "name": [
+          {
+            "family": "Saunders",
+            "given": [
+              "Jane",
+              "Rosemary"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "989-555-3727",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "989-555-8588",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "17 E Orange Avenue"
+            ],
+            "city": "Southfield",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48034"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1975-01-27"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2518"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2520",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002520"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992520"
+          }
+        ],
+        "name": [
+          {
+            "family": "Ashley",
+            "given": [
+              "Kimberly",
+              "Christy"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-4614",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-5392",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "32 E Mississippi Street"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48224"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1966-12-27"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2520"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2525",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002525"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992525"
+          }
+        ],
+        "name": [
+          {
+            "family": "Ballard",
+            "given": [
+              "Kyle",
+              "Christian"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-9326",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-8412",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "832 W Rhine Street"
+            ],
+            "city": "South Lyon",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48178"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1987-10-30"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2525"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2527",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002527"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992527"
+          }
+        ],
+        "name": [
+          {
+            "family": "Mejia",
+            "given": [
+              "Lee",
+              "Chris"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-4387",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-5712",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "170 W Potomac Place"
+            ],
+            "city": "West Bloomfield",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48323"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1969-07-21"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2527"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2533",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002533"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992533"
+          }
+        ],
+        "name": [
+          {
+            "family": "Ballard",
+            "given": [
+              "Lena",
+              "Dickerson"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-5228",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-0118",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "474 Fourth Drive",
+              "#56"
+            ],
+            "city": "Taylor",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48180"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1985-06-13"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2533"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2522",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002522"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992522"
+          }
+        ],
+        "name": [
+          {
+            "family": "Kent",
+            "given": [
+              "Lois",
+              "Jean"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-6074",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-7382",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "343 SE Fourth Place"
+            ],
+            "city": "Lincoln Park",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48146"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1948-06-06"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2522"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2534",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002534"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992534"
+          }
+        ],
+        "name": [
+          {
+            "family": "Dawson",
+            "given": [
+              "Pearl",
+              "Rita"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "989-555-5547",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "989-555-0435",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "60 French Court"
+            ],
+            "city": "Benton Harbor",
+            "district": "Berrien County",
+            "state": "MI",
+            "postalCode": "49022"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1986-12-30"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2534"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2529",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002529"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992529"
+          }
+        ],
+        "name": [
+          {
+            "family": "Nielsen",
+            "given": [
+              "Stanley",
+              "Floyd"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-7479",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-8541",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "37 N Orange Street"
+            ],
+            "city": "Gladstone",
+            "district": "Delta County",
+            "state": "MI",
+            "postalCode": "49837"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1971-06-05"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2529"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2519",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002519"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992519"
+          }
+        ],
+        "name": [
+          {
+            "family": "Garrett",
+            "given": [
+              "Stanley",
+              "Jason"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-2401",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-7849",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "352 NW Cedar Drive",
+              "#29"
+            ],
+            "city": "Northport",
+            "district": "Leelanau County",
+            "state": "MI",
+            "postalCode": "49670"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1965-09-14"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2519"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2528",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002528"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992528"
+          }
+        ],
+        "name": [
+          {
+            "family": "Wheeler",
+            "given": [
+              "Tanya",
+              "Sally"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "989-555-9103",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "989-555-3650",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "405 French Street",
+              "#77"
+            ],
+            "city": "Flat Rock",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48134"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1982-03-19"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2528"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2530",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002530"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992530"
+          }
+        ],
+        "name": [
+          {
+            "family": "McCormick",
+            "given": [
+              "Terrence",
+              "Ramirez"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "989-555-8093",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "989-555-6332",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "879 S First Circle"
+            ],
+            "city": "Commerce Township",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48382"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1976-11-15"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2530"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2531",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002531"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992531"
+          }
+        ],
+        "name": [
+          {
+            "family": "Boone",
+            "given": [
+              "Tracy",
+              "Hampton"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-6841",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-1078",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "597 Deleware Road"
+            ],
+            "city": "Highland",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48357"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1991-11-24"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2531"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Practitioner",
+        "id": "Practitioner-2524",
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002524"
+          },
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v2/0203",
+                  "code": "PRN",
+                  "display": "Provider number"
+                }
+              ],
+              "text": "US National Provider Identifier"
+            },
+            "system": "http://hl7.org/fhir/sid/us-npi",
+            "value": "999992524"
+          }
+        ],
+        "name": [
+          {
+            "family": "Riddle",
+            "given": [
+              "Willie",
+              "Vincent"
+            ],
+            "suffix": [
+              "MD"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-4816",
+            "use": "work"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-2495",
+            "use": "mobile"
+          }
+        ],
+        "address": [
+          {
+            "use": "work",
+            "type": "postal",
+            "line": [
+              "795 SE View Circle"
+            ],
+            "city": "Gladstone",
+            "district": "Delta County",
+            "state": "MI",
+            "postalCode": "49837"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1962-05-22"
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Practitioner/Practitioner-2524"
+      }
+    }
+  ]
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-patients-bundle.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-patients-bundle.json
new file mode 100644
index 00000000000..44575b248dc
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-patients-bundle.json
@@ -0,0 +1,10264 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1137",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2131-1",
+                  "display": "Other Race"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1009",
+                  "display": "Baptist"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002491"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Jones",
+            "given": [
+              "Aiden",
+              "Michael"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-1212",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-2434",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2016-01-07",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "590 S Concord Street"
+            ],
+            "city": "Flint",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1137"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6529",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006529"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Shea",
+            "given": [
+              "Alan",
+              "Everett"
+            ],
+            "suffix": [
+              "III"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-0522",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-1474",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1962-06-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "627 S Elm Place"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48238"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6529"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1132",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002449"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Gonzales",
+            "given": [
+              "Alex",
+              "Ramirez"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-6265",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-8807",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1935-03-19",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "299 E Atlantic Avenue"
+            ],
+            "city": "Saint Clair Shores",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48082"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1132"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6481",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006481"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Cooley",
+            "given": [
+              "Alfredo",
+              "Curtis"
+            ],
+            "suffix": [
+              "III"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-1269",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-4894",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1982-08-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "823 NE Nile Street"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48238"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6481"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1153",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002497"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Vargas",
+            "given": [
+              "Alice"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-5699",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-6247",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1963-05-09",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "4520 Lincoln Drive"
+            ],
+            "city": "Brighton",
+            "district": "Livingston County",
+            "state": "MI",
+            "postalCode": "48114"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1153"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6546",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006546"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Woodard",
+            "given": [
+              "Andrea",
+              "Andrade"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-0522",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-5635",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1999-09-14",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "366 E Almond Road"
+            ],
+            "city": "Ann Arbor",
+            "district": "Washtenaw County",
+            "state": "MI",
+            "postalCode": "48108"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6546"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1136",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1004",
+                  "display": "Agnosticism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002481"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Jones",
+            "given": [
+              "Angelica",
+              "Desiree"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-5864",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-9891",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1992-05-21",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "210 NE Hosler Street"
+            ],
+            "city": "Flint",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1136"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6519",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1027",
+                  "display": "Latter Day Saints"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006519"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Hayden",
+            "given": [
+              "Antonio",
+              "Casey"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-3665",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-7176",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2001-10-07",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "767 N Peach Road",
+              "#75"
+            ],
+            "city": "Clio",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48420"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6519"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6516",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1025",
+                  "display": "Jehovah's Witnesses"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006516"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Nielsen",
+            "given": [
+              "April",
+              "Rhodes"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-7563",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-9843",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1937-05-17",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "592 S Almond Drive"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48228"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6516"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6535",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006535"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Howe",
+            "given": [
+              "Barbara",
+              "April"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-2144",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-6448",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1955-10-19",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "531 SW Jefferson Avenue"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48211"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6535"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6503",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006503"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Craig",
+            "given": [
+              "Becky",
+              "Trevino"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-9654",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-3126",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1945-11-26",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "453 E Lake Street"
+            ],
+            "city": "Battle Creek",
+            "district": "Calhoun County",
+            "state": "MI",
+            "postalCode": "49014"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6503"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1124",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2028-9",
+                  "display": "Asian"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1059",
+                  "display": "Zen Buddhism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002370"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Chen",
+            "given": [
+              "Billy",
+              "Robert"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-7772",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-2187",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2011-10-24",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "899 S Lake Street"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1124"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6518",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006518"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Stone",
+            "given": [
+              "Brad",
+              "Ray"
+            ],
+            "suffix": [
+              "Jr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-1925",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-1819",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1970-01-15",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "330 N Park Drive"
+            ],
+            "city": "Battle Creek",
+            "district": "Calhoun County",
+            "state": "MI",
+            "postalCode": "49037"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6518"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1126",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002393"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Paulson",
+            "given": [
+              "Cady",
+              "Grace"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-5105",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-4955",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2011-12-13",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "640 E Hudson Circle"
+            ],
+            "city": "Saint Clair Shores",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48082"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1126"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6512",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006512"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Gallegos",
+            "given": [
+              "Carolyn",
+              "Gillespie"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-6182",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-8035",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1964-01-14",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "158 SE Potomac Avenue"
+            ],
+            "city": "Sterling Heights",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48313"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6512"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6490",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006490"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Vega",
+            "given": [
+              "Carolyn",
+              "Hickman"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-2285",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-8802",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1931-02-01",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "941 SW Nile Avenue"
+            ],
+            "city": "Auburn Hills",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48326"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6490"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6487",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006487"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Vasquez",
+            "given": [
+              "Cassandra",
+              "Graham"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-0055",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-4350",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1963-01-07",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "988 Cedar Drive"
+            ],
+            "city": "Keego Harbor",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48320"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6487"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6485",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1009",
+                  "display": "Baptist"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006485"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Herman",
+            "given": [
+              "Catherine",
+              "Reyes"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-0872",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-6631",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2000-11-11",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "891 E Plum Street"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49507"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6485"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6550",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006550"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Andersen",
+            "given": [
+              "Claude",
+              "Roberto"
+            ],
+            "suffix": [
+              "Jr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "947-555-2950",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "000-555-4496",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1960-01-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "185 Missouri Place"
+            ],
+            "city": "Southfield",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48075"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6550"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6551",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006551"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Riggs",
+            "given": [
+              "Darrell",
+              "Shaffer"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-0509",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-0148",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1925-05-20",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "108 NW Cedar Street"
+            ],
+            "city": "Jasper",
+            "district": "Lenawee County",
+            "state": "MI",
+            "postalCode": "49248"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6551"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6538",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006538"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Miles",
+            "given": [
+              "Denise",
+              "Kristin"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-3579",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-3574",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1946-09-18",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "516 N Park Avenue",
+              "#56"
+            ],
+            "city": "Adrian",
+            "district": "Lenawee County",
+            "state": "MI",
+            "postalCode": "49221"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6538"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1135",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002469"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Gonzales",
+            "given": [
+              "Domingo",
+              "Madera"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-2890",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-6660",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1982-11-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "299 E Atlantic Avenue"
+            ],
+            "city": "Saint Clair Shores",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48082"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1135"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1138",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1009",
+                  "display": "Baptist"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002473"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Jones",
+            "given": [
+              "Donna",
+              "Lynn"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-1212",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-2434",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1960-03-29",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "590 S Concord Street"
+            ],
+            "city": "Flint",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1138"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6543",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006543"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Neal",
+            "given": [
+              "Dora",
+              "Marian"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "989-555-8142",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "989-555-2761",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1993-05-02",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "95 S Eighth Avenue",
+              "#81"
+            ],
+            "city": "Lupton",
+            "district": "Ogemaw County",
+            "state": "MI",
+            "postalCode": "48635"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6543"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6526",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006526"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Francis",
+            "given": [
+              "Doris",
+              "Bertha"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-0828",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-9269",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1946-03-19",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "344 SE Colorado Court"
+            ],
+            "city": "Burton",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48529"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6526"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6501",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006501"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "McCarty",
+            "given": [
+              "Dwight",
+              "Mitchell"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-5494",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-7887",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1953-06-16",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "358 E First Street"
+            ],
+            "city": "Sterling Heights",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48314"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6501"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6527",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2028-9",
+                  "display": "Asian"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006527"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Newman",
+            "given": [
+              "Earl",
+              "Herbert"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-4821",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-3156",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1997-12-01",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "991 S Missouri Street",
+              "#24"
+            ],
+            "city": "Lansing",
+            "district": "Ingham County",
+            "state": "MI",
+            "postalCode": "48906"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6527"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6532",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006532"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Brandt",
+            "given": [
+              "Edith",
+              "Elaine"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-1082",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-1211",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1987-07-16",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "893 N Elm Drive"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49504"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6532"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6508",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006508"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Tucker",
+            "given": [
+              "Eduardo",
+              "Joel"
+            ],
+            "suffix": [
+              "Jr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-3291",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-9488",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2007-06-15",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "594 W French Place"
+            ],
+            "city": "Novi",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48375"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6508"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1127",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002399"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Paulson",
+            "given": [
+              "Elise",
+              "Louise"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-8579",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-7158",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2009-01-03",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "640 E Hudson Circle"
+            ],
+            "city": "Saint Clair Shores",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48082"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1127"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6558",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006558"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Sanford",
+            "given": [
+              "Ellen",
+              "Sandoval"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-1126",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-7456",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1950-12-06",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "596 Elm Road",
+              "#4"
+            ],
+            "city": "Battle Creek",
+            "district": "Calhoun County",
+            "state": "MI",
+            "postalCode": "49015"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6558"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6488",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006488"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Lam",
+            "given": [
+              "Erica",
+              "Ortega"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-4084",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-3332",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1936-09-27",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "81 SW Lincoln Street",
+              "#62"
+            ],
+            "city": "Ann Arbor",
+            "district": "Washtenaw County",
+            "state": "MI",
+            "postalCode": "48103"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6488"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6486",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006486"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Moore",
+            "given": [
+              "Erika",
+              "Amy"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-9715",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-0899",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1951-10-23",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "822 S Colorado Street",
+              "#97"
+            ],
+            "city": "Livonia",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48152"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6486"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6525",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2028-9",
+                  "display": "Asian"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006525"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Walsh",
+            "given": [
+              "Fred",
+              "Michael"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "231-555-3207",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "231-555-9797",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2017-06-26",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "321 NE Lake Street"
+            ],
+            "city": "Reed City",
+            "district": "Osceola County",
+            "state": "MI",
+            "postalCode": "49677"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6525"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6553",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006553"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Good",
+            "given": [
+              "Gabriel",
+              "Bill"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-9129",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-8657",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1952-07-29",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "58 SW Atlantic Street"
+            ],
+            "city": "Plymouth",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48170"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6553"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6493",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006493"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Stevenson",
+            "given": [
+              "Gabriel",
+              "Oconnell"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-5294",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "947-555-3958",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1981-09-25",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "685 S Apricot Court"
+            ],
+            "city": "Southfield",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48075"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6493"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1154",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002510"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Tullison",
+            "given": [
+              "George",
+              "Clay"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-9977",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-1093",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1955-04-11",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "430 United Avenue"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48201"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1154"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6494",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1009",
+                  "display": "Baptist"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006494"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Estrada",
+            "given": [
+              "Glen",
+              "Cochran"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-3357",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-5486",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1989-06-13",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "687 S Elm Avenue"
+            ],
+            "city": "Rockford",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49341"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6494"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6511",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006511"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Jacobson",
+            "given": [
+              "Glen",
+              "Hicks"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-3309",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-9200",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1989-10-22",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "69 French Road"
+            ],
+            "city": "Wyoming",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49519"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6511"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6540",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006540"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Medina",
+            "given": [
+              "Helen",
+              "Marjorie"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-5714",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-5598",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1977-11-27",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "938 Walnut Road",
+              "#39"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48213"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6540"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6504",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006504"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Gonzalez",
+            "given": [
+              "Herman",
+              "Galloway"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-1047",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-5916",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1970-05-30",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "901 E Almond Street"
+            ],
+            "city": "Coldwater",
+            "district": "Branch County",
+            "state": "MI",
+            "postalCode": "49036"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6504"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6484",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006484"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Johnson",
+            "given": [
+              "Irma",
+              "Carol"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "555-555-4695",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "555-555-5899",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1944-07-11",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "913 W View Drive"
+            ],
+            "city": "Allen Park",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48101"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6484"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6522",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006522"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Melendez",
+            "given": [
+              "Jamie",
+              "Cain"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-4906",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-4115",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1946-12-24",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "995 N Potomac Street"
+            ],
+            "city": "Newport",
+            "district": "Monroe County",
+            "state": "MI",
+            "postalCode": "48166"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6522"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6505",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "1002-5",
+                  "display": "American Indian or Alaska Native"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006505"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Baird",
+            "given": [
+              "Jamie",
+              "Davis"
+            ],
+            "suffix": [
+              "Jr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-6560",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-8426",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2011-08-29",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "253 S Maple Avenue"
+            ],
+            "city": "Sterling Heights",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48313"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6505"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6480",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006480"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Curry",
+            "given": [
+              "Janet",
+              "Ramona"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-7933",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-9397",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1921-08-28",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "986 S Second Avenue"
+            ],
+            "city": "Troy",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48083"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6480"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6513",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006513"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Baldwin",
+            "given": [
+              "Jared",
+              "Gentry"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-8134",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-6065",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1993-01-14",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "468 Pine Road",
+              "#30"
+            ],
+            "city": "South Haven",
+            "district": "Van Buren County",
+            "state": "MI",
+            "postalCode": "49090"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6513"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6534",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006534"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Pugh",
+            "given": [
+              "Jeanette",
+              "Ramona"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-0649",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-9485",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2005-06-19",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "73 S Plum Street"
+            ],
+            "city": "Howell",
+            "district": "Livingston County",
+            "state": "MI",
+            "postalCode": "48855"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6534"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6510",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1013",
+                  "display": "Christian (non-Catholic, non-specific) "
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006510"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Gray",
+            "given": [
+              "Jeffery",
+              "Frank"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-4407",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-2289",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1972-09-16",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "5 E Pecan Court",
+              "#39"
+            ],
+            "city": "Adrian",
+            "district": "Lenawee County",
+            "state": "MI",
+            "postalCode": "49221"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6510"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1121",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002341"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Goodwall",
+            "given": [
+              "Jerry",
+              "Phillip"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-7834",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-7845",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1936-05-29",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "751 E Apple Drive"
+            ],
+            "city": "Novi",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48376"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1121"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1128",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1023",
+                  "display": "Islam"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002430"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Campbell",
+            "given": [
+              "Jessica",
+              "Pauleen"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-1125",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-1822",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1980-10-06",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "580 SE Spanish Street"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1128"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1122",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2028-9",
+                  "display": "Asian"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1059",
+                  "display": "Zen Buddhism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002359"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Chen",
+            "given": [
+              "Joan",
+              "Frances"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-1033",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-9073",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1987-09-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "899 S Lake Street"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1122"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6547",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006547"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Moses",
+            "given": [
+              "Jordan",
+              "Webb"
+            ],
+            "suffix": [
+              "Jr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-4431",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-0377",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1949-07-06",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "309 E Colorado Avenue"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49525"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6547"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6555",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006555"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Fuller",
+            "given": [
+              "Juanita",
+              "Brittany"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-0797",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-5931",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2015-01-29",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "27 Hill Circle"
+            ],
+            "city": "Cassopolis",
+            "district": "Cass County",
+            "state": "MI",
+            "postalCode": "49031"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6555"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6541",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2131-1",
+                  "display": "Other Race"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006541"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Costa",
+            "given": [
+              "Karl",
+              "Ron"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-6889",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-8101",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1977-05-22",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "887 S French Circle",
+              "#73"
+            ],
+            "city": "Troy",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48083"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6541"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6515",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1009",
+                  "display": "Baptist"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006515"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Weeks",
+            "given": [
+              "Kathryn",
+              "House"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-4331",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-3681",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1944-10-06",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "505 N Main Street"
+            ],
+            "city": "Macomb",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48044"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6515"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6489",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006489"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Ware",
+            "given": [
+              "Kathy",
+              "Howell"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-0192",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-9212",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1968-01-09",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "488 Hill Street"
+            ],
+            "city": "Flint",
+            "district": "Genesee County",
+            "state": "MI",
+            "postalCode": "48532"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6489"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6542",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006542"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Huynh",
+            "given": [
+              "Lee",
+              "Alvin"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "989-555-7503",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "989-555-9129",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2012-06-15",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "873 S Ocean Avenue"
+            ],
+            "city": "Saginaw",
+            "district": "Saginaw County",
+            "state": "MI",
+            "postalCode": "48601"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6542"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6530",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006530"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Hicks",
+            "given": [
+              "Lillian",
+              "Marcia"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "231-555-1963",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "231-555-1321",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1983-10-17",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "494 S Hudson Place"
+            ],
+            "city": "Twin Lake",
+            "district": "Muskegon County",
+            "state": "MI",
+            "postalCode": "49457"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6530"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6537",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006537"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Villegas",
+            "given": [
+              "Lloyd",
+              "Cardenas"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-6166",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-7568",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1984-08-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "378 S Seventh Avenue"
+            ],
+            "city": "Troy",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48098"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6537"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6500",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006500"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Zuniga",
+            "given": [
+              "Lois",
+              "Peterson"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "231-555-9951",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "231-555-6234",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2013-12-13",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "501 SE Almond Avenue"
+            ],
+            "city": "Manistee",
+            "district": "Manistee County",
+            "state": "MI",
+            "postalCode": "49660"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6500"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1131",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1023",
+                  "display": "Islam"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002443"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Campbell",
+            "given": [
+              "Louise",
+              "Foster"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-0560",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-5808",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2011-01-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "580 SE Spanish Street"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1131"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6521",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006521"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Ayala",
+            "given": [
+              "Luis",
+              "Norris"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-1389",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-0164",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1966-05-28",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "928 E Apple Street"
+            ],
+            "city": "Westland",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48186"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6521"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6557",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006557"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "James",
+            "given": [
+              "Mabel",
+              "Haynes"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-4881",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-6496",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1973-06-24",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "457 N Park Street"
+            ],
+            "city": "Canton",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48187"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6557"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6545",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2131-1",
+                  "display": "Other Race"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006545"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Espinoza",
+            "given": [
+              "Margie",
+              "Beck"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-0263",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-4382",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1983-03-27",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "592 E Roosevelt Street"
+            ],
+            "city": "Hudsonville",
+            "district": "Ottawa County",
+            "state": "MI",
+            "postalCode": "49426"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6545"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6498",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006498"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Koch",
+            "given": [
+              "Marie",
+              "Kerr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-6142",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-4654",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1991-08-04",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "828 Pecan Place"
+            ],
+            "city": "Fort Gratiot",
+            "district": "St Clair County",
+            "state": "MI",
+            "postalCode": "48059"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6498"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6482",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006482"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Stout",
+            "given": [
+              "Mario",
+              "Jared"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-4304",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-1237",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1954-04-24",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "161 NW Platte Street"
+            ],
+            "city": "Saint Clair",
+            "district": "St Clair County",
+            "state": "MI",
+            "postalCode": "48079"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6482"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6539",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1020",
+                  "display": "Hinduism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006539"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Wagner",
+            "given": [
+              "Martha",
+              "Bertha"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "313-555-7947",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "313-555-0226",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1983-10-28",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "407 Hudson Place"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48234"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6539"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6506",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006506"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "McCoy",
+            "given": [
+              "Melinda",
+              "Stella"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-0485",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-8164",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1933-12-07",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "86 Peach Drive",
+              "#46"
+            ],
+            "city": "Holland",
+            "district": "Allegan County",
+            "state": "MI",
+            "postalCode": "49423"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6506"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6556",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006556"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Matthews",
+            "given": [
+              "Melvin",
+              "Dale"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-6437",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-8314",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1981-01-07",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "19 SW Second Avenue"
+            ],
+            "city": "Adrian",
+            "district": "Lenawee County",
+            "state": "MI",
+            "postalCode": "49221"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6556"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1133",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002459"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Gonzales",
+            "given": [
+              "Michael",
+              "Jesus"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-1571",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-1312",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1992-01-28",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "490 N Ocean Drive"
+            ],
+            "city": "Ann Arbor",
+            "district": "Washtenaw County",
+            "state": "MI",
+            "postalCode": "48103"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1133"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6524",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006524"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "McKee",
+            "given": [
+              "Micheal",
+              "Clarence"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-1654",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-4370",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1965-10-11",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "758 Fifth Place",
+              "#96"
+            ],
+            "city": "Sterling Heights",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48310"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6524"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6554",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006554"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Dunlap",
+            "given": [
+              "Olga",
+              "Grace"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-5885",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-2754",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1963-12-31",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "537 W Fifth Avenue"
+            ],
+            "city": "Lansing",
+            "district": "Ingham County",
+            "state": "MI",
+            "postalCode": "48915"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6554"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6499",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006499"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Sweeney",
+            "given": [
+              "Pauline",
+              "Shepherd"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-2483",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-0085",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1946-11-24",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "928 NW Second Street"
+            ],
+            "city": "Northville",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48167"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6499"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6536",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006536"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Tran",
+            "given": [
+              "Perry",
+              "Ford"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "231-555-4345",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "231-555-5194",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1944-08-25",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "588 NW Almond Street"
+            ],
+            "city": "Petoskey",
+            "district": "Emmet County",
+            "state": "MI",
+            "postalCode": "49770"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6536"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6528",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006528"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Reilly",
+            "given": [
+              "Phillip",
+              "Ball"
+            ],
+            "suffix": [
+              "Jr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-7129",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-6111",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1960-09-22",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "251 E Roosevelt Street"
+            ],
+            "city": "Lansing",
+            "district": "Ingham County",
+            "state": "MI",
+            "postalCode": "48906"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6528"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6496",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006496"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Payne",
+            "given": [
+              "Ramon",
+              "Combs"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-8744",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-2144",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2002-06-03",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "477 E Lincoln Street"
+            ],
+            "city": "Jenison",
+            "district": "Ottawa County",
+            "state": "MI",
+            "postalCode": "49428"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6496"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1134",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1004",
+                  "display": "Agnosticism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002464"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Gonzales",
+            "given": [
+              "Raoul",
+              "Santiago"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-8416",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-8625",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1998-11-13",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "299 E Atlantic Avenue"
+            ],
+            "city": "Saint Clair Shores",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48082"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1134"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6492",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006492"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Cabrera",
+            "given": [
+              "Renee",
+              "Yu"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-7482",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-3540",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1959-12-28",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "960 Nile Street",
+              "#24"
+            ],
+            "city": "Auburn Hills",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48326"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6492"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6549",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006549"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Hanson",
+            "given": [
+              "Rick",
+              "Troy"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-9196",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-8420",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1960-12-11",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "623 S Pecan Avenue",
+              "#50"
+            ],
+            "city": "Lansing",
+            "district": "Ingham County",
+            "state": "MI",
+            "postalCode": "48912"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6549"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6491",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006491"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Berg",
+            "given": [
+              "Rosa",
+              "Bullock"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "231-555-7994",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "231-555-9547",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1964-05-25",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "759 Platte Drive",
+              "#65"
+            ],
+            "city": "Montague",
+            "district": "Muskegon County",
+            "state": "MI",
+            "postalCode": "49437"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6491"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6548",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1009",
+                  "display": "Baptist"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006548"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Cobb",
+            "given": [
+              "Ross",
+              "Sheppard"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-6565",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-5521",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2011-12-19",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "898 N Plum Street"
+            ],
+            "city": "Bellevue",
+            "district": "Eaton County",
+            "state": "MI",
+            "postalCode": "49021"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6548"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6495",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1020",
+                  "display": "Hinduism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006495"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Lambert",
+            "given": [
+              "Russell",
+              "Dominguez"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-5245",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-4459",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1990-01-03",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "474 S Elm Court"
+            ],
+            "city": "Detroit",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48235"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6495"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6502",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006502"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Henderson",
+            "given": [
+              "Russell",
+              "Jamie"
+            ],
+            "suffix": [
+              "Jr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "555-555-1447",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "555-555-9747",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1971-05-11",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "449 S Seventh Circle",
+              "#7"
+            ],
+            "city": "East China",
+            "district": "St Clair County",
+            "state": "MI",
+            "postalCode": "48054"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6502"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6531",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006531"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Johnson",
+            "given": [
+              "Ruth",
+              "Pamela"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "734-555-2643",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "734-555-5387",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2014-07-15",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "646 W German Court"
+            ],
+            "city": "Wyandotte",
+            "district": "Wayne County",
+            "state": "MI",
+            "postalCode": "48192"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6531"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1125",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002385"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Paulson",
+            "given": [
+              "Ryan",
+              "Arthur"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-8242",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-4784",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1978-03-18",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "640 E Hudson Circle"
+            ],
+            "city": "Saint Clair Shores",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48082"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1125"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6507",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006507"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "King",
+            "given": [
+              "Samantha",
+              "Jo"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-2677",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-0943",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2011-06-30",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "101 Pecan Road"
+            ],
+            "city": "Union",
+            "district": "Cass County",
+            "state": "MI",
+            "postalCode": "49130"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6507"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6509",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006509"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Owen",
+            "given": [
+              "Shawn",
+              "Conley"
+            ],
+            "suffix": [
+              "Jr"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "269-555-0589",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "269-555-8025",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1955-09-02",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "473 Second Place",
+              "#87"
+            ],
+            "city": "Saint Joseph",
+            "district": "Berrien County",
+            "state": "MI",
+            "postalCode": "49085"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6509"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6533",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006533"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Robbins",
+            "given": [
+              "Tammy",
+              "Toni"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-1635",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-5358",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1964-05-20",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "448 French Place"
+            ],
+            "city": "Warren",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48088"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6533"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6544",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006544"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Briggs",
+            "given": [
+              "Ted",
+              "Griffith"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-7979",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-1311",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "2010-11-12",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "669 SE Missouri Avenue"
+            ],
+            "city": "Troy",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48085"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6544"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6483",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006483"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Richard",
+            "given": [
+              "Terrance",
+              "Clyde"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-3325",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-0390",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1953-04-27",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "724 E View Avenue"
+            ],
+            "city": "Freeport",
+            "district": "Barry County",
+            "state": "MI",
+            "postalCode": "49325"
+          }
+        ],
+        "generalPractitioner": [
+          {
+            "reference": "Practitioner/Practitioner-2520"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6483"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6497",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006497"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Zavala",
+            "given": [
+              "Terri",
+              "Reilly"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-9748",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-5800",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1985-03-08",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "207 W Rhine Road"
+            ],
+            "city": "Grand Ledge",
+            "district": "Eaton County",
+            "state": "MI",
+            "postalCode": "48837"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6497"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6520",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2135-2",
+                  "display": "Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006520"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Waller",
+            "given": [
+              "Terry",
+              "Harvey"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "586-555-4267",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "586-555-7406",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1936-08-16",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "421 W Danube Drive"
+            ],
+            "city": "Saint Clair Shores",
+            "district": "Macomb County",
+            "state": "MI",
+            "postalCode": "48082"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6520"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1119",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000000001"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Franklin",
+            "given": [
+              "Tricia",
+              "Lynn"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-7818",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-0530",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1987-01-14",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "770 SE Pecan Street"
+            ],
+            "city": "Pontiac",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48341"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1119"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1130",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1023",
+                  "display": "Islam"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002439"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Campbell",
+            "given": [
+              "Trudy",
+              "Mae"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-7445",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-7491",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "2010-11-14",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "580 SE Spanish Street"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1130"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6514",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006514"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Gray",
+            "given": [
+              "Victoria",
+              "Palmer"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "810-555-9834",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "810-555-4934",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1964-08-09",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "538 SE Main Avenue"
+            ],
+            "city": "Jeddo",
+            "district": "St Clair County",
+            "state": "MI",
+            "postalCode": "48032"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6514"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1129",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2056-0",
+                  "display": "Black"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1023",
+                  "display": "Islam"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002407"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Campbell",
+            "given": [
+              "Viola",
+              "Jean"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-1948",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-1551",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1927-04-05",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "415 SE Ocean Drive"
+            ],
+            "city": "Troy",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48084"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1129"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6552",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1041",
+                  "display": "Roman Catholic Church"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006552"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Hamilton",
+            "given": [
+              "Virgil",
+              "Dwayne"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-0609",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-1972",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1994-12-21",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "444 N Almond Place"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49507"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6552"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6523",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1007",
+                  "display": "Atheism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006523"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Vaughn",
+            "given": [
+              "Wendy",
+              "Danielle"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "248-555-0492",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "248-555-2012",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1936-04-15",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "588 N Fifth Street",
+              "#24"
+            ],
+            "city": "Novi",
+            "district": "Oakland County",
+            "state": "MI",
+            "postalCode": "48374"
+          }
+        ],
+        "generalPractitioner": [
+          {
+            "reference": "Practitioner/Practitioner-2520"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6523"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-1123",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2028-9",
+                  "display": "Asian"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1059",
+                  "display": "Zen Buddhism"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000002365"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Chen",
+            "given": [
+              "William",
+              "Yung"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "616-555-3220",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "616-555-4585",
+            "use": "mobile"
+          }
+        ],
+        "gender": "male",
+        "birthDate": "1984-04-16",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "899 S Lake Street"
+            ],
+            "city": "Grand Rapids",
+            "district": "Kent County",
+            "state": "MI",
+            "postalCode": "49503"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-1123"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Patient",
+        "id": "Patient-6517",
+        "extension": [
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Race",
+                  "code": "2106-3",
+                  "display": "White"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/Ethnicity",
+                  "code": "2186-5",
+                  "display": "Not Hispanic or Latino"
+                }
+              ]
+            }
+          },
+          {
+            "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-religion",
+            "valueCodeableConcept": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/v3/ReligiousAffiliation",
+                  "code": "1077",
+                  "display": "Protestant"
+                }
+              ]
+            }
+          }
+        ],
+        "identifier": [
+          {
+            "use": "official",
+            "type": {
+              "coding": [
+                {
+                  "system": "http://hl7.org/fhir/identifier-type",
+                  "code": "SB",
+                  "display": "Social Beneficiary Identifier"
+                }
+              ],
+              "text": "US Social Security Number"
+            },
+            "system": "http://hl7.org/fhir/sid/us-ssn",
+            "value": "000006517"
+          }
+        ],
+        "active": true,
+        "name": [
+          {
+            "family": "Miranda",
+            "given": [
+              "Yolanda",
+              "Dawn"
+            ]
+          }
+        ],
+        "telecom": [
+          {
+            "system": "phone",
+            "value": "517-555-1304",
+            "use": "home"
+          },
+          {
+            "system": "phone",
+            "value": "517-555-7204",
+            "use": "mobile"
+          }
+        ],
+        "gender": "female",
+        "birthDate": "1970-03-12",
+        "address": [
+          {
+            "use": "home",
+            "type": "postal",
+            "line": [
+              "7 Nile Road"
+            ],
+            "city": "Vermontville",
+            "district": "Eaton County",
+            "state": "MI",
+            "postalCode": "49096"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Patient/Patient-6517"
+      }
+    }
+  ]
+}
diff --git a/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-test-bundle.json b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-test-bundle.json
new file mode 100644
index 00000000000..36cb2fd7437
--- /dev/null
+++ b/example-projects/hapi-fhir-jpaserver-cds-example/src/test/resources/ca/uhn/fhir/jpa/cds/example/population-measure-test-bundle.json
@@ -0,0 +1,4956 @@
+{
+  "resourceType": "Bundle",
+  "type": "transaction",
+  "entry": [
+    {
+      "resource" : {
+        "resourceType" : "Encounter",
+        "id" : "Encounter-2636",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-encounter"
+          ]
+        },
+        "status" : "finished",
+        "class" : {
+          "system" : "http://hl7.org/fhir/encounter-class",
+          "code" : "outpatient",
+          "display" : "Outpatient"
+        },
+        "type" : [
+          {
+            "coding" : [
+              {
+                "system" : "http://snomed.info/sct",
+                "code" : "185349003",
+                "display" : "Wellness Visit"
+              }
+            ]
+          }
+        ],
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "participant" : [
+          {
+            "period" : {
+              "start" : "2015-11-06T00:00:00-05:00",
+              "end" : "2015-11-06T00:00:00-05:00"
+            },
+            "individual" : {
+              "reference" : "Practitioner/Practitioner-2533",
+              "display" : "Lena Dickerson Ballard MD"
+            }
+          }
+        ],
+        "period" : {
+          "start" : "2015-11-06T00:00:00-05:00",
+          "end" : "2015-11-06T00:00:00-05:00"
+        },
+        "location" : [
+          {
+            "location" : {
+              "reference" : "Location/Location-1106",
+              "display" : "Cranston Family Medical"
+            }
+          }
+        ],
+        "serviceProvider" : {
+          "reference" : "Organization/Organization-1106",
+          "display" : "Cranston Family Medical"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Encounter/Encounter-2636"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Immunization",
+        "id" : "Immunization-539396",
+        "status" : "completed",
+        "notGiven" : false,
+        "vaccineCode" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/sid/cvx",
+              "code" : "140",
+              "display" : "Influenza, seasonal, injectable, preservative free"
+            }
+          ]
+        },
+        "patient" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "date" : "2015-11-06T00:00:00-05:00",
+        "primarySource" : true,
+        "location" : {
+          "reference" : "Location/Location-1106",
+          "display" : "Cranston Family Medical"
+        },
+        "practitioner" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2533",
+              "display" : "Lena Dickerson Ballard MD"
+            }
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Immunization/Immunization-539396"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Immunization",
+        "id" : "Immunization-539397",
+        "status" : "completed",
+        "notGiven" : false,
+        "vaccineCode" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/sid/cvx",
+              "code" : "113",
+              "display" : "Td (adult) preservative free"
+            }
+          ]
+        },
+        "patient" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "date" : "2015-11-06T00:00:00-05:00",
+        "primarySource" : true,
+        "location" : {
+          "reference" : "Location/Location-1106",
+          "display" : "Cranston Family Medical"
+        },
+        "practitioner" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2533",
+              "display" : "Lena Dickerson Ballard MD"
+            }
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Immunization/Immunization-539397"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-621139",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://snomed.info/sct",
+              "code" : "713107002",
+              "display" : "Screening for alcohol abuse (procedure)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "performedPeriod" : {
+          "start" : "2015-11-06T00:00:00-05:00",
+          "end" : "2015-11-06T00:00:00-05:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2533",
+              "display" : "Lena Dickerson Ballard MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1106",
+          "display" : "Cranston Family Medical"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-621139"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621140",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://snomed.info/sct",
+              "code" : "704198001",
+              "display" : "Denies alcohol use (finding)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 0.0,
+          "unit" : "drinks/day"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621140"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621141",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8480-6",
+              "display" : "Systolic blood pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 121.98054863337836,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621141"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621142",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8462-4",
+              "display" : "Diastolic blood pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 111.13288452161335,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621142"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Condition",
+        "id" : "Condition-621143",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-condition"
+          ]
+        },
+        "clinicalStatus" : "active",
+        "verificationStatus" : "confirmed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "TBD",
+              "code" : "TBD",
+              "display" : "TBD"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "onsetDateTime" : "2015-11-06T00:00:00-05:00",
+        "assertedDate" : "2015-11-06T00:00:00-05:00",
+        "asserter" : {
+          "reference" : "Practitioner/Practitioner-2533",
+          "display" : "Lena Dickerson Ballard MD"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Condition/Condition-621143"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-621144",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://www.ama-assn.org/go/cpt",
+              "code" : "87622",
+              "display" : "Infectious agent detection by nucleic acid (DNA or RNA); papillomavirus, human, quantification"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "performedPeriod" : {
+          "start" : "2015-11-06T00:00:00-05:00",
+          "end" : "2015-11-06T00:00:00-05:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2533",
+              "display" : "Lena Dickerson Ballard MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1106",
+          "display" : "Cranston Family Medical"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-621144"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621145",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://snomed.info/sct",
+              "code" : "289829007",
+              "display" : "Normal uterine cervix (finding)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueString" : "NEGATIVE"
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621145"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-621146",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "CP",
+              "display" : "Cytopathology"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "https://www.cms.gov/Medicare/Coding/MedHCPCSGenInfo/index.html",
+              "code" : "G0148",
+              "display" : "Screening cytopathology smears, cervical or vaginal, performed by automated system with manual rescreening"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectivePeriod" : {
+          "start" : "2015-11-06T00:00:00-05:00",
+          "end" : "2015-11-06T00:00:00-05:00"
+        },
+        "issued" : "2015-11-06T00:00:00.000-05:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-621145",
+            "display" : "No_Cancer_Detected"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-621146"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621147",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8302-2",
+              "display" : "Body Height"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 155.0,
+          "unit" : "cm"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621147"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621148",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "29463-7",
+              "display" : "Body Weight"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 52.5,
+          "unit" : "kg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621148"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621149",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "39156-5",
+              "display" : "Body Mass Index"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 21.8522372528616,
+          "unit" : "kg/m2"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621149"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621152",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "55284-4",
+              "display" : "Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "valueQuantity" : {
+          "value" : 111.13288452161335,
+          "unit" : "mmHg"
+        },
+        "component" : [
+          {
+            "code" : {
+              "coding" : [
+                {
+                  "system" : "http://loinc.org",
+                  "code" : "8480-6",
+                  "display" : "Systolic Blood Pressure"
+                }
+              ]
+            }
+          },
+          {
+            "code" : {
+              "coding" : [
+                {
+                  "system" : "http://loinc.org",
+                  "code" : "8462-4",
+                  "display" : "Diastolic Blood Pressure"
+                }
+              ]
+            }
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621152"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621154",
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8302-2",
+              "display" : "Height"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 155.0,
+          "unit" : "cm"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621154"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621155",
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "29463-7",
+              "display" : "Weight"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 52.5,
+          "unit" : "kg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621155"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621156",
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "39156-5",
+              "display" : "BMI"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 21.8522372528616,
+          "unit" : "kg/m2"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621156"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621157",
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8310-5",
+              "display" : "Temperature"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 37.0,
+          "unit" : "C"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621157"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621158",
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8459-0",
+              "display" : "Systolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 121.98054863337836,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621158"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-621159",
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8453-3",
+              "display" : "Diastolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "2015-11-06T00:00:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 111.13288452161335,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-621159"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-621153",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "LAB",
+              "display" : "Laboratory"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8716-3",
+              "display" : "Vital Signs Panel"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-1136",
+          "display" : "Angelica Desiree Jones"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2636",
+          "display" : "Wellness Visit"
+        },
+        "effectivePeriod" : {
+          "start" : "2015-11-06T00:00:00-05:00",
+          "end" : "2015-11-06T00:00:00-05:00"
+        },
+        "issued" : "2015-11-06T00:00:00.000-05:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-621154",
+            "display" : "Height"
+          },
+          {
+            "reference" : "Observation/Observation-621155",
+            "display" : "Weight"
+          },
+          {
+            "reference" : "Observation/Observation-621156",
+            "display" : "BMI"
+          },
+          {
+            "reference" : "Observation/Observation-621157",
+            "display" : "Temperature"
+          },
+          {
+            "reference" : "Observation/Observation-621158",
+            "display" : "Systolic Blood Pressure"
+          },
+          {
+            "reference" : "Observation/Observation-621159",
+            "display" : "Diastolic Blood Pressure"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-621153"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Encounter",
+        "id" : "Encounter-2387",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-encounter"
+          ]
+        },
+
+        "status" : "finished",
+        "class" : {
+          "system" : "http://hl7.org/fhir/encounter-class",
+          "code" : "inpatient",
+          "display" : "Inpatient"
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "participant" : [
+          {
+            "period" : {
+              "start" : "2007-05-02T00:00:00-04:00",
+              "end" : "2007-05-02T03:02:00-04:00"
+            },
+            "individual" : {
+              "reference" : "Practitioner/Practitioner-2533",
+              "display" : "Lena Dickerson Ballard MD"
+            }
+          }
+        ],
+        "period" : {
+          "start" : "2007-05-02T00:00:00-04:00",
+          "end" : "2007-05-02T03:02:00-04:00"
+        },
+        "hospitalization" : {
+          "dischargeDisposition" : {
+            "coding" : [
+              {
+                "system" : "http://hl7.org/fhir/discharge-disposition",
+                "code" : "home",
+                "display" : "Home"
+              }
+            ]
+          }
+        },
+        "location" : [
+          {
+            "location" : {
+              "reference" : "Location/Location-1001",
+              "display" : "Windward General Hospital"
+            }
+          }
+        ],
+        "serviceProvider" : {
+          "reference" : "Organization/Organization-1001",
+          "display" : "Windward General Hospital"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Encounter/Encounter-2387"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-415537",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "code" : "0HTV0ZZ",
+              "display" : "Resection of Bilateral Breast, Open Approach"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2387",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "performedPeriod" : {
+          "start" : "2007-05-02T03:02:00-04:00",
+          "end" : "2007-05-02T03:02:00-04:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2533",
+              "display" : "Lena Dickerson Ballard MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1001",
+          "display" : "Windward General Hospital"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-415537"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-415540",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8302-2",
+              "display" : "Height"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2387",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "2007-05-02T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 163.3,
+          "unit" : "cm"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-415540"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-415541",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "29463-7",
+              "display" : "Weight"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2387",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "2007-05-02T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 96.11534302250132,
+          "unit" : "kg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-415541"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-415542",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "39156-5",
+              "display" : "BMI"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2387",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "2007-05-02T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 36.042951773716894,
+          "unit" : "kg/m2"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-415542"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-415543",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8310-5",
+              "display" : "Temperature"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2387",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "2007-05-02T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 37.0,
+          "unit" : "C"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-415543"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-415544",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8459-0",
+              "display" : "Systolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2387",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "2007-05-02T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 154.8042596871617,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-415544"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-415545",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8453-3",
+              "display" : "Diastolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2387",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "2007-05-02T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2533",
+            "display" : "Lena Dickerson Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 65.94017578829103,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-415545"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-415539",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "LAB",
+              "display" : "Laboratory"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8716-3",
+              "display" : "Vital Signs Panel"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-2387",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectivePeriod" : {
+          "start" : "2007-05-02T00:00:00-04:00",
+          "end" : "2007-05-02T00:00:00-04:00"
+        },
+        "issued" : "2007-05-02T00:00:00.000-04:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-415540",
+            "display" : "Height"
+          },
+          {
+            "reference" : "Observation/Observation-415541",
+            "display" : "Weight"
+          },
+          {
+            "reference" : "Observation/Observation-415542",
+            "display" : "BMI"
+          },
+          {
+            "reference" : "Observation/Observation-415543",
+            "display" : "Temperature"
+          },
+          {
+            "reference" : "Observation/Observation-415544",
+            "display" : "Systolic Blood Pressure"
+          },
+          {
+            "reference" : "Observation/Observation-415545",
+            "display" : "Diastolic Blood Pressure"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-415539"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Encounter",
+        "id" : "Encounter-4882",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-encounter"
+          ]
+        },
+
+        "status" : "finished",
+        "class" : {
+          "system" : "http://hl7.org/fhir/encounter-class",
+          "code" : "inpatient",
+          "display" : "Inpatient"
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "participant" : [
+          {
+            "period" : {
+              "start" : "1989-02-15T00:46:00-05:00",
+              "end" : "1989-02-15T03:46:00-05:00"
+            },
+            "individual" : {
+              "reference" : "Practitioner/Practitioner-2525",
+              "display" : "Kyle Christian Ballard MD"
+            }
+          }
+        ],
+        "period" : {
+          "start" : "1989-02-15T00:46:00-05:00",
+          "end" : "1989-02-15T03:46:00-05:00"
+        },
+        "hospitalization" : {
+          "dischargeDisposition" : {
+            "coding" : [
+              {
+                "system" : "http://hl7.org/fhir/discharge-disposition",
+                "code" : "home",
+                "display" : "Home"
+              }
+            ]
+          }
+        },
+        "location" : [
+          {
+            "location" : {
+              "reference" : "Location/Location-1001",
+              "display" : "Windward General Hospital"
+            }
+          }
+        ],
+        "serviceProvider" : {
+          "reference" : "Organization/Organization-1001",
+          "display" : "Windward General Hospital"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Encounter/Encounter-4882"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-694054",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "https://www.cms.gov/Medicare/Coding/ICD10/index.html",
+              "code" : "0DTE7ZZ",
+              "display" : "Resection of Large Intestine, Via Natural or Artificial Opening"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-4882",
+          "display" : "Colectomy_Encounter"
+        },
+        "performedPeriod" : {
+          "start" : "1989-02-15T03:46:00-05:00",
+          "end" : "1989-02-15T03:46:00-05:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2525",
+              "display" : "Kyle Christian Ballard MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1001",
+          "display" : "Windward General Hospital"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-694054"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-694057",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8302-2",
+              "display" : "Height"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-4882",
+          "display" : "Colectomy_Encounter"
+        },
+        "effectiveDateTime" : "1989-02-15T00:46:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2525",
+            "display" : "Kyle Christian Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 163.3,
+          "unit" : "cm"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-694057"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-694058",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "29463-7",
+              "display" : "Weight"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-4882",
+          "display" : "Colectomy_Encounter"
+        },
+        "effectiveDateTime" : "1989-02-15T00:46:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2525",
+            "display" : "Kyle Christian Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 98.54308048850028,
+          "unit" : "kg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-694058"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-694059",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "39156-5",
+              "display" : "BMI"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-4882",
+          "display" : "Colectomy_Encounter"
+        },
+        "effectiveDateTime" : "1989-02-15T00:46:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2525",
+            "display" : "Kyle Christian Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 36.95334569891738,
+          "unit" : "kg/m2"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-694059"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-694060",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8310-5",
+              "display" : "Temperature"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-4882",
+          "display" : "Colectomy_Encounter"
+        },
+        "effectiveDateTime" : "1989-02-15T00:46:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2525",
+            "display" : "Kyle Christian Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 37.0,
+          "unit" : "C"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-694060"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-694061",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8459-0",
+              "display" : "Systolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-4882",
+          "display" : "Colectomy_Encounter"
+        },
+        "effectiveDateTime" : "1989-02-15T00:46:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2525",
+            "display" : "Kyle Christian Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 152.8248968318184,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-694061"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-694062",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8453-3",
+              "display" : "Diastolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-4882",
+          "display" : "Colectomy_Encounter"
+        },
+        "effectiveDateTime" : "1989-02-15T00:46:00-05:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2525",
+            "display" : "Kyle Christian Ballard MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 99.94400951967445,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-694062"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-694056",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "LAB",
+              "display" : "Laboratory"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8716-3",
+              "display" : "Vital Signs Panel"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6484",
+          "display" : "Irma Carol Johnson"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-4882",
+          "display" : "Colectomy_Encounter"
+        },
+        "effectivePeriod" : {
+          "start" : "1989-02-15T00:46:00-05:00",
+          "end" : "1989-02-15T00:46:00-05:00"
+        },
+        "issued" : "1989-02-15T00:46:00.000-05:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-694057",
+            "display" : "Height"
+          },
+          {
+            "reference" : "Observation/Observation-694058",
+            "display" : "Weight"
+          },
+          {
+            "reference" : "Observation/Observation-694059",
+            "display" : "BMI"
+          },
+          {
+            "reference" : "Observation/Observation-694060",
+            "display" : "Temperature"
+          },
+          {
+            "reference" : "Observation/Observation-694061",
+            "display" : "Systolic Blood Pressure"
+          },
+          {
+            "reference" : "Observation/Observation-694062",
+            "display" : "Diastolic Blood Pressure"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-694056"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Encounter",
+        "id" : "Encounter-789",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-encounter"
+          ]
+        },
+
+        "status" : "finished",
+        "class" : {
+          "system" : "http://hl7.org/fhir/encounter-class",
+          "code" : "inpatient",
+          "display" : "Inpatient"
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "participant" : [
+          {
+            "period" : {
+              "start" : "1995-06-22T00:00:00-04:00",
+              "end" : "1995-06-22T14:19:00-04:00"
+            },
+            "individual" : {
+              "reference" : "Practitioner/Practitioner-2519",
+              "display" : "Stanley Jason Garrett MD"
+            }
+          }
+        ],
+        "period" : {
+          "start" : "1995-06-22T00:00:00-04:00",
+          "end" : "1995-06-22T14:19:00-04:00"
+        },
+        "hospitalization" : {
+          "dischargeDisposition" : {
+            "coding" : [
+              {
+                "system" : "http://hl7.org/fhir/discharge-disposition",
+                "code" : "home",
+                "display" : "Home"
+              }
+            ]
+          }
+        },
+        "location" : [
+          {
+            "location" : {
+              "reference" : "Location/Location-1001",
+              "display" : "Windward General Hospital"
+            }
+          }
+        ],
+        "serviceProvider" : {
+          "reference" : "Organization/Organization-1001",
+          "display" : "Windward General Hospital"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Encounter/Encounter-789"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-147475",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://www.ama-assn.org/go/cpt",
+              "code" : "58150",
+              "display" : "Total abdominal hysterectomy (corpus and cervix), with or without removal of tube(s), with or without removal of ovary(s)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-789",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "performedPeriod" : {
+          "start" : "1995-06-22T14:19:00-04:00",
+          "end" : "1995-06-22T14:19:00-04:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2519",
+              "display" : "Stanley Jason Garrett MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1001",
+          "display" : "Windward General Hospital"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-147475"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-147478",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8302-2",
+              "display" : "Height"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-789",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "1995-06-22T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2519",
+            "display" : "Stanley Jason Garrett MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 167.7,
+          "unit" : "cm"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-147478"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-147479",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "29463-7",
+              "display" : "Weight"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-789",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "1995-06-22T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2519",
+            "display" : "Stanley Jason Garrett MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 96.66104743745993,
+          "unit" : "kg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-147479"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-147480",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "39156-5",
+              "display" : "BMI"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-789",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "1995-06-22T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2519",
+            "display" : "Stanley Jason Garrett MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 34.37046214630648,
+          "unit" : "kg/m2"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-147480"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-147481",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8310-5",
+              "display" : "Temperature"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-789",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "1995-06-22T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2519",
+            "display" : "Stanley Jason Garrett MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 37.0,
+          "unit" : "C"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-147481"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-147482",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8459-0",
+              "display" : "Systolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-789",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "1995-06-22T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2519",
+            "display" : "Stanley Jason Garrett MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 130.20366288912476,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-147482"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-147483",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8453-3",
+              "display" : "Diastolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-789",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectiveDateTime" : "1995-06-22T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2519",
+            "display" : "Stanley Jason Garrett MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 68.00043652118453,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-147483"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-147477",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "LAB",
+              "display" : "Laboratory"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8716-3",
+              "display" : "Vital Signs Panel"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6520",
+          "display" : "Terry Harvey Waller"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-789",
+          "display" : "Cancer_Treatment_Encounter"
+        },
+        "effectivePeriod" : {
+          "start" : "1995-06-22T00:00:00-04:00",
+          "end" : "1995-06-22T00:00:00-04:00"
+        },
+        "issued" : "1995-06-22T00:00:00.000-04:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-147478",
+            "display" : "Height"
+          },
+          {
+            "reference" : "Observation/Observation-147479",
+            "display" : "Weight"
+          },
+          {
+            "reference" : "Observation/Observation-147480",
+            "display" : "BMI"
+          },
+          {
+            "reference" : "Observation/Observation-147481",
+            "display" : "Temperature"
+          },
+          {
+            "reference" : "Observation/Observation-147482",
+            "display" : "Systolic Blood Pressure"
+          },
+          {
+            "reference" : "Observation/Observation-147483",
+            "display" : "Diastolic Blood Pressure"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-147477"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Encounter",
+        "id" : "Encounter-902",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-encounter"
+          ]
+        },
+
+        "status" : "finished",
+        "class" : {
+          "system" : "http://hl7.org/fhir/encounter-class",
+          "code" : "outpatient",
+          "display" : "Outpatient"
+        },
+        "type" : [
+          {
+            "coding" : [
+              {
+                "system" : "http://snomed.info/sct",
+                "code" : "185349003",
+                "display" : "Wellness Visit"
+              }
+            ]
+          }
+        ],
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "participant" : [
+          {
+            "period" : {
+              "start" : "1997-06-06T00:00:00-04:00",
+              "end" : "1997-06-06T00:00:00-04:00"
+            },
+            "individual" : {
+              "reference" : "Practitioner/Practitioner-2520",
+              "display" : "Kimberly Christy Ashley MD"
+            }
+          }
+        ],
+        "period" : {
+          "start" : "1997-06-06T00:00:00-04:00",
+          "end" : "1997-06-06T00:00:00-04:00"
+        },
+        "location" : [
+          {
+            "location" : {
+              "reference" : "Location/Location-1105",
+              "display" : "Bayside Medical Group"
+            }
+          }
+        ],
+        "serviceProvider" : {
+          "reference" : "Organization/Organization-1105",
+          "display" : "Bayside Medical Group"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Encounter/Encounter-902"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Immunization",
+        "id" : "Immunization-163959",
+
+        "status" : "completed",
+        "notGiven" : false,
+        "vaccineCode" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/sid/cvx",
+              "code" : "140",
+              "display" : "Influenza, seasonal, injectable, preservative free"
+            }
+          ]
+        },
+        "patient" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "date" : "1997-06-06T00:00:00-04:00",
+        "primarySource" : true,
+        "location" : {
+          "reference" : "Location/Location-1105",
+          "display" : "Bayside Medical Group"
+        },
+        "practitioner" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2520",
+              "display" : "Kimberly Christy Ashley MD"
+            }
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Immunization/Immunization-163959"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Immunization",
+        "id" : "Immunization-163960",
+
+        "status" : "completed",
+        "notGiven" : false,
+        "vaccineCode" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/sid/cvx",
+              "code" : "113",
+              "display" : "Td (adult) preservative free"
+            }
+          ]
+        },
+        "patient" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "date" : "1997-06-06T00:00:00-04:00",
+        "primarySource" : true,
+        "location" : {
+          "reference" : "Location/Location-1105",
+          "display" : "Bayside Medical Group"
+        },
+        "practitioner" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2520",
+              "display" : "Kimberly Christy Ashley MD"
+            }
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Immunization/Immunization-163960"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-184862",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://snomed.info/sct",
+              "code" : "713107002",
+              "display" : "Screening for alcohol abuse (procedure)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "performedPeriod" : {
+          "start" : "1997-06-06T00:00:00-04:00",
+          "end" : "1997-06-06T00:00:00-04:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2520",
+              "display" : "Kimberly Christy Ashley MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1105",
+          "display" : "Bayside Medical Group"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-184862"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184863",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://snomed.info/sct",
+              "code" : "704198001",
+              "display" : "Denies alcohol use (finding)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 0.0,
+          "unit" : "drinks/day"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184863"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-184864",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://www.ama-assn.org/go/cpt",
+              "code" : "77063",
+              "display" : "Screening digital breast tomosynthesis, bilateral (List separately in addition to code for primary procedure)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "performedPeriod" : {
+          "start" : "1997-06-06T00:00:00-04:00",
+          "end" : "1997-06-06T00:00:00-04:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2520",
+              "display" : "Kimberly Christy Ashley MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1105",
+          "display" : "Bayside Medical Group"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-184864"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184865",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://snomed.info/sct",
+              "code" : "168749009",
+              "display" : "Mammography normal (finding)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueString" : "NEGATIVE"
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184865"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-184866",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "RAD",
+              "display" : "Radiology"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "TBD",
+              "code" : "TBD",
+              "display" : "TBD"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectivePeriod" : {
+          "start" : "1997-06-06T00:00:00-04:00",
+          "end" : "1997-06-06T00:00:00-04:00"
+        },
+        "issued" : "1997-06-06T00:00:00.000-04:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-184865",
+            "display" : "No_Cancer_Detected"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-184866"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184867",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8480-6",
+              "display" : "Systolic blood pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 171.7249674809783,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184867"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184868",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8462-4",
+              "display" : "Diastolic blood pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 97.55374172489388,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184868"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Condition",
+        "id" : "Condition-184869",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-condition"
+          ]
+        },
+
+        "clinicalStatus" : "active",
+        "verificationStatus" : "confirmed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "TBD",
+              "code" : "TBD",
+              "display" : "TBD"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "onsetDateTime" : "1997-06-06T00:00:00-04:00",
+        "assertedDate" : "1997-06-06T00:00:00-04:00",
+        "asserter" : {
+          "reference" : "Practitioner/Practitioner-2520",
+          "display" : "Kimberly Christy Ashley MD"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Condition/Condition-184869"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-184870",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://www.ama-assn.org/go/cpt",
+              "code" : "82274",
+              "display" : "Blood, occult, by fecal hemoglobin determination by immunoassay, qualitative, feces, 1-3 simultaneous determinations"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "performedPeriod" : {
+          "start" : "1997-06-06T00:00:00-04:00",
+          "end" : "1997-06-06T00:00:00-04:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2520",
+              "display" : "Kimberly Christy Ashley MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1105",
+          "display" : "Bayside Medical Group"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-184870"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184871",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://www.ama-assn.org/go/cpt",
+              "code" : "82270",
+              "display" : "Blood, occult, by peroxidase activity (eg, guaiac), qualitative; feces, consecutive collected specimens with single determination, for colorectal neoplasm screening (ie, patient was provided 3 cards or single triple card for consecutive collection)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueString" : "NEGATIVE"
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184871"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184872",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8302-2",
+              "display" : "Body Height"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 152.7,
+          "unit" : "cm"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184872"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184873",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "29463-7",
+              "display" : "Body Weight"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 66.74936483315179,
+          "unit" : "kg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184873"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184874",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "39156-5",
+              "display" : "Body Mass Index"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 28.626553443025237,
+          "unit" : "kg/m2"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184874"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184877",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "55284-4",
+              "display" : "Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "valueQuantity" : {
+          "value" : 97.55374172489388,
+          "unit" : "mmHg"
+        },
+        "component" : [
+          {
+            "code" : {
+              "coding" : [
+                {
+                  "system" : "http://loinc.org",
+                  "code" : "8480-6",
+                  "display" : "Systolic Blood Pressure"
+                }
+              ]
+            }
+          },
+          {
+            "code" : {
+              "coding" : [
+                {
+                  "system" : "http://loinc.org",
+                  "code" : "8462-4",
+                  "display" : "Diastolic Blood Pressure"
+                }
+              ]
+            }
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184877"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184878",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "4548-4",
+              "display" : "Hemoglobin A1c/Hemoglobin.total in Blood"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 5.28175402254477,
+          "unit" : "%"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184878"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184879",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "2339-0",
+              "display" : "Glucose"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 64.36015609860236,
+          "unit" : "mg/dL"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184879"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184880",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "6299-2",
+              "display" : "Urea Nitrogen"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 11.299580611480273,
+          "unit" : "mg/dL"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184880"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184881",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "38483-4",
+              "display" : "Creatinine"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 0.9407194060414946,
+          "unit" : "mg/dL"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184881"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184882",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "49765-1",
+              "display" : "Calcium"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 1.7696101860650721,
+          "unit" : "mmol/L"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184882"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184883",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "2947-0",
+              "display" : "Sodium"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 141.46117947196421,
+          "unit" : "mmol/L"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184883"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184884",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "6298-4",
+              "display" : "Potassium"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 4.321405701702811,
+          "unit" : "mmol/L"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184884"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184885",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "2069-3",
+              "display" : "Chloride"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 105.82904965698238,
+          "unit" : "mmol/L"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184885"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184886",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "20565-8",
+              "display" : "Carbon Dioxide"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 21.996950174699407,
+          "unit" : "mmol/L"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184886"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-184887",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "LAB",
+              "display" : "Laboratory"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "51990-0",
+              "display" : "Basic Metabolic Panel"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectivePeriod" : {
+          "start" : "1997-06-06T00:00:00-04:00",
+          "end" : "1997-06-06T00:00:00-04:00"
+        },
+        "issued" : "1997-06-06T00:00:00.000-04:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-184879",
+            "display" : "Record_Glucose"
+          },
+          {
+            "reference" : "Observation/Observation-184880",
+            "display" : "Record_UreaNitrogen"
+          },
+          {
+            "reference" : "Observation/Observation-184881",
+            "display" : "Record_Creatinine"
+          },
+          {
+            "reference" : "Observation/Observation-184882",
+            "display" : "Record_Calcium"
+          },
+          {
+            "reference" : "Observation/Observation-184883",
+            "display" : "Record_Sodium"
+          },
+          {
+            "reference" : "Observation/Observation-184884",
+            "display" : "Record_Potassium"
+          },
+          {
+            "reference" : "Observation/Observation-184885",
+            "display" : "Record_Chloride"
+          },
+          {
+            "reference" : "Observation/Observation-184886",
+            "display" : "Record_CO2"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-184887"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184888",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "2093-3",
+              "display" : "Total Cholesterol"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 143.79249453191431,
+          "unit" : "mg/dL"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184888"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184889",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "2571-8",
+              "display" : "Triglycerides"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 51.79679525205482,
+          "unit" : "mg/dL"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184889"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184890",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "18262-6",
+              "display" : "Low Density Lipoprotein Cholesterol"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 91.36606130186163,
+          "unit" : "mg/dL"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184890"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184891",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "2085-9",
+              "display" : "High Density Lipoprotein Cholesterol"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 42.06707417964171,
+          "unit" : "mg/dL"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184891"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-184892",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "LAB",
+              "display" : "Laboratory"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "57698-3",
+              "display" : "Lipid Panel"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectivePeriod" : {
+          "start" : "1997-06-06T00:00:00-04:00",
+          "end" : "1997-06-06T00:00:00-04:00"
+        },
+        "issued" : "1997-06-06T00:00:00.000-04:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-184888",
+            "display" : "Record_Cholesterol"
+          },
+          {
+            "reference" : "Observation/Observation-184889",
+            "display" : "Record_Triglycerides"
+          },
+          {
+            "reference" : "Observation/Observation-184890",
+            "display" : "Record_LDL"
+          },
+          {
+            "reference" : "Observation/Observation-184891",
+            "display" : "Record_HDL"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-184892"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184894",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8302-2",
+              "display" : "Height"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 152.7,
+          "unit" : "cm"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184894"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184895",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "29463-7",
+              "display" : "Weight"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 66.74936483315179,
+          "unit" : "kg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184895"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184896",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "39156-5",
+              "display" : "BMI"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 28.626553443025237,
+          "unit" : "kg/m2"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184896"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184897",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8310-5",
+              "display" : "Temperature"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 37.0,
+          "unit" : "C"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184897"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184898",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8459-0",
+              "display" : "Systolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 171.7249674809783,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184898"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-184899",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8453-3",
+              "display" : "Diastolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectiveDateTime" : "1997-06-06T00:00:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2520",
+            "display" : "Kimberly Christy Ashley MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 97.55374172489388,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-184899"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-184893",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "LAB",
+              "display" : "Laboratory"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8716-3",
+              "display" : "Vital Signs Panel"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-902",
+          "display" : "Wellness Visit"
+        },
+        "effectivePeriod" : {
+          "start" : "1997-06-06T00:00:00-04:00",
+          "end" : "1997-06-06T00:00:00-04:00"
+        },
+        "issued" : "1997-06-06T00:00:00.000-04:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-184894",
+            "display" : "Height"
+          },
+          {
+            "reference" : "Observation/Observation-184895",
+            "display" : "Weight"
+          },
+          {
+            "reference" : "Observation/Observation-184896",
+            "display" : "BMI"
+          },
+          {
+            "reference" : "Observation/Observation-184897",
+            "display" : "Temperature"
+          },
+          {
+            "reference" : "Observation/Observation-184898",
+            "display" : "Systolic Blood Pressure"
+          },
+          {
+            "reference" : "Observation/Observation-184899",
+            "display" : "Diastolic Blood Pressure"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-184893"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Encounter",
+        "id" : "Encounter-1328",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-encounter"
+          ]
+        },
+
+        "status" : "finished",
+        "class" : {
+          "system" : "http://hl7.org/fhir/encounter-class",
+          "code" : "inpatient",
+          "display" : "Inpatient"
+        },
+        "type" : [
+          {
+            "coding" : [
+              {
+                "system" : "http://snomed.info/sct",
+                "code" : "34285007",
+                "display" : "Hospital admission"
+              }
+            ]
+          }
+        ],
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "participant" : [
+          {
+            "period" : {
+              "start" : "1988-04-25T00:09:00-04:00",
+              "end" : "1988-04-25T01:23:00-04:00"
+            },
+            "individual" : {
+              "reference" : "Practitioner/Practitioner-2534",
+              "display" : "Pearl Rita Dawson MD"
+            }
+          }
+        ],
+        "period" : {
+          "start" : "1988-04-25T00:09:00-04:00",
+          "end" : "1988-04-25T01:23:00-04:00"
+        },
+        "hospitalization" : {
+          "dischargeDisposition" : {
+            "coding" : [
+              {
+                "system" : "http://hl7.org/fhir/discharge-disposition",
+                "code" : "home",
+                "display" : "Home"
+              }
+            ]
+          }
+        },
+        "location" : [
+          {
+            "location" : {
+              "reference" : "Location/Location-1001",
+              "display" : "Windward General Hospital"
+            }
+          }
+        ],
+        "serviceProvider" : {
+          "reference" : "Organization/Organization-1001",
+          "display" : "Windward General Hospital"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Encounter/Encounter-1328"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Procedure",
+        "id" : "Procedure-271175",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-procedure"
+          ]
+        },
+
+        "status" : "completed",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://www.ama-assn.org/go/cpt",
+              "code" : "45388",
+              "display" : "Colonoscopy, flexible; with ablation of tumor(s), polyp(s), or other lesion(s) (includes pre- and post-dilation and guide wire passage, when performed)"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "performedPeriod" : {
+          "start" : "1988-04-25T01:23:00-04:00",
+          "end" : "1988-04-25T01:23:00-04:00"
+        },
+        "performer" : [
+          {
+            "actor" : {
+              "reference" : "Practitioner/Practitioner-2534",
+              "display" : "Pearl Rita Dawson MD"
+            }
+          }
+        ],
+        "location" : {
+          "reference" : "Location/Location-1001",
+          "display" : "Windward General Hospital"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Procedure/Procedure-271175"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-271176",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-observation"
+          ]
+        },
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "TBD",
+              "code" : "TBD",
+              "display" : "TBD"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectiveDateTime" : "1988-04-25T01:23:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2534",
+            "display" : "Pearl Rita Dawson MD"
+          }
+        ],
+        "valueString" : "NEGATIVE"
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-271176"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-271177",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "CP",
+              "display" : "Cytopathology"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://www.ama-assn.org/go/cpt",
+              "code" : "44404",
+              "display" : "Colonoscopy through stoma; with directed submucosal injection(s), any substance"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectivePeriod" : {
+          "start" : "1988-04-25T01:23:00-04:00",
+          "end" : "1988-04-25T01:23:00-04:00"
+        },
+        "issued" : "1988-04-25T01:23:00.000-04:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-271176",
+            "display" : "Negative_Colonoscopy_Observation"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-271177"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-271180",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8302-2",
+              "display" : "Height"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectiveDateTime" : "1988-04-25T00:09:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2534",
+            "display" : "Pearl Rita Dawson MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 152.7,
+          "unit" : "cm"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-271180"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-271181",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "29463-7",
+              "display" : "Weight"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectiveDateTime" : "1988-04-25T00:09:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2534",
+            "display" : "Pearl Rita Dawson MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 67.97106370778826,
+          "unit" : "kg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-271181"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-271182",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "39156-5",
+              "display" : "BMI"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectiveDateTime" : "1988-04-25T00:09:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2534",
+            "display" : "Pearl Rita Dawson MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 29.1504989249558,
+          "unit" : "kg/m2"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-271182"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-271183",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8310-5",
+              "display" : "Temperature"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectiveDateTime" : "1988-04-25T00:09:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2534",
+            "display" : "Pearl Rita Dawson MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 37.0,
+          "unit" : "C"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-271183"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-271184",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8459-0",
+              "display" : "Systolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectiveDateTime" : "1988-04-25T00:09:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2534",
+            "display" : "Pearl Rita Dawson MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 170.4586203394794,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-271184"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "Observation",
+        "id" : "Observation-271185",
+
+        "status" : "final",
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8453-3",
+              "display" : "Diastolic Blood Pressure"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectiveDateTime" : "1988-04-25T00:09:00-04:00",
+        "performer" : [
+          {
+            "reference" : "Practitioner/Practitioner-2534",
+            "display" : "Pearl Rita Dawson MD"
+          }
+        ],
+        "valueQuantity" : {
+          "value" : 84.12067172275782,
+          "unit" : "mmHg"
+        }
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "Observation/Observation-271185"
+      }
+    },
+    {
+      "resource" : {
+        "resourceType" : "DiagnosticReport",
+        "id" : "DiagnosticReport-271179",
+        "meta" : {
+          "profile" : [
+            "http://hl7.org/fhir/us/hedis/StructureDefinition/hedis-diagnosticreport"
+          ]
+        },
+
+        "status" : "final",
+        "category" : {
+          "coding" : [
+            {
+              "system" : "http://hl7.org/fhir/ValueSet/diagnostic-service-sections",
+              "code" : "LAB",
+              "display" : "Laboratory"
+            }
+          ]
+        },
+        "code" : {
+          "coding" : [
+            {
+              "system" : "http://loinc.org",
+              "code" : "8716-3",
+              "display" : "Vital Signs Panel"
+            }
+          ]
+        },
+        "subject" : {
+          "reference" : "Patient/Patient-6523",
+          "display" : "Wendy Danielle Vaughn"
+        },
+        "context" : {
+          "reference" : "Encounter/Encounter-1328",
+          "display" : "Colonoscopy_Encounter"
+        },
+        "effectivePeriod" : {
+          "start" : "1988-04-25T00:09:00-04:00",
+          "end" : "1988-04-25T00:09:00-04:00"
+        },
+        "issued" : "1988-04-25T00:09:00.000-04:00",
+        "result" : [
+          {
+            "reference" : "Observation/Observation-271180",
+            "display" : "Height"
+          },
+          {
+            "reference" : "Observation/Observation-271181",
+            "display" : "Weight"
+          },
+          {
+            "reference" : "Observation/Observation-271182",
+            "display" : "BMI"
+          },
+          {
+            "reference" : "Observation/Observation-271183",
+            "display" : "Temperature"
+          },
+          {
+            "reference" : "Observation/Observation-271184",
+            "display" : "Systolic Blood Pressure"
+          },
+          {
+            "reference" : "Observation/Observation-271185",
+            "display" : "Diastolic Blood Pressure"
+          }
+        ]
+      },
+      "request" : {
+        "method" : "PUT",
+        "url" : "DiagnosticReport/DiagnosticReport-271179"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Library",
+        "id": "library-bcs-logic",
+        "version": "1.0.1",
+        "status": "active",
+        "experimental": true,
+        "type": {
+          "coding": [
+            {
+              "code": "logic-library"
+            }
+          ]
+        },
+        "dataRequirement": [
+          {
+            "type": "Patient"
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Mammography Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Bilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Condition",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "History of Bilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Claim"
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Bilateral Modifier Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Claim"
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Left Modifier Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Left Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Absence of Left Breast Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Claim"
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Right Modifier Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Procedure",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Unilateral Mastectomy Right Value Set"
+              }
+            ]
+          },
+          {
+            "type": "Observation",
+            "codeFilter": [
+              {
+                "path": "code",
+                "valueSetString": "Absence of Right Breast Value Set"
+              }
+            ]
+          }
+        ],
+        "content": [
+          {
+            "contentType": "application/elm+xml",
+            "data": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGxpYnJhcnkgeG1sbnM9InVybjpobDctb3JnOmVsbTpyMSIgeG1sbnM6dD0idXJuOmhsNy1vcmc6ZWxtLXR5cGVzOnIxIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB4bWxuczpmaGlyPSJodHRwOi8vaGw3Lm9yZy9maGlyIiB4bWxuczpxZG00Mz0idXJuOmhlYWx0aGl0LWdvdjpxZG06djRfMyIgeG1sbnM6cWRtNTM9InVybjpoZWFsdGhpdC1nb3Y6cWRtOnY1XzMiIHhtbG5zOmE9InVybjpobDctb3JnOmNxbC1hbm5vdGF0aW9uczpyMSI+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjYxIiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI2MSIgZW5kQ2hhcj0iMzgiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjg5IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI4OSIgZW5kQ2hhcj0iNDciIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMjk2IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjI5NiIgZW5kQ2hhcj0iNTgiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMzA4IiBzdGFydENoYXI9IjciIGVuZExpbmU9IjMwOCIgZW5kQ2hhcj0iNTIiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMzE0IiBzdGFydENoYXI9IjcwIiBlbmRMaW5lPSIzMTQiIGVuZENoYXI9Ijc5IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjMxNyIgc3RhcnRDaGFyPSI3IiBlbmRMaW5lPSIzMTciIGVuZENoYXI9IjQ5IiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjMyMyIgc3RhcnRDaGFyPSI3MCIgZW5kTGluZT0iMzIzIiBlbmRDaGFyPSI3OSIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIzMzEiIHN0YXJ0Q2hhcj0iNCIgZW5kTGluZT0iMzMxIiBlbmRDaGFyPSI0OSIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIzMzYiIHN0YXJ0Q2hhcj0iNSIgZW5kTGluZT0iMzM2IiBlbmRDaGFyPSI1MCIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIzNTIiIHN0YXJ0Q2hhcj0iNyIgZW5kTGluZT0iMzUyIiBlbmRDaGFyPSI1MiIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSIzNTgiIHN0YXJ0Q2hhcj0iNzAiIGVuZExpbmU9IjM1OCIgZW5kQ2hhcj0iNzkiIG1lc3NhZ2U9Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMzYxIiBzdGFydENoYXI9IjciIGVuZExpbmU9IjM2MSIgZW5kQ2hhcj0iNDQiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iMzY3IiBzdGFydENoYXI9IjcwIiBlbmRMaW5lPSIzNjciIGVuZENoYXI9Ijc5IiBtZXNzYWdlPSJMaXN0LXZhbHVlZCBleHByZXNzaW9uIHdhcyBkZW1vdGVkIHRvIGEgc2luZ2xldG9uLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjM3NCIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSIzNzQiIGVuZENoYXI9IjUzIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjM4MSIgc3RhcnRDaGFyPSIzIiBlbmRMaW5lPSIzODEiIGVuZENoYXI9IjUxIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjM5MyIgc3RhcnRDaGFyPSI3IiBlbmRMaW5lPSIzOTMiIGVuZENoYXI9IjUyIiBtZXNzYWdlPSJDb3VsZCBub3QgcmVzb2x2ZSBtZW1iZXJzaGlwIG9wZXJhdG9yIGZvciB0ZXJtaW5vbG9neSB0YXJnZXQgb2YgdGhlIHJldHJpZXZlLiIgZXJyb3JUeXBlPSJzZW1hbnRpYyIgZXJyb3JTZXZlcml0eT0id2FybmluZyIgeHNpOnR5cGU9ImE6Q3FsVG9FbG1FcnJvciIvPgogICA8YW5ub3RhdGlvbiBzdGFydExpbmU9IjM5OSIgc3RhcnRDaGFyPSI3MCIgZW5kTGluZT0iMzk5IiBlbmRDaGFyPSI3OSIgbWVzc2FnZT0iTGlzdC12YWx1ZWQgZXhwcmVzc2lvbiB3YXMgZGVtb3RlZCB0byBhIHNpbmdsZXRvbi4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSI0MDIiIHN0YXJ0Q2hhcj0iNyIgZW5kTGluZT0iNDAyIiBlbmRDaGFyPSI0NSIgbWVzc2FnZT0iQ291bGQgbm90IHJlc29sdmUgbWVtYmVyc2hpcCBvcGVyYXRvciBmb3IgdGVybWlub2xvZ3kgdGFyZ2V0IG9mIHRoZSByZXRyaWV2ZS4iIGVycm9yVHlwZT0ic2VtYW50aWMiIGVycm9yU2V2ZXJpdHk9Indhcm5pbmciIHhzaTp0eXBlPSJhOkNxbFRvRWxtRXJyb3IiLz4KICAgPGFubm90YXRpb24gc3RhcnRMaW5lPSI0MDgiIHN0YXJ0Q2hhcj0iNzAiIGVuZExpbmU9IjQwOCIgZW5kQ2hhcj0iNzkiIG1lc3NhZ2U9Ikxpc3QtdmFsdWVkIGV4cHJlc3Npb24gd2FzIGRlbW90ZWQgdG8gYSBzaW5nbGV0b24uIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNDE1IiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjQxNSIgZW5kQ2hhcj0iNTQiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxhbm5vdGF0aW9uIHN0YXJ0TGluZT0iNDIyIiBzdGFydENoYXI9IjMiIGVuZExpbmU9IjQyMiIgZW5kQ2hhcj0iNTIiIG1lc3NhZ2U9IkNvdWxkIG5vdCByZXNvbHZlIG1lbWJlcnNoaXAgb3BlcmF0b3IgZm9yIHRlcm1pbm9sb2d5IHRhcmdldCBvZiB0aGUgcmV0cmlldmUuIiBlcnJvclR5cGU9InNlbWFudGljIiBlcnJvclNldmVyaXR5PSJ3YXJuaW5nIiB4c2k6dHlwZT0iYTpDcWxUb0VsbUVycm9yIi8+CiAgIDxpZGVudGlmaWVyIGlkPSJCQ1NfRkhJUiIgdmVyc2lvbj0iMS4wLjEiLz4KICAgPHNjaGVtYUlkZW50aWZpZXIgaWQ9InVybjpobDctb3JnOmVsbSIgdmVyc2lvbj0icjEiLz4KICAgPHVzaW5ncz4KICAgICAgPGRlZiBsb2NhbElkZW50aWZpZXI9IlN5c3RlbSIgdXJpPSJ1cm46aGw3LW9yZzplbG0tdHlwZXM6cjEiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxIiBsb2NhbElkZW50aWZpZXI9IkZISVIiIHVyaT0iaHR0cDovL2hsNy5vcmcvZmhpciIgdmVyc2lvbj0iMy4wLjAiLz4KICAgPC91c2luZ3M+CiAgIDxwYXJhbWV0ZXJzPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE0IiBuYW1lPSJQcm9kdWN0IExpbmUiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8cGFyYW1ldGVyVHlwZVNwZWNpZmllciBsb2NhbElkPSIxMyIgbmFtZT0idDpTdHJpbmciIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTciIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxwYXJhbWV0ZXJUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjE2IiB4c2k6dHlwZT0iSW50ZXJ2YWxUeXBlU3BlY2lmaWVyIj4KICAgICAgICAgICAgPHBvaW50VHlwZSBsb2NhbElkPSIxNSIgbmFtZT0idDpEYXRlVGltZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L3BhcmFtZXRlclR5cGVTcGVjaWZpZXI+CiAgICAgIDwvZGVmPgogICA8L3BhcmFtZXRlcnM+CiAgIDx2YWx1ZVNldHM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMiIgbmFtZT0iQWJzZW5jZSBvZiBMZWZ0IEJyZWFzdCBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEzMjkuMSIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMiIG5hbWU9IkFic2VuY2Ugb2YgUmlnaHQgQnJlYXN0IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTMzMC4yIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iNCIgbmFtZT0iQmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMDQyIiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iNSIgbmFtZT0iQmlsYXRlcmFsIE1vZGlmaWVyIFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTA0My41IiBhY2Nlc3NMZXZlbD0iUHVibGljIi8+CiAgICAgIDxkZWYgbG9jYWxJZD0iNiIgbmFtZT0iSGlzdG9yeSBvZiBCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEzMzEuNiIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjciIG5hbWU9IkxlZnQgTW9kaWZpZXIgVmFsdWUgU2V0IiBpZD0iMi4xNi44NDAuMS4xMTM4ODMuMy40NjQuMTAwNC4xMTQ4LjciIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSI4IiBuYW1lPSJNYW1tb2dyYXBoeSBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjExNjgiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSI5IiBuYW1lPSJSaWdodCBNb2RpZmllciBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEyMzAuMTIiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxMCIgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTI1NiIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICAgICA8ZGVmIGxvY2FsSWQ9IjExIiBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCBWYWx1ZSBTZXQiIGlkPSIyLjE2Ljg0MC4xLjExMzg4My4zLjQ2NC4xMDA0LjEzMzQuMTUiIGFjY2Vzc0xldmVsPSJQdWJsaWMiLz4KICAgICAgPGRlZiBsb2NhbElkPSIxMiIgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFJpZ2h0IFZhbHVlIFNldCIgaWQ9IjIuMTYuODQwLjEuMTEzODgzLjMuNDY0LjEwMDQuMTMzNS4xNiIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIvPgogICA8L3ZhbHVlU2V0cz4KICAgPHN0YXRlbWVudHM+CiAgICAgIDxkZWYgbG9jYWxJZD0iMjciIG5hbWU9IkZpcnN0IFByZWRlY2Vzc29yIFllYXIiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIyNyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0ZpcnN0IFByZWRlY2Vzc29yIFllYXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyNiI+CiAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MSB5ZWFyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4xIHllYXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI2IiBsb3dDbG9zZWQ9InRydWUiIGhpZ2hDbG9zZWQ9ImZhbHNlIiB4c2k6dHlwZT0iSW50ZXJ2YWwiPgogICAgICAgICAgICA8bG93IGxvY2FsSWQ9IjIxIiB4c2k6dHlwZT0iU3VidHJhY3QiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOSIgeHNpOnR5cGU9IlN0YXJ0Ij4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTgiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwIiB2YWx1ZT0iMSIgdW5pdD0ieWVhciIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIyNSIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjMiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMiIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQiIHZhbHVlPSIxIiB1bml0PSJ5ZWFyIiB4c2k6dHlwZT0iUXVhbnRpdHkiLz4KICAgICAgICAgICAgPC9oaWdoPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjM3IiBuYW1lPSJTZWNvbmQgUHJlZGVjZXNzb3IgWWVhciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjM3Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7U2Vjb25kIFByZWRlY2Vzc29yIFllYXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzNiI+CiAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MiB5ZWFyczwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MiB5ZWFyczwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzYiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0iZmFsc2UiIHhzaTp0eXBlPSJJbnRlcnZhbCI+CiAgICAgICAgICAgIDxsb3cgbG9jYWxJZD0iMzEiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5IiB4c2k6dHlwZT0iU3RhcnQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyOCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzAiIHZhbHVlPSIyIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIzNSIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzMiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMiIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzQiIHZhbHVlPSIyIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0OSIgbmFtZT0iVGhpcmQgUHJlZGVjZXNzb3IgUXVhcnRlciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjQ5Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7VGhpcmQgUHJlZGVjZXNzb3IgUXVhcnRlciZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQ4Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5JbnRlcnZhbFs8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGFydCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gLSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+MiB5ZWFyczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+IC0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPjMgbW9udGhzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4zIHllYXJzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0OCIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJmYWxzZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSI0MyIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDEiIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM5IiB4c2k6dHlwZT0iU3RhcnQiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzOCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDAiIHZhbHVlPSIyIiB1bml0PSJ5ZWFycyIgeHNpOnR5cGU9IlF1YW50aXR5Ii8+CiAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDIiIHZhbHVlPSIzIiB1bml0PSJtb250aHMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgPGhpZ2ggbG9jYWxJZD0iNDciIHhzaTp0eXBlPSJTdWJ0cmFjdCI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ1IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ2IiB2YWx1ZT0iMyIgdW5pdD0ieWVhcnMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2hpZ2g+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTciIG5hbWU9Ikxvb2tiYWNrIEludGVydmFsIDI3IE1vcmUgTW9udGhzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNTciPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtMb29rYmFjayBJbnRlcnZhbCAyNyBNb3JlIE1vbnRocyZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjU2Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5JbnRlcnZhbFs8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXJ0IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiAtIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4yNyBtb250aHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTUiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1NiIgbG93Q2xvc2VkPSJ0cnVlIiBoaWdoQ2xvc2VkPSJmYWxzZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSI1MyIgeHNpOnR5cGU9IlN1YnRyYWN0Ij4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTEiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUwIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MiIgdmFsdWU9IjI3IiB1bml0PSJtb250aHMiIHhzaTp0eXBlPSJRdWFudGl0eSIvPgogICAgICAgICAgICA8L2xvdz4KICAgICAgICAgICAgPGhpZ2ggbG9jYWxJZD0iNTUiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1NCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgIDwvaGlnaD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBuYW1lPSJQYXRpZW50IiBjb250ZXh0PSJQYXRpZW50Ij4KICAgICAgICAgPGV4cHJlc3Npb24geHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICA8b3BlcmFuZCBkYXRhVHlwZT0iZmhpcjpQYXRpZW50IiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI2MyIgbmFtZT0iSXMgRmVtYWxlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNjMiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBGZW1hbGUmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI2MiI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjAiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGF0aWVudDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmdlbmRlcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPidmZW1hbGUnPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNjIiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjYwIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1OSIgcGF0aD0iZ2VuZGVyIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjU4IiBuYW1lPSJQYXRpZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2MSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZlbWFsZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI4NyIgbmFtZT0iVG9EYXRlIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI4NyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uICZxdW90O1RvRGF0ZSZxdW90OyhWYWx1ZSA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI3MyI+CiAgICAgICAgICAgICAgICAgIDxhOnM+RGF0ZVRpbWU8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+KToKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9Ijg2Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI4NiI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+RGF0ZVRpbWUoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnllYXIgZnJvbSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPm1vbnRoIGZyb20gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9Ijc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kYXkgZnJvbSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwgMCwgMCwgMCwgMCwgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnRpbWV6b25lIGZyb20gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iODYiIHhzaTp0eXBlPSJEYXRlVGltZSI+CiAgICAgICAgICAgIDx5ZWFyIGxvY2FsSWQ9Ijc1IiBwcmVjaXNpb249IlllYXIiIHhzaTp0eXBlPSJEYXRlVGltZUNvbXBvbmVudEZyb20iPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI3NCIgbmFtZT0iVmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwveWVhcj4KICAgICAgICAgICAgPG1vbnRoIGxvY2FsSWQ9Ijc3IiBwcmVjaXNpb249Ik1vbnRoIiB4c2k6dHlwZT0iRGF0ZVRpbWVDb21wb25lbnRGcm9tIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNzYiIG5hbWU9IlZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8L21vbnRoPgogICAgICAgICAgICA8ZGF5IGxvY2FsSWQ9Ijc5IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkRhdGVUaW1lQ29tcG9uZW50RnJvbSI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijc4IiBuYW1lPSJWYWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgPC9kYXk+CiAgICAgICAgICAgIDxob3VyIGxvY2FsSWQ9IjgwIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjAiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgIDxtaW51dGUgbG9jYWxJZD0iODEiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPHNlY29uZCBsb2NhbElkPSI4MiIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSIwIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8bWlsbGlzZWNvbmQgbG9jYWxJZD0iODMiIHZhbHVlVHlwZT0idDpJbnRlZ2VyIiB2YWx1ZT0iMCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPHRpbWV6b25lT2Zmc2V0IGxvY2FsSWQ9Ijg1IiB4c2k6dHlwZT0iVGltZXpvbmVGcm9tIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iODQiIG5hbWU9IlZhbHVlIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICA8L3RpbWV6b25lT2Zmc2V0PgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgIDxvcGVyYW5kIG5hbWU9IlZhbHVlIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjczIiBuYW1lPSJ0OkRhdGVUaW1lIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iOTIiIG5hbWU9IkNhbGVuZGFyQWdlSW5ZZWFyc0F0IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI5MiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lIGZ1bmN0aW9uIENhbGVuZGFyQWdlSW5ZZWFyc0F0KEJpcnRoRGF0ZVRpbWUgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNzAiPgogICAgICAgICAgICAgICAgICA8YTpzPkRhdGVUaW1lPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPiwgQXNPZiA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI3MSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+RGF0ZVRpbWU8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnM+KToKICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjkxIj4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI5MSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+eWVhcnMgYmV0d2VlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+VG9EYXRlKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CaXJ0aERhdGVUaW1lPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+YW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Ub0RhdGUoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkFzT2Y8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI5MSIgcHJlY2lzaW9uPSJZZWFyIiB4c2k6dHlwZT0iRHVyYXRpb25CZXR3ZWVuIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iODgiIG5hbWU9IlRvRGF0ZSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNzIiIG5hbWU9IkJpcnRoRGF0ZVRpbWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTAiIG5hbWU9IlRvRGF0ZSIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iODkiIG5hbWU9IkFzT2YiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJCaXJ0aERhdGVUaW1lIj4KICAgICAgICAgICAgPG9wZXJhbmRUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjcwIiBuYW1lPSJ0OkRhdGVUaW1lIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0iQXNPZiI+CiAgICAgICAgICAgIDxvcGVyYW5kVHlwZVNwZWNpZmllciBsb2NhbElkPSI3MSIgbmFtZT0idDpEYXRlVGltZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9Ijk3IiBuYW1lPSJJcyBBZ2UgNTIgdG8gNzQgYXQgRW5kIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iOTciPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBBZ2UgNTIgdG8gNzQgYXQgRW5kJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iOTYiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjkzIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz5DYWxlbmRhckFnZUluWWVhcnNBdCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjY1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QYXRpZW50PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+YmlydGhEYXRlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjY5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4gYmV0d2VlbiA1MiBhbmQgNzQ8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9Ijk2IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IkdyZWF0ZXJPckVxdWFsIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iOTMiIG5hbWU9IkNhbGVuZGFyQWdlSW5ZZWFyc0F0IiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2NyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNjYiIHBhdGg9ImJpcnRoRGF0ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI2NSIgbmFtZT0iUGF0aWVudCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNjkiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2OCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5NCIgdmFsdWVUeXBlPSJ0OkludGVnZXIiIHZhbHVlPSI1MiIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iTGVzc09yRXF1YWwiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI5MyIgbmFtZT0iQ2FsZW5kYXJBZ2VJblllYXJzQXQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY3IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI2NiIgcGF0aD0iYmlydGhEYXRlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjY1IiBuYW1lPSJQYXRpZW50IiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI2OSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY4IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijk1IiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9Ijc0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTAwIiBuYW1lPSJJbml0aWFsIFBvcHVsYXRpb24iIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxMDAiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJbml0aWFsIFBvcHVsYXRpb24mcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI5OSI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNjQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIEZlbWFsZSZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cz4KCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iOTgiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIEFnZSA1MiB0byA3NCBhdCBFbmQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI5OSIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjY0IiBuYW1lPSJJcyBGZW1hbGUiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9Ijk4IiBuYW1lPSJJcyBBZ2UgNTIgdG8gNzQgYXQgRW5kIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEwMiIgbmFtZT0iRGVub21pbmF0b3IiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxMDIiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtEZW5vbWluYXRvciZxdW90OzoKICAgIC8vIHdhcyAmcXVvdDtJbml0aWFsIFBvcHVsYXRpb24mcXVvdDssIGJ1dCB0aGF0IHdpbGwgYWx3YXlzIGJlIHRydWUgaWYgdGhpcyBleHByZXNzaW9uIGlzIGV4ZWN1dGVkCgl0cnVlPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEwMSIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJ0cnVlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIxMjAiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIiB4c2k6dHlwZT0iRnVuY3Rpb25EZWYiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxMjAiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSBmdW5jdGlvbiBQZXJpb2RUb0ludGVydmFsT2ZEVCh2YWx1ZSA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxMTIiPgogICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUGVyaW9kPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPik6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxMTkiPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjExOSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+SW50ZXJ2YWxbPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7c3RhcnQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExOCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O2VuZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxMTkiIGxvd0Nsb3NlZD0idHJ1ZSIgaGlnaENsb3NlZD0idHJ1ZSIgeHNpOnR5cGU9IkludGVydmFsIj4KICAgICAgICAgICAgPGxvdyBsb2NhbElkPSIxMTUiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjExNCIgcGF0aD0ic3RhcnQiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTEzIiBuYW1lPSJ2YWx1ZSIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgIDwvbG93PgogICAgICAgICAgICA8aGlnaCBsb2NhbElkPSIxMTgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjExNyIgcGF0aD0iZW5kIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjExNiIgbmFtZT0idmFsdWUiIHhzaTp0eXBlPSJPcGVyYW5kUmVmIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICA8L2hpZ2g+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgPG9wZXJhbmQgbmFtZT0idmFsdWUiPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMTEyIiBuYW1lPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjEyNyIgbmFtZT0iSXMgTWFtbW9ncmFtIEluIExhc3QgMzkgTW9udGhzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMTI3Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgTWFtbW9ncmFtIEluIExhc3QgMzkgTW9udGhzJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iMTI2Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjUiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjUiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01hbW1vZ3JhcGh5IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjExMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW5jbHVkZWQgaW4gZGF5IG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TG9va2JhY2sgSW50ZXJ2YWwgMjcgTW9yZSBNb250aHMmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEyNiIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEyNSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxMDQiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTAzIiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9Ik1hbW1vZ3JhcGh5IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIxMjQiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMDkiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjEwNyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTA2IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMDgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTIzIiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IkluY2x1ZGVkSW4iPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMjEiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMTEiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTIyIiBuYW1lPSJMb29rYmFjayBJbnRlcnZhbCAyNyBNb3JlIE1vbnRocyIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iMTI5IiBuYW1lPSJOdW1lcmF0b3IiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxMjkiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtOdW1lcmF0b3ImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxMjgiPgogICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIE1hbW1vZ3JhbSBJbiBMYXN0IDM5IE1vbnRocyZxdW90OzwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTI4IiBuYW1lPSJJcyBNYW1tb2dyYW0gSW4gTGFzdCAzOSBNb250aHMiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE0NyIgbmFtZT0iSXMgQmlsYXRlcmFsIE1hc3RlY3RvbXkiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIxNDciPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBCaWxhdGVyYWwgTWFzdGVjdG9teSZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjE0NiI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ1Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQ1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxMzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjEzNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxNDYiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDUiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTMxIiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjEzMCIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTQ0IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTM2IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzQiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjEzMyIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTM1IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE0MyIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDAiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzkiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxMzgiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDIiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNDEiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjE2NSIgbmFtZT0iSXMgSGlzdG9yeSBPZiBCaWxhdGVyYWwgTWFzdGVjdG9teSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjE2NSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIEhpc3RvcnkgT2YgQmlsYXRlcmFsIE1hc3RlY3RvbXkmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIxNjQiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W0NvbmRpdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SGlzdG9yeSBvZiBCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IENvbmQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Db25kPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZlcmlmaWNhdGlvblN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbmZpcm1lZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q29uZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5hc3NlcnRlZERhdGU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE1OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTY0IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTYzIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE1MCIgYWxpYXM9IkNvbmQiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIxNDkiIGRhdGFUeXBlPSJmaGlyOkNvbmRpdGlvbiIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iSGlzdG9yeSBvZiBCaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTYyIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTU1IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNTMiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE1MiIgcGF0aD0idmVyaWZpY2F0aW9uU3RhdHVzIiBzY29wZT0iQ29uZCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTU0IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29uZmlybWVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2MSIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNTgiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE1NyIgcGF0aD0iYXNzZXJ0ZWREYXRlIiBzY29wZT0iQ29uZCIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTYwIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTU5IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIyNDYiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIEJpbGF0ZXJhbCBNb2RpZmllciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjI0NiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIEJpbGF0ZXJhbCBNb2RpZmllciZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI0NSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ0Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE2OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bQ2xhaW1dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQ2xhaW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5DbGFpbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTcxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhY3RpdmUnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q2xhaW0ucHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gQmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndpdGggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTkyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE3NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTkxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJc3VjaCB0aGF0CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlmIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxOTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQl0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWVsc2UgZmFsc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIwOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7QmlsYXRlcmFsIE1vZGlmaWVyIFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjExIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCXN1Y2ggdGhhdAoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjIzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjM2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2MyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyMzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQllbHNlIGZhbHNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjQ1IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQ0IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE2OSIgYWxpYXM9IkNsYWltIj4KICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTY4IiBkYXRhVHlwZT0iZmhpcjpDbGFpbSIgeHNpOnR5cGU9IlJldHJpZXZlIi8+CiAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMjQzIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTc0IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNzIiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE3MSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iQ2xhaW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE3MyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImFjdGl2ZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDIiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDEiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMTc2IiBhbGlhcz0iQmJFbGVtIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTc1IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJDbGFpbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICA8cmVsYXRpb25zaGlwIGxvY2FsSWQ9IjIwOCIgYWxpYXM9IlByb2MxIiB4c2k6dHlwZT0iV2l0aCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjE5MiIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIxNzgiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMTc3IiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IlVuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMTkxIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTgzIiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODEiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjE4MCIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMTgyIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE5MCIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODciIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODYiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODUiIHBhdGg9InBlcmZvcm1lZCIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODkiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxODgiIG5hbWU9Ik1lYXN1cmVtZW50IFBlcmlvZCIgeHNpOnR5cGU9IlBhcmFtZXRlclJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93aGVyZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c3VjaFRoYXQgbG9jYWxJZD0iMjA3IiB4c2k6dHlwZT0iSWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZGl0aW9uIGFzVHlwZT0idDpCb29sZWFuIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOTciIHhzaTp0eXBlPSJJcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE5NSIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlzVHlwZVNwZWNpZmllciBsb2NhbElkPSIxOTYiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25kaXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVuIGxvY2FsSWQ9IjIwNSIgeHNpOnR5cGU9IkVxdWl2YWxlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMDIiIHBhdGg9ImlkZW50aWZpZXIiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjAxIiBzdHJpY3Q9ImZhbHNlIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxOTkiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iMjAwIiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCB4c2k6dHlwZT0iU2luZ2xldG9uRnJvbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIwNCIgcGF0aD0iaWRlbnRpZmllciIgc2NvcGU9IlByb2MxIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxlbHNlIGxvY2FsSWQ9IjIwNiIgdmFsdWVUeXBlPSJ0OkJvb2xlYW4iIHZhbHVlPSJmYWxzZSIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdWNoVGhhdD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9yZWxhdGlvbnNoaXA+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iMjQwIiBhbGlhcz0iUHJvYzIiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjI0IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjIxMCIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyMDkiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iQmlsYXRlcmFsIE1vZGlmaWVyIFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIyMjMiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTUiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxMyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjEyIiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyMTQiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjIyIiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxOSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxOCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIxNyIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyMSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyMCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSIyMzkiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIyOSIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjI3IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjIyOCIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iMjM3IiB4c2k6dHlwZT0iRXF1aXZhbGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzNCIgcGF0aD0iaWRlbnRpZmllciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyMzMiIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjIzMSIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSIyMzIiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjM2IiBwYXRoPSJpZGVudGlmaWVyIiBzY29wZT0iUHJvYzIiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iMjM4IiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIyOTciIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBUd2ljZSBTcHJlYWQgVHdvIFdlZWtzIiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMjk3Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFR3aWNlIFNwcmVhZCBUd28gV2Vla3MmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIyOTYiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI0OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cmV0dXJuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gV2hlblVNMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2l0aCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjY1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5yZXR1cm4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gV2hlblVNMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCXN1Y2ggdGhhdCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyOTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI4NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmRpZmZlcmVuY2UgaW4gZGF5cyBiZXR3ZWVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5XaGVuVU0xPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhcnQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5XaGVuVU0yPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPj0gMTQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyODIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPldoZW5VTTE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5XaGVuVU0yPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjI5MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIyOTYiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyOTUiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMjYxIiBhbGlhcz0iV2hlblVNMSI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI2MCIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyNTAiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjQ5IiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IlVuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMjU1IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNTMiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI1MiIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjU0IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICA8cmV0dXJuIGxvY2FsSWQ9IjI1OSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI1OCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI1NyIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBsb2NhbElkPSIyOTQiIGFsaWFzPSJXaGVuVU0yIiB4c2k6dHlwZT0iV2l0aCI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI3MyIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIyNjMiIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMjYyIiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IlVuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQiIHhzaTp0eXBlPSJWYWx1ZVNldFJlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICA8d2hlcmUgbG9jYWxJZD0iMjY4IiB4c2k6dHlwZT0iRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNjYiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjI2NSIgcGF0aD0ic3RhdHVzIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjY3IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iY29tcGxldGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICA8cmV0dXJuIGxvY2FsSWQ9IjI3MiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI3MSIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI3MCIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICA8L3JldHVybj4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICA8c3VjaFRoYXQgbG9jYWxJZD0iMjkzIiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjg3IiB4c2k6dHlwZT0iQW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjgxIiB4c2k6dHlwZT0iR3JlYXRlck9yRXF1YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNzkiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iRGlmZmVyZW5jZUJldHdlZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNzYiIHhzaTp0eXBlPSJTdGFydCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI3NSIgbmFtZT0iV2hlblVNMSIgeHNpOnR5cGU9IkFsaWFzUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjc4IiB4c2k6dHlwZT0iU3RhcnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNzciIG5hbWU9IldoZW5VTTIiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjgwIiB2YWx1ZVR5cGU9InQ6SW50ZWdlciIgdmFsdWU9IjE0IiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI4NiIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODMiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODIiIG5hbWU9IldoZW5VTTEiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI4NSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI4NCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5MiIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODkiIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyODgiIG5hbWU9IldoZW5VTTIiIHhzaTp0eXBlPSJBbGlhc1JlZiIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5MSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjI5MCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjMwMCIgbmFtZT0iSXMgTGFja2luZyBCb3RoIEJyZWFzdHMiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSIzMDAiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBMYWNraW5nIEJvdGggQnJlYXN0cyZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjI5OSI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjQ4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIxNjciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjE0OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgQmlsYXRlcmFsIE1hc3RlY3RvbXkmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMTY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBIaXN0b3J5IE9mIEJpbGF0ZXJhbCBNYXN0ZWN0b215JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQlvciA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIyNDciPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIEJpbGF0ZXJhbCBNb2RpZmllciZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CgkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMjk4Ij4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVHdpY2UgU3ByZWFkIFR3byBXZWVrcyZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjI5OSIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMjQ4IiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIxNjciIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE0OCIgbmFtZT0iSXMgQmlsYXRlcmFsIE1hc3RlY3RvbXkiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjE2NiIgbmFtZT0iSXMgSGlzdG9yeSBPZiBCaWxhdGVyYWwgTWFzdGVjdG9teSIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyNDciIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIEJpbGF0ZXJhbCBNb2RpZmllciIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIyOTgiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBUd2ljZSBTcHJlYWQgVHdvIFdlZWtzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgIDwvZGVmPgogICAgICA8ZGVmIGxvY2FsSWQ9IjM4MCIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFdpdGggTGVmdCBNb2RpZmllciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjM4MCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIExlZnQgTW9kaWZpZXImcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzNzkiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3OCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3OCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W0NsYWltXTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IENsYWltPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+Q2xhaW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzA3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nYWN0aXZlJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzc2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNsYWltLnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IEJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aXRoIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7VW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5dPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2NvbXBsZXRlZCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMxOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJKTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gUHJvYzE8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCXN1Y2ggdGhhdAoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzMwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJdGhlbiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGFzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjMzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IH4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2MxPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzMzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQllbHNlIGZhbHNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2l0aCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0xlZnQgTW9kaWZpZXIgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM0NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ID0gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4nY29tcGxldGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5QZXJpb2RUb0ludGVydmFsT2ZEVCg8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM1MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzUxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wZXJmb3JtZWQ8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPik8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBzYW1lIGRheSBvciBiZWZvcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lbmQgb2YgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtNZWFzdXJlbWVudCBQZXJpb2QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJc3VjaCB0aGF0CgkJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlmIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBpcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQl0aGVuIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzY4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPig8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzY0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5CYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cHJvY2VkdXJlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gYXMgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5GSElSLlJlZmVyZW5jZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzY4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzNzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM2OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM3MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWRlbnRpZmllcjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCWVsc2UgZmFsc2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkpPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNzkiIHhzaTp0eXBlPSJFeGlzdHMiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNzgiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzAzIiBhbGlhcz0iQ2xhaW0iPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMDIiIGRhdGFUeXBlPSJmaGlyOkNsYWltIiB4c2k6dHlwZT0iUmV0cmlldmUiLz4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzNzciIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMDgiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMwNiIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzA1IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJDbGFpbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzA3IiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYWN0aXZlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3NiIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM3NSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMTAiIGFsaWFzPSJCYkVsZW0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMDkiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkNsYWltIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWxhdGlvbnNoaXAgbG9jYWxJZD0iMzQyIiBhbGlhcz0iUHJvYzEiIHhzaTp0eXBlPSJXaXRoIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzI2IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjMxMiIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzMTEiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzMjUiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMTciIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMxNSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzE0IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMTYiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzI0IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMyMSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMyMCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMxOSIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMyMyIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMyMiIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSIzNDEiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMzMSIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzI5IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjMzMCIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iMzM5IiB4c2k6dHlwZT0iRXF1aXZhbGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMzNiIgcGF0aD0iaWRlbnRpZmllciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzMzUiIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjMzMyIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSIzMzQiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzM4IiBwYXRoPSJpZGVudGlmaWVyIiBzY29wZT0iUHJvYzEiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iMzQwIiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBsb2NhbElkPSIzNzQiIGFsaWFzPSJQcm9jMiIgeHNpOnR5cGU9IldpdGgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzNTgiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzQ0IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjM0MyIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJMZWZ0IE1vZGlmaWVyIFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSIzNTciIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNDkiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM0NyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iMzQ2IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzNDgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzU2IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1MyIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1MiIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1MSIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1NSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM1NCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSIzNzMiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM2MyIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzYxIiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjM2MiIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iMzcxIiB4c2k6dHlwZT0iRXF1aXZhbGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM2OCIgcGF0aD0iaWRlbnRpZmllciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzNjciIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM2NSIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSIzNjYiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzcwIiBwYXRoPSJpZGVudGlmaWVyIiBzY29wZT0iUHJvYzIiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iMzcyIiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSIzOTkiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBMZWZ0IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iMzk5Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQmcXVvdDs6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSIzOTgiPgogICAgICAgICAgICAgICAgICA8YTpzPmV4aXN0czwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5NyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5NyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzgzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+W1Byb2NlZHVyZTogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7VW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzk2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM4NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzg1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzOTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzkwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjM5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iMzk4IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzk3IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjM4MyIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSIzODIiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IExlZnQgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjM5NiIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4OCIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzg2IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSIzODUiIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4NyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzOTUiIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzkyIiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzkxIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzkwIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzk0IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iMzkzIiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI0MjAiIG5hbWU9IklzIEFic2VuY2UgT2YgTGVmdCBCcmVhc3QiIGNvbnRleHQ9IlBhdGllbnQiIGFjY2Vzc0xldmVsPSJQdWJsaWMiPgogICAgICAgICA8YW5ub3RhdGlvbiB4c2k6dHlwZT0iYTpBbm5vdGF0aW9uIj4KICAgICAgICAgICAgPGE6cyByPSI0MjAiPgogICAgICAgICAgICAgICA8YTpzPmRlZmluZSAmcXVvdDtJcyBBYnNlbmNlIE9mIExlZnQgQnJlYXN0JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNDE5Ij4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTgiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTgiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltPYnNlcnZhdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7QWJzZW5jZSBvZiBMZWZ0IEJyZWFzdCBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IE9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDE3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDA1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDA1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gaW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz57IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2ZpbmFsJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4sIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQwOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2FtZW5kZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB9PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPk9iczwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDEyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5lZmZlY3RpdmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MTMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDE5IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDE4IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQwMyIgYWxpYXM9Ik9icyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQwMiIgZGF0YVR5cGU9ImZoaXI6T2JzZXJ2YXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkFic2VuY2Ugb2YgTGVmdCBCcmVhc3QgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjQxNyIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxMCIgeHNpOnR5cGU9IkluIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDA2IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0MDUiIHBhdGg9InN0YXR1cyIgc2NvcGU9Ik9icyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDA5IiB4c2k6dHlwZT0iTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IGxvY2FsSWQ9IjQwNyIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImZpbmFsIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSI0MDgiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhbWVuZGVkIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDE2IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxMyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDEyIiBwYXRoPSJlZmZlY3RpdmUiIHNjb3BlPSJPYnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxNSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQxNCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNDIzIiBuYW1lPSJJcyBMYWNraW5nIExlZnQgQnJlYXN0IiBjb250ZXh0PSJQYXRpZW50IiBhY2Nlc3NMZXZlbD0iUHVibGljIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNDIzIj4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgJnF1b3Q7SXMgTGFja2luZyBMZWZ0IEJyZWFzdCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjQyMiI+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSIzODEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIExlZnQgTW9kaWZpZXImcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+CgkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDIxIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBBYnNlbmNlIE9mIExlZnQgQnJlYXN0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDIyIiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MDEiIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjM4MSIgbmFtZT0iSXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFdpdGggTGVmdCBNb2RpZmllciIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDAwIiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgTGVmdCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MjEiIG5hbWU9IklzIEFic2VuY2UgT2YgTGVmdCBCcmVhc3QiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTAzIiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBSaWdodCBNb2RpZmllciIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjUwMyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBXaXRoIFJpZ2h0IE1vZGlmaWVyJnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTAyIj4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDEiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDEiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltDbGFpbV08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBDbGFpbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2hlcmUgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTAwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDI4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkNsYWltPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnN0YXR1czwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQyOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiA9IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzMCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+J2FjdGl2ZSc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJYW5kIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDk4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDMyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5DbGFpbS5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBCYkVsZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+d2l0aCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0OSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KAoJCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltQcm9jZWR1cmU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O1VuaWxhdGVyYWwgTWFzdGVjdG9teSBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQzNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDM3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MzkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQ3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ0MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDQxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NDUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2MxPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQlzdWNoIHRoYXQKCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWYgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGlzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCXRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ1OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBhcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jMTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDYxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJZWxzZSBmYWxzZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndpdGggPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDY2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtSaWdodCBNb2RpZmllciBWYWx1ZSBTZXQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+XTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDgwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3MiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDcwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ2OCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDY5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCQkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDc5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ3NCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDczIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnBlcmZvcm1lZDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IHNhbWUgZGF5IG9yIGJlZm9yZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0NzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O01lYXN1cmVtZW50IFBlcmlvZCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IFByb2MyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQlzdWNoIHRoYXQKCQkJCQkJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+aWYgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDg2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+QmJFbGVtPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnByb2NlZHVyZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGlzIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ4NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+RkhJUi5SZWZlcmVuY2U8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQkJCQkJCXRoZW4gPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDk0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkJiRWxlbTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDg4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5wcm9jZWR1cmU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBhcyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0ODkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPkZISVIuUmVmZXJlbmNlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0OTEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmlkZW50aWZpZXI8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiB+IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjQ5MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5Qcm9jMjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNDkzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5pZGVudGlmaWVyPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQkJCQkJZWxzZSBmYWxzZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCSk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgoJKTwvYTpzPgogICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgIDwvYTpzPgogICAgICAgICA8L2Fubm90YXRpb24+CiAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjUwMiIgeHNpOnR5cGU9IkV4aXN0cyI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUwMSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0MjYiIGFsaWFzPSJDbGFpbSI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQyNSIgZGF0YVR5cGU9ImZoaXI6Q2xhaW0iIHhzaTp0eXBlPSJSZXRyaWV2ZSIvPgogICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjUwMCIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQzMSIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDI5IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0MjgiIHBhdGg9InN0YXR1cyIgc2NvcGU9IkNsYWltIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MzAiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJhY3RpdmUiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDk5IiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDk4IiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQzMyIgYWxpYXM9IkJiRWxlbSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQzMiIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQ2xhaW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgPHJlbGF0aW9uc2hpcCBsb2NhbElkPSI0NjUiIGFsaWFzPSJQcm9jMSIgeHNpOnR5cGU9IldpdGgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI0NDkiIHhzaTp0eXBlPSJRdWVyeSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDM1IiBhbGlhcz0iUHJvYyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQzNCIgZGF0YVR5cGU9ImZoaXI6UHJvY2VkdXJlIiBjb2RlUHJvcGVydHk9ImNvZGUiIHhzaTp0eXBlPSJSZXRyaWV2ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb2RlcyBuYW1lPSJVbmlsYXRlcmFsIE1hc3RlY3RvbXkgVmFsdWUgU2V0IiB4c2k6dHlwZT0iVmFsdWVTZXRSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdoZXJlIGxvY2FsSWQ9IjQ0OCIgeHNpOnR5cGU9IkFuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ0MCIgeHNpOnR5cGU9IkVxdWFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDM4IiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0MzciIHBhdGg9InN0YXR1cyIgc2NvcGU9IlByb2MiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQzOSIgdmFsdWVUeXBlPSJ0OlN0cmluZyIgdmFsdWU9ImNvbXBsZXRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NDciIHByZWNpc2lvbj0iRGF5IiB4c2k6dHlwZT0iU2FtZU9yQmVmb3JlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQ0IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQzIiBuYW1lPSJQZXJpb2RUb0ludGVydmFsT2ZEVCIgeHNpOnR5cGU9IkZ1bmN0aW9uUmVmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgYXNUeXBlPSJmaGlyOlBlcmlvZCIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQyIiBwYXRoPSJwZXJmb3JtZWQiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQ2IiB4c2k6dHlwZT0iRW5kIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDQ1IiBuYW1lPSJNZWFzdXJlbWVudCBQZXJpb2QiIHhzaTp0eXBlPSJQYXJhbWV0ZXJSZWYiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN1Y2hUaGF0IGxvY2FsSWQ9IjQ2NCIgeHNpOnR5cGU9IklmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmRpdGlvbiBhc1R5cGU9InQ6Qm9vbGVhbiIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDU0IiB4c2k6dHlwZT0iSXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NTIiIHBhdGg9InByb2NlZHVyZSIgc2NvcGU9IkJiRWxlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpc1R5cGVTcGVjaWZpZXIgbG9jYWxJZD0iNDUzIiBuYW1lPSJmaGlyOlJlZmVyZW5jZSIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZGl0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhlbiBsb2NhbElkPSI0NjIiIHhzaTp0eXBlPSJFcXVpdmFsZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDU5IiBwYXRoPSJpZGVudGlmaWVyIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjQ1OCIgc3RyaWN0PSJmYWxzZSIgeHNpOnR5cGU9IkFzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDU2IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjQ1NyIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgeHNpOnR5cGU9IlNpbmdsZXRvbkZyb20iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NjEiIHBhdGg9ImlkZW50aWZpZXIiIHNjb3BlPSJQcm9jMSIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZWxzZSBsb2NhbElkPSI0NjMiIHZhbHVlVHlwZT0idDpCb29sZWFuIiB2YWx1ZT0iZmFsc2UiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3VjaFRoYXQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVsYXRpb25zaGlwPgogICAgICAgICAgICAgICAgICAgICAgICA8cmVsYXRpb25zaGlwIGxvY2FsSWQ9IjQ5NyIgYWxpYXM9IlByb2MyIiB4c2k6dHlwZT0iV2l0aCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjQ4MSIgeHNpOnR5cGU9IlF1ZXJ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0NjciIGFsaWFzPSJQcm9jIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNDY2IiBkYXRhVHlwZT0iZmhpcjpQcm9jZWR1cmUiIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IlJpZ2h0IE1vZGlmaWVyIFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSI0ODAiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NzIiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3MCIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNDY5IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0NzEiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDc5IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3NiIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3NSIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3NCIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3OCIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ3NyIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4cHJlc3Npb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdWNoVGhhdCBsb2NhbElkPSI0OTYiIHhzaTp0eXBlPSJJZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25kaXRpb24gYXNUeXBlPSJ0OkJvb2xlYW4iIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ4NiIgeHNpOnR5cGU9IklzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDg0IiBwYXRoPSJwcm9jZWR1cmUiIHNjb3BlPSJCYkVsZW0iIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aXNUeXBlU3BlY2lmaWVyIGxvY2FsSWQ9IjQ4NSIgbmFtZT0iZmhpcjpSZWZlcmVuY2UiIHhzaTp0eXBlPSJOYW1lZFR5cGVTcGVjaWZpZXIiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmRpdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoZW4gbG9jYWxJZD0iNDk0IiB4c2k6dHlwZT0iRXF1aXZhbGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ5MSIgcGF0aD0iaWRlbnRpZmllciIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI0OTAiIHN0cmljdD0iZmFsc2UiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjQ4OCIgcGF0aD0icHJvY2VkdXJlIiBzY29wZT0iQmJFbGVtIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFzVHlwZVNwZWNpZmllciBsb2NhbElkPSI0ODkiIG5hbWU9ImZoaXI6UmVmZXJlbmNlIiB4c2k6dHlwZT0iTmFtZWRUeXBlU3BlY2lmaWVyIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc291cmNlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIHhzaTp0eXBlPSJTaW5nbGV0b25Gcm9tIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNDkzIiBwYXRoPSJpZGVudGlmaWVyIiBzY29wZT0iUHJvYzIiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGVsc2UgbG9jYWxJZD0iNDk1IiB2YWx1ZVR5cGU9InQ6Qm9vbGVhbiIgdmFsdWU9ImZhbHNlIiB4c2k6dHlwZT0iTGl0ZXJhbCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N1Y2hUaGF0PgogICAgICAgICAgICAgICAgICAgICAgICA8L3JlbGF0aW9uc2hpcD4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgIDwvd2hlcmU+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI1MjIiIG5hbWU9IklzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjUyMiI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIFVuaWxhdGVyYWwgTWFzdGVjdG9teSBSaWdodCZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjUyMSI+CiAgICAgICAgICAgICAgICAgIDxhOnM+ZXhpc3RzPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIwIj4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4oCgkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIwIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTA1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5bUHJvY2VkdXJlOiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtVbmlsYXRlcmFsIE1hc3RlY3RvbXkgUmlnaHQgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBQcm9jPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTE5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz53aGVyZSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxMSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTA5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UHJvYzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTA4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zdGF0dXM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MDkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gPSA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidjb21wbGV0ZWQnPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJCWFuZCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxNCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+UGVyaW9kVG9JbnRlcnZhbE9mRFQoPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTEzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MTIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlByb2M8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxMyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+cGVyZm9ybWVkPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxNyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUxNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNTIxIiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTIwIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUwNiIgYWxpYXM9IlByb2MiPgogICAgICAgICAgICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1MDUiIGRhdGFUeXBlPSJmaGlyOlByb2NlZHVyZSIgY29kZVByb3BlcnR5PSJjb2RlIiB4c2k6dHlwZT0iUmV0cmlldmUiPgogICAgICAgICAgICAgICAgICAgICA8Y29kZXMgbmFtZT0iVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFJpZ2h0IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSI1MTkiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MTEiIHhzaTp0eXBlPSJFcXVhbCI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUwOSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTA4IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJQcm9jIiB4c2k6dHlwZT0iUHJvcGVydHkiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MTAiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJjb21wbGV0ZWQiIHhzaTp0eXBlPSJMaXRlcmFsIi8+CiAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTE4IiBwcmVjaXNpb249IkRheSIgeHNpOnR5cGU9IlNhbWVPckJlZm9yZSI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUxNSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUxNCIgbmFtZT0iUGVyaW9kVG9JbnRlcnZhbE9mRFQiIHhzaTp0eXBlPSJGdW5jdGlvblJlZiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGFzVHlwZT0iZmhpcjpQZXJpb2QiIHhzaTp0eXBlPSJBcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUxMyIgcGF0aD0icGVyZm9ybWVkIiBzY29wZT0iUHJvYyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUxNyIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUxNiIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTQ0IiBuYW1lPSJJcyBBYnNlbmNlIE9mIFJpZ2h0IEJyZWFzdCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjU0NCI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIEFic2VuY2UgT2YgUmlnaHQgQnJlYXN0JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTQzIj4KICAgICAgICAgICAgICAgICAgPGE6cz5leGlzdHM8L2E6cz4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NDIiPgogICAgICAgICAgICAgICAgICAgICA8YTpzPigKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NDIiPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyNiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI1Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPltPYnNlcnZhdGlvbjogPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7QWJzZW5jZSBvZiBSaWdodCBCcmVhc3QgVmFsdWUgU2V0JnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPl08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiBPYnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPgoJCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NDEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPndoZXJlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU0MSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTMzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjkiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5PYnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUyOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+c3RhdHVzPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTI5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+IGluIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+eyA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MzAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidmaW5hbCc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LCA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MzEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPidhbWVuZGVkJzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gfTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTQwIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MzciPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmVuZCBvZiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MzYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPlBlcmlvZFRvSW50ZXJ2YWxPZkRUKDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTM0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5PYnM8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzNSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZWZmZWN0aXZlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4pPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4gc2FtZSBkYXkgb3IgYmVmb3JlIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzOSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZW5kIG9mIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUzOCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7TWVhc3VyZW1lbnQgUGVyaW9kJnF1b3Q7PC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkpPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNTQzIiB4c2k6dHlwZT0iRXhpc3RzIj4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTQyIiB4c2k6dHlwZT0iUXVlcnkiPgogICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjUyNiIgYWxpYXM9Ik9icyI+CiAgICAgICAgICAgICAgICAgIDxleHByZXNzaW9uIGxvY2FsSWQ9IjUyNSIgZGF0YVR5cGU9ImZoaXI6T2JzZXJ2YXRpb24iIGNvZGVQcm9wZXJ0eT0iY29kZSIgeHNpOnR5cGU9IlJldHJpZXZlIj4KICAgICAgICAgICAgICAgICAgICAgPGNvZGVzIG5hbWU9IkFic2VuY2Ugb2YgUmlnaHQgQnJlYXN0IFZhbHVlIFNldCIgeHNpOnR5cGU9IlZhbHVlU2V0UmVmIi8+CiAgICAgICAgICAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDx3aGVyZSBsb2NhbElkPSI1NDEiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MzMiIHhzaTp0eXBlPSJJbiI+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUyOSIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTI4IiBwYXRoPSJzdGF0dXMiIHNjb3BlPSJPYnMiIHhzaTp0eXBlPSJQcm9wZXJ0eSIvPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUzMiIgeHNpOnR5cGU9Ikxpc3QiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBsb2NhbElkPSI1MzAiIHZhbHVlVHlwZT0idDpTdHJpbmciIHZhbHVlPSJmaW5hbCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbG9jYWxJZD0iNTMxIiB2YWx1ZVR5cGU9InQ6U3RyaW5nIiB2YWx1ZT0iYW1lbmRlZCIgeHNpOnR5cGU9IkxpdGVyYWwiLz4KICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjU0MCIgcHJlY2lzaW9uPSJEYXkiIHhzaTp0eXBlPSJTYW1lT3JCZWZvcmUiPgogICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MzciIHhzaTp0eXBlPSJFbmQiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MzYiIG5hbWU9IlBlcmlvZFRvSW50ZXJ2YWxPZkRUIiB4c2k6dHlwZT0iRnVuY3Rpb25SZWYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBhc1R5cGU9ImZoaXI6UGVyaW9kIiB4c2k6dHlwZT0iQXMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1MzUiIHBhdGg9ImVmZmVjdGl2ZSIgc2NvcGU9Ik9icyIgeHNpOnR5cGU9IlByb3BlcnR5Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUzOSIgeHNpOnR5cGU9IkVuZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUzOCIgbmFtZT0iTWVhc3VyZW1lbnQgUGVyaW9kIiB4c2k6dHlwZT0iUGFyYW1ldGVyUmVmIi8+CiAgICAgICAgICAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgICAgICAgPC9vcGVyYW5kPgogICAgICAgICAgICAgICA8L3doZXJlPgogICAgICAgICAgICA8L29wZXJhbmQ+CiAgICAgICAgIDwvZXhwcmVzc2lvbj4KICAgICAgPC9kZWY+CiAgICAgIDxkZWYgbG9jYWxJZD0iNTQ3IiBuYW1lPSJJcyBMYWNraW5nIFJpZ2h0IEJyZWFzdCIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjU0NyI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0lzIExhY2tpbmcgUmlnaHQgQnJlYXN0JnF1b3Q7OgoJPC9hOnM+CiAgICAgICAgICAgICAgIDxhOnMgcj0iNTQ2Ij4KICAgICAgICAgICAgICAgICAgPGE6cyByPSI1MjQiPgogICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjUwNCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgVW5pbGF0ZXJhbCBNYXN0ZWN0b215IFdpdGggUmlnaHQgTW9kaWZpZXImcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgUmlnaHQmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzPgoJCW9yIDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjU0NSI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+JnF1b3Q7SXMgQWJzZW5jZSBPZiBSaWdodCBCcmVhc3QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1NDYiIHhzaTp0eXBlPSJPciI+CiAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjUyNCIgeHNpOnR5cGU9Ik9yIj4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTA0IiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgV2l0aCBSaWdodCBNb2RpZmllciIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTIzIiBuYW1lPSJJcyBVbmlsYXRlcmFsIE1hc3RlY3RvbXkgUmlnaHQiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgICAgPG9wZXJhbmQgbG9jYWxJZD0iNTQ1IiBuYW1lPSJJcyBBYnNlbmNlIE9mIFJpZ2h0IEJyZWFzdCIgeHNpOnR5cGU9IkV4cHJlc3Npb25SZWYiLz4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI1NTEiIG5hbWU9IkRlbm9taW5hdG9yIEV4Y2x1c2lvbiIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyI+CiAgICAgICAgIDxhbm5vdGF0aW9uIHhzaTp0eXBlPSJhOkFubm90YXRpb24iPgogICAgICAgICAgICA8YTpzIHI9IjU1MSI+CiAgICAgICAgICAgICAgIDxhOnM+ZGVmaW5lICZxdW90O0Rlbm9taW5hdG9yIEV4Y2x1c2lvbiZxdW90OzoKCTwvYTpzPgogICAgICAgICAgICAgICA8YTpzIHI9IjU1MCI+CiAgICAgICAgICAgICAgICAgIDxhOnM+KDwvYTpzPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjU1MCI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iMzAxIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBMYWNraW5nIEJvdGggQnJlYXN0cyZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCQkJb3IgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4oPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTQ5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI0MjQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPiZxdW90O0lzIExhY2tpbmcgTGVmdCBCcmVhc3QmcXVvdDs8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+CgkJCQlhbmQgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTQ4Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4mcXVvdDtJcyBMYWNraW5nIFJpZ2h0IEJyZWFzdCZxdW90OzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgIDxhOnM+KTwvYTpzPgogICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgIDwvYW5ub3RhdGlvbj4KICAgICAgICAgPGV4cHJlc3Npb24gbG9jYWxJZD0iNTUwIiB4c2k6dHlwZT0iT3IiPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSIzMDEiIG5hbWU9IklzIExhY2tpbmcgQm90aCBCcmVhc3RzIiB4c2k6dHlwZT0iRXhwcmVzc2lvblJlZiIvPgogICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI1NDkiIHhzaTp0eXBlPSJBbmQiPgogICAgICAgICAgICAgICA8b3BlcmFuZCBsb2NhbElkPSI0MjQiIG5hbWU9IklzIExhY2tpbmcgTGVmdCBCcmVhc3QiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgICAgIDxvcGVyYW5kIGxvY2FsSWQ9IjU0OCIgbmFtZT0iSXMgTGFja2luZyBSaWdodCBCcmVhc3QiIHhzaTp0eXBlPSJFeHByZXNzaW9uUmVmIi8+CiAgICAgICAgICAgIDwvb3BlcmFuZD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICA8L2RlZj4KICAgICAgPGRlZiBsb2NhbElkPSI1NjgiIG5hbWU9IkNvZGluZ1RvQ29kZSIgY29udGV4dD0iUGF0aWVudCIgYWNjZXNzTGV2ZWw9IlB1YmxpYyIgeHNpOnR5cGU9IkZ1bmN0aW9uRGVmIj4KICAgICAgICAgPGFubm90YXRpb24geHNpOnR5cGU9ImE6QW5ub3RhdGlvbiI+CiAgICAgICAgICAgIDxhOnMgcj0iNTY4Ij4KICAgICAgICAgICAgICAgPGE6cz5kZWZpbmUgZnVuY3Rpb24gQ29kaW5nVG9Db2RlKGNvZGluZyA8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI1NTQiPgogICAgICAgICAgICAgICAgICA8YTpzPkZISVIuQ29kaW5nPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICA8YTpzPik6Cgk8L2E6cz4KICAgICAgICAgICAgICAgPGE6cyByPSI1NjciPgogICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2NyI+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+U3lzdGVtLkNvZGUgewoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGU6IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU1NyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NTUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGluZzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTU2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2RlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTU3Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zeXN0ZW06IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2MCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NTgiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGluZzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTU5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5zeXN0ZW08L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPi48L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NjAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZhbHVlPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDxhOnM+LAoJCTwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzPnZlcnNpb246IDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2MyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzPmNvZGluZzwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTYyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52ZXJzaW9uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz4uPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTYzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz52YWx1ZTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8YTpzPiwKCQk8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5kaXNwbGF5OiA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgPGE6cyByPSI1NjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnMgcj0iNTY0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGE6cz5jb2Rpbmc8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2NSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+ZGlzcGxheTwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+LjwvYTpzPgogICAgICAgICAgICAgICAgICAgICAgICAgICA8YTpzIHI9IjU2NiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhOnM+dmFsdWU8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICAgICAgICAgICA8L2E6cz4KICAgICAgICAgICAgICAgICAgICAgPGE6cz4KCX08L2E6cz4KICAgICAgICAgICAgICAgICAgPC9hOnM+CiAgICAgICAgICAgICAgIDwvYTpzPgogICAgICAgICAgICA8L2E6cz4KICAgICAgICAgPC9hbm5vdGF0aW9uPgogICAgICAgICA8ZXhwcmVzc2lvbiBsb2NhbElkPSI1NjciIGNsYXNzVHlwZT0idDpDb2RlIiB4c2k6dHlwZT0iSW5zdGFuY2UiPgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjb2RlIj4KICAgICAgICAgICAgICAgPHZhbHVlIGxvY2FsSWQ9IjU1NyIgcGF0aD0idmFsdWUiIHhzaTp0eXBlPSJQcm9wZXJ0eSI+CiAgICAgICAgICAgICAgICAgIDxzb3VyY2UgbG9jYWxJZD0iNTU2IiBwYXRoPSJjb2RlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjU1NSIgbmFtZT0iY29kaW5nIiB4c2k6dHlwZT0iT3BlcmFuZFJlZiIvPgogICAgICAgICAgICAgICAgICA8L3NvdXJjZT4KICAgICAgICAgICAgICAgPC92YWx1ZT4KICAgICAgICAgICAgPC9lbGVtZW50PgogICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzeXN0ZW0iPgogICAgICAgICAgICAgICA8dmFsdWUgbG9jYWxJZD0iNTYwIiBwYXRoPSJ2YWx1ZSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1NTkiIHBhdGg9InN5c3RlbSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1NTgiIG5hbWU9ImNvZGluZyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0idmVyc2lvbiI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBsb2NhbElkPSI1NjMiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjU2MiIgcGF0aD0idmVyc2lvbiIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1NjEiIG5hbWU9ImNvZGluZyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZGlzcGxheSI+CiAgICAgICAgICAgICAgIDx2YWx1ZSBsb2NhbElkPSI1NjYiIHBhdGg9InZhbHVlIiB4c2k6dHlwZT0iUHJvcGVydHkiPgogICAgICAgICAgICAgICAgICA8c291cmNlIGxvY2FsSWQ9IjU2NSIgcGF0aD0iZGlzcGxheSIgeHNpOnR5cGU9IlByb3BlcnR5Ij4KICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZSBsb2NhbElkPSI1NjQiIG5hbWU9ImNvZGluZyIgeHNpOnR5cGU9Ik9wZXJhbmRSZWYiLz4KICAgICAgICAgICAgICAgICAgPC9zb3VyY2U+CiAgICAgICAgICAgICAgIDwvdmFsdWU+CiAgICAgICAgICAgIDwvZWxlbWVudD4KICAgICAgICAgPC9leHByZXNzaW9uPgogICAgICAgICA8b3BlcmFuZCBuYW1lPSJjb2RpbmciPgogICAgICAgICAgICA8b3BlcmFuZFR5cGVTcGVjaWZpZXIgbG9jYWxJZD0iNTU0IiBuYW1lPSJmaGlyOkNvZGluZyIgeHNpOnR5cGU9Ik5hbWVkVHlwZVNwZWNpZmllciIvPgogICAgICAgICA8L29wZXJhbmQ+CiAgICAgIDwvZGVmPgogICA8L3N0YXRlbWVudHM+CjwvbGlicmFyeT4K"
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Library/library-bcs-logic"
+      }
+    },
+    {
+      "resource": {
+        "resourceType": "Measure",
+        "id": "measure-bcs",
+        "text": {
+          "status": "generated"
+        },
+        "identifier": [
+          {
+            "use": "official",
+            "system": "http://hl7.org/fhir/cqi/ecqm/Measure/Identifier/payer-extract",
+            "value": "BCS"
+          }
+        ],
+        "version": "1.0.0",
+        "title": "Breast Cancer Screening Cohort Definition",
+        "status": "active",
+        "experimental": true,
+        "date": "2015-03-08",
+        "description": "Breast Cancer Screening Cohort Definition",
+        "topic": [
+          {
+            "coding": {
+              "system": "http://hl7.org/fhir/c80-doc-typecodes",
+              "code": "57024-2"
+            }
+          }
+        ],
+        "library": [
+          {
+            "reference": "Library/library-bcs-logic"
+          }
+        ],
+        "scoring": {
+          "coding": [
+            {
+              "code": "proportion"
+            }
+          ]
+        },
+        "group": [
+          {
+            "population": [
+              {
+                "identifier": {
+                  "value": "initial-population"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "initial-population"
+                    }
+                  ]
+                },
+                "criteria": "Initial Population"
+              },
+              {
+                "identifier": {
+                  "value": "numerator"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "numerator"
+                    }
+                  ]
+                },
+                "criteria": "Numerator"
+              },
+              {
+                "identifier": {
+                  "value": "denominator"
+                },
+                "code": {
+                  "coding": [
+                    {
+                      "code": "denominator"
+                    }
+                  ]
+                },
+                "criteria": "Denominator"
+              }
+            ]
+          }
+        ]
+      },
+      "request": {
+        "method": "PUT",
+        "url": "Measure/measure-bcs"
+      }
+    }
+  ]
+}
diff --git a/examples/src/main/java/example/AuthorizationInterceptors.java b/examples/src/main/java/example/AuthorizationInterceptors.java
index 71132a821f2..3ef5822b6d1 100644
--- a/examples/src/main/java/example/AuthorizationInterceptors.java
+++ b/examples/src/main/java/example/AuthorizationInterceptors.java
@@ -4,6 +4,7 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 import java.util.List;
 
+import org.hl7.fhir.dstu3.model.IdType;
 import org.hl7.fhir.instance.model.api.IBaseResource;
 
 import ca.uhn.fhir.model.dstu2.resource.Patient;
@@ -140,5 +141,21 @@ public class AuthorizationInterceptors {
 			}
 		};
 		//END SNIPPET: authorizeTenantAction
+
+
+		//START SNIPPET: patchAll
+		new AuthorizationInterceptor(PolicyEnum.DENY) {
+			@Override
+			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
+				return new RuleBuilder()
+					// Authorize patch requests
+					.allow().patch().allRequests().andThen()
+					// Authorize actual writes that patch may perform
+					.allow().write().allResources().inCompartment("Patient", new IdType("Patient/123")).andThen()
+					.build();
+			}
+		};
+		//END SNIPPET: patchAll
+
 	}
 }
diff --git a/hapi-deployable-pom/pom.xml b/hapi-deployable-pom/pom.xml
index d3eb63b512a..cf6d5271087 100644
--- a/hapi-deployable-pom/pom.xml
+++ b/hapi-deployable-pom/pom.xml
@@ -171,6 +171,7 @@
 								<link>https://docs.oracle.com/javaee/7/api/</link>
 							</links>
 							<additionalparam>-Xdoclint:none</additionalparam>
+							<additionalJOption>-Xdoclint:none</additionalJOption>
 						</configuration>
 					</reportSet>
 				</reportSets>
@@ -194,6 +195,7 @@
 							<verbose>false</verbose>
 							<debug>false</debug>
 							<additionalparam>-Xdoclint:none</additionalparam>
+							<additionalJOption>-Xdoclint:none</additionalJOption>
 						</configuration>
 						<executions>
 							<execution>
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/context/FhirContext.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/context/FhirContext.java
index 01ccc3ca7b8..86514b5ae53 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/context/FhirContext.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/context/FhirContext.java
@@ -1,7 +1,34 @@
 package ca.uhn.fhir.context;
 
+import ca.uhn.fhir.context.api.AddProfileTagEnum;
+import ca.uhn.fhir.context.support.IContextValidationSupport;
+import ca.uhn.fhir.fluentpath.IFluentPath;
+import ca.uhn.fhir.i18n.HapiLocalizer;
+import ca.uhn.fhir.model.api.IElement;
+import ca.uhn.fhir.model.api.IFhirVersion;
+import ca.uhn.fhir.model.api.IResource;
+import ca.uhn.fhir.model.view.ViewGenerator;
+import ca.uhn.fhir.narrative.INarrativeGenerator;
+import ca.uhn.fhir.parser.*;
+import ca.uhn.fhir.rest.api.IVersionSpecificBundleFactory;
+import ca.uhn.fhir.rest.client.api.IBasicClient;
+import ca.uhn.fhir.rest.client.api.IGenericClient;
+import ca.uhn.fhir.rest.client.api.IRestfulClient;
+import ca.uhn.fhir.rest.client.api.IRestfulClientFactory;
+import ca.uhn.fhir.util.FhirTerser;
+import ca.uhn.fhir.util.ReflectionUtil;
+import ca.uhn.fhir.util.VersionUtil;
+import ca.uhn.fhir.validation.FhirValidator;
+import org.apache.commons.lang3.Validate;
+import org.hl7.fhir.instance.model.api.IBase;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
 import java.io.IOException;
 import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.*;
+import java.util.Map.Entry;
 
 /*
  * #%L
@@ -23,30 +50,10 @@ import java.lang.reflect.Method;
  * #L%
  */
 
-import java.lang.reflect.Modifier;
-import java.util.*;
-import java.util.Map.Entry;
-
-import org.apache.commons.lang3.Validate;
-import org.hl7.fhir.instance.model.api.*;
-
-import ca.uhn.fhir.context.api.AddProfileTagEnum;
-import ca.uhn.fhir.context.support.IContextValidationSupport;
-import ca.uhn.fhir.fluentpath.IFluentPath;
-import ca.uhn.fhir.i18n.HapiLocalizer;
-import ca.uhn.fhir.model.api.*;
-import ca.uhn.fhir.model.view.ViewGenerator;
-import ca.uhn.fhir.narrative.INarrativeGenerator;
-import ca.uhn.fhir.parser.*;
-import ca.uhn.fhir.rest.api.IVersionSpecificBundleFactory;
-import ca.uhn.fhir.rest.client.api.*;
-import ca.uhn.fhir.util.*;
-import ca.uhn.fhir.validation.FhirValidator;
-
 /**
  * The FHIR context is the central starting point for the use of the HAPI FHIR API. It should be created once, and then
  * used as a factory for various other types of objects (parsers, clients, etc.).
- * 
+ *
  * <p>
  * Important usage notes:
  * </p>
@@ -68,6 +75,7 @@ public class FhirContext {
 
 	private static final List<Class<? extends IBaseResource>> EMPTY_LIST = Collections.emptyList();
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirContext.class);
+	private final IFhirVersion myVersion;
 	private AddProfileTagEnum myAddProfileTagWhenEncoding = AddProfileTagEnum.ONLY_FOR_CUSTOM;
 	private volatile Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> myClassToElementDefinition = Collections.emptyMap();
 	private ArrayList<Class<? extends IBase>> myCustomTypes;
@@ -87,14 +95,11 @@ public class FhirContext {
 	private volatile IRestfulClientFactory myRestfulClientFactory;
 	private volatile RuntimeChildUndeclaredExtensionDefinition myRuntimeChildUndeclaredExtensionDefinition;
 	private IContextValidationSupport<?, ?, ?, ?, ?, ?> myValidationSupport;
-
-	private final IFhirVersion myVersion;
-
 	private Map<FhirVersionEnum, Map<String, Class<? extends IBaseResource>>> myVersionToNameToResourceType = Collections.emptyMap();
 
 	/**
 	 * @deprecated It is recommended that you use one of the static initializer methods instead
-	 *             of this method, e.g. {@link #forDstu2()} or {@link #forDstu3()} or {@link #forR4()}
+	 * of this method, e.g. {@link #forDstu2()} or {@link #forDstu3()} or {@link #forR4()}
 	 */
 	@Deprecated
 	public FhirContext() {
@@ -103,7 +108,7 @@ public class FhirContext {
 
 	/**
 	 * @deprecated It is recommended that you use one of the static initializer methods instead
-	 *             of this method, e.g. {@link #forDstu2()} or {@link #forDstu3()} or {@link #forR4()}
+	 * of this method, e.g. {@link #forDstu2()} or {@link #forDstu3()} or {@link #forR4()}
 	 */
 	@Deprecated
 	public FhirContext(Class<? extends IBaseResource> theResourceType) {
@@ -112,7 +117,7 @@ public class FhirContext {
 
 	/**
 	 * @deprecated It is recommended that you use one of the static initializer methods instead
-	 *             of this method, e.g. {@link #forDstu2()} or {@link #forDstu3()} or {@link #forR4()}
+	 * of this method, e.g. {@link #forDstu2()} or {@link #forDstu3()} or {@link #forR4()}
 	 */
 	@Deprecated
 	public FhirContext(Class<?>... theResourceTypes) {
@@ -121,7 +126,7 @@ public class FhirContext {
 
 	/**
 	 * @deprecated It is recommended that you use one of the static initializer methods instead
-	 *             of this method, e.g. {@link #forDstu2()} or {@link #forDstu3()} or {@link #forR4()}
+	 * of this method, e.g. {@link #forDstu2()} or {@link #forDstu3()} or {@link #forR4()}
 	 */
 	@Deprecated
 	public FhirContext(Collection<Class<? extends IBaseResource>> theResourceTypes) {
@@ -161,7 +166,7 @@ public class FhirContext {
 
 		if (theVersion == null) {
 			ourLog.info("Creating new FhirContext with auto-detected version [{}]. It is recommended to explicitly select a version for future compatibility by invoking FhirContext.forDstuX()",
-					myVersion.getVersion().name());
+				myVersion.getVersion().name());
 		} else {
 			ourLog.info("Creating new FHIR context for FHIR version [{}]", myVersion.getVersion().name());
 		}
@@ -201,13 +206,37 @@ public class FhirContext {
 	 * When encoding resources, this setting configures the parser to include
 	 * an entry in the resource's metadata section which indicates which profile(s) the
 	 * resource claims to conform to. The default is {@link AddProfileTagEnum#ONLY_FOR_CUSTOM}.
-	 * 
+	 *
 	 * @see #setAddProfileTagWhenEncoding(AddProfileTagEnum) for more information
 	 */
 	public AddProfileTagEnum getAddProfileTagWhenEncoding() {
 		return myAddProfileTagWhenEncoding;
 	}
 
+	/**
+	 * When encoding resources, this setting configures the parser to include
+	 * an entry in the resource's metadata section which indicates which profile(s) the
+	 * resource claims to conform to. The default is {@link AddProfileTagEnum#ONLY_FOR_CUSTOM}.
+	 * <p>
+	 * This feature is intended for situations where custom resource types are being used,
+	 * avoiding the need to manually add profile declarations for these custom types.
+	 * </p>
+	 * <p>
+	 * See <a href="http://jamesagnew.gihhub.io/hapi-fhir/doc_extensions.html">Profiling and Extensions</a>
+	 * for more information on using custom types.
+	 * </p>
+	 * <p>
+	 * Note that this feature automatically adds the profile, but leaves any profile tags
+	 * which have been manually added in place as well.
+	 * </p>
+	 *
+	 * @param theAddProfileTagWhenEncoding The add profile mode (must not be <code>null</code>)
+	 */
+	public void setAddProfileTagWhenEncoding(AddProfileTagEnum theAddProfileTagWhenEncoding) {
+		Validate.notNull(theAddProfileTagWhenEncoding, "theAddProfileTagWhenEncoding must not be null");
+		myAddProfileTagWhenEncoding = theAddProfileTagWhenEncoding;
+	}
+
 	Collection<RuntimeResourceDefinition> getAllResourceDefinitions() {
 		validateInitialized();
 		return myNameToResourceDefinition.values();
@@ -215,7 +244,7 @@ public class FhirContext {
 
 	/**
 	 * Returns the default resource type for the given profile
-	 * 
+	 *
 	 * @see #setDefaultTypeForProfile(String, Class)
 	 */
 	public Class<? extends IBaseResource> getDefaultTypeForProfile(String theProfile) {
@@ -249,7 +278,9 @@ public class FhirContext {
 		return myNameToElementDefinition.get(theElementName.toLowerCase());
 	}
 
-	/** For unit tests only */
+	/**
+	 * For unit tests only
+	 */
 	int getElementDefinitionCount() {
 		validateInitialized();
 		return myClassToElementDefinition.size();
@@ -274,20 +305,43 @@ public class FhirContext {
 		return myLocalizer;
 	}
 
+	/**
+	 * This feature is not yet in its final state and should be considered an internal part of HAPI for now - use with
+	 * caution
+	 */
+	public void setLocalizer(HapiLocalizer theMessages) {
+		myLocalizer = theMessages;
+	}
+
 	public INarrativeGenerator getNarrativeGenerator() {
 		return myNarrativeGenerator;
 	}
 
+	public void setNarrativeGenerator(INarrativeGenerator theNarrativeGenerator) {
+		myNarrativeGenerator = theNarrativeGenerator;
+	}
+
 	/**
 	 * Returns the parser options object which will be used to supply default
 	 * options to newly created parsers
-	 * 
+	 *
 	 * @return The parser options - Will not return <code>null</code>
 	 */
 	public ParserOptions getParserOptions() {
 		return myParserOptions;
 	}
 
+	/**
+	 * Sets the parser options object which will be used to supply default
+	 * options to newly created parsers
+	 *
+	 * @param theParserOptions The parser options object - Must not be <code>null</code>
+	 */
+	public void setParserOptions(ParserOptions theParserOptions) {
+		Validate.notNull(theParserOptions, "theParserOptions must not be null");
+		myParserOptions = theParserOptions;
+	}
+
 	/**
 	 * Get the configured performance options
 	 */
@@ -295,6 +349,32 @@ public class FhirContext {
 		return myPerformanceOptions;
 	}
 
+	// /**
+	// * Return an unmodifiable collection containing all known resource definitions
+	// */
+	// public Collection<RuntimeResourceDefinition> getResourceDefinitions() {
+	//
+	// Set<Class<? extends IBase>> datatypes = Collections.emptySet();
+	// Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> existing = Collections.emptyMap();
+	// HashMap<String, Class<? extends IBaseResource>> types = new HashMap<String, Class<? extends IBaseResource>>();
+	// ModelScanner.scanVersionPropertyFile(datatypes, types, myVersion.getVersion(), existing);
+	// for (int next : types.)
+	//
+	// return Collections.unmodifiableCollection(myIdToResourceDefinition.values());
+	// }
+
+	/**
+	 * Sets the configured performance options
+	 *
+	 * @see PerformanceOptionsEnum for a list of available options
+	 */
+	public void setPerformanceOptions(Collection<PerformanceOptionsEnum> theOptions) {
+		myPerformanceOptions.clear();
+		if (theOptions != null) {
+			myPerformanceOptions.addAll(theOptions);
+		}
+	}
+
 	/**
 	 * Returns the scanned runtime model for the given type. This is an advanced feature which is generally only needed
 	 * for extending the core library.
@@ -359,8 +439,12 @@ public class FhirContext {
 	 * <p>
 	 * Note that this method is case insensitive!
 	 * </p>
+	 *
+	 * @throws DataFormatException If the resource name is not known
 	 */
-	public RuntimeResourceDefinition getResourceDefinition(String theResourceName) {
+	// Multiple spots in HAPI FHIR and Smile CDR depend on DataFormatException being
+	// thrown by this method, don't change that.
+	public RuntimeResourceDefinition getResourceDefinition(String theResourceName) throws DataFormatException {
 		validateInitialized();
 		Validate.notBlank(theResourceName, "theResourceName must not be blank");
 
@@ -380,20 +464,6 @@ public class FhirContext {
 		return retVal;
 	}
 
-	// /**
-	// * Return an unmodifiable collection containing all known resource definitions
-	// */
-	// public Collection<RuntimeResourceDefinition> getResourceDefinitions() {
-	//
-	// Set<Class<? extends IBase>> datatypes = Collections.emptySet();
-	// Map<Class<? extends IBase>, BaseRuntimeElementDefinition<?>> existing = Collections.emptyMap();
-	// HashMap<String, Class<? extends IBaseResource>> types = new HashMap<String, Class<? extends IBaseResource>>();
-	// ModelScanner.scanVersionPropertyFile(datatypes, types, myVersion.getVersion(), existing);
-	// for (int next : types.)
-	//
-	// return Collections.unmodifiableCollection(myIdToResourceDefinition.values());
-	// }
-
 	/**
 	 * Returns the scanned runtime model for the given type. This is an advanced feature which is generally only needed
 	 * for extending the core library.
@@ -412,10 +482,40 @@ public class FhirContext {
 		return myIdToResourceDefinition.values();
 	}
 
+	/**
+	 * Returns an unmodifiable set containing all resource names known to this
+	 * context
+	 */
+	public Set<String> getResourceNames() {
+		Set<String> resourceNames = new HashSet<>();
+
+		if (myNameToResourceDefinition.isEmpty()) {
+			Properties props = new Properties();
+			try {
+				props.load(myVersion.getFhirVersionPropertiesFile());
+			} catch (IOException theE) {
+				throw new ConfigurationException("Failed to load version properties file");
+			}
+			Enumeration<?> propNames = props.propertyNames();
+			while (propNames.hasMoreElements()) {
+				String next = (String) propNames.nextElement();
+				if (next.startsWith("resource.")) {
+					resourceNames.add(next.substring("resource.".length()).trim());
+				}
+			}
+		}
+
+		for (RuntimeResourceDefinition next : myNameToResourceDefinition.values()) {
+			resourceNames.add(next.getName());
+		}
+
+		return Collections.unmodifiableSet(resourceNames);
+	}
+
 	/**
 	 * Get the restful client factory. If no factory has been set, this will be initialized with
 	 * a new ApacheRestfulClientFactory.
-	 * 
+	 *
 	 * @return the factory used to create the restful clients
 	 */
 	public IRestfulClientFactory getRestfulClientFactory() {
@@ -429,6 +529,16 @@ public class FhirContext {
 		return myRestfulClientFactory;
 	}
 
+	/**
+	 * Set the restful client factory
+	 *
+	 * @param theRestfulClientFactory
+	 */
+	public void setRestfulClientFactory(IRestfulClientFactory theRestfulClientFactory) {
+		Validate.notNull(theRestfulClientFactory, "theRestfulClientFactory must not be null");
+		this.myRestfulClientFactory = theRestfulClientFactory;
+	}
+
 	public RuntimeChildUndeclaredExtensionDefinition getRuntimeChildUndeclaredExtensionDefinition() {
 		validateInitialized();
 		return myRuntimeChildUndeclaredExtensionDefinition;
@@ -438,7 +548,7 @@ public class FhirContext {
 	 * Returns the validation support module configured for this context, creating a default
 	 * implementation if no module has been passed in via the {@link #setValidationSupport(IContextValidationSupport)}
 	 * method
-	 * 
+	 *
 	 * @see #setValidationSupport(IContextValidationSupport)
 	 */
 	public IContextValidationSupport<?, ?, ?, ?, ?, ?> getValidationSupport() {
@@ -448,6 +558,15 @@ public class FhirContext {
 		return myValidationSupport;
 	}
 
+	/**
+	 * Sets the validation support module to use for this context. The validation support module
+	 * is used to supply underlying infrastructure such as conformance resources (StructureDefinition, ValueSet, etc)
+	 * as well as to provide terminology services to modules such as the validator and FluentPath executor
+	 */
+	public void setValidationSupport(IContextValidationSupport<?, ?, ?, ?, ?, ?> theValidationSupport) {
+		myValidationSupport = theValidationSupport;
+	}
+
 	public IFhirVersion getVersion() {
 		return myVersion;
 	}
@@ -455,7 +574,7 @@ public class FhirContext {
 	/**
 	 * Returns <code>true</code> if any default types for specific profiles have been defined
 	 * within this context.
-	 * 
+	 *
 	 * @see #setDefaultTypeForProfile(String, Class)
 	 * @see #getDefaultTypeForProfile(String)
 	 */
@@ -483,7 +602,7 @@ public class FhirContext {
 	 * on a context for a previous version of fhir will result in an
 	 * {@link UnsupportedOperationException}
 	 * </p>
-	 * 
+	 *
 	 * @since 2.2
 	 */
 	public IFluentPath newFluentPath() {
@@ -492,7 +611,7 @@ public class FhirContext {
 
 	/**
 	 * Create and return a new JSON parser.
-	 * 
+	 *
 	 * <p>
 	 * Thread safety: <b>Parsers are not guaranteed to be thread safe</b>. Create a new parser instance for every thread
 	 * or every message being parsed/encoded.
@@ -513,19 +632,16 @@ public class FhirContext {
 	 * sub-interface {@link IBasicClient}). See the <a
 	 * href="http://jamesagnew.github.io/hapi-fhir/doc_rest_client.html">RESTful Client</a> documentation for more
 	 * information on how to define this interface.
-	 * 
+	 *
 	 * <p>
 	 * Performance Note: <b>This method is cheap</b> to call, and may be called once for every operation invocation
 	 * without incurring any performance penalty
 	 * </p>
-	 * 
-	 * @param theClientType
-	 *          The client type, which is an interface type to be instantiated
-	 * @param theServerBase
-	 *          The URL of the base for the restful FHIR server to connect to
+	 *
+	 * @param theClientType The client type, which is an interface type to be instantiated
+	 * @param theServerBase The URL of the base for the restful FHIR server to connect to
 	 * @return A newly created client
-	 * @throws ConfigurationException
-	 *           If the interface type is not an interface
+	 * @throws ConfigurationException If the interface type is not an interface
 	 */
 	public <T extends IRestfulClient> T newRestfulClient(Class<T> theClientType, String theServerBase) {
 		return getRestfulClientFactory().newClient(theClientType, theServerBase);
@@ -535,14 +651,13 @@ public class FhirContext {
 	 * Instantiates a new generic client. A generic client is able to perform any of the FHIR RESTful operations against
 	 * a compliant server, but does not have methods defining the specific functionality required (as is the case with
 	 * {@link #newRestfulClient(Class, String) non-generic clients}).
-	 * 
+	 *
 	 * <p>
 	 * Performance Note: <b>This method is cheap</b> to call, and may be called once for every operation invocation
 	 * without incurring any performance penalty
 	 * </p>
-	 * 
-	 * @param theServerBase
-	 *          The URL of the base for the restful FHIR server to connect to
+	 *
+	 * @param theServerBase The URL of the base for the restful FHIR server to connect to
 	 */
 	public IGenericClient newRestfulGenericClient(String theServerBase) {
 		return getRestfulClientFactory().newGenericClient(theServerBase);
@@ -569,7 +684,7 @@ public class FhirContext {
 
 	/**
 	 * Create and return a new XML parser.
-	 * 
+	 *
 	 * <p>
 	 * Thread safety: <b>Parsers are not guaranteed to be thread safe</b>. Create a new parser instance for every thread
 	 * or every message being parsed/encoded.
@@ -592,9 +707,8 @@ public class FhirContext {
 	 * <b>THREAD SAFETY WARNING:</b> This method is not thread safe. It should be called before any
 	 * threads are able to call any methods on this context.
 	 * </p>
-	 * 
-	 * @param theType
-	 *          The custom type to add (must not be <code>null</code>)
+	 *
+	 * @param theType The custom type to add (must not be <code>null</code>)
 	 */
 	public void registerCustomType(Class<? extends IBase> theType) {
 		Validate.notNull(theType, "theType must not be null");
@@ -612,9 +726,8 @@ public class FhirContext {
 	 * <b>THREAD SAFETY WARNING:</b> This method is not thread safe. It should be called before any
 	 * threads are able to call any methods on this context.
 	 * </p>
-	 * 
-	 * @param theTypes
-	 *          The custom types to add (must not be <code>null</code> or contain null elements in the collection)
+	 *
+	 * @param theTypes The custom types to add (must not be <code>null</code> or contain null elements in the collection)
 	 */
 	public void registerCustomTypes(Collection<Class<? extends IBase>> theTypes) {
 		Validate.notNull(theTypes, "theTypes must not be null");
@@ -698,31 +811,6 @@ public class FhirContext {
 		return classToElementDefinition;
 	}
 
-	/**
-	 * When encoding resources, this setting configures the parser to include
-	 * an entry in the resource's metadata section which indicates which profile(s) the
-	 * resource claims to conform to. The default is {@link AddProfileTagEnum#ONLY_FOR_CUSTOM}.
-	 * <p>
-	 * This feature is intended for situations where custom resource types are being used,
-	 * avoiding the need to manually add profile declarations for these custom types.
-	 * </p>
-	 * <p>
-	 * See <a href="http://jamesagnew.gihhub.io/hapi-fhir/doc_extensions.html">Profiling and Extensions</a>
-	 * for more information on using custom types.
-	 * </p>
-	 * <p>
-	 * Note that this feature automatically adds the profile, but leaves any profile tags
-	 * which have been manually added in place as well.
-	 * </p>
-	 * 
-	 * @param theAddProfileTagWhenEncoding
-	 *          The add profile mode (must not be <code>null</code>)
-	 */
-	public void setAddProfileTagWhenEncoding(AddProfileTagEnum theAddProfileTagWhenEncoding) {
-		Validate.notNull(theAddProfileTagWhenEncoding, "theAddProfileTagWhenEncoding must not be null");
-		myAddProfileTagWhenEncoding = theAddProfileTagWhenEncoding;
-	}
-
 	/**
 	 * Sets the default type which will be used when parsing a resource that is found to be
 	 * of the given profile.
@@ -732,12 +820,10 @@ public class FhirContext {
 	 * if the parser is parsing a resource and finds that it declares that it conforms to that profile,
 	 * the <code>MyPatient</code> type will be used unless otherwise specified.
 	 * </p>
-	 * 
-	 * @param theProfile
-	 *          The profile string, e.g. <code>"http://example.com/some_patient_profile"</code>. Must not be
-	 *          <code>null</code> or empty.
-	 * @param theClass
-	 *          The resource type, or <code>null</code> to clear any existing type
+	 *
+	 * @param theProfile The profile string, e.g. <code>"http://example.com/some_patient_profile"</code>. Must not be
+	 *                   <code>null</code> or empty.
+	 * @param theClass   The resource type, or <code>null</code> to clear any existing type
 	 */
 	public void setDefaultTypeForProfile(String theProfile, Class<? extends IBaseResource> theClass) {
 		Validate.notBlank(theProfile, "theProfile must not be null or empty");
@@ -748,56 +834,19 @@ public class FhirContext {
 		}
 	}
 
-	/**
-	 * This feature is not yet in its final state and should be considered an internal part of HAPI for now - use with
-	 * caution
-	 */
-	public void setLocalizer(HapiLocalizer theMessages) {
-		myLocalizer = theMessages;
-	}
-
-	public void setNarrativeGenerator(INarrativeGenerator theNarrativeGenerator) {
-		myNarrativeGenerator = theNarrativeGenerator;
-	}
-
 	/**
 	 * Sets a parser error handler to use by default on all parsers
-	 * 
-	 * @param theParserErrorHandler
-	 *          The error handler
+	 *
+	 * @param theParserErrorHandler The error handler
 	 */
 	public void setParserErrorHandler(IParserErrorHandler theParserErrorHandler) {
 		Validate.notNull(theParserErrorHandler, "theParserErrorHandler must not be null");
 		myParserErrorHandler = theParserErrorHandler;
 	}
 
-	/**
-	 * Sets the parser options object which will be used to supply default
-	 * options to newly created parsers
-	 * 
-	 * @param theParserOptions
-	 *          The parser options object - Must not be <code>null</code>
-	 */
-	public void setParserOptions(ParserOptions theParserOptions) {
-		Validate.notNull(theParserOptions, "theParserOptions must not be null");
-		myParserOptions = theParserOptions;
-	}
-
 	/**
 	 * Sets the configured performance options
-	 * 
-	 * @see PerformanceOptionsEnum for a list of available options
-	 */
-	public void setPerformanceOptions(Collection<PerformanceOptionsEnum> theOptions) {
-		myPerformanceOptions.clear();
-		if (theOptions != null) {
-			myPerformanceOptions.addAll(theOptions);
-		}
-	}
-
-	/**
-	 * Sets the configured performance options
-	 * 
+	 *
 	 * @see PerformanceOptionsEnum for a list of available options
 	 */
 	public void setPerformanceOptions(PerformanceOptionsEnum... thePerformanceOptions) {
@@ -808,26 +857,7 @@ public class FhirContext {
 		setPerformanceOptions(asList);
 	}
 
-	/**
-	 * Set the restful client factory
-	 * 
-	 * @param theRestfulClientFactory
-	 */
-	public void setRestfulClientFactory(IRestfulClientFactory theRestfulClientFactory) {
-		Validate.notNull(theRestfulClientFactory, "theRestfulClientFactory must not be null");
-		this.myRestfulClientFactory = theRestfulClientFactory;
-	}
-
-	/**
-	 * Sets the validation support module to use for this context. The validation support module
-	 * is used to supply underlying infrastructure such as conformance resources (StructureDefinition, ValueSet, etc)
-	 * as well as to provide terminology services to modules such as the validator and FluentPath executor
-	 */
-	public void setValidationSupport(IContextValidationSupport<?, ?, ?, ?, ?, ?> theValidationSupport) {
-		myValidationSupport = theValidationSupport;
-	}
-	
-	@SuppressWarnings({ "cast" })
+	@SuppressWarnings({"cast"})
 	private List<Class<? extends IElement>> toElementList(Collection<Class<? extends IBaseResource>> theResourceTypes) {
 		if (theResourceTypes == null) {
 			return null;
@@ -858,13 +888,6 @@ public class FhirContext {
 		return new FhirContext(FhirVersionEnum.DSTU2);
 	}
 
-	/**
-	 * Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU2 DSTU2} (2016 May DSTU3 Snapshot)
-	 */
-	public static FhirContext forDstu2_1() {
-		return new FhirContext(FhirVersionEnum.DSTU2_1);
-	}
-
 	/**
 	 * Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU2_HL7ORG DSTU2} (using the Reference
 	 * Implementation Structures)
@@ -873,9 +896,16 @@ public class FhirContext {
 		return new FhirContext(FhirVersionEnum.DSTU2_HL7ORG);
 	}
 
+	/**
+	 * Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU2 DSTU2} (2016 May DSTU3 Snapshot)
+	 */
+	public static FhirContext forDstu2_1() {
+		return new FhirContext(FhirVersionEnum.DSTU2_1);
+	}
+
 	/**
 	 * Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU3 DSTU3}
-	 * 
+	 *
 	 * @since 1.4
 	 */
 	public static FhirContext forDstu3() {
@@ -884,14 +914,13 @@ public class FhirContext {
 
 	/**
 	 * Creates and returns a new FhirContext with version {@link FhirVersionEnum#DSTU3 DSTU3}
-	 * 
+	 *
 	 * @since 3.0.0
 	 */
 	public static FhirContext forR4() {
 		return new FhirContext(FhirVersionEnum.R4);
 	}
 
-
 	private static Collection<Class<? extends IBaseResource>> toCollection(Class<? extends IBaseResource> theResourceType) {
 		ArrayList<Class<? extends IBaseResource>> retVal = new ArrayList<Class<? extends IBaseResource>>(1);
 		retVal.add(theResourceType);
@@ -909,34 +938,4 @@ public class FhirContext {
 		}
 		return retVal;
 	}
-
-	/**
-	 * Returns an unmodifiable set containing all resource names known to this
-	 * context
-	 */
-	public Set<String> getResourceNames() {
-		Set<String> resourceNames= new HashSet<>();
-
-		if (myNameToResourceDefinition.isEmpty()) {
-			Properties props = new Properties();
-			try {
-				props.load(myVersion.getFhirVersionPropertiesFile());
-			} catch (IOException theE) {
-				throw new ConfigurationException("Failed to load version properties file");
-			}
-			Enumeration<?> propNames = props.propertyNames();
-			while (propNames.hasMoreElements()){
-				String next = (String) propNames.nextElement();
-				if (next.startsWith("resource.")) {
-					resourceNames.add(next.substring("resource.".length()).trim());
-				}
-			}
-		}
-
-		for (RuntimeResourceDefinition next : myNameToResourceDefinition.values()) {
-			resourceNames.add(next.getName());
-		}
-
-		return Collections.unmodifiableSet(resourceNames);
-	}
 }
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/model/view/ViewGenerator.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/model/view/ViewGenerator.java
index 03c1c28963c..bceb78e4fb0 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/model/view/ViewGenerator.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/model/view/ViewGenerator.java
@@ -20,31 +20,21 @@ package ca.uhn.fhir.model.view;
  * #L%
  */
 
+import ca.uhn.fhir.context.*;
+import org.hl7.fhir.instance.model.api.*;
+
 import java.util.List;
 
-import org.hl7.fhir.instance.model.api.IBase;
-import org.hl7.fhir.instance.model.api.IBaseExtension;
-
-import ca.uhn.fhir.context.BaseRuntimeChildDefinition;
-import ca.uhn.fhir.context.BaseRuntimeElementCompositeDefinition;
-import ca.uhn.fhir.context.ConfigurationException;
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.context.RuntimeChildDeclaredExtensionDefinition;
-import ca.uhn.fhir.context.RuntimeResourceDefinition;
-import ca.uhn.fhir.model.api.BaseElement;
-import ca.uhn.fhir.model.api.ExtensionDt;
-import ca.uhn.fhir.model.api.IResource;
-
 public class ViewGenerator {
 
 	private FhirContext myCtx;
 
 	public ViewGenerator(FhirContext theFhirContext) {
-		myCtx=theFhirContext;
+		myCtx = theFhirContext;
 	}
 
-	public <T extends IResource> T newView(IResource theResource, Class<T> theTargetType) {
-		Class<? extends IResource> sourceType = theResource.getClass();
+	public <T extends IBaseResource> T newView(IBaseResource theResource, Class<T> theTargetType) {
+		Class<? extends IBaseResource> sourceType = theResource.getClass();
 		RuntimeResourceDefinition sourceDef = myCtx.getResourceDefinition(theResource);
 		RuntimeResourceDefinition targetDef = myCtx.getResourceDefinition(theTargetType);
 
@@ -57,18 +47,16 @@ public class ViewGenerator {
 		T retVal;
 		try {
 			retVal = theTargetType.newInstance();
-		} catch (InstantiationException e) {
-			throw new ConfigurationException("Failed to instantiate " + theTargetType, e);
-		} catch (IllegalAccessException e) {
+		} catch (Exception e) {
 			throw new ConfigurationException("Failed to instantiate " + theTargetType, e);
 		}
 
-		copyChildren(sourceDef, (BaseElement) theResource, targetDef, (BaseElement) retVal);
+		copyChildren(sourceDef, (IBase) theResource, targetDef, (IBase) retVal);
 
 		return retVal;
 	}
 
-	private void copyChildren(BaseRuntimeElementCompositeDefinition<?> theSourceDef, BaseElement theSource, BaseRuntimeElementCompositeDefinition<?> theTargetDef, BaseElement theTarget) {
+	private void copyChildren(BaseRuntimeElementCompositeDefinition<?> theSourceDef, IBase theSource, BaseRuntimeElementCompositeDefinition<?> theTargetDef, IBase theTarget) {
 		if (!theSource.isEmpty()) {
 			List<BaseRuntimeChildDefinition> targetChildren = theTargetDef.getChildren();
 			List<RuntimeChildDeclaredExtensionDefinition> targetExts = theTargetDef.getExtensions();
@@ -79,7 +67,7 @@ public class ViewGenerator {
 				if (nextChild.getValidChildNames().size() > 1) {
 					elementName = nextChild.getValidChildNames().iterator().next();
 				}
-				
+
 				BaseRuntimeChildDefinition sourceChildEquivalent = theSourceDef.getChildByNameOrThrowDataFormatException(elementName);
 				if (sourceChildEquivalent == null) {
 					continue;
@@ -89,7 +77,7 @@ public class ViewGenerator {
 				for (IBase nextElement : sourceValues) {
 					boolean handled = false;
 					if (nextElement instanceof IBaseExtension) {
-						String url = ((IBaseExtension<?,?>) nextElement).getUrl();
+						String url = ((IBaseExtension<?, ?>) nextElement).getUrl();
 						for (RuntimeChildDeclaredExtensionDefinition nextExt : targetExts) {
 							String nextTargetUrl = nextExt.getExtensionUrl();
 							if (!nextTargetUrl.equals(url)) {
@@ -97,40 +85,49 @@ public class ViewGenerator {
 							}
 							addExtension(theSourceDef, theSource, theTarget, nextExt, url);
 							handled = true;
-						}						
-					} 
+						}
+					}
 					if (!handled) {
 						nextChild.getMutator().addValue(theTarget, nextElement);
 					}
 				}
 			}
-			
+
 			for (RuntimeChildDeclaredExtensionDefinition nextExt : targetExts) {
 				String url = nextExt.getExtensionUrl();
 				addExtension(theSourceDef, theSource, theTarget, nextExt, url);
 			}
-			
-			
+
+
 		}
 	}
 
-	private void addExtension(BaseRuntimeElementCompositeDefinition<?> theSourceDef, BaseElement theSource, BaseElement theTarget, RuntimeChildDeclaredExtensionDefinition nextExt, String url) {
+	private void addExtension(BaseRuntimeElementCompositeDefinition<?> theSourceDef, IBase theSource, IBase theTarget, RuntimeChildDeclaredExtensionDefinition nextExt, String url) {
 		RuntimeChildDeclaredExtensionDefinition sourceDeclaredExt = theSourceDef.getDeclaredExtension(url, "");
 		if (sourceDeclaredExt == null) {
-			
-			for (ExtensionDt next : theSource.getAllUndeclaredExtensions()) {
-				if (next.getUrlAsString().equals(url)) {
-					nextExt.getMutator().addValue(theTarget, next.getValue());
+
+			if (theSource instanceof IBaseHasExtensions) {
+				for (IBaseExtension<?, ?> next : ((IBaseHasExtensions) theSource).getExtension()) {
+					if (next.getUrl().equals(url)) {
+						nextExt.getMutator().addValue(theTarget, next.getValue());
+					}
 				}
 			}
-			
+			if (theSource instanceof IBaseHasModifierExtensions) {
+				for (IBaseExtension<?, ?> next : ((IBaseHasModifierExtensions) theSource).getModifierExtension()) {
+					if (next.getUrl().equals(url)) {
+						nextExt.getMutator().addValue(theTarget, next.getValue());
+					}
+				}
+			}
+
 		} else {
-			
+
 			List<? extends IBase> values = sourceDeclaredExt.getAccessor().getValues(theSource);
 			for (IBase nextElement : values) {
 				nextExt.getMutator().addValue(theTarget, nextElement);
 			}
-			
+
 		}
 	}
 }
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/annotation/Search.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/annotation/Search.java
index 0cef0094175..c15a4df87bf 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/annotation/Search.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/annotation/Search.java
@@ -78,11 +78,6 @@ public @interface Search {
 	// NB: Read, Search (maybe others) share this annotation method, so update the javadocs everywhere
 	Class<? extends IBaseResource> type() default IBaseResource.class;
 
-	/**
-	 * This is an experimental option - Use with caution
-	 */
-	boolean dynamic() default false;
-	
 	/**
 	 * In a REST server, should this method be invoked even if it does not have method parameters 
 	 * which correspond to all of the URL parameters passed in by the client (default is <code>false</code>).
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/Constants.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/Constants.java
index 63d2e0386c6..bca6f2a0198 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/Constants.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/Constants.java
@@ -9,9 +9,9 @@ package ca.uhn.fhir.rest.api;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -109,6 +109,7 @@ public class Constants {
 	public static final String HEADER_PREFER_RETURN = "return";
 	public static final String HEADER_PREFER_RETURN_MINIMAL = "minimal";
 	public static final String HEADER_PREFER_RETURN_REPRESENTATION = "representation";
+	public static final String HEADER_PREFER_RETURN_OPERATION_OUTCOME = "OperationOutcome";
 	public static final String HEADER_SUFFIX_CT_UTF_8 = "; charset=UTF-8";
 	public static final String HEADERVALUE_CORS_ALLOW_METHODS_ALL = "GET, POST, PUT, DELETE, OPTIONS";
 	public static final Map<Integer, String> HTTP_STATUS_NAMES;
@@ -124,7 +125,7 @@ public class Constants {
 	/**
 	 * Used in paging links
 	 */
-	public static final Object PARAM_BUNDLETYPE = "_bundletype";
+	public static final String PARAM_BUNDLETYPE = "_bundletype";
 	public static final String PARAM_CONTENT = "_content";
 	public static final String PARAM_COUNT = "_count";
 	public static final String PARAM_DELETE = "_delete";
@@ -134,7 +135,7 @@ public class Constants {
 	public static final String PARAM_HISTORY = "_history";
 	public static final String PARAM_INCLUDE = "_include";
 	public static final String PARAM_INCLUDE_QUALIFIER_RECURSE = ":recurse";
-	public static final String PARAM_INCLUDE_RECURSE = "_include"+PARAM_INCLUDE_QUALIFIER_RECURSE;
+	public static final String PARAM_INCLUDE_RECURSE = "_include" + PARAM_INCLUDE_QUALIFIER_RECURSE;
 	public static final String PARAM_LASTUPDATED = "_lastUpdated";
 	public static final String PARAM_NARRATIVE = "_narrative";
 	public static final String PARAM_PAGINGACTION = "_getpages";
@@ -146,7 +147,7 @@ public class Constants {
 	public static final String PARAM_QUERY = "_query";
 	public static final String PARAM_RESPONSE_URL = "response-url"; //Used in messaging
 	public static final String PARAM_REVINCLUDE = "_revinclude";
-	public static final String PARAM_REVINCLUDE_RECURSE = PARAM_REVINCLUDE+PARAM_INCLUDE_QUALIFIER_RECURSE;
+	public static final String PARAM_REVINCLUDE_RECURSE = PARAM_REVINCLUDE + PARAM_INCLUDE_QUALIFIER_RECURSE;
 	public static final String PARAM_SEARCH = "_search";
 	public static final String PARAM_SECURITY = "_security";
 	public static final String PARAM_SINCE = "_since";
@@ -154,9 +155,9 @@ public class Constants {
 	public static final String PARAM_SORT_ASC = "_sort:asc";
 	public static final String PARAM_SORT_DESC = "_sort:desc";
 	public static final String PARAM_SUMMARY = "_summary";
-        public static final String PARAM_TAG = "_tag";
-        public static final String PARAM_TAGS = "_tags";
-        public static final String PARAM_TEXT = "_text";
+	public static final String PARAM_TAG = "_tag";
+	public static final String PARAM_TAGS = "_tags";
+	public static final String PARAM_TEXT = "_text";
 	public static final String PARAM_VALIDATE = "_validate";
 	public static final String PARAMQUALIFIER_MISSING = ":missing";
 	public static final String PARAMQUALIFIER_MISSING_FALSE = "false";
@@ -171,7 +172,7 @@ public class Constants {
 	public static final int STATUS_HTTP_400_BAD_REQUEST = 400;
 	public static final int STATUS_HTTP_401_CLIENT_UNAUTHORIZED = 401;
 	public static final int STATUS_HTTP_403_FORBIDDEN = 403;
-	
+
 	public static final int STATUS_HTTP_404_NOT_FOUND = 404;
 	public static final int STATUS_HTTP_405_METHOD_NOT_ALLOWED = 405;
 	public static final int STATUS_HTTP_409_CONFLICT = 409;
@@ -189,9 +190,16 @@ public class Constants {
 	public static final String HEADER_X_CACHE = "X-Cache";
 	public static final String HEADER_X_SECURITY_CONTEXT = "X-Security-Context";
 	public static final String POWERED_BY_HEADER = "X-Powered-By";
+	public static final Charset CHARSET_US_ASCII;
+	public static final String PARAM_PAGEID = "_pageId";
+	/**
+	 * This is provided for testing only! Use with caution as this property may change.
+	 */
+	public static final String TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS = "TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS";
 
 	static {
 		CHARSET_UTF8 = Charset.forName(CHARSET_NAME_UTF8);
+		CHARSET_US_ASCII = Charset.forName("ISO-8859-1");
 
 		HashMap<Integer, String> statusNames = new HashMap<>();
 		statusNames.put(200, "OK");
@@ -257,7 +265,7 @@ public class Constants {
 		statusNames.put(510, "Not Extended");
 		statusNames.put(511, "Network Authentication Required");
 		HTTP_STATUS_NAMES = Collections.unmodifiableMap(statusNames);
-		
+
 		Set<String> formatsHtml = new HashSet<>();
 		formatsHtml.add(CT_HTML);
 		formatsHtml.add(FORMAT_HTML);
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/EncodingEnum.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/EncodingEnum.java
index d4234c1a52b..d4b450aeff8 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/EncodingEnum.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/EncodingEnum.java
@@ -9,9 +9,9 @@ package ca.uhn.fhir.rest.api;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- *
+ * 
  *      http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/PreferReturnEnum.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/PreferReturnEnum.java
index 8f550867cf7..c9625bdf1b1 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/PreferReturnEnum.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/api/PreferReturnEnum.java
@@ -27,7 +27,7 @@ import java.util.HashMap;
  */
 public enum PreferReturnEnum {
 
-	REPRESENTATION("representation"), MINIMAL("minimal");
+	REPRESENTATION("representation"), MINIMAL("minimal"), OPERATION_OUTCOME("OperationOutcome");
 
 	private String myHeaderValue;
 	private static HashMap<String, PreferReturnEnum> ourValues;
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/client/api/IHttpRequest.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/client/api/IHttpRequest.java
index 030ce82ce6d..d7780caa397 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/client/api/IHttpRequest.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/client/api/IHttpRequest.java
@@ -34,36 +34,35 @@ public interface IHttpRequest {
 	 * @param theName the header name
 	 * @param theValue the header value
 	 */
-	public void addHeader(String theName, String theValue);    
+	void addHeader(String theName, String theValue);
 
 	/**
 	 * Execute the request
 	 * @return the response
-	 * @throws IOException
 	 */
-	public IHttpResponse execute() throws IOException;
+	IHttpResponse execute() throws IOException;
 
 	/**
-	 * @return all request headers in lower case
+	 * @return all request headers in lower case. Note that this method
+	 * returns an <b>immutable</b> Map
 	 */
-	public Map<String, List<String>> getAllHeaders();
+	Map<String, List<String>> getAllHeaders();
 
 	/**
-	 * Return the requestbody as a string.
+	 * Return the request body as a string.
 	 * If this is not supported by the underlying technology, null is returned 
 	 * @return a string representation of the request or null if not supported or empty.
-	 * @throws IOException 
 	 */
-	public String getRequestBodyFromStream() throws IOException;
+	String getRequestBodyFromStream() throws IOException;
 
 	/**
 	 * Return the request URI, or null
 	 */
-	public String getUri();
+	String getUri();
 	
 	/**
 	 * Return the HTTP verb (e.g. "GET")
 	 */
-	public String getHttpVerbName();
+	String getHttpVerbName();
 	
 }
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IBaseQuery.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IBaseQuery.java
index f9ddfeb1897..dcc9148dec1 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IBaseQuery.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IBaseQuery.java
@@ -1,9 +1,10 @@
 package ca.uhn.fhir.rest.gclient;
 
-import java.util.*;
-
 import ca.uhn.fhir.model.api.IQueryParameterType;
 
+import java.util.List;
+import java.util.Map;
+
 /*
  * #%L
  * HAPI FHIR - Core Library
@@ -26,10 +27,32 @@ import ca.uhn.fhir.model.api.IQueryParameterType;
 
 public interface IBaseQuery<T extends IBaseQuery<?>> {
 
-    T where(ICriterion<?> theCriterion);
+	/**
+	 * Add a search parameter to the query.
+	 * <p>
+	 * Note that this method is a synonym for {@link #where(ICriterion)}, and is only
+	 * here to make fluent queries read more naturally.
+	 * </p>
+	 */
+	T and(ICriterion<?> theCriterion);
 
-    T where(Map<String, List<IQueryParameterType>> theCriterion);
+	/**
+	 * Add a set of search parameters to the query.
+	 */
+	T where(Map<String, List<IQueryParameterType>> theCriterion);
 
-    T and(ICriterion<?> theCriterion);
+	/**
+	 * Add a search parameter to the query.
+	 */
+	T where(ICriterion<?> theCriterion);
+
+	/**
+	 * Add a set of search parameters to the query.
+	 * <p>
+	 * Values will be treated semi-literally. No FHIR escaping will be performed
+	 * on the values, but regular URL escaping will be.
+	 * </p>
+	 */
+	T whereMap(Map<String, List<String>> theRawMap);
 
 }
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IHistoryTyped.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IHistoryTyped.java
index 81051740745..c20ff7f09f8 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IHistoryTyped.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IHistoryTyped.java
@@ -20,16 +20,23 @@ package ca.uhn.fhir.rest.gclient;
  * #L%
  */
 
-import java.util.Date;
-
+import ca.uhn.fhir.rest.param.DateRangeParam;
 import org.hl7.fhir.instance.model.api.IPrimitiveType;
 
-public interface IHistoryTyped<T> extends IClientExecutable<IHistoryTyped<T>, T>  {
+import java.util.Date;
+
+public interface IHistoryTyped<T> extends IClientExecutable<IHistoryTyped<T>, T> {
 
 	/**
-	 * Request that the server return only resource versions that were created at or after the given time (inclusive)
+	 * Request that the server return only the history elements between the
+	 * specific range
 	 */
-	IHistoryTyped<T> since(Date theCutoff);
+	IHistoryTyped<T> at(DateRangeParam theDateRangeParam);
+
+	/**
+	 * Request that the server return only up to <code>theCount</code> number of resources
+	 */
+	IHistoryTyped<T> count(Integer theCount);
 
 	/**
 	 * Request that the server return only resource versions that were created at or after the given time (inclusive)
@@ -41,9 +48,9 @@ public interface IHistoryTyped<T> extends IClientExecutable<IHistoryTyped<T>, T>
 	IHistoryTyped<T> since(IPrimitiveType<Date> theCutoff);
 
 	/**
-	 * Request that the server return only up to <code>theCount</code> number of resources
+	 * Request that the server return only resource versions that were created at or after the given time (inclusive)
 	 */
-	IHistoryTyped<T> count(Integer theCount);
-	
-	
+	IHistoryTyped<T> since(Date theCutoff);
+
+
 }
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IQuery.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IQuery.java
index e8c63587b54..9086999b87b 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IQuery.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/IQuery.java
@@ -1,6 +1,14 @@
 package ca.uhn.fhir.rest.gclient;
 
+import ca.uhn.fhir.model.api.Include;
+import ca.uhn.fhir.rest.api.SearchStyleEnum;
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+
 import java.util.Collection;
+import java.util.List;
+import java.util.Map;
 
 /*
  * #%L
@@ -22,14 +30,23 @@ import java.util.Collection;
  * #L%
  */
 
-import org.hl7.fhir.instance.model.api.IBaseBundle;
-
-import ca.uhn.fhir.model.api.Include;
-import ca.uhn.fhir.rest.api.SearchStyleEnum;
-import ca.uhn.fhir.rest.param.DateRangeParam;
-
 public interface IQuery<Y> extends IBaseQuery<IQuery<Y>>, IClientExecutable<IQuery<Y>, Y> {
 
+	/**
+	 * {@inheritDoc}
+	 */
+	// This is here as an overridden method to allow mocking clients with Mockito to work
+	@Override
+	IQuery<Y> and(ICriterion<?> theCriterion);
+
+	/**
+	 * Specifies the <code>_count</code> parameter, which indicates to the server how many resources should be returned
+	 * on a single page.
+	 *
+	 * @since 1.4
+	 */
+	IQuery<Y> count(int theCount);
+
 	/**
 	 * Add an "_include" specification or an "_include:recurse" specification. If you are using
 	 * a constant from one of the built-in structures you can select whether you want recursive
@@ -41,88 +58,60 @@ public interface IQuery<Y> extends IBaseQuery<IQuery<Y>>, IClientExecutable<IQue
 	 */
 	IQuery<Y> include(Include theInclude);
 
-	ISort<Y> sort();
+	/**
+	 * Add a "_lastUpdated" specification
+	 *
+	 * @since HAPI FHIR 1.1 - Note that option was added to FHIR itself in DSTU2
+	 */
+	IQuery<Y> lastUpdated(DateRangeParam theLastUpdated);
 
 	/**
 	 * Specifies the <code>_count</code> parameter, which indicates to the server how many resources should be returned
 	 * on a single page.
-	 * 
+	 *
 	 * @deprecated This parameter is badly named, since FHIR calls this parameter "_count" and not "_limit". Use {@link #count(int)} instead (it also sets the _count parameter)
 	 */
 	@Deprecated
 	IQuery<Y> limitTo(int theLimitTo);
 
 	/**
-	 * Specifies the <code>_count</code> parameter, which indicates to the server how many resources should be returned
-	 * on a single page.
-	 * 
-	 * @since 1.4
+	 * Request that the client return the specified bundle type, e.g. <code>org.hl7.fhir.instance.model.Bundle.class</code>
+	 * or <code>ca.uhn.fhir.model.dstu2.resource.Bundle.class</code>
 	 */
-	IQuery<Y> count(int theCount);
-
-	/**
-	 * Match only resources where the resource has the given tag. This parameter corresponds to
-	 * the <code>_tag</code> URL parameter.
-	 * @param theSystem The tag code system, or <code>null</code> to match any code system (this may not be supported on all servers)
-	 * @param theCode The tag code. Must not be <code>null</code> or empty.
-	 */
-	IQuery<Y> withTag(String theSystem, String theCode);
-
-	/**
-	 * Match only resources where the resource has the given security tag. This parameter corresponds to
-	 * the <code>_security</code> URL parameter.
-	 * @param theSystem The tag code system, or <code>null</code> to match any code system (this may not be supported on all servers)
-	 * @param theCode The tag code. Must not be <code>null</code> or empty.
-	 */
-	IQuery<Y> withSecurity(String theSystem, String theCode);
-
-	/**
-	 * Match only resources where the resource has the given profile declaration. This parameter corresponds to
-	 * the <code>_profile</code> URL parameter.
-	 * @param theProfileUri The URI of a given profile to search for resources which match  
-	 */
-	IQuery<Y> withProfile(String theProfileUri);
-
-	/**
-	 * Matches any of the profiles given as argument. This would result in an OR search for resources matching one or more profiles.
-	 * To do an AND search, make multiple calls to {@link #withProfile(String)}.
-	 * @param theProfileUris The URIs of a given profile to search for resources which match.
-	 */
-	IQuery<Y> withAnyProfile(Collection<String> theProfileUris);
-	
-	/**
-	 * Forces the query to perform the search using the given method (allowable methods are described in the 
-	 * <a href="http://www.hl7.org/fhir/search.html">FHIR Search Specification</a>)
-	 * <p>
-	 * This can be used to force the use of an HTTP POST instead of an HTTP GET
-	 * </p>
-	 * 
-	 * @see SearchStyleEnum
-	 * @since 0.6
-	 */
-	IQuery<Y> usingStyle(SearchStyleEnum theStyle);
-
-	IQuery<Y> withIdAndCompartment(String theResourceId, String theCompartmentName);
+	<B extends IBaseBundle> IQuery<B> returnBundle(Class<B> theClass);
 
 	/**
 	 * Add a "_revinclude" specification
-	 * 
+	 *
 	 * @since HAPI FHIR 1.0 - Note that option was added to FHIR itself in DSTU2
 	 */
 	IQuery<Y> revInclude(Include theIncludeTarget);
 
 	/**
-	 * Add a "_lastUpdated" specification
-	 * 
-	 * @since HAPI FHIR 1.1 - Note that option was added to FHIR itself in DSTU2
+	 * Adds a sort criteria
+	 *
+	 * @see #sort(SortSpec) for an alternate way of speciyfing sorts
 	 */
-	IQuery<Y> lastUpdated(DateRangeParam theLastUpdated);
+	ISort<Y> sort();
 
 	/**
-	 * Request that the client return the specified bundle type, e.g. <code>org.hl7.fhir.instance.model.Bundle.class</code>
-	 * or <code>ca.uhn.fhir.model.dstu2.resource.Bundle.class</code>
+	 * Adds a sort using a {@link SortSpec} object
+	 *
+	 * @see #sort() for an alternate way of speciyfing sorts
 	 */
-	<B extends IBaseBundle> IQuery<B> returnBundle(Class<B> theClass);
+	IQuery<Y> sort(SortSpec theSortSpec);
+
+	/**
+	 * Forces the query to perform the search using the given method (allowable methods are described in the
+	 * <a href="http://www.hl7.org/fhir/search.html">FHIR Search Specification</a>)
+	 * <p>
+	 * This can be used to force the use of an HTTP POST instead of an HTTP GET
+	 * </p>
+	 *
+	 * @see SearchStyleEnum
+	 * @since 0.6
+	 */
+	IQuery<Y> usingStyle(SearchStyleEnum theStyle);
 
 	/**
 	 * {@inheritDoc}
@@ -132,11 +121,40 @@ public interface IQuery<Y> extends IBaseQuery<IQuery<Y>>, IClientExecutable<IQue
 	IQuery<Y> where(ICriterion<?> theCriterion);
 
 	/**
-	 * {@inheritDoc}
+	 * Matches any of the profiles given as argument. This would result in an OR search for resources matching one or more profiles.
+	 * To do an AND search, make multiple calls to {@link #withProfile(String)}.
+	 *
+	 * @param theProfileUris The URIs of a given profile to search for resources which match.
 	 */
-	// This is here as an overridden method to allow mocking clients with Mockito to work
-	@Override
-	IQuery<Y> and(ICriterion<?> theCriterion);
+	IQuery<Y> withAnyProfile(Collection<String> theProfileUris);
+
+	IQuery<Y> withIdAndCompartment(String theResourceId, String theCompartmentName);
+
+	/**
+	 * Match only resources where the resource has the given profile declaration. This parameter corresponds to
+	 * the <code>_profile</code> URL parameter.
+	 *
+	 * @param theProfileUri The URI of a given profile to search for resources which match
+	 */
+	IQuery<Y> withProfile(String theProfileUri);
+
+	/**
+	 * Match only resources where the resource has the given security tag. This parameter corresponds to
+	 * the <code>_security</code> URL parameter.
+	 *
+	 * @param theSystem The tag code system, or <code>null</code> to match any code system (this may not be supported on all servers)
+	 * @param theCode   The tag code. Must not be <code>null</code> or empty.
+	 */
+	IQuery<Y> withSecurity(String theSystem, String theCode);
+
+	/**
+	 * Match only resources where the resource has the given tag. This parameter corresponds to
+	 * the <code>_tag</code> URL parameter.
+	 *
+	 * @param theSystem The tag code system, or <code>null</code> to match any code system (this may not be supported on all servers)
+	 * @param theCode   The tag code. Must not be <code>null</code> or empty.
+	 */
+	IQuery<Y> withTag(String theSystem, String theCode);
 
 //	Y execute();
 
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/ISort.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/ISort.java
index 4f63affeccc..dc26fac7276 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/ISort.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/ISort.java
@@ -23,13 +23,13 @@ package ca.uhn.fhir.rest.gclient;
 public interface ISort<T> {
 
 	/**
-	 * Sort ascending 
+	 * Sort ascending
 	 */
 	IQuery<T> ascending(IParam theParam);
 
 	/**
-	 * Sort ascending 
-	 * 
+	 * Sort ascending
+	 *
 	 * @param theParam The param name, e.g. "address"
 	 */
 	IQuery<T> ascending(String theParam);
@@ -37,22 +37,30 @@ public interface ISort<T> {
 	/**
 	 * Sort by the default order. Note that as of STU3, there is no longer
 	 * a concept of default order, only ascending and descending. This method
-	 * technically implies "ascending" but it makes more sense to use 
+	 * technically implies "ascending" but it makes more sense to use
 	 * {@link #ascending(IParam)}
 	 */
 	IQuery<T> defaultOrder(IParam theParam);
 
+	/**
+	 * Sort by the default order. Note that as of STU3, there is no longer
+	 * a concept of default order, only ascending and descending. This method
+	 * technically implies "ascending" but it makes more sense to use
+	 * {@link #ascending(IParam)}
+	 */
+	IQuery<T> defaultOrder(String theParam);
+
 	/**
 	 * Sort descending
-	 * 
-	 * @param theParam A query param - Could be a constant such as <code>Patient.ADDRESS</code> or a custom 
-	 * param such as <code>new StringClientParam("foo")</code>
+	 *
+	 * @param theParam A query param - Could be a constant such as <code>Patient.ADDRESS</code> or a custom
+	 *                 param such as <code>new StringClientParam("foo")</code>
 	 */
 	IQuery<T> descending(IParam theParam);
-	
+
 	/**
-	 * Sort ascending 
-	 * 
+	 * Sort ascending
+	 *
 	 * @param theParam The param name, e.g. "address"
 	 */
 	IQuery<T> descending(String theParam);
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/StringClientParam.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/StringClientParam.java
index 9aa120ff94f..5d0a463bbfe 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/StringClientParam.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/gclient/StringClientParam.java
@@ -20,12 +20,12 @@ package ca.uhn.fhir.rest.gclient;
  * #L%
  */
 
+import ca.uhn.fhir.rest.api.Constants;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+
 import java.util.Arrays;
 import java.util.List;
 
-import ca.uhn.fhir.model.primitive.StringDt;
-import ca.uhn.fhir.rest.api.Constants;
-
 /**
  * 
  * @author james
@@ -59,6 +59,13 @@ public class StringClientParam extends BaseClientParam implements IParam {
 		return new StringExactly();
 	}
 
+	/**
+	 * The string contains given value
+	 */
+	public IStringMatch contains() {
+		return new StringContains();
+	}
+
 	public interface IStringMatch {
 
 		/**
@@ -76,7 +83,7 @@ public class StringClientParam extends BaseClientParam implements IParam {
 		/**
 		 * Requests that resources be returned which match the given value
 		 */
-		ICriterion<StringClientParam> value(StringDt theValue);
+		ICriterion<StringClientParam> value(IPrimitiveType<String> theValue);
 
 		/**
 		 * Requests that resources be returned which match ANY of the given values (this is an OR search, not an AND search). Note that to
@@ -90,17 +97,17 @@ public class StringClientParam extends BaseClientParam implements IParam {
 	private class StringExactly implements IStringMatch {
 		@Override
 		public ICriterion<StringClientParam> value(String theValue) {
-			return new StringCriterion<StringClientParam>(getParamName() + Constants.PARAMQUALIFIER_STRING_EXACT, theValue);
+			return new StringCriterion<>(getParamName() + Constants.PARAMQUALIFIER_STRING_EXACT, theValue);
 		}
 
 		@Override
-		public ICriterion<StringClientParam> value(StringDt theValue) {
-			return new StringCriterion<StringClientParam>(getParamName() + Constants.PARAMQUALIFIER_STRING_EXACT, theValue.getValue());
+		public ICriterion<StringClientParam> value(IPrimitiveType<String> theValue) {
+			return new StringCriterion<>(getParamName() + Constants.PARAMQUALIFIER_STRING_EXACT, theValue.getValue());
 		}
 
 		@Override
 		public ICriterion<StringClientParam> values(List<String> theValue) {
-			return new StringCriterion<StringClientParam>(getParamName() + Constants.PARAMQUALIFIER_STRING_EXACT, theValue);
+			return new StringCriterion<>(getParamName() + Constants.PARAMQUALIFIER_STRING_EXACT, theValue);
 		}
 
 		@Override
@@ -109,20 +116,42 @@ public class StringClientParam extends BaseClientParam implements IParam {
 		}
 	}
 
-	private class StringMatches implements IStringMatch {
+	private class StringContains implements IStringMatch {
 		@Override
 		public ICriterion<StringClientParam> value(String theValue) {
-			return new StringCriterion<StringClientParam>(getParamName(), theValue);
+			return new StringCriterion<>(getParamName() + Constants.PARAMQUALIFIER_STRING_CONTAINS, theValue);
 		}
 
 		@Override
-		public ICriterion<StringClientParam> value(StringDt theValue) {
-			return new StringCriterion<StringClientParam>(getParamName(), theValue.getValue());
+		public ICriterion<StringClientParam> value(IPrimitiveType<String> theValue) {
+			return new StringCriterion<>(getParamName() + Constants.PARAMQUALIFIER_STRING_CONTAINS, theValue.getValue());
 		}
 
 		@Override
 		public ICriterion<StringClientParam> values(List<String> theValue) {
-			return new StringCriterion<StringClientParam>(getParamName(), theValue);
+			return new StringCriterion<>(getParamName() + Constants.PARAMQUALIFIER_STRING_CONTAINS, theValue);
+		}
+
+		@Override
+		public ICriterion<?> values(String... theValues) {
+			return new StringCriterion<StringClientParam>(getParamName() + Constants.PARAMQUALIFIER_STRING_CONTAINS, Arrays.asList(theValues));
+		}
+	}
+
+	private class StringMatches implements IStringMatch {
+		@Override
+		public ICriterion<StringClientParam> value(String theValue) {
+			return new StringCriterion<>(getParamName(), theValue);
+		}
+
+		@Override
+		public ICriterion<StringClientParam> value(IPrimitiveType<String> theValue) {
+			return new StringCriterion<>(getParamName(), theValue.getValue());
+		}
+
+		@Override
+		public ICriterion<StringClientParam> values(List<String> theValue) {
+			return new StringCriterion<>(getParamName(), theValue);
 		}
 
 		@Override
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/DateRangeParam.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/DateRangeParam.java
index c73a5ea3835..434f7664e3e 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/DateRangeParam.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/DateRangeParam.java
@@ -1,8 +1,18 @@
 package ca.uhn.fhir.rest.param;
 
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.EQUAL;
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.GREATERTHAN_OR_EQUALS;
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.LESSTHAN_OR_EQUALS;
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.model.api.IQueryParameterAnd;
+import ca.uhn.fhir.parser.DataFormatException;
+import ca.uhn.fhir.rest.api.QualifiedParamList;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+import static ca.uhn.fhir.rest.param.ParamPrefixEnum.*;
 import static java.lang.String.format;
 import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
@@ -25,20 +35,12 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
  * limitations under the License.
  * #L%
  */
-import java.util.*;
-
-import org.hl7.fhir.instance.model.api.IPrimitiveType;
-
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.model.api.IQueryParameterAnd;
-import ca.uhn.fhir.parser.DataFormatException;
-import ca.uhn.fhir.rest.api.QualifiedParamList;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 
+@SuppressWarnings("UnusedReturnValue")
 public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 
 	private static final long serialVersionUID = 1L;
-	
+
 	private DateParam myLowerBound;
 	private DateParam myUpperBound;
 
@@ -52,15 +54,13 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 
 	/**
 	 * Constructor which takes two Dates representing the lower and upper bounds of the range (inclusive on both ends)
-	 * 
-	 * @param theLowerBound
-	 *           A qualified date param representing the lower date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
-	 * @param theUpperBound
-	 *           A qualified date param representing the upper date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 *
+	 * @param theLowerBound A qualified date param representing the lower date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 * @param theUpperBound A qualified date param representing the upper date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
 	 */
 	public DateRangeParam(Date theLowerBound, Date theUpperBound) {
 		this();
@@ -84,37 +84,35 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 			setRangeFromDatesInclusive(theDateParam.getValueAsString(), theDateParam.getValueAsString());
 		} else {
 			switch (theDateParam.getPrefix()) {
-			case EQUAL:
-				setRangeFromDatesInclusive(theDateParam.getValueAsString(), theDateParam.getValueAsString());
-				break;
-			case STARTS_AFTER:
-			case GREATERTHAN:
-			case GREATERTHAN_OR_EQUALS:
-				validateAndSet(theDateParam, null);
-				break;
-			case ENDS_BEFORE:
-			case LESSTHAN:
-			case LESSTHAN_OR_EQUALS:
-				validateAndSet(null, theDateParam);
-				break;
-			default:
-				// Should not happen
-				throw new InvalidRequestException("Invalid comparator for date range parameter:" + theDateParam.getPrefix() + ". This is a bug.");
+				case EQUAL:
+					setRangeFromDatesInclusive(theDateParam.getValueAsString(), theDateParam.getValueAsString());
+					break;
+				case STARTS_AFTER:
+				case GREATERTHAN:
+				case GREATERTHAN_OR_EQUALS:
+					validateAndSet(theDateParam, null);
+					break;
+				case ENDS_BEFORE:
+				case LESSTHAN:
+				case LESSTHAN_OR_EQUALS:
+					validateAndSet(null, theDateParam);
+					break;
+				default:
+					// Should not happen
+					throw new InvalidRequestException("Invalid comparator for date range parameter:" + theDateParam.getPrefix() + ". This is a bug.");
 			}
 		}
 	}
 
 	/**
 	 * Constructor which takes two Dates representing the lower and upper bounds of the range (inclusive on both ends)
-	 * 
-	 * @param theLowerBound
-	 *           A qualified date param representing the lower date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
-	 * @param theUpperBound
-	 *           A qualified date param representing the upper date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 *
+	 * @param theLowerBound A qualified date param representing the lower date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 * @param theUpperBound A qualified date param representing the upper date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
 	 */
 	public DateRangeParam(DateParam theLowerBound, DateParam theUpperBound) {
 		this();
@@ -123,15 +121,13 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 
 	/**
 	 * Constructor which takes two Dates representing the lower and upper bounds of the range (inclusive on both ends)
-	 * 
-	 * @param theLowerBound
-	 *           A qualified date param representing the lower date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
-	 * @param theUpperBound
-	 *           A qualified date param representing the upper date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 *
+	 * @param theLowerBound A qualified date param representing the lower date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 * @param theUpperBound A qualified date param representing the upper date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
 	 */
 	public DateRangeParam(IPrimitiveType<Date> theLowerBound, IPrimitiveType<Date> theUpperBound) {
 		this();
@@ -140,15 +136,13 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 
 	/**
 	 * Constructor which takes two strings representing the lower and upper bounds of the range (inclusive on both ends)
-	 * 
-	 * @param theLowerBound
-	 *           An unqualified date param representing the lower date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Either theLowerBound or theUpperBound may both be populated, or
-	 *           one may be null, but it is not valid for both to be null.
-	 * @param theUpperBound
-	 *           An unqualified date param representing the upper date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Either theLowerBound or theUpperBound may both be populated, or
-	 *           one may be null, but it is not valid for both to be null.
+	 *
+	 * @param theLowerBound An unqualified date param representing the lower date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Either theLowerBound or theUpperBound may both be populated, or
+	 *                      one may be null, but it is not valid for both to be null.
+	 * @param theUpperBound An unqualified date param representing the upper date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Either theLowerBound or theUpperBound may both be populated, or
+	 *                      one may be null, but it is not valid for both to be null.
 	 */
 	public DateRangeParam(String theLowerBound, String theUpperBound) {
 		this();
@@ -168,35 +162,99 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 				myLowerBound = new DateParam(EQUAL, theParsed.getValueAsString());
 				myUpperBound = new DateParam(EQUAL, theParsed.getValueAsString());
 			}
-			
+
 		} else {
 
 			switch (theParsed.getPrefix()) {
-			case GREATERTHAN:
-			case GREATERTHAN_OR_EQUALS:
-				if (myLowerBound != null) {
-					throw new InvalidRequestException("Can not have multiple date range parameters for the same param that specify a lower bound");
-				}
-				myLowerBound = theParsed;
-				break;
-			case LESSTHAN:
-			case LESSTHAN_OR_EQUALS:
-				if (myUpperBound != null) {
-					throw new InvalidRequestException("Can not have multiple date range parameters for the same param that specify an upper bound");
-				}
-				myUpperBound = theParsed;
-				break;
-			default:
-				throw new InvalidRequestException("Unknown comparator: " + theParsed.getPrefix());
+				case GREATERTHAN:
+				case GREATERTHAN_OR_EQUALS:
+					if (myLowerBound != null) {
+						throw new InvalidRequestException("Can not have multiple date range parameters for the same param that specify a lower bound");
+					}
+					myLowerBound = theParsed;
+					break;
+				case LESSTHAN:
+				case LESSTHAN_OR_EQUALS:
+					if (myUpperBound != null) {
+						throw new InvalidRequestException("Can not have multiple date range parameters for the same param that specify an upper bound");
+					}
+					myUpperBound = theParsed;
+					break;
+				default:
+					throw new InvalidRequestException("Unknown comparator: " + theParsed.getPrefix());
 			}
 
 		}
 	}
 
+	@Override
+	public boolean equals(Object obj) {
+		if (obj == this) {
+			return true;
+		}
+		if (!(obj instanceof DateRangeParam)) {
+			return false;
+		}
+		DateRangeParam other = (DateRangeParam) obj;
+		return Objects.equals(myLowerBound, other.myLowerBound) &&
+			Objects.equals(myUpperBound, other.myUpperBound);
+	}
+
 	public DateParam getLowerBound() {
 		return myLowerBound;
 	}
 
+	public DateRangeParam setLowerBound(DateParam theLowerBound) {
+		validateAndSet(theLowerBound, myUpperBound);
+		return this;
+	}
+
+	/**
+	 * Sets the lower bound using a string that is compliant with
+	 * FHIR dateTime format (ISO-8601).
+	 * <p>
+	 * This lower bound is assumed to have a <code>ge</code>
+	 * (greater than or equals) modifier.
+	 * </p>
+	 */
+	public DateRangeParam setLowerBound(String theLowerBound) {
+		setLowerBound(new DateParam(GREATERTHAN_OR_EQUALS, theLowerBound));
+		return this;
+	}
+
+	/**
+	 * Sets the lower bound to be greaterthan or equal to the given date
+	 */
+	public DateRangeParam setLowerBoundInclusive(Date theLowerBound) {
+		validateAndSet(new DateParam(ParamPrefixEnum.GREATERTHAN_OR_EQUALS, theLowerBound), myUpperBound);
+		return this;
+	}
+
+	/**
+	 * Sets the upper bound to be greaterthan or equal to the given date
+	 */
+	public DateRangeParam setUpperBoundInclusive(Date theUpperBound) {
+		validateAndSet(myLowerBound, new DateParam(ParamPrefixEnum.LESSTHAN_OR_EQUALS, theUpperBound));
+		return this;
+	}
+
+
+	/**
+	 * Sets the lower bound to be greaterthan to the given date
+	 */
+	public DateRangeParam setLowerBoundExclusive(Date theLowerBound) {
+		validateAndSet(new DateParam(ParamPrefixEnum.GREATERTHAN, theLowerBound), myUpperBound);
+		return this;
+	}
+
+	/**
+	 * Sets the upper bound to be greaterthan to the given date
+	 */
+	public DateRangeParam setUpperBoundExclusive(Date theUpperBound) {
+		validateAndSet(myLowerBound, new DateParam(ParamPrefixEnum.LESSTHAN, theUpperBound));
+		return this;
+	}
+
 	public Date getLowerBoundAsInstant() {
 		if (myLowerBound == null) {
 			return null;
@@ -204,19 +262,19 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 		Date retVal = myLowerBound.getValue();
 		if (myLowerBound.getPrefix() != null) {
 			switch (myLowerBound.getPrefix()) {
-			case GREATERTHAN:
-			case STARTS_AFTER:
-				retVal = myLowerBound.getPrecision().add(retVal, 1);
-				break;
-			case EQUAL:
-			case GREATERTHAN_OR_EQUALS:
-				break;
-			case LESSTHAN:
-			case APPROXIMATE:
-			case LESSTHAN_OR_EQUALS:
-			case ENDS_BEFORE:
-			case NOT_EQUAL:
-				throw new IllegalStateException("Unvalid lower bound comparator: " + myLowerBound.getPrefix());
+				case GREATERTHAN:
+				case STARTS_AFTER:
+					retVal = myLowerBound.getPrecision().add(retVal, 1);
+					break;
+				case EQUAL:
+				case GREATERTHAN_OR_EQUALS:
+					break;
+				case LESSTHAN:
+				case APPROXIMATE:
+				case LESSTHAN_OR_EQUALS:
+				case ENDS_BEFORE:
+				case NOT_EQUAL:
+					throw new IllegalStateException("Unvalid lower bound comparator: " + myLowerBound.getPrefix());
 			}
 		}
 		return retVal;
@@ -226,6 +284,24 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 		return myUpperBound;
 	}
 
+	/**
+	 * Sets the upper bound using a string that is compliant with
+	 * FHIR dateTime format (ISO-8601).
+	 * <p>
+	 * This upper bound is assumed to have a <code>le</code>
+	 * (less than or equals) modifier.
+	 * </p>
+	 */
+	public DateRangeParam setUpperBound(String theUpperBound) {
+		setUpperBound(new DateParam(LESSTHAN_OR_EQUALS, theUpperBound));
+		return this;
+	}
+
+	public DateRangeParam setUpperBound(DateParam theUpperBound) {
+		validateAndSet(myLowerBound, theUpperBound);
+		return this;
+	}
+
 	public Date getUpperBoundAsInstant() {
 		if (myUpperBound == null) {
 			return null;
@@ -233,21 +309,21 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 		Date retVal = myUpperBound.getValue();
 		if (myUpperBound.getPrefix() != null) {
 			switch (myUpperBound.getPrefix()) {
-			case LESSTHAN:
-			case ENDS_BEFORE:
-				retVal = new Date(retVal.getTime() - 1L);
-				break;
-			case EQUAL:
-			case LESSTHAN_OR_EQUALS:
-				retVal = myUpperBound.getPrecision().add(retVal, 1);
-				retVal = new Date(retVal.getTime() - 1L);
-				break;
-			case GREATERTHAN_OR_EQUALS:
-			case GREATERTHAN:
-			case APPROXIMATE:
-			case NOT_EQUAL:
-			case STARTS_AFTER:
-				throw new IllegalStateException("Unvalid upper bound comparator: " + myUpperBound.getPrefix());
+				case LESSTHAN:
+				case ENDS_BEFORE:
+					retVal = new Date(retVal.getTime() - 1L);
+					break;
+				case EQUAL:
+				case LESSTHAN_OR_EQUALS:
+					retVal = myUpperBound.getPrecision().add(retVal, 1);
+					retVal = new Date(retVal.getTime() - 1L);
+					break;
+				case GREATERTHAN_OR_EQUALS:
+				case GREATERTHAN:
+				case APPROXIMATE:
+				case NOT_EQUAL:
+				case STARTS_AFTER:
+					throw new IllegalStateException("Unvalid upper bound comparator: " + myUpperBound.getPrefix());
 			}
 		}
 		return retVal;
@@ -273,46 +349,42 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 		return bound != null && !bound.isEmpty();
 	}
 
+	@Override
+	public int hashCode() {
+		return Objects.hash(myLowerBound, myUpperBound);
+	}
+
 	public boolean isEmpty() {
 		return (getLowerBoundAsInstant() == null) && (getUpperBoundAsInstant() == null);
 	}
 
-	public DateRangeParam setLowerBound(DateParam theLowerBound) {
-		validateAndSet(theLowerBound, myUpperBound);
-		return this;
-	}
-
 	/**
 	 * Sets the range from a pair of dates, inclusive on both ends
-	 * 
-	 * @param theLowerBound
-	 *           A qualified date param representing the lower date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
-	 * @param theUpperBound
-	 *           A qualified date param representing the upper date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 *
+	 * @param theLowerBound A qualified date param representing the lower date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 * @param theUpperBound A qualified date param representing the upper date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
 	 */
 	public void setRangeFromDatesInclusive(Date theLowerBound, Date theUpperBound) {
 		DateParam lowerBound = theLowerBound != null
-				? new DateParam(GREATERTHAN_OR_EQUALS, theLowerBound) : null;
+			? new DateParam(GREATERTHAN_OR_EQUALS, theLowerBound) : null;
 		DateParam upperBound = theUpperBound != null
-				? new DateParam(LESSTHAN_OR_EQUALS, theUpperBound) : null;
+			? new DateParam(LESSTHAN_OR_EQUALS, theUpperBound) : null;
 		validateAndSet(lowerBound, upperBound);
 	}
 
 	/**
 	 * Sets the range from a pair of dates, inclusive on both ends
-	 * 
-	 * @param theLowerBound
-	 *           A qualified date param representing the lower date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
-	 * @param theUpperBound
-	 *           A qualified date param representing the upper date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 *
+	 * @param theLowerBound A qualified date param representing the lower date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 * @param theUpperBound A qualified date param representing the upper date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
 	 */
 	public void setRangeFromDatesInclusive(DateParam theLowerBound, DateParam theUpperBound) {
 		validateAndSet(theLowerBound, theUpperBound);
@@ -322,15 +394,13 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 	 * Sets the range from a pair of dates, inclusive on both ends. Note that if
 	 * theLowerBound is after theUpperBound, thie method will automatically reverse
 	 * the order of the arguments in order to create an inclusive range.
-	 * 
-	 * @param theLowerBound
-	 *           A qualified date param representing the lower date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
-	 * @param theUpperBound
-	 *           A qualified date param representing the upper date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 *
+	 * @param theLowerBound A qualified date param representing the lower date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 * @param theUpperBound A qualified date param representing the upper date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
 	 */
 	public void setRangeFromDatesInclusive(IPrimitiveType<Date> theLowerBound, IPrimitiveType<Date> theUpperBound) {
 		IPrimitiveType<Date> lowerBound = theLowerBound;
@@ -349,23 +419,21 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 
 	/**
 	 * Sets the range from a pair of dates, inclusive on both ends
-	 * 
-	 * @param theLowerBound
-	 *           A qualified date param representing the lower date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
-	 * @param theUpperBound
-	 *           A qualified date param representing the upper date bound (optionally may include time), e.g.
-	 *           "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
-	 *           theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 *
+	 * @param theLowerBound A qualified date param representing the lower date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
+	 * @param theUpperBound A qualified date param representing the upper date bound (optionally may include time), e.g.
+	 *                      "2011-02-22" or "2011-02-22T13:12:00Z". Will be treated inclusively. Either theLowerBound or
+	 *                      theUpperBound may both be populated, or one may be null, but it is not valid for both to be null.
 	 */
 	public void setRangeFromDatesInclusive(String theLowerBound, String theUpperBound) {
 		DateParam lowerBound = theLowerBound != null
-				? new DateParam(GREATERTHAN_OR_EQUALS, theLowerBound)
-				: null;
+			? new DateParam(GREATERTHAN_OR_EQUALS, theLowerBound)
+			: null;
 		DateParam upperBound = theUpperBound != null
-				? new DateParam(LESSTHAN_OR_EQUALS, theUpperBound)
-				: null;
+			? new DateParam(LESSTHAN_OR_EQUALS, theUpperBound)
+			: null;
 		if (isNotBlank(theLowerBound) && isNotBlank(theUpperBound) && theLowerBound.equals(theUpperBound)) {
 			lowerBound.setPrefix(EQUAL);
 			upperBound.setPrefix(EQUAL);
@@ -373,14 +441,9 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 		validateAndSet(lowerBound, upperBound);
 	}
 
-	public DateRangeParam setUpperBound(DateParam theUpperBound) {
-		validateAndSet(myLowerBound, theUpperBound);
-		return this;
-	}
-
 	@Override
 	public void setValuesAsQueryTokens(FhirContext theContext, String theParamName, List<QualifiedParamList> theParameters)
-	throws InvalidRequestException {
+		throws InvalidRequestException {
 
 		boolean haveHadUnqualifiedParameter = false;
 		for (QualifiedParamList paramList : theParameters) {
@@ -391,13 +454,13 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 				throw new InvalidRequestException("DateRange parameter does not suppport OR queries");
 			}
 			String param = paramList.get(0);
-			
+
 			/*
 			 * Since ' ' is escaped as '+' we'll be nice to anyone might have accidentally not
 			 * escaped theirs
 			 */
 			param = param.replace(' ', '+');
-			
+
 			DateParam parsed = new DateParam();
 			parsed.setValueAsQueryToken(theContext, theParamName, paramList.getQualifier(), param);
 			addParam(parsed);
@@ -413,24 +476,6 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 
 	}
 
-	@Override
-	public boolean equals(Object obj) {
-		if (obj == this) {
-			return true;
-		}
-		if (!(obj instanceof DateRangeParam)) {
-			return false;
-		}
-		DateRangeParam other = (DateRangeParam) obj;
-		return	Objects.equals(myLowerBound, other.myLowerBound) &&
-					Objects.equals(myUpperBound, other.myUpperBound);
-	}
-
-	@Override
-	public int hashCode() {
-		return Objects.hash(myLowerBound, myUpperBound);
-	}
-
 	@Override
 	public String toString() {
 		StringBuilder b = new StringBuilder();
@@ -463,8 +508,8 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 		if (hasBound(lowerBound) && hasBound(upperBound)) {
 			if (lowerBound.getValue().getTime() > upperBound.getValue().getTime()) {
 				throw new DataFormatException(format(
-						"Lower bound of %s is after upper bound of %s",
-						lowerBound.getValueAsString(), upperBound.getValueAsString()));
+					"Lower bound of %s is after upper bound of %s",
+					lowerBound.getValueAsString(), upperBound.getValueAsString()));
 			}
 		}
 
@@ -473,13 +518,13 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 				lowerBound.setPrefix(GREATERTHAN_OR_EQUALS);
 			}
 			switch (lowerBound.getPrefix()) {
-			case GREATERTHAN:
-			case GREATERTHAN_OR_EQUALS:
-			default:
-				break;
-			case LESSTHAN:
-			case LESSTHAN_OR_EQUALS:
-				throw new DataFormatException("Lower bound comparator must be > or >=, can not be " + lowerBound.getPrefix().getValue());
+				case GREATERTHAN:
+				case GREATERTHAN_OR_EQUALS:
+				default:
+					break;
+				case LESSTHAN:
+				case LESSTHAN_OR_EQUALS:
+					throw new DataFormatException("Lower bound comparator must be > or >=, can not be " + lowerBound.getPrefix().getValue());
 			}
 		}
 
@@ -488,17 +533,18 @@ public class DateRangeParam implements IQueryParameterAnd<DateParam> {
 				upperBound.setPrefix(LESSTHAN_OR_EQUALS);
 			}
 			switch (upperBound.getPrefix()) {
-			case LESSTHAN:
-			case LESSTHAN_OR_EQUALS:
-			default:
-				break;
-			case GREATERTHAN:
-			case GREATERTHAN_OR_EQUALS:
-				throw new DataFormatException("Upper bound comparator must be < or <=, can not be " + upperBound.getPrefix().getValue());
+				case LESSTHAN:
+				case LESSTHAN_OR_EQUALS:
+				default:
+					break;
+				case GREATERTHAN:
+				case GREATERTHAN_OR_EQUALS:
+					throw new DataFormatException("Upper bound comparator must be < or <=, can not be " + upperBound.getPrefix().getValue());
 			}
 		}
 
 		myLowerBound = lowerBound;
 		myUpperBound = upperBound;
 	}
+
 }
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/exceptions/ResourceGoneException.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/exceptions/ResourceGoneException.java
index 93d6a62a6fa..ea495641181 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/exceptions/ResourceGoneException.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/exceptions/ResourceGoneException.java
@@ -19,11 +19,13 @@ package ca.uhn.fhir.rest.server.exceptions;
  * limitations under the License.
  * #L%
  */
-import org.hl7.fhir.instance.model.api.*;
 
 import ca.uhn.fhir.model.base.composite.BaseIdentifierDt;
 import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.util.CoverageIgnore;
+import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IIdType;
 
 /**
  * Represents an <b>HTTP 410 Resource Gone</b> response, which geenerally
@@ -33,12 +35,12 @@ import ca.uhn.fhir.util.CoverageIgnore;
 public class ResourceGoneException extends BaseServerResponseException {
 
 	public static final int STATUS_CODE = Constants.STATUS_HTTP_410_GONE;
+	private static final long serialVersionUID = 1L;
 
 	/**
 	 * Constructor which creates an error message based on a given resource ID
-	 * 
-	 * @param theResourceId
-	 *           The ID of the resource that could not be found
+	 *
+	 * @param theResourceId The ID of the resource that could not be found
 	 */
 	public ResourceGoneException(IIdType theResourceId) {
 		super(STATUS_CODE, "Resource " + (theResourceId != null ? theResourceId.getValue() : "") + " is gone/deleted");
@@ -46,7 +48,7 @@ public class ResourceGoneException extends BaseServerResponseException {
 
 	/**
 	 * @deprecated This constructor has a dependency on a specific model version and will be removed. Deprecated in HAPI
-	 *             1.6 - 2016-07-02
+	 * 1.6 - 2016-07-02
 	 */
 	@Deprecated
 	public ResourceGoneException(Class<? extends IBaseResource> theClass, BaseIdentifierDt thePatientId) {
@@ -55,11 +57,9 @@ public class ResourceGoneException extends BaseServerResponseException {
 
 	/**
 	 * Constructor which creates an error message based on a given resource ID
-	 * 
-	 * @param theClass
-	 *           The type of resource that could not be found
-	 * @param theResourceId
-	 *           The ID of the resource that could not be found
+	 *
+	 * @param theClass      The type of resource that could not be found
+	 * @param theResourceId The ID of the resource that could not be found
 	 */
 	public ResourceGoneException(Class<? extends IBaseResource> theClass, IIdType theResourceId) {
 		super(STATUS_CODE, "Resource of type " + theClass.getSimpleName() + " with ID " + theResourceId + " is gone/deleted");
@@ -67,20 +67,21 @@ public class ResourceGoneException extends BaseServerResponseException {
 
 	/**
 	 * Constructor
-	 * 
-	 * @param theMessage
-	 *           The message
-	 * @param theOperationOutcome
-	 *           The OperationOutcome resource to return to the client
+	 *
+	 * @param theMessage          The message
+	 * @param theOperationOutcome The OperationOutcome resource to return to the client
 	 */
 	public ResourceGoneException(String theMessage, IBaseOperationOutcome theOperationOutcome) {
 		super(STATUS_CODE, theMessage, theOperationOutcome);
 	}
 
+	/**
+	 * Constructor
+	 *
+	 * @param theMessage The message
+	 */
 	public ResourceGoneException(String theMessage) {
 		super(STATUS_CODE, theMessage);
 	}
 
-	private static final long serialVersionUID = 1L;
-
 }
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/exceptions/UnprocessableEntityException.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/exceptions/UnprocessableEntityException.java
index e59932639fe..21ec96289ba 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/exceptions/UnprocessableEntityException.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/server/exceptions/UnprocessableEntityException.java
@@ -20,44 +20,42 @@ package ca.uhn.fhir.rest.server.exceptions;
  * #L%
  */
 
-import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
-
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.util.CoverageIgnore;
 import ca.uhn.fhir.util.OperationOutcomeUtil;
+import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
 
 /**
  * Represents an <b>HTTP 422 Unprocessable Entity</b> response, which means that a resource was rejected by the server because it "violated applicable FHIR profiles or server business rules".
- * 
+ *
  * <p>
  * This exception will generally contain an {@link IBaseOperationOutcome} instance which details the failure.
  * </p>
- * 
+ *
  * @see InvalidRequestException Which corresponds to an <b>HTTP 400 Bad Request</b> failure
  */
 @CoverageIgnore
 public class UnprocessableEntityException extends BaseServerResponseException {
 
+	public static final int STATUS_CODE = Constants.STATUS_HTTP_422_UNPROCESSABLE_ENTITY;
 	private static final String DEFAULT_MESSAGE = "Unprocessable Entity";
 	private static final long serialVersionUID = 1L;
-	public static final int STATUS_CODE = Constants.STATUS_HTTP_422_UNPROCESSABLE_ENTITY;
 
 	/**
 	 * Constructor
-	 * 
-	 * @param theMessage
-	 *            The message to add to the status line
-	 *  @param theOperationOutcome The {@link IBaseOperationOutcome} resource to return to the client
+	 *
+	 * @param theMessage          The message to add to the status line
+	 * @param theOperationOutcome The {@link IBaseOperationOutcome} resource to return to the client
 	 */
 	public UnprocessableEntityException(String theMessage, IBaseOperationOutcome theOperationOutcome) {
 		super(STATUS_CODE, theMessage, theOperationOutcome);
 	}
 
-	
+
 	/**
 	 * Constructor which accepts an {@link IBaseOperationOutcome} resource which will be supplied in the response
-	 * 
+	 *
 	 * @deprecated Use constructor with FhirContext argument
 	 */
 	@Deprecated
@@ -79,6 +77,13 @@ public class UnprocessableEntityException extends BaseServerResponseException {
 		super(STATUS_CODE, theMessage);
 	}
 
+	/**
+	 * Constructor which accepts a String describing the issue. This string will be translated into an {@link IBaseOperationOutcome} resource which will be supplied in the response.
+	 */
+	public UnprocessableEntityException(String theMessage, Throwable theCause) {
+		super(STATUS_CODE, theMessage, theCause);
+	}
+
 	/**
 	 * Constructor which accepts an array of Strings describing the issue. This strings will be translated into an {@link IBaseOperationOutcome} resource which will be supplied in the response.
 	 */
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/BundleUtil.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/BundleUtil.java
index e51811ecf3f..e2706009d98 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/BundleUtil.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/BundleUtil.java
@@ -154,11 +154,11 @@ public class BundleUtil {
 		BaseRuntimeChildDefinition urlChild = requestElem.getChildByName("url");
 		BaseRuntimeChildDefinition methodChild = requestElem.getChildByName("method");
 		
-		IBaseResource resource = null;
-		String url = null;
-		RequestTypeEnum requestType = null;
-		
 		for (IBase nextEntry : entries) {
+			IBaseResource resource = null;
+			String url = null;
+			RequestTypeEnum requestType = null;
+
 			for (IBase next : resourceChild.getAccessor().getValues(nextEntry)) {
 				resource = (IBaseResource) next;
 			}
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/ReflectionUtil.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/ReflectionUtil.java
index b286f89ef08..3cf2c513632 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/ReflectionUtil.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/ReflectionUtil.java
@@ -86,7 +86,7 @@ public class ReflectionUtil {
 	public static Class<?> getGenericCollectionTypeOfMethodParameter(Method theMethod, int theParamIndex) {
 		Class<?> type;
 		Type genericParameterType = theMethod.getGenericParameterTypes()[theParamIndex];
-		if (Class.class.equals(genericParameterType)) {
+		if (Class.class.equals(genericParameterType) || Class.class.equals(genericParameterType.getClass())) {
 			return null;
 		}
 		ParameterizedType collectionType = (ParameterizedType) genericParameterType;
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/TestUtil.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/TestUtil.java
index a75e36357e1..1d1fc8ee42c 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/TestUtil.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/TestUtil.java
@@ -32,6 +32,7 @@ import java.lang.reflect.Modifier;
 import java.util.Arrays;
 import java.util.Locale;
 import java.util.TimeZone;
+import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.commons.lang3.StringUtils.defaultString;
@@ -144,6 +145,24 @@ public class TestUtil {
 		}
 	}
 
+	/**
+	 * <b>THIS IS FOR UNIT TESTS ONLY - DO NOT CALL THIS METHOD FROM USER CODE</b>
+	 * <p>
+	 * Wait for an atomicinteger to hit a given site and fail if it never does
+	 */
+	public static void waitForSize(int theTarget, Callable<Integer> theSource) throws Exception {
+		long start = System.currentTimeMillis();
+		while (theSource.call() != theTarget && (System.currentTimeMillis() - start) <= 15000) {
+			try {
+				Thread.sleep(50);
+			} catch (InterruptedException theE) {
+				throw new Error(theE);
+			}
+		}
+		if ((System.currentTimeMillis() - start) >= 15000) {
+			throw new IllegalStateException("Size " + theSource.call() + " is != target " + theTarget);
+		}
+	}
 
 	/**
 	 * <b>THIS IS FOR UNIT TESTS ONLY - DO NOT CALL THIS METHOD FROM USER CODE</b>
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlPathTokenizer.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlPathTokenizer.java
index 0e60d47a30f..63bbb780a7e 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlPathTokenizer.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlPathTokenizer.java
@@ -34,8 +34,17 @@ public class UrlPathTokenizer {
 		return myTok.hasMoreTokens();
 	}
 
-	public String nextToken() {
-		return UrlUtil.unescape(myTok.nextToken());
+	/**
+	 * Returns the next portion. Any URL-encoding is undone, but we will
+	 * HTML encode the &lt; and &quot; marks since they are both
+	 * not useful un URL paths in FHIR and potentially represent injection
+	 * attacks.
+	 *
+	 * @see UrlUtil#sanitizeUrlPart(String)
+	 * @see UrlUtil#unescape(String)
+	 */
+	public String nextTokenUnescapedAndSanitized() {
+		return UrlUtil.sanitizeUrlPart(UrlUtil.unescape(myTok.nextToken()));
 	}
 
 }
diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlUtil.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlUtil.java
index 627b6efefa6..3482eba69bf 100644
--- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlUtil.java
+++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/util/UrlUtil.java
@@ -70,7 +70,7 @@ public class UrlUtil {
 			return theExtensionUrl;
 		}
 		if (theExtensionUrl == null) {
-			return theExtensionUrl;
+			return null;
 		}
 
 		int parentLastSlashIdx = theParentExtensionUrl.lastIndexOf('/');
@@ -119,6 +119,18 @@ public class UrlUtil {
 		return value.startsWith("http://") || value.startsWith("https://");
 	}
 
+	public static boolean isNeedsSanitization(String theString) {
+		if (theString != null) {
+			for (int i = 0; i < theString.length(); i++) {
+				char nextChar = theString.charAt(i);
+				if (nextChar == '<' || nextChar == '"') {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+
 	public static boolean isValid(String theUrl) {
 		if (theUrl == null || theUrl.length() < 8) {
 			return false;
@@ -164,7 +176,7 @@ public class UrlUtil {
 	}
 
 	public static Map<String, String[]> parseQueryString(String theQueryString) {
-		HashMap<String, List<String>> map = new HashMap<String, List<String>>();
+		HashMap<String, List<String>> map = new HashMap<>();
 		parseQueryString(theQueryString, map);
 		return toQueryStringMap(map);
 	}
@@ -197,17 +209,13 @@ public class UrlUtil {
 			nextKey = unescape(nextKey);
 			nextValue = unescape(nextValue);
 
-			List<String> list = map.get(nextKey);
-			if (list == null) {
-				list = new ArrayList<>();
-				map.put(nextKey, list);
-			}
+			List<String> list = map.computeIfAbsent(nextKey, k -> new ArrayList<>());
 			list.add(nextValue);
 		}
 	}
 
 	public static Map<String, String[]> parseQueryStrings(String... theQueryString) {
-		HashMap<String, List<String>> map = new HashMap<String, List<String>>();
+		HashMap<String, List<String>> map = new HashMap<>();
 		for (String next : theQueryString) {
 			parseQueryString(next, map);
 		}
@@ -222,7 +230,6 @@ public class UrlUtil {
 	 * <li>[Resource Type]/[Resource ID]/_history/[Version ID]
 	 * </ul>
 	 */
-	//@formatter:on
 	public static UrlParts parseUrl(String theUrl) {
 		String url = theUrl;
 		UrlParts retVal = new UrlParts();
@@ -243,7 +250,7 @@ public class UrlUtil {
 			retVal.setVersionId(id.getVersionIdPart());
 			return retVal;
 		}
-		if (url.matches("\\/[a-zA-Z]+\\?.*")) {
+		if (url.matches("/[a-zA-Z]+\\?.*")) {
 			url = url.substring(1);
 		}
 		int nextStart = 0;
@@ -282,12 +289,47 @@ public class UrlUtil {
 
 	}
 
-	//@formatter:off
+	/**
+	 * This method specifically HTML-encodes the &quot; and
+	 * &lt; characters in order to prevent injection attacks
+	 */
+	public static String sanitizeUrlPart(String theString) {
+		if (theString == null) {
+			return null;
+		}
+
+		boolean needsSanitization = isNeedsSanitization(theString);
+
+		if (needsSanitization) {
+			// Ok, we're sanitizing
+			StringBuilder buffer = new StringBuilder(theString.length() + 10);
+			for (int j = 0; j < theString.length(); j++) {
+
+				char nextChar = theString.charAt(j);
+				switch (nextChar) {
+					case '"':
+						buffer.append("&quot;");
+						break;
+					case '<':
+						buffer.append("&lt;");
+						break;
+					default:
+						buffer.append(nextChar);
+						break;
+				}
+
+			} // for build escaped string
+
+			return buffer.toString();
+		}
+
+		return theString;
+	}
 
 	private static Map<String, String[]> toQueryStringMap(HashMap<String, List<String>> map) {
-		HashMap<String, String[]> retVal = new HashMap<String, String[]>();
+		HashMap<String, String[]> retVal = new HashMap<>();
 		for (Entry<String, List<String>> nextEntry : map.entrySet()) {
-			retVal.put(nextEntry.getKey(), nextEntry.getValue().toArray(new String[nextEntry.getValue().size()]));
+			retVal.put(nextEntry.getKey(), nextEntry.getValue().toArray(new String[0]));
 		}
 		return retVal;
 	}
diff --git a/hapi-fhir-base/src/main/resources/ca/uhn/fhir/i18n/hapi-messages.properties b/hapi-fhir-base/src/main/resources/ca/uhn/fhir/i18n/hapi-messages.properties
index f4999e821d5..6c18ab8b798 100644
--- a/hapi-fhir-base/src/main/resources/ca/uhn/fhir/i18n/hapi-messages.properties
+++ b/hapi-fhir-base/src/main/resources/ca/uhn/fhir/i18n/hapi-messages.properties
@@ -57,6 +57,7 @@ ca.uhn.fhir.validation.ValidationResult.noIssuesDetected=No issues detected duri
 
 # JPA Messages
 
+
 ca.uhn.fhir.jpa.config.HapiFhirHibernateJpaDialect.resourceVersionConstraintFailure=The operation has failed with a version constraint failure. This generally means that two clients/threads were trying to update the same resource at the same time, and this request was chosen as the failing request.
 ca.uhn.fhir.jpa.config.HapiFhirHibernateJpaDialect.resourceIndexedCompositeStringUniqueConstraintFailure=The operation has failed with a unique index constraint failure. This probably means that the operation was trying to create/update a resource that would have resulted in a duplicate value for a unique index. 
 
@@ -90,9 +91,13 @@ ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.successfulUpdate=Successfully update
 ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.successfulDeletes=Successfully deleted {0} resource(s) in {1}ms
 ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao.invalidSearchParameter=Unknown search parameter "{0}". Value search parameters for this search are: {1}
 
+ca.uhn.fhir.jpa.dao.BaseSearchParamExtractor.failedToExtractPaths=Failed to extract values from resource using FHIRPath "{0}": {1}
+
 ca.uhn.fhir.jpa.dao.SearchBuilder.invalidQuantityPrefix=Unable to handle quantity prefix "{0}" for value: {1}
 ca.uhn.fhir.jpa.dao.SearchBuilder.invalidNumberPrefix=Unable to handle number prefix "{0}" for value: {1}
 
+ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoSearchParameterR4.invalidSearchParamExpression=The expression "{0}" can not be evaluated and may be invalid: {1}
+
 ca.uhn.fhir.jpa.provider.BaseJpaProvider.cantCombintAtAndSince=Unable to combine _at and _since parameters for history operation
 
 ca.uhn.fhir.jpa.term.BaseHapiTerminologySvcImpl.cannotCreateDuplicateConceptMapUrl=Can not create multiple ConceptMap resources with ConceptMap.url "{0}", already have one with resource ID: {1}
diff --git a/hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/BaseCommand.java b/hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/BaseCommand.java
index 736f374335b..1b49dce711a 100644
--- a/hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/BaseCommand.java
+++ b/hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/BaseCommand.java
@@ -43,15 +43,13 @@ import org.slf4j.LoggerFactory;
 import org.springframework.util.Base64Utils;
 
 import java.io.*;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
+import java.util.*;
 import java.util.concurrent.ExecutionException;
 import java.util.stream.Collectors;
 import java.util.zip.GZIPInputStream;
 
 import static org.apache.commons.lang3.StringUtils.*;
+import static org.fusesource.jansi.Ansi.ansi;
 
 public abstract class BaseCommand implements Comparable<BaseCommand> {
 	protected static final String BASE_URL_PARAM = "t";
@@ -61,10 +59,10 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 	protected static final String BASIC_AUTH_PARAM = "b";
 	protected static final String BASIC_AUTH_PARAM_LONGOPT = "basic-auth";
 	protected static final String BASIC_AUTH_PARAM_NAME = "basic-auth";
-	protected static final String BASIC_AUTH_PARAM_DESC = "If specified, this parameter supplies a username and password (in the format \"username:password\") to include in an HTTP Basic Auth header.";
+	protected static final String BASIC_AUTH_PARAM_DESC = "If specified, this parameter supplies a username and password (in the format \"username:password\") to include in an HTTP Basic Auth header. The value \"PROMPT\" may also be used to specify that an interactive prompt should request credentials from the user.";
 	protected static final String BEARER_TOKEN_PARAM_LONGOPT = "bearer-token";
 	protected static final String BEARER_TOKEN_PARAM_NAME = "bearer-token";
-	protected static final String BEARER_TOKEN_PARAM_DESC = "If specified, this parameter supplies a Bearer Token to supply with the request.";
+	protected static final String BEARER_TOKEN_PARAM_DESC = "If specified, this parameter supplies a Bearer Token to supply with the request. The value \"PROMPT\" may also be used to specify that an interactive prompt should request a Bearer Token from the user.";
 	protected static final String FHIR_VERSION_PARAM = "v";
 	protected static final String FHIR_VERSION_PARAM_LONGOPT = "fhir-version";
 	protected static final String FHIR_VERSION_PARAM_NAME = "version";
@@ -74,6 +72,7 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 	protected static final String VERBOSE_LOGGING_PARAM_DESC = "If specified, verbose logging will be used.";
 	// TODO: Don't use qualified names for loggers in HAPI CLI.
 	private static final Logger ourLog = LoggerFactory.getLogger(BaseCommand.class);
+	public static final String PROMPT = "PROMPT";
 	protected FhirContext myFhirCtx;
 
 	public BaseCommand() {
@@ -89,6 +88,25 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 		addOptionalOption(theOptions, null, BEARER_TOKEN_PARAM_LONGOPT, BEARER_TOKEN_PARAM_NAME, BEARER_TOKEN_PARAM_DESC);
 	}
 
+	protected String promptUser(String thePrompt) throws ParseException {
+		System.out.print(ansi().bold().fgBrightDefault());
+		System.out.print(thePrompt);
+		System.out.print(ansi().bold().fgBrightGreen());
+		System.out.flush();
+
+		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
+		String retVal;
+		try {
+			retVal = reader.readLine();
+		} catch (IOException e) {
+			throw new ParseException("Failed to read input from user: "+ e.toString());
+		}
+
+		System.out.print(ansi().boldOff().fgDefault());
+
+		return retVal;
+	}
+
 	protected void addFhirVersionOption(Options theOptions) {
 		String versions = Arrays.stream(FhirVersionEnum.values())
 			.filter(t -> t != FhirVersionEnum.DSTU2_1 && t != FhirVersionEnum.DSTU2_HL7ORG)
@@ -98,6 +116,8 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 		addRequiredOption(theOptions, FHIR_VERSION_PARAM, FHIR_VERSION_PARAM_LONGOPT, FHIR_VERSION_PARAM_NAME, FHIR_VERSION_PARAM_DESC + versions);
 	}
 
+
+
 	private void addOption(Options theOptions, OptionGroup theOptionGroup, boolean theRequired, String theOpt, String theLongOpt, boolean theHasArgument, String theArgumentName, String theDescription) {
 		Option option = createOption(theRequired, theOpt, theLongOpt, theHasArgument, theDescription);
 		if (theHasArgument && isNotBlank(theArgumentName)) {
@@ -108,7 +128,7 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 			if (theOptions.getOption(theOpt) != null) {
 				throw new IllegalStateException("Duplicate option: " + theOpt);
 			}
-			if (theOptionGroup != null && theOptionGroup.getOptions().stream().anyMatch(t-> theOpt.equals(t.getOpt()))) {
+			if (theOptionGroup != null && theOptionGroup.getOptions().stream().anyMatch(t -> theOpt.equals(t.getOpt()))) {
 				throw new IllegalStateException("Duplicate option: " + theOpt);
 			}
 		}
@@ -116,7 +136,7 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 			if (theOptions.getOption(theLongOpt) != null) {
 				throw new IllegalStateException("Duplicate option: " + theLongOpt);
 			}
-			if (theOptionGroup != null && theOptionGroup.getOptions().stream().anyMatch(t-> theLongOpt.equals(t.getLongOpt()))) {
+			if (theOptionGroup != null && theOptionGroup.getOptions().stream().anyMatch(t -> theLongOpt.equals(t.getLongOpt()))) {
 				throw new IllegalStateException("Duplicate option: " + theOpt);
 			}
 		}
@@ -195,7 +215,7 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 				buffer.write(data, 0, nRead);
 				long fileSize = FileUtils.sizeOf(localFile);
 				if (fileSize > nextLog) {
-					System.err.print("\r" + Ansi.ansi().eraseLine());
+					System.err.print("\r" + ansi().eraseLine());
 					System.err.print(FileUtils.byteCountToDisplaySize(fileSize));
 					if (maxLength > 0) {
 						System.err.print(" [");
@@ -224,17 +244,22 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 	/**
 	 * @return Returns the complete authorization header value using the "-b" option
 	 */
-	protected String getAndParseOptionBasicAuthHeader(CommandLine theCommandLine) {
+	protected String getAndParseOptionBasicAuthHeader(CommandLine theCommandLine) throws ParseException {
 		return getAndParseOptionBasicAuthHeader(theCommandLine, BASIC_AUTH_PARAM);
 	}
 
 	/**
 	 * @return Returns the complete authorization header value using an arbitrary option
 	 */
-	protected String getAndParseOptionBasicAuthHeader(CommandLine theCommandLine, String theOptionName) {
+	protected String getAndParseOptionBasicAuthHeader(CommandLine theCommandLine, String theOptionName) throws ParseException {
 		String basicAuthHeaderValue = null;
 		if (theCommandLine.hasOption(theOptionName)) {
-			byte[] basicAuth = theCommandLine.getOptionValue(theOptionName).getBytes();
+			String optionValue = theCommandLine.getOptionValue(theOptionName);
+			if (PROMPT.equals(optionValue)) {
+				promptUser("Enter Basic Auth Credentials (format is \"username:password\"): ");
+			}
+
+			byte[] basicAuth = optionValue.getBytes();
 			String base64EncodedBasicAuth = Base64Utils.encodeToString(basicAuth);
 			basicAuthHeaderValue = Constants.HEADER_AUTHORIZATION_VALPREFIX_BASIC + base64EncodedBasicAuth;
 		} else {
@@ -362,8 +387,12 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 			throw new ParseException("Invalid target server specified, must begin with 'http' or 'file'.");
 		}
 
+		return newClientWithBaseUrl(theCommandLine, baseUrl, theBasicAuthOptionName, theBearerTokenOptionName);
+	}
+
+	protected IGenericClient newClientWithBaseUrl(CommandLine theCommandLine, String theBaseUrl, String theBasicAuthOptionName, String theBearerTokenOptionName) throws ParseException {
 		myFhirCtx.getRestfulClientFactory().setSocketTimeout(10 * 60 * 1000);
-		IGenericClient retVal = myFhirCtx.newRestfulGenericClient(baseUrl);
+		IGenericClient retVal = myFhirCtx.newRestfulGenericClient(theBaseUrl);
 
 		String basicAuthHeaderValue = getAndParseOptionBasicAuthHeader(theCommandLine, theBasicAuthOptionName);
 		if (isNotBlank(basicAuthHeaderValue)) {
@@ -371,7 +400,7 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 		}
 
 		if (isNotBlank(theBearerTokenOptionName)) {
-			String bearerToken = theCommandLine.getOptionValue(theBearerTokenOptionName);
+			String bearerToken = getAndParseBearerTokenAuthHeader(theCommandLine, theBearerTokenOptionName);
 			if (isNotBlank(bearerToken)) {
 				retVal.registerInterceptor(new SimpleRequestHeaderInterceptor(Constants.HEADER_AUTHORIZATION, Constants.HEADER_AUTHORIZATION_VALPREFIX_BEARER + bearerToken));
 			}
@@ -380,6 +409,14 @@ public abstract class BaseCommand implements Comparable<BaseCommand> {
 		return retVal;
 	}
 
+	private String getAndParseBearerTokenAuthHeader(CommandLine theCommandLine, String theBearerTokenOptionName) throws ParseException {
+		String value = theCommandLine.getOptionValue(theBearerTokenOptionName);
+		if (PROMPT.equals(value)) {
+			return promptUser("Enter Bearer Token: ");
+		}
+		return value;
+	}
+
 	protected void parseFhirContext(CommandLine theCommandLine) throws ParseException {
 		String version = theCommandLine.getOptionValue(FHIR_VERSION_PARAM);
 		if (isBlank(version)) {
diff --git a/hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/UploadTerminologyCommand.java b/hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/UploadTerminologyCommand.java
index 756567ed7d4..5179a03afbc 100644
--- a/hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/UploadTerminologyCommand.java
+++ b/hapi-fhir-cli/hapi-fhir-cli-api/src/main/java/ca/uhn/fhir/cli/UploadTerminologyCommand.java
@@ -28,9 +28,6 @@ import ca.uhn.fhir.rest.client.interceptor.LoggingInterceptor;
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.hl7.fhir.dstu3.model.Parameters;
-import org.hl7.fhir.dstu3.model.StringType;
-import org.hl7.fhir.dstu3.model.UriType;
 import org.hl7.fhir.instance.model.api.IBaseParameters;
 
 import static org.apache.commons.lang3.StringUtils.isBlank;
@@ -82,10 +79,17 @@ public class UploadTerminologyCommand extends BaseCommand {
 		IGenericClient client = super.newClient(theCommandLine);
 		IBaseParameters inputParameters;
 		if (ctx.getVersion().getVersion() == FhirVersionEnum.DSTU3) {
-			Parameters p = new Parameters();
-			p.addParameter().setName("url").setValue(new UriType(termUrl));
+			org.hl7.fhir.dstu3.model.Parameters p = new org.hl7.fhir.dstu3.model.Parameters();
+			p.addParameter().setName("url").setValue(new org.hl7.fhir.dstu3.model.UriType(termUrl));
 			for (String next : datafile) {
-				p.addParameter().setName("localfile").setValue(new StringType(next));
+				p.addParameter().setName("localfile").setValue(new org.hl7.fhir.dstu3.model.StringType(next));
+			}
+			inputParameters = p;
+		} else if (ctx.getVersion().getVersion() == FhirVersionEnum.R4) {
+			org.hl7.fhir.r4.model.Parameters p = new org.hl7.fhir.r4.model.Parameters();
+			p.addParameter().setName("url").setValue(new org.hl7.fhir.r4.model.UriType(termUrl));
+			for (String next : datafile) {
+				p.addParameter().setName("localfile").setValue(new org.hl7.fhir.r4.model.StringType(next));
 			}
 			inputParameters = p;
 		} else {
diff --git a/hapi-fhir-cli/hapi-fhir-cli-api/src/main/resources/logback-cli-on.xml b/hapi-fhir-cli/hapi-fhir-cli-api/src/main/resources/logback-cli-on.xml
index 9a96c590af6..730679bd5bb 100644
--- a/hapi-fhir-cli/hapi-fhir-cli-api/src/main/resources/logback-cli-on.xml
+++ b/hapi-fhir-cli/hapi-fhir-cli-api/src/main/resources/logback-cli-on.xml
@@ -31,6 +31,13 @@
 		<appender-ref ref="STDOUT" />
 	</logger>
 
+	<!--
+	It's useful to have this log when uploading big terminologies
+	-->
+	<logger name="ca.uhn.fhir.jpa.term.BaseHapiTerminologySvcImpl" additivity="false" level="info">
+		<appender-ref ref="STDOUT" />
+	</logger>
+
 
 	<root level="warn">
 		<appender-ref ref="STDOUT" />
diff --git a/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/BaseCommandTest.java b/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/BaseCommandTest.java
new file mode 100644
index 00000000000..7329fb90d3c
--- /dev/null
+++ b/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/BaseCommandTest.java
@@ -0,0 +1,60 @@
+package ca.uhn.fhir.cli;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+
+import static org.junit.Assert.assertEquals;
+
+public class BaseCommandTest {
+
+	@Test
+	public void testUserPrompt() throws ParseException {
+
+		InputStream stdin = System.in;
+		try {
+			System.setIn(new ByteArrayInputStream("A VALUE".getBytes()));
+
+			String value = new MyBaseCommand().read();
+			assertEquals("A VALUE", value);
+
+		} finally {
+			System.setIn(stdin);
+		}
+
+	}
+
+	private static class MyBaseCommand extends BaseCommand {
+		@Override
+		public String getCommandDescription() {
+			return null;
+		}
+
+		String read() throws ParseException {
+			return promptUser("Enter a String: ");
+		}
+
+		@Override
+		public String getCommandName() {
+			return null;
+		}
+
+		@Override
+		public Options getOptions() {
+			return null;
+		}
+
+		@Override
+		public void run(CommandLine theCommandLine) {
+
+		}
+	}
+
+	public static void main(String[] theValue) throws ParseException {
+		new BaseCommandTest().testUserPrompt();
+	}
+}
diff --git a/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/HashMapResourceProviderConceptMapDstu3.java b/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/HashMapResourceProviderConceptMapDstu3.java
index 7ca6a49417f..9550a66ab17 100644
--- a/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/HashMapResourceProviderConceptMapDstu3.java
+++ b/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/HashMapResourceProviderConceptMapDstu3.java
@@ -25,7 +25,7 @@ import ca.uhn.fhir.context.FhirVersionEnum;
 import ca.uhn.fhir.rest.annotation.*;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-import ca.uhn.fhir.rest.server.provider.AbstractHashMapResourceProvider;
+import ca.uhn.fhir.rest.server.provider.HashMapResourceProvider;
 import com.google.common.base.Charsets;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.utils.URLEncodedUtils;
@@ -42,7 +42,7 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 /**
  * This is a subclass to implement FHIR operations specific to DSTU3 ConceptMap
- * resources. Its superclass, {@link AbstractHashMapResourceProvider}, is a simple
+ * resources. Its superclass, {@link HashMapResourceProvider}, is a simple
  * implementation of the resource provider interface that uses a HashMap to
  * store all resources in memory.
  * <p>
@@ -53,7 +53,7 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
  * <li>Conditional update for DSTU3 ConceptMap resources by ConceptMap.url</li>
  * </ul>
  */
-public class HashMapResourceProviderConceptMapDstu3 extends AbstractHashMapResourceProvider<ConceptMap> {
+public class HashMapResourceProviderConceptMapDstu3 extends HashMapResourceProvider<ConceptMap> {
 	@SuppressWarnings("unchecked")
 	public HashMapResourceProviderConceptMapDstu3(FhirContext theFhirContext) {
 		super(theFhirContext, ConceptMap.class);
@@ -84,10 +84,10 @@ public class HashMapResourceProviderConceptMapDstu3 extends AbstractHashMapResou
 		return retVal;
 	}
 
+	@Override
 	@Update
-	public MethodOutcome updateConceptMapConditional(
+	public MethodOutcome update(
 		@ResourceParam ConceptMap theConceptMap,
-		@IdParam IdType theId,
 		@ConditionalUrlParam String theConditional) {
 
 		MethodOutcome methodOutcome = new MethodOutcome();
@@ -112,14 +112,14 @@ public class HashMapResourceProviderConceptMapDstu3 extends AbstractHashMapResou
 				List<ConceptMap> conceptMaps = searchByUrl(url);
 
 				if (!conceptMaps.isEmpty()) {
-					methodOutcome = update(conceptMaps.get(0));
+					methodOutcome = super.update(conceptMaps.get(0), null);
 				} else {
 					methodOutcome = create(theConceptMap);
 				}
 			}
 
 		} else {
-			methodOutcome = update(theConceptMap);
+			methodOutcome = super.update(theConceptMap, null);
 		}
 
 		return methodOutcome;
diff --git a/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/HashMapResourceProviderConceptMapR4.java b/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/HashMapResourceProviderConceptMapR4.java
index d958ae5a3c4..471af74a751 100644
--- a/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/HashMapResourceProviderConceptMapR4.java
+++ b/hapi-fhir-cli/hapi-fhir-cli-api/src/test/java/ca/uhn/fhir/cli/HashMapResourceProviderConceptMapR4.java
@@ -25,7 +25,7 @@ import ca.uhn.fhir.context.FhirVersionEnum;
 import ca.uhn.fhir.rest.annotation.*;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-import ca.uhn.fhir.rest.server.provider.AbstractHashMapResourceProvider;
+import ca.uhn.fhir.rest.server.provider.HashMapResourceProvider;
 import com.google.common.base.Charsets;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.utils.URLEncodedUtils;
@@ -42,7 +42,7 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 /**
  * This is a subclass to implement FHIR operations specific to R4 ConceptMap
- * resources. Its superclass, {@link AbstractHashMapResourceProvider}, is a simple
+ * resources. Its superclass, {@link HashMapResourceProvider}, is a simple
  * implementation of the resource provider interface that uses a HashMap to
  * store all resources in memory.
  * <p>
@@ -53,7 +53,7 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
  * <li>Conditional update for R4 ConceptMap resources by ConceptMap.url</li>
  * </ul>
  */
-public class HashMapResourceProviderConceptMapR4 extends AbstractHashMapResourceProvider<ConceptMap> {
+public class HashMapResourceProviderConceptMapR4 extends HashMapResourceProvider<ConceptMap> {
 	@SuppressWarnings("unchecked")
 	public HashMapResourceProviderConceptMapR4(FhirContext theFhirContext) {
 		super(theFhirContext, ConceptMap.class);
@@ -84,16 +84,15 @@ public class HashMapResourceProviderConceptMapR4 extends AbstractHashMapResource
 		return retVal;
 	}
 
+	@Override
 	@Update
-	public MethodOutcome updateConceptMapConditional(
+	public MethodOutcome update(
 		@ResourceParam ConceptMap theConceptMap,
-		@IdParam IdType theId,
 		@ConditionalUrlParam String theConditional) {
 
 		MethodOutcome methodOutcome = new MethodOutcome();
 
 		if (theConditional != null) {
-
 			String url = null;
 
 			try {
@@ -112,14 +111,14 @@ public class HashMapResourceProviderConceptMapR4 extends AbstractHashMapResource
 				List<ConceptMap> conceptMaps = searchByUrl(url);
 
 				if (!conceptMaps.isEmpty()) {
-					methodOutcome = update(conceptMaps.get(0));
+					methodOutcome = super.update(conceptMaps.get(0), null);
 				} else {
 					methodOutcome = create(theConceptMap);
 				}
 			}
 
 		} else {
-			methodOutcome = update(theConceptMap);
+			methodOutcome = super.update(theConceptMap, null);
 		}
 
 		return methodOutcome;
diff --git a/hapi-fhir-client-okhttp/src/main/java/ca/uhn/fhir/okhttp/client/OkHttpRestfulRequest.java b/hapi-fhir-client-okhttp/src/main/java/ca/uhn/fhir/okhttp/client/OkHttpRestfulRequest.java
index 5b2b68f652a..5ad07eceb2d 100644
--- a/hapi-fhir-client-okhttp/src/main/java/ca/uhn/fhir/okhttp/client/OkHttpRestfulRequest.java
+++ b/hapi-fhir-client-okhttp/src/main/java/ca/uhn/fhir/okhttp/client/OkHttpRestfulRequest.java
@@ -1,6 +1,7 @@
 package ca.uhn.fhir.okhttp.client;
 
 import java.io.IOException;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -74,11 +75,11 @@ public class OkHttpRestfulRequest implements IHttpRequest {
 
     @Override
     public Map<String, List<String>> getAllHeaders() {
-        return myRequestBuilder.build().headers().toMultimap();
+        return Collections.unmodifiableMap(myRequestBuilder.build().headers().toMultimap());
     }
 
     @Override
-    public String getRequestBodyFromStream() throws IOException {
+    public String getRequestBodyFromStream() {
         // returning null to indicate this is not supported, as documented in IHttpRequest's contract
         return null;
     }
diff --git a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/apache/ApacheHttpRequest.java b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/apache/ApacheHttpRequest.java
index 555d7ae593d..f968eb8901b 100644
--- a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/apache/ApacheHttpRequest.java
+++ b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/apache/ApacheHttpRequest.java
@@ -22,10 +22,7 @@ package ca.uhn.fhir.rest.client.apache;
 
 import java.io.IOException;
 import java.nio.charset.Charset;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import ca.uhn.fhir.util.StopWatch;
 import org.apache.commons.io.IOUtils;
@@ -70,14 +67,14 @@ public class ApacheHttpRequest implements IHttpRequest {
 
 	@Override
 	public Map<String, List<String>> getAllHeaders() {
-		Map<String, List<String>> result = new HashMap<String, List<String>>();
+		Map<String, List<String>> result = new HashMap<>();
 		for (Header header : myRequest.getAllHeaders()) {
 			if (!result.containsKey(header.getName())) {
-				result.put(header.getName(), new LinkedList<String>());
+				result.put(header.getName(), new LinkedList<>());
 			}
 			result.get(header.getName()).add(header.getValue());
 		}
-		return result;
+		return Collections.unmodifiableMap(result);
 	}
 
 	/**
diff --git a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/impl/GenericClient.java b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/impl/GenericClient.java
index 5dd55c8bf31..1ec7a8b8af9 100644
--- a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/impl/GenericClient.java
+++ b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/impl/GenericClient.java
@@ -316,7 +316,7 @@ public class GenericClient extends BaseClient implements IGenericClient {
 
 	private static void addParam(Map<String, List<String>> params, String parameterName, String parameterValue) {
 		if (!params.containsKey(parameterName)) {
-			params.put(parameterName, new ArrayList<String>());
+			params.put(parameterName, new ArrayList<>());
 		}
 		params.get(parameterName).add(parameterValue);
 	}
@@ -516,6 +516,19 @@ public class GenericClient extends BaseClient implements IGenericClient {
 			return (QUERY) this;
 		}
 
+		@Override
+		public QUERY whereMap(Map<String, List<String>> theRawMap) {
+			if (theRawMap != null) {
+				for (String nextKey : theRawMap.keySet()) {
+					for (String nextValue : theRawMap.get(nextKey)) {
+						addParam(myParams, nextKey, nextValue);
+					}
+				}
+			}
+
+			return (QUERY) this;
+		}
+
 		@SuppressWarnings("unchecked")
 		@Override
 		public QUERY where(Map<String, List<IQueryParameterType>> theCriterion) {
@@ -743,6 +756,7 @@ public class GenericClient extends BaseClient implements IGenericClient {
 		private Class<? extends IBaseBundle> myReturnType;
 		private IPrimitiveType mySince;
 		private Class<? extends IBaseResource> myType;
+		private DateRangeParam myAt;
 
 		@SuppressWarnings("unchecked")
 		@Override
@@ -752,6 +766,12 @@ public class GenericClient extends BaseClient implements IGenericClient {
 			return this;
 		}
 
+		@Override
+		public IHistoryTyped at(DateRangeParam theDateRangeParam) {
+			myAt = theDateRangeParam;
+			return this;
+		}
+
 		@Override
 		public IHistoryTyped count(Integer theCount) {
 			myCount = theCount;
@@ -774,7 +794,7 @@ public class GenericClient extends BaseClient implements IGenericClient {
 				id = null;
 			}
 
-			HttpGetClientInvocation invocation = HistoryMethodBinding.createHistoryInvocation(myContext, resourceName, id, mySince, myCount);
+			HttpGetClientInvocation invocation = HistoryMethodBinding.createHistoryInvocation(myContext, resourceName, id, mySince, myCount, myAt);
 
 			IClientResponseHandler handler;
 			handler = new ResourceResponseHandler(myReturnType, getPreferResponseTypes(myType));
@@ -1103,7 +1123,7 @@ public class GenericClient extends BaseClient implements IGenericClient {
 		@SuppressWarnings("unchecked")
 		@Override
 		public Object execute() {
-			if (myOperationName != null && myOperationName.equals(Constants.EXTOP_PROCESS_MESSAGE)) {
+			if (myOperationName != null && myOperationName.equals(Constants.EXTOP_PROCESS_MESSAGE) && myMsgBundle != null) {
 				Map<String, List<String>> urlParams = new LinkedHashMap<String, List<String>>();
 				// Set Url parameter Async and Response-Url
 				if (myIsAsync != null) {
@@ -1847,6 +1867,16 @@ public class GenericClient extends BaseClient implements IGenericClient {
 			return retVal;
 		}
 
+		@Override
+		public IQuery sort(SortSpec theSortSpec) {
+			SortSpec sortSpec = theSortSpec;
+			while (sortSpec != null) {
+				mySort.add(new SortInternal(sortSpec));
+				sortSpec = sortSpec.getChain();
+			}
+			return this;
+		}
+
 		@Override
 		public IQuery usingStyle(SearchStyleEnum theStyle) {
 			mySearchStyle = theStyle;
@@ -2133,6 +2163,18 @@ public class GenericClient extends BaseClient implements IGenericClient {
 			myFor = theFor;
 		}
 
+		public SortInternal(SortSpec theSortSpec) {
+			if (theSortSpec.getOrder() == null) {
+				myParamName = Constants.PARAM_SORT;
+			} else if (theSortSpec.getOrder() == SortOrderEnum.ASC) {
+				myParamName = Constants.PARAM_SORT_ASC;
+			} else if (theSortSpec.getOrder() == SortOrderEnum.DESC) {
+				myParamName = Constants.PARAM_SORT_DESC;
+			}
+			myDirection = theSortSpec.getOrder();
+			myParamValue = theSortSpec.getParamName();
+		}
+
 		@Override
 		public IQuery ascending(IParam theParam) {
 			myParamName = Constants.PARAM_SORT_ASC;
@@ -2157,6 +2199,14 @@ public class GenericClient extends BaseClient implements IGenericClient {
 			return myFor;
 		}
 
+		@Override
+		public IQuery defaultOrder(String theParam) {
+			myParamName = Constants.PARAM_SORT;
+			myDirection = null;
+			myParamValue = theParam;
+			return myFor;
+		}
+
 		@Override
 		public IQuery descending(IParam theParam) {
 			myParamName = Constants.PARAM_SORT_DESC;
diff --git a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/BasicAuthInterceptor.java b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/BasicAuthInterceptor.java
index 58db4b1a261..8cc097f2763 100644
--- a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/BasicAuthInterceptor.java
+++ b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/BasicAuthInterceptor.java
@@ -29,6 +29,7 @@ import org.apache.commons.lang3.StringUtils;
 import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.client.api.*;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import org.apache.commons.lang3.Validate;
 
 /**
  * HTTP interceptor to be used for adding HTTP basic auth username/password tokens
@@ -42,23 +43,29 @@ public class BasicAuthInterceptor implements IClientInterceptor {
 
 	private String myUsername;
 	private String myPassword;
+	private String myHeaderValue;
 
-    public BasicAuthInterceptor(String theUsername, String thePassword) {
-		super();
-		myUsername = theUsername;
-		myPassword = thePassword;
+	/**
+	 * @param theUsername The username
+	 * @param thePassword The password
+	 */
+	public BasicAuthInterceptor(String theUsername, String thePassword) {
+		this(StringUtils.defaultString(theUsername) + ":" + StringUtils.defaultString(thePassword));
+	}
+
+	/**
+	 * @param theCredentialString A credential string in the format <code>username:password</code>
+	 */
+	public BasicAuthInterceptor(String theCredentialString) {
+		Validate.notBlank(theCredentialString, "theCredentialString must not be null or blank");
+		Validate.isTrue(theCredentialString.contains(":"), "theCredentialString must be in the format 'username:password'");
+		String encoded = Base64.encodeBase64String(theCredentialString.getBytes(Constants.CHARSET_US_ASCII));
+		myHeaderValue = "Basic " + encoded;
 	}
 
 	@Override
 	public void interceptRequest(IHttpRequest theRequest) {
-		String authorizationUnescaped = StringUtils.defaultString(myUsername) + ":" + StringUtils.defaultString(myPassword);
-        String encoded;
-        try {
-                encoded = Base64.encodeBase64String(authorizationUnescaped.getBytes("ISO-8859-1"));
-        } catch (UnsupportedEncodingException e) {
-                throw new InternalErrorException("Could not find US-ASCII encoding. This shouldn't happen!");
-        }
-        theRequest.addHeader(Constants.HEADER_AUTHORIZATION, ("Basic " + encoded));
+		theRequest.addHeader(Constants.HEADER_AUTHORIZATION, myHeaderValue);
 	}
 
 	@Override
@@ -66,6 +73,4 @@ public class BasicAuthInterceptor implements IClientInterceptor {
 		// nothing
 	}
 
-	
-
 }
diff --git a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/CapturingInterceptor.java b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/CapturingInterceptor.java
index 3431de781bb..dd908106ff9 100644
--- a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/CapturingInterceptor.java
+++ b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/CapturingInterceptor.java
@@ -20,19 +20,20 @@ package ca.uhn.fhir.rest.client.interceptor;
  * #L%
  */
 
-import java.io.IOException;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-
 import ca.uhn.fhir.rest.client.api.IClientInterceptor;
 import ca.uhn.fhir.rest.client.api.IHttpRequest;
 import ca.uhn.fhir.rest.client.api.IHttpResponse;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+
+import java.io.IOException;
 
 /**
  * Client interceptor which simply captures request and response objects and stores them so that they can be inspected after a client
  * call has returned
+ *
+ * @see ThreadLocalCapturingInterceptor for an interceptor that uses a ThreadLocal in order to work in multithreaded environments
  */
 public class CapturingInterceptor implements IClientInterceptor {
 
@@ -63,10 +64,16 @@ public class CapturingInterceptor implements IClientInterceptor {
 	@Override
 	public void interceptResponse(IHttpResponse theResponse) {
 		//Buffer the reponse to avoid errors when content has already been read and the entity is not repeatable
+		bufferResponse(theResponse);
+
+		myLastResponse = theResponse;
+	}
+
+	static void bufferResponse(IHttpResponse theResponse) {
 		try {
-			if(theResponse.getResponse() instanceof HttpResponse) {
+			if (theResponse.getResponse() instanceof HttpResponse) {
 				HttpEntity entity = ((HttpResponse) theResponse.getResponse()).getEntity();
-				if( entity != null && !entity.isRepeatable()){
+				if (entity != null && !entity.isRepeatable()) {
 					theResponse.bufferEntity();
 				}
 			} else {
@@ -75,9 +82,6 @@ public class CapturingInterceptor implements IClientInterceptor {
 		} catch (IOException e) {
 			throw new InternalErrorException("Unable to buffer the entity for capturing", e);
 		}
-
-
-		myLastResponse = theResponse;
 	}
 
 }
diff --git a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/ThreadLocalCapturingInterceptor.java b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/ThreadLocalCapturingInterceptor.java
new file mode 100644
index 00000000000..51644858157
--- /dev/null
+++ b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/interceptor/ThreadLocalCapturingInterceptor.java
@@ -0,0 +1,99 @@
+package ca.uhn.fhir.rest.client.interceptor;
+
+/*-
+ * #%L
+ * HAPI FHIR - Client Framework
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.rest.client.api.IClientInterceptor;
+import ca.uhn.fhir.rest.client.api.IHttpRequest;
+import ca.uhn.fhir.rest.client.api.IHttpResponse;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+
+import java.io.IOException;
+
+/**
+ * This is a client interceptor that captures the current request and response
+ * in a ThreadLocal variable, meaning that it can work in multithreaded
+ * environments without mixing up requests.
+ * <p>
+ * Use this with caution, since <b>this interceptor does not automatically clean up</b>
+ * the ThreadLocal after setting it. You must make sure to call
+ * {@link #clearThreadLocals()} after a given request has been completed,
+ * or you will end up leaving stale request/response objects associated
+ * with threads that no longer need them.
+ * </p>
+ *
+ * @see CapturingInterceptor for an equivalent interceptor that does not use a ThreadLocal
+ * @since 3.5.0
+ */
+public class ThreadLocalCapturingInterceptor implements IClientInterceptor {
+
+	private final ThreadLocal<IHttpRequest> myRequestThreadLocal = new ThreadLocal<>();
+	private final ThreadLocal<IHttpResponse> myResponseThreadLocal = new ThreadLocal<>();
+	private boolean myBufferResponse;
+
+	/**
+	 * This method should be called at the end of any request process, in
+	 * order to clear the last request and response from the current thread.
+	 */
+	public void clearThreadLocals() {
+		myRequestThreadLocal.remove();
+		myResponseThreadLocal.remove();
+	}
+
+	public IHttpRequest getRequestForCurrentThread() {
+		return myRequestThreadLocal.get();
+	}
+
+	public IHttpResponse getResponseForCurrentThread() {
+		return myResponseThreadLocal.get();
+	}
+
+	@Override
+	public void interceptRequest(IHttpRequest theRequest) {
+		myRequestThreadLocal.set(theRequest);
+	}
+
+	@Override
+	public void interceptResponse(IHttpResponse theResponse) {
+		if (isBufferResponse()) {
+			CapturingInterceptor.bufferResponse(theResponse);
+		}
+		myResponseThreadLocal.set(theResponse);
+	}
+
+	/**
+	 * Should we buffer (capture) the response body? This defaults to
+	 * <code>false</code>. Set to <code>true</code> if you are planning on
+	 * examining response bodies after the response processing is complete.
+	 */
+	public boolean isBufferResponse() {
+		return myBufferResponse;
+	}
+
+	/**
+	 * Should we buffer (capture) the response body? This defaults to
+	 * <code>false</code>. Set to <code>true</code> if you are planning on
+	 * examining response bodies after the response processing is complete.
+	 */
+	public ThreadLocalCapturingInterceptor setBufferResponse(boolean theBufferResponse) {
+		myBufferResponse = theBufferResponse;
+		return this;
+	}
+}
diff --git a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/BaseHttpClientInvocationWithContents.java b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/BaseHttpClientInvocationWithContents.java
index 8dc61aa7d0d..86724743f68 100644
--- a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/BaseHttpClientInvocationWithContents.java
+++ b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/BaseHttpClientInvocationWithContents.java
@@ -57,17 +57,6 @@ abstract class BaseHttpClientInvocationWithContents extends BaseHttpClientInvoca
 	private IIdType myForceResourceId;
 
 
-	
-	public BaseHttpClientInvocationWithContents(FhirContext theContext, IBaseResource theResource, Map<String, List<String>> theParams, String... theUrlPath) {
-		super(theContext);
-		myResource = theResource;
-		myUrlPath = StringUtils.join(theUrlPath, '/');
-		myResources = null;
-		myContents = null;
-		myParams = theParams;
-		myBundleType = null;
-	}
-
 	public BaseHttpClientInvocationWithContents(FhirContext theContext, IBaseResource theResource, String theUrlPath) {
 		super(theContext);
 		myResource = theResource;
@@ -105,17 +94,6 @@ abstract class BaseHttpClientInvocationWithContents extends BaseHttpClientInvoca
 		myBundleType = null;
 	}
 
-	public BaseHttpClientInvocationWithContents(FhirContext theContext, String theContents, Map<String, List<String>> theParams, String... theUrlPath) {
-		super(theContext);
-		myResource = null;
-		myUrlPath = StringUtils.join(theUrlPath, '/');
-		myResources = null;
-		myContents = theContents;
-		myParams = theParams;
-		myBundleType = null;
-	}
-
-
 	@Override
 	public IHttpRequest asHttpRequest(String theUrlBase, Map<String, List<String>> theExtraParams, EncodingEnum theEncoding, Boolean thePrettyPrint) throws DataFormatException {
 		StringBuilder url = new StringBuilder();
diff --git a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/HistoryMethodBinding.java b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/HistoryMethodBinding.java
index 13e64fb5cf2..8746cdee91c 100644
--- a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/HistoryMethodBinding.java
+++ b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/HistoryMethodBinding.java
@@ -26,6 +26,8 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.Date;
 
+import ca.uhn.fhir.rest.param.DateParam;
+import ca.uhn.fhir.rest.param.DateRangeParam;
 import org.hl7.fhir.instance.model.api.*;
 
 import ca.uhn.fhir.context.FhirContext;
@@ -96,7 +98,7 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 		}
 
 		String historyId = id != null ? id.getIdPart() : null;
-		HttpGetClientInvocation retVal = createHistoryInvocation(getContext(), resourceName, historyId, null, null);
+		HttpGetClientInvocation retVal = createHistoryInvocation(getContext(), resourceName, historyId, null, null, null);
 
 		if (theArgs != null) {
 			for (int idx = 0; idx < theArgs.length; idx++) {
@@ -108,7 +110,7 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 		return retVal;
 	}
 
-	public static HttpGetClientInvocation createHistoryInvocation(FhirContext theContext, String theResourceName, String theId, IPrimitiveType<Date> theSince, Integer theLimit) {
+	public static HttpGetClientInvocation createHistoryInvocation(FhirContext theContext, String theResourceName, String theId, IPrimitiveType<Date> theSince, Integer theLimit, DateRangeParam theAt) {
 		StringBuilder b = new StringBuilder();
 		if (theResourceName != null) {
 			b.append(theResourceName);
@@ -129,8 +131,18 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 		}
 		if (theLimit != null) {
 			b.append(haveParam ? '&' : '?');
+			haveParam = true;
 			b.append(Constants.PARAM_COUNT).append('=').append(theLimit);
 		}
+		if (theAt != null) {
+			for (DateParam next : theAt.getValuesAsQueryTokens()) {
+				b.append(haveParam ? '&' : '?');
+				haveParam = true;
+				b.append(Constants.PARAM_AT);
+				b.append("=");
+				b.append(next.getValueAsQueryToken(theContext));
+			}
+		}
 
 		HttpGetClientInvocation retVal = new HttpGetClientInvocation(theContext, b.toString());
 		return retVal;
diff --git a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/SearchParameter.java b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/SearchParameter.java
index 930a3947c33..10423ae83da 100644
--- a/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/SearchParameter.java
+++ b/hapi-fhir-client/src/main/java/ca/uhn/fhir/rest/client/method/SearchParameter.java
@@ -53,7 +53,7 @@ public class SearchParameter extends BaseQueryParameter {
 		ourParamTypes.put(StringParam.class, RestSearchParameterTypeEnum.STRING);
 		ourParamTypes.put(StringOrListParam.class, RestSearchParameterTypeEnum.STRING);
 		ourParamTypes.put(StringAndListParam.class, RestSearchParameterTypeEnum.STRING);
-		ourParamQualifiers.put(RestSearchParameterTypeEnum.STRING, CollectionUtil.newSet(Constants.PARAMQUALIFIER_STRING_EXACT, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
+		ourParamQualifiers.put(RestSearchParameterTypeEnum.STRING, CollectionUtil.newSet(Constants.PARAMQUALIFIER_STRING_EXACT, Constants.PARAMQUALIFIER_STRING_CONTAINS, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
 
 		ourParamTypes.put(UriParam.class, RestSearchParameterTypeEnum.URI);
 		ourParamTypes.put(UriOrListParam.class, RestSearchParameterTypeEnum.URI);
diff --git a/hapi-fhir-jaxrsserver-base/src/main/java/ca/uhn/fhir/jaxrs/client/JaxRsHttpRequest.java b/hapi-fhir-jaxrsserver-base/src/main/java/ca/uhn/fhir/jaxrs/client/JaxRsHttpRequest.java
index 6ef41b4bf53..c2cb7eeed86 100644
--- a/hapi-fhir-jaxrsserver-base/src/main/java/ca/uhn/fhir/jaxrs/client/JaxRsHttpRequest.java
+++ b/hapi-fhir-jaxrsserver-base/src/main/java/ca/uhn/fhir/jaxrs/client/JaxRsHttpRequest.java
@@ -28,10 +28,7 @@ import ca.uhn.fhir.util.StopWatch;
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.client.Invocation;
 import javax.ws.rs.core.Response;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * A Http Request based on JaxRs. This is an adapter around the class
@@ -41,7 +38,7 @@ import java.util.Map;
  */
 public class JaxRsHttpRequest implements IHttpRequest {
 
-	private final Map<String, List<String>> myHeaders = new HashMap<String, List<String>>();
+	private final Map<String, List<String>> myHeaders = new HashMap<>();
 	private Invocation.Builder myRequest;
 	private RequestTypeEnum myRequestType;
 	private Entity<?> myEntity;
@@ -55,7 +52,7 @@ public class JaxRsHttpRequest implements IHttpRequest {
 	@Override
 	public void addHeader(String theName, String theValue) {
 		if (!myHeaders.containsKey(theName)) {
-			myHeaders.put(theName, new LinkedList<String>());
+			myHeaders.put(theName, new LinkedList<>());
 		}
 		myHeaders.get(theName).add(theValue);
 		getRequest().header(theName, theValue);
@@ -71,7 +68,7 @@ public class JaxRsHttpRequest implements IHttpRequest {
 
 	@Override
 	public Map<String, List<String>> getAllHeaders() {
-		return this.myHeaders;
+		return Collections.unmodifiableMap(this.myHeaders);
 	}
 
 	/**
diff --git a/hapi-fhir-jpaserver-base/pom.xml b/hapi-fhir-jpaserver-base/pom.xml
index a267db49303..0954f47e0de 100644
--- a/hapi-fhir-jpaserver-base/pom.xml
+++ b/hapi-fhir-jpaserver-base/pom.xml
@@ -502,6 +502,7 @@
 			<groupId>com.github.ben-manes.caffeine</groupId>
 			<artifactId>caffeine</artifactId>
 		</dependency>
+
 		<dependency>
 			<groupId>com.google.guava</groupId>
 			<artifactId>guava-testlib</artifactId>
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/BaseConfig.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/BaseConfig.java
index a30a11b5a6a..2abb8c59d09 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/BaseConfig.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/BaseConfig.java
@@ -50,6 +50,7 @@ import org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean;
 import org.springframework.scheduling.config.ScheduledTaskRegistrar;
 
 import javax.annotation.Nonnull;
+import java.util.concurrent.ScheduledExecutorService;
 
 @Configuration
 @EnableScheduling
@@ -100,10 +101,11 @@ public abstract class BaseConfig implements SchedulingConfigurer {
 	}
 
 	@Bean()
-	public ScheduledExecutorFactoryBean scheduledExecutorService() {
+	public ScheduledExecutorService scheduledExecutorService() {
 		ScheduledExecutorFactoryBean b = new ScheduledExecutorFactoryBean();
 		b.setPoolSize(5);
-		return b;
+		b.afterPropertiesSet();
+		return b.getObject();
 	}
 
 	@Bean(autowire = Autowire.BY_TYPE)
@@ -147,8 +149,8 @@ public abstract class BaseConfig implements SchedulingConfigurer {
 	@Bean(name = TASK_EXECUTOR_NAME)
 	public TaskScheduler taskScheduler() {
 		ConcurrentTaskScheduler retVal = new ConcurrentTaskScheduler();
-		retVal.setConcurrentExecutor(scheduledExecutorService().getObject());
-		retVal.setScheduledExecutor(scheduledExecutorService().getObject());
+		retVal.setConcurrentExecutor(scheduledExecutorService());
+		retVal.setScheduledExecutor(scheduledExecutorService());
 		return retVal;
 	}
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/BaseDstu2Config.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/BaseDstu2Config.java
index 80d5a91471b..9da25a9f395 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/BaseDstu2Config.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/BaseDstu2Config.java
@@ -8,10 +8,10 @@ import ca.uhn.fhir.jpa.util.ResourceCountCache;
 import ca.uhn.fhir.model.dstu2.composite.MetaDt;
 import ca.uhn.fhir.validation.IValidatorModule;
 import org.apache.commons.lang3.time.DateUtils;
+import org.hl7.fhir.instance.hapi.validation.CachingValidationSupport;
 import org.hl7.fhir.instance.hapi.validation.DefaultProfileValidationSupport;
 import org.hl7.fhir.instance.hapi.validation.FhirInstanceValidator;
 import org.hl7.fhir.instance.hapi.validation.ValidationSupportChain;
-import org.hl7.fhir.instance.utils.IResourceValidator.BestPracticeWarningLevel;
 import org.hl7.fhir.r4.utils.IResourceValidator;
 import org.springframework.beans.factory.annotation.Autowire;
 import org.springframework.context.annotation.Bean;
@@ -81,7 +81,7 @@ public class BaseDstu2Config extends BaseConfig {
 	public IValidatorModule instanceValidatorDstu2() {
 		FhirInstanceValidator retVal = new FhirInstanceValidator();
 		retVal.setBestPracticeWarningLevel(IResourceValidator.BestPracticeWarningLevel.Warning);
-		retVal.setValidationSupport(new ValidationSupportChain(new DefaultProfileValidationSupport(), jpaValidationSupportDstu2()));
+		retVal.setValidationSupport(new CachingValidationSupport(new ValidationSupportChain(new DefaultProfileValidationSupport(), jpaValidationSupportDstu2())));
 		return retVal;
 	}
 
@@ -91,6 +91,13 @@ public class BaseDstu2Config extends BaseConfig {
 		return retVal;
 	}
 
+	@Bean(name = "myResourceCountsCache")
+	public ResourceCountCache resourceCountsCache() {
+		ResourceCountCache retVal = new ResourceCountCache(() -> systemDaoDstu2().getResourceCounts());
+		retVal.setCacheMillis(60 * DateUtils.MILLIS_PER_SECOND);
+		return retVal;
+	}
+
 	@Bean(autowire = Autowire.BY_TYPE)
 	public IFulltextSearchSvc searchDao() {
 		FulltextSearchSvcImpl searchDao = new FulltextSearchSvcImpl();
@@ -121,13 +128,6 @@ public class BaseDstu2Config extends BaseConfig {
 		return retVal;
 	}
 
-	@Bean(name = "myResourceCountsCache")
-	public ResourceCountCache resourceCountsCache() {
-		ResourceCountCache retVal = new ResourceCountCache(() -> systemDaoDstu2().getResourceCounts());
-		retVal.setCacheMillis(60 * DateUtils.MILLIS_PER_SECOND);
-		return retVal;
-	}
-
 	@Bean(autowire = Autowire.BY_TYPE)
 	public IHapiTerminologySvc terminologyService() {
 		return new HapiTerminologySvcDstu2();
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/dstu3/BaseDstu3Config.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/dstu3/BaseDstu3Config.java
index 44314f57377..2381a0bcf15 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/dstu3/BaseDstu3Config.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/dstu3/BaseDstu3Config.java
@@ -3,10 +3,8 @@ package ca.uhn.fhir.jpa.config.dstu3;
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.context.ParserOptions;
 import ca.uhn.fhir.jpa.config.BaseConfig;
-import ca.uhn.fhir.jpa.dao.FulltextSearchSvcImpl;
-import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
-import ca.uhn.fhir.jpa.dao.IFulltextSearchSvc;
-import ca.uhn.fhir.jpa.dao.ISearchParamRegistry;
+import ca.uhn.fhir.jpa.dao.*;
+import ca.uhn.fhir.jpa.dao.dstu3.TransactionProcessorVersionAdapterDstu3;
 import ca.uhn.fhir.jpa.dao.dstu3.SearchParamExtractorDstu3;
 import ca.uhn.fhir.jpa.dao.dstu3.SearchParamRegistryDstu3;
 import ca.uhn.fhir.jpa.provider.dstu3.TerminologyUploaderProviderDstu3;
@@ -19,7 +17,9 @@ import ca.uhn.fhir.jpa.validation.JpaValidationSupportChainDstu3;
 import ca.uhn.fhir.validation.IValidatorModule;
 import org.apache.commons.lang3.time.DateUtils;
 import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
+import org.hl7.fhir.dstu3.hapi.validation.CachingValidationSupport;
 import org.hl7.fhir.dstu3.hapi.validation.FhirInstanceValidator;
+import org.hl7.fhir.dstu3.model.Bundle;
 import org.hl7.fhir.r4.utils.IResourceValidator;
 import org.springframework.beans.factory.annotation.Autowire;
 import org.springframework.context.annotation.Bean;
@@ -69,6 +69,16 @@ public class BaseDstu3Config extends BaseConfig {
 		return retVal;
 	}
 
+	@Bean
+	public TransactionProcessor.ITransactionProcessorVersionAdapter transactionProcessorVersionFacade() {
+		return new TransactionProcessorVersionAdapterDstu3();
+	}
+
+	@Bean
+	public TransactionProcessor<Bundle, Bundle.BundleEntryComponent> transactionProcessor() {
+		return new TransactionProcessor<>();
+	}
+
 	@Bean(name = "myInstanceValidatorDstu3")
 	@Lazy
 	public IValidatorModule instanceValidatorDstu3() {
@@ -78,13 +88,17 @@ public class BaseDstu3Config extends BaseConfig {
 		return val;
 	}
 
+	@Bean
+	public JpaValidationSupportChainDstu3 jpaValidationSupportChain() {
+		return new JpaValidationSupportChainDstu3();
+	}
+
 	@Bean(name = "myJpaValidationSupportDstu3", autowire = Autowire.BY_NAME)
 	public ca.uhn.fhir.jpa.dao.dstu3.IJpaValidationSupportDstu3 jpaValidationSupportDstu3() {
 		ca.uhn.fhir.jpa.dao.dstu3.JpaValidationSupportDstu3 retVal = new ca.uhn.fhir.jpa.dao.dstu3.JpaValidationSupportDstu3();
 		return retVal;
 	}
 
-
 	@Bean(name = "myResourceCountsCache")
 	public ResourceCountCache resourceCountsCache() {
 		ResourceCountCache retVal = new ResourceCountCache(() -> systemDaoDstu3().getResourceCounts());
@@ -142,7 +156,7 @@ public class BaseDstu3Config extends BaseConfig {
 	@Primary
 	@Bean(autowire = Autowire.BY_NAME, name = "myJpaValidationSupportChainDstu3")
 	public IValidationSupport validationSupportChainDstu3() {
-		return new JpaValidationSupportChainDstu3();
+		return new CachingValidationSupport(jpaValidationSupportChain());
 	}
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/r4/BaseR4Config.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/r4/BaseR4Config.java
index dced4a6f8aa..5dbcf649ff0 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/r4/BaseR4Config.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/config/r4/BaseR4Config.java
@@ -3,12 +3,10 @@ package ca.uhn.fhir.jpa.config.r4;
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.context.ParserOptions;
 import ca.uhn.fhir.jpa.config.BaseConfig;
-import ca.uhn.fhir.jpa.dao.FulltextSearchSvcImpl;
-import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
-import ca.uhn.fhir.jpa.dao.IFulltextSearchSvc;
-import ca.uhn.fhir.jpa.dao.ISearchParamRegistry;
+import ca.uhn.fhir.jpa.dao.*;
 import ca.uhn.fhir.jpa.dao.r4.SearchParamExtractorR4;
 import ca.uhn.fhir.jpa.dao.r4.SearchParamRegistryR4;
+import ca.uhn.fhir.jpa.dao.r4.TransactionProcessorVersionAdapterR4;
 import ca.uhn.fhir.jpa.graphql.JpaStorageServices;
 import ca.uhn.fhir.jpa.provider.r4.TerminologyUploaderProviderR4;
 import ca.uhn.fhir.jpa.term.HapiTerminologySvcR4;
@@ -21,7 +19,9 @@ import ca.uhn.fhir.validation.IValidatorModule;
 import org.apache.commons.lang3.time.DateUtils;
 import org.hl7.fhir.r4.hapi.ctx.IValidationSupport;
 import org.hl7.fhir.r4.hapi.rest.server.GraphQLProvider;
+import org.hl7.fhir.r4.hapi.validation.CachingValidationSupport;
 import org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator;
+import org.hl7.fhir.r4.model.Bundle;
 import org.hl7.fhir.r4.utils.GraphQLEngine;
 import org.hl7.fhir.r4.utils.IResourceValidator.BestPracticeWarningLevel;
 import org.springframework.beans.factory.annotation.Autowire;
@@ -72,6 +72,16 @@ public class BaseR4Config extends BaseConfig {
 		return retVal;
 	}
 
+	@Bean
+	public TransactionProcessor.ITransactionProcessorVersionAdapter transactionProcessorVersionFacade() {
+		return new TransactionProcessorVersionAdapterR4();
+	}
+
+	@Bean
+	public TransactionProcessor<Bundle, Bundle.BundleEntryComponent> transactionProcessor() {
+		return new TransactionProcessor<>();
+	}
+
 	@Bean(name = "myGraphQLProvider")
 	@Lazy
 	public GraphQLProvider graphQLProvider() {
@@ -93,6 +103,11 @@ public class BaseR4Config extends BaseConfig {
 		return val;
 	}
 
+	@Bean
+	public JpaValidationSupportChainR4 jpaValidationSupportChain() {
+		return new JpaValidationSupportChainR4();
+	}
+
 	@Bean(name = "myJpaValidationSupportR4", autowire = Autowire.BY_NAME)
 	public ca.uhn.fhir.jpa.dao.r4.IJpaValidationSupportR4 jpaValidationSupportR4() {
 		ca.uhn.fhir.jpa.dao.r4.JpaValidationSupportR4 retVal = new ca.uhn.fhir.jpa.dao.r4.JpaValidationSupportR4();
@@ -102,7 +117,7 @@ public class BaseR4Config extends BaseConfig {
 	@Bean(name = "myResourceCountsCache")
 	public ResourceCountCache resourceCountsCache() {
 		ResourceCountCache retVal = new ResourceCountCache(() -> systemDaoR4().getResourceCounts());
-		retVal.setCacheMillis(60 * DateUtils.MILLIS_PER_SECOND);
+		retVal.setCacheMillis(10 * DateUtils.MILLIS_PER_MINUTE);
 		return retVal;
 	}
 
@@ -156,7 +171,7 @@ public class BaseR4Config extends BaseConfig {
 	@Primary
 	@Bean(autowire = Autowire.BY_NAME, name = "myJpaValidationSupportChainR4")
 	public IValidationSupport validationSupportChainR4() {
-		return new JpaValidationSupportChainR4();
+		return new CachingValidationSupport(jpaValidationSupportChain());
 	}
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirDao.java
index 78a7e4a2ab9..cf26d4f1f2f 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirDao.java
@@ -1,25 +1,5 @@
 package ca.uhn.fhir.jpa.dao;
 
-/*
- * #%L
- * HAPI FHIR JPA Server
- * %%
- * Copyright (C) 2014 - 2018 University Health Network
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
 import ca.uhn.fhir.context.*;
 import ca.uhn.fhir.jpa.dao.data.*;
 import ca.uhn.fhir.jpa.entity.*;
@@ -58,7 +38,6 @@ import ca.uhn.fhir.util.*;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Charsets;
 import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.common.hash.HashFunction;
 import com.google.common.hash.Hashing;
@@ -95,7 +74,6 @@ import javax.persistence.criteria.Root;
 import javax.xml.stream.events.Characters;
 import javax.xml.stream.events.XMLEvent;
 import java.io.CharArrayWriter;
-import java.io.UnsupportedEncodingException;
 import java.text.Normalizer;
 import java.util.*;
 import java.util.Map.Entry;
@@ -104,6 +82,26 @@ import java.util.stream.Collectors;
 
 import static org.apache.commons.lang3.StringUtils.*;
 
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
 @SuppressWarnings("WeakerAccess")
 @Repository
 public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao, ApplicationContextAware {
@@ -186,6 +184,8 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 	protected IResourceTableDao myResourceTableDao;
 	@Autowired
 	protected IResourceTagDao myResourceTagDao;
+	@Autowired
+	protected IResourceSearchViewDao myResourceViewDao;
 	@Autowired(required = true)
 	private DaoConfig myConfig;
 	private FhirContext myContext;
@@ -199,14 +199,14 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 	private ISearchParamPresenceSvc mySearchParamPresenceSvc;
 	@Autowired
 	private ISearchParamRegistry mySearchParamRegistry;
-	@Autowired
-	private ISearchResultDao mySearchResultDao;
+	//@Autowired
+	//private ISearchResultDao mySearchResultDao;
 	@Autowired
 	private IResourceIndexedCompositeStringUniqueDao myResourceIndexedCompositeStringUniqueDao;
 	private ApplicationContext myApplicationContext;
 	private Map<Class<? extends IBaseResource>, IFhirResourceDao<?>> myResourceTypeToDao;
 
-	protected void clearRequestAsProcessingSubRequest(ServletRequestDetails theRequestDetails) {
+	public static void clearRequestAsProcessingSubRequest(ServletRequestDetails theRequestDetails) {
 		if (theRequestDetails != null) {
 			theRequestDetails.getUserData().remove(PROCESSING_SUB_REQUEST);
 		}
@@ -227,6 +227,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 	}
 
 	protected ExpungeOutcome doExpunge(String theResourceName, Long theResourceId, Long theVersion, ExpungeOptions theExpungeOptions) {
+		TransactionTemplate txTemplate = new TransactionTemplate(myPlatformTransactionManager);
 
 		if (!getConfig().isExpungeEnabled()) {
 			throw new MethodNotAllowedException("$expunge is not enabled on this server");
@@ -245,32 +246,39 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 			/*
 			 * Delete historical versions of deleted resources
 			 */
-			Pageable page = new PageRequest(0, remainingCount.get());
-			Slice<Long> resourceIds;
-			if (theResourceId != null) {
-				resourceIds = myResourceTableDao.findIdsOfDeletedResourcesOfType(page, theResourceId, theResourceName);
-			} else {
-				if (theResourceName != null) {
-					resourceIds = myResourceTableDao.findIdsOfDeletedResourcesOfType(page, theResourceName);
+			Pageable page = PageRequest.of(0, remainingCount.get());
+			Slice<Long> resourceIds = txTemplate.execute(t -> {
+				if (theResourceId != null) {
+					return myResourceTableDao.findIdsOfDeletedResourcesOfType(page, theResourceId, theResourceName);
 				} else {
-					resourceIds = myResourceTableDao.findIdsOfDeletedResources(page);
+					if (theResourceName != null) {
+						return myResourceTableDao.findIdsOfDeletedResourcesOfType(page, theResourceName);
+					} else {
+						return myResourceTableDao.findIdsOfDeletedResources(page);
+					}
 				}
-			}
+			});
 			for (Long next : resourceIds) {
-				expungeHistoricalVersionsOfId(next, remainingCount);
-				if (remainingCount.get() <= 0) {
-					return toExpungeOutcome(theExpungeOptions, remainingCount);
-				}
+				txTemplate.execute(t -> {
+					expungeHistoricalVersionsOfId(next, remainingCount);
+					if (remainingCount.get() <= 0) {
+						return toExpungeOutcome(theExpungeOptions, remainingCount);
+					}
+					return null;
+				});
 			}
 
 			/*
 			 * Delete current versions of deleted resources
 			 */
 			for (Long next : resourceIds) {
-				expungeCurrentVersionOfResource(next);
-				if (remainingCount.get() <= 0) {
-					return toExpungeOutcome(theExpungeOptions, remainingCount);
-				}
+				txTemplate.execute(t -> {
+					expungeCurrentVersionOfResource(next);
+					if (remainingCount.get() <= 0) {
+						return toExpungeOutcome(theExpungeOptions, remainingCount);
+					}
+					return null;
+				});
 			}
 
 		}
@@ -280,22 +288,26 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 			/*
 			 * Delete historical versions of non-deleted resources
 			 */
-			Pageable page = new PageRequest(0, remainingCount.get());
-			Slice<Long> historicalIds;
-			if (theResourceId != null && theVersion != null) {
-				historicalIds = toSlice(myResourceHistoryTableDao.findForIdAndVersion(theResourceId, theVersion));
-			} else {
-				if (theResourceName != null) {
-					historicalIds = myResourceHistoryTableDao.findIdsOfPreviousVersionsOfResources(page, theResourceName);
+			Pageable page = PageRequest.of(0, remainingCount.get());
+			Slice<Long> historicalIds = txTemplate.execute(t -> {
+				if (theResourceId != null && theVersion != null) {
+					return toSlice(myResourceHistoryTableDao.findForIdAndVersion(theResourceId, theVersion));
 				} else {
-					historicalIds = myResourceHistoryTableDao.findIdsOfPreviousVersionsOfResources(page);
+					if (theResourceName != null) {
+						return myResourceHistoryTableDao.findIdsOfPreviousVersionsOfResources(page, theResourceName);
+					} else {
+						return myResourceHistoryTableDao.findIdsOfPreviousVersionsOfResources(page);
+					}
 				}
-			}
+			});
 			for (Long next : historicalIds) {
-				expungeHistoricalVersion(next);
-				if (remainingCount.decrementAndGet() <= 0) {
-					return toExpungeOutcome(theExpungeOptions, remainingCount);
-				}
+				txTemplate.execute(t -> {
+					expungeHistoricalVersion(next);
+					if (remainingCount.decrementAndGet() <= 0) {
+						return toExpungeOutcome(theExpungeOptions, remainingCount);
+					}
+					return null;
+				});
 			}
 
 		}
@@ -315,7 +327,6 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		});
 		txTemplate.execute(t -> {
 			doExpungeEverythingQuery("DELETE from " + SearchParamPresent.class.getSimpleName() + " d");
-			doExpungeEverythingQuery("DELETE from " + SearchParam.class.getSimpleName() + " d");
 			doExpungeEverythingQuery("DELETE from " + ForcedId.class.getSimpleName() + " d");
 			doExpungeEverythingQuery("DELETE from " + ResourceIndexedSearchParamDate.class.getSimpleName() + " d");
 			doExpungeEverythingQuery("DELETE from " + ResourceIndexedSearchParamNumber.class.getSimpleName() + " d");
@@ -704,58 +715,6 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		return retVal;
 	}
 
-
-	@SuppressWarnings("unchecked")
-	public <R extends IBaseResource> IFhirResourceDao<R> getDao(Class<R> theType) {
-		Map<Class<? extends IBaseResource>, IFhirResourceDao<?>> resourceTypeToDao = getDaos();
-		IFhirResourceDao<R> dao = (IFhirResourceDao<R>) resourceTypeToDao.get(theType);
-		return dao;
-	}
-
-	protected IFhirResourceDao<?> getDaoOrThrowException(Class<? extends IBaseResource> theClass) {
-		IFhirResourceDao<? extends IBaseResource> retVal = getDao(theClass);
-		if (retVal == null) {
-			List<String> supportedResourceTypes = getDaos()
-				.keySet()
-				.stream()
-				.map(t->myContext.getResourceDefinition(t).getName())
-				.sorted()
-				.collect(Collectors.toList());
-			throw new InvalidRequestException("Unable to process request, this server does not know how to handle resources of type " + getContext().getResourceDefinition(theClass).getName() + " - Can handle: " + supportedResourceTypes);
-		}
-		return retVal;
-	}
-
-
-	private Map<Class<? extends IBaseResource>, IFhirResourceDao<?>> getDaos() {
-		if (myResourceTypeToDao == null) {
-			Map<Class<? extends IBaseResource>, IFhirResourceDao<?>> resourceTypeToDao = new HashMap<>();
-
-			Map<String, IFhirResourceDao> daos = myApplicationContext.getBeansOfType(IFhirResourceDao.class, false, false);
-
-			String[] beanNames = myApplicationContext.getBeanNamesForType(IFhirResourceDao.class);
-
-			for (IFhirResourceDao<?> next : daos.values()) {
-				resourceTypeToDao.put(next.getResourceType(), next);
-			}
-
-			if (this instanceof IFhirResourceDao<?>) {
-				IFhirResourceDao<?> thiz = (IFhirResourceDao<?>) this;
-				resourceTypeToDao.put(thiz.getResourceType(), thiz);
-			}
-
-			myResourceTypeToDao = resourceTypeToDao;
-		}
-
-		return Collections.unmodifiableMap(myResourceTypeToDao);
-	}
-
-	@PostConstruct
-	public void startClearCaches() {
-		myResourceTypeToDao = null;
-	}
-
-
 	protected Set<ResourceIndexedSearchParamCoords> extractSearchParamCoords(ResourceTable theEntity, IBaseResource theResource) {
 		return mySearchParamExtractor.extractSearchParamCoords(theEntity, theResource);
 	}
@@ -910,7 +869,8 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 							param = new ResourceIndexedSearchParamQuantity();
 							break;
 						case STRING:
-							param = new ResourceIndexedSearchParamString();
+							param = new ResourceIndexedSearchParamString()
+								.setDaoConfig(myConfig);
 							break;
 						case TOKEN:
 							param = new ResourceIndexedSearchParamToken();
@@ -957,18 +917,6 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		return myConfig;
 	}
 
-	@Override
-	public void setApplicationContext(ApplicationContext theApplicationContext) throws BeansException {
-		/*
-		 * We do a null check here because Smile's module system tries to
-		 * initialize the application context twice if two modules depend on
-		 * the persistence module. The second time sets the dependency's appctx.
-		 */
-		if (myApplicationContext == null) {
-			myApplicationContext = theApplicationContext;
-		}
-	}
-
 	public void setConfig(DaoConfig theConfig) {
 		myConfig = theConfig;
 	}
@@ -995,6 +943,50 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		}
 	}
 
+	@SuppressWarnings("unchecked")
+	public <R extends IBaseResource> IFhirResourceDao<R> getDao(Class<R> theType) {
+		Map<Class<? extends IBaseResource>, IFhirResourceDao<?>> resourceTypeToDao = getDaos();
+		IFhirResourceDao<R> dao = (IFhirResourceDao<R>) resourceTypeToDao.get(theType);
+		return dao;
+	}
+
+	protected IFhirResourceDao<?> getDaoOrThrowException(Class<? extends IBaseResource> theClass) {
+		IFhirResourceDao<? extends IBaseResource> retVal = getDao(theClass);
+		if (retVal == null) {
+			List<String> supportedResourceTypes = getDaos()
+				.keySet()
+				.stream()
+				.map(t -> myContext.getResourceDefinition(t).getName())
+				.sorted()
+				.collect(Collectors.toList());
+			throw new InvalidRequestException("Unable to process request, this server does not know how to handle resources of type " + getContext().getResourceDefinition(theClass).getName() + " - Can handle: " + supportedResourceTypes);
+		}
+		return retVal;
+	}
+
+	private Map<Class<? extends IBaseResource>, IFhirResourceDao<?>> getDaos() {
+		if (myResourceTypeToDao == null) {
+			Map<Class<? extends IBaseResource>, IFhirResourceDao<?>> resourceTypeToDao = new HashMap<>();
+
+			Map<String, IFhirResourceDao> daos = myApplicationContext.getBeansOfType(IFhirResourceDao.class, false, false);
+
+			String[] beanNames = myApplicationContext.getBeanNamesForType(IFhirResourceDao.class);
+
+			for (IFhirResourceDao<?> next : daos.values()) {
+				resourceTypeToDao.put(next.getResourceType(), next);
+			}
+
+			if (this instanceof IFhirResourceDao<?>) {
+				IFhirResourceDao<?> thiz = (IFhirResourceDao<?>) this;
+				resourceTypeToDao.put(thiz.getResourceType(), thiz);
+			}
+
+			myResourceTypeToDao = resourceTypeToDao;
+		}
+
+		return Collections.unmodifiableMap(myResourceTypeToDao);
+	}
+
 	public IResourceIndexedCompositeStringUniqueDao getResourceIndexedCompositeStringUniqueDao() {
 		return myResourceIndexedCompositeStringUniqueDao;
 	}
@@ -1164,7 +1156,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		return false;
 	}
 
-	protected void markRequestAsProcessingSubRequest(ServletRequestDetails theRequestDetails) {
+	public static void markRequestAsProcessingSubRequest(ServletRequestDetails theRequestDetails) {
 		if (theRequestDetails != null) {
 			theRequestDetails.getUserData().put(PROCESSING_SUB_REQUEST, Boolean.TRUE);
 		}
@@ -1172,13 +1164,13 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 
 	@Override
 	public SearchBuilder newSearchBuilder() {
-		SearchBuilder builder = new SearchBuilder(getContext(), myEntityManager, myFulltextSearchSvc, this, myResourceIndexedSearchParamUriDao,
-			myForcedIdDao,
-			myTerminologySvc, mySerarchParamRegistry, myResourceHistoryTableDao, myResourceTagDao);
+		SearchBuilder builder = new SearchBuilder(
+			getContext(), myEntityManager, myFulltextSearchSvc, this, myResourceIndexedSearchParamUriDao,
+			myForcedIdDao, myTerminologySvc, mySerarchParamRegistry, myResourceTagDao, myResourceViewDao);
 		return builder;
 	}
 
-	protected void notifyInterceptors(RestOperationTypeEnum theOperationType, ActionRequestDetails theRequestDetails) {
+	public void notifyInterceptors(RestOperationTypeEnum theOperationType, ActionRequestDetails theRequestDetails) {
 		if (theRequestDetails.getId() != null && theRequestDetails.getId().hasResourceType() && isNotBlank(theRequestDetails.getResourceType())) {
 			if (theRequestDetails.getId().getResourceType().equals(theRequestDetails.getResourceType()) == false) {
 				throw new InternalErrorException(
@@ -1223,7 +1215,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		}
 	}
 
-	private void populateResourceIdFromEntity(BaseHasResource theEntity, final IBaseResource theResource) {
+	private void populateResourceIdFromEntity(IBaseResourceEntity theEntity, final IBaseResource theResource) {
 		IIdType id = theEntity.getIdDt();
 		if (getContext().getVersion().getVersion().isRi()) {
 			id = getContext().getVersion().newIdType().setValue(id.getValue());
@@ -1257,25 +1249,10 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		if (theEntity.getDeleted() == null) {
 
 			encoding = myConfig.getResourceEncoding();
-			IParser parser = encoding.newParser(myContext);
-			parser.setDontEncodeElements(EXCLUDE_ELEMENTS_IN_ENCODED);
-			String encoded = parser.encodeResourceToString(theResource);
-
+			Set<String> excludeElements = EXCLUDE_ELEMENTS_IN_ENCODED;
 			theEntity.setFhirVersion(myContext.getVersion().getVersion());
-			switch (encoding) {
-				case JSON:
-					bytes = encoded.getBytes(Charsets.UTF_8);
-					break;
-				case JSONC:
-					bytes = GZipUtil.compress(encoded);
-					break;
-				default:
-				case DEL:
-					bytes = new byte[0];
-					break;
-			}
 
-			ourLog.debug("Encoded {} chars of resource body as {} bytes", encoded.length(), bytes.length);
+			bytes = encodeResource(theResource, encoding, excludeElements, myContext);
 
 			if (theUpdateHash) {
 				HashFunction sha256 = Hashing.sha256();
@@ -1308,20 +1285,24 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 				}
 			}
 
-			// Don't keep duplicate tags
+			Set<ResourceTag> allTagsNew = getAllTagDefinitions(theEntity);
 			Set<TagDefinition> allDefsPresent = new HashSet<>();
-			theEntity.getTags().removeIf(theResourceTag -> !allDefsPresent.add(theResourceTag.getTag()));
+			allTagsNew.forEach(tag -> {
 
-			// Remove any tags that have been removed
-			for (ResourceTag next : allTagsOld) {
-				if (!allDefs.contains(next)) {
-					if (shouldDroppedTagBeRemovedOnUpdate(theRequest, next)) {
-						theEntity.getTags().remove(next);
+				// Don't keep duplicate tags
+				if (!allDefsPresent.add(tag.getTag())) {
+					theEntity.getTags().remove(tag);
+				}
+
+				// Drop any tags that have been removed
+				if (!allDefs.contains(tag)) {
+					if (shouldDroppedTagBeRemovedOnUpdate(theRequest, tag)) {
+						theEntity.getTags().remove(tag);
 					}
 				}
-			}
 
-			Set<ResourceTag> allTagsNew = getAllTagDefinitions(theEntity);
+			});
+
 			if (!allTagsOld.equals(allTagsNew)) {
 				changed = true;
 			}
@@ -1355,7 +1336,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 	}
 
 	@SuppressWarnings("unchecked")
-	private <R extends IBaseResource> R populateResourceMetadataHapi(Class<R> theResourceType, BaseHasResource theEntity, Collection<? extends BaseTag> theTagList, boolean theForHistoryOperation, IResource res) {
+	private <R extends IBaseResource> R populateResourceMetadataHapi(Class<R> theResourceType, IBaseResourceEntity theEntity, Collection<? extends BaseTag> theTagList, boolean theForHistoryOperation, IResource res) {
 		R retVal = (R) res;
 		if (theEntity.getDeleted() != null) {
 			res = (IResource) myContext.getResourceDefinition(theResourceType).newInstance();
@@ -1421,7 +1402,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 	}
 
 	@SuppressWarnings("unchecked")
-	private <R extends IBaseResource> R populateResourceMetadataRi(Class<R> theResourceType, BaseHasResource theEntity, Collection<? extends BaseTag> theTagList, boolean theForHistoryOperation, IAnyResource res) {
+	private <R extends IBaseResource> R populateResourceMetadataRi(Class<R> theResourceType, IBaseResourceEntity theEntity, Collection<? extends BaseTag> theTagList, boolean theForHistoryOperation, IAnyResource res) {
 		R retVal = (R) res;
 		if (theEntity.getDeleted() != null) {
 			res = (IAnyResource) myContext.getResourceDefinition(theResourceType).newInstance();
@@ -1480,6 +1461,15 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		return retVal;
 	}
 
+	/**
+	 * Subclasses may override to provide behaviour. Called when a pre-existing resource has been updated in the database
+	 *
+	 * @param theEntity The resource
+	 */
+	protected void postDelete(ResourceTable theEntity) {
+		// nothing
+	}
+
 	/**
 	 * Subclasses may override to provide behaviour. Called when a resource has been inserted into the database for the first time.
 	 *
@@ -1536,6 +1526,18 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		return retVal;
 	}
 
+	@Override
+	public void setApplicationContext(ApplicationContext theApplicationContext) throws BeansException {
+		/*
+		 * We do a null check here because Smile's module system tries to
+		 * initialize the application context twice if two modules depend on
+		 * the persistence module. The second time sets the dependency's appctx.
+		 */
+		if (myApplicationContext == null) {
+			myApplicationContext = theApplicationContext;
+		}
+	}
+
 	private void setUpdatedTime(Collection<? extends BaseResourceIndexedSearchParam> theParams, Date theUpdateTime) {
 		for (BaseResourceIndexedSearchParam nextSearchParam : theParams) {
 			nextSearchParam.setUpdated(theUpdateTime);
@@ -1592,6 +1594,11 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		return false;
 	}
 
+	@PostConstruct
+	public void startClearCaches() {
+		myResourceTypeToDao = null;
+	}
+
 	private ExpungeOutcome toExpungeOutcome(ExpungeOptions theExpungeOptions, AtomicInteger theRemainingCount) {
 		return new ExpungeOutcome()
 			.setDeletedCount(theExpungeOptions.getLimit() - theRemainingCount.get());
@@ -1601,62 +1608,50 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 	public IBaseResource toResource(BaseHasResource theEntity, boolean theForHistoryOperation) {
 		RuntimeResourceDefinition type = myContext.getResourceDefinition(theEntity.getResourceType());
 		Class<? extends IBaseResource> resourceType = type.getImplementingClass();
-		return toResource(resourceType, theEntity, null, null, theForHistoryOperation);
+		return toResource(resourceType, theEntity, null, theForHistoryOperation);
 	}
 
 	@SuppressWarnings("unchecked")
 	@Override
-	public <R extends IBaseResource> R toResource(Class<R> theResourceType, BaseHasResource theEntity, ResourceHistoryTable theHistory, Collection<ResourceTag> theTagList,
-																 boolean theForHistoryOperation) {
+	public <R extends IBaseResource> R toResource(Class<R> theResourceType, IBaseResourceEntity theEntity, Collection<ResourceTag> theTagList, boolean theForHistoryOperation) {
+
+		// 1. get resource, it's encoding and the tags if any
+		byte[] resourceBytes = null;
+		ResourceEncodingEnum resourceEncoding = null;
+		Collection<? extends BaseTag> myTagList = null;
 
-		// May 28, 2018 - #936
-		// Could set historyList to null, if it's not called in the loop for the backward compatibility
-		ResourceHistoryTable history;
 		if (theEntity instanceof ResourceHistoryTable) {
-			history = (ResourceHistoryTable) theEntity;
-		} else {
-			if (theHistory == null) {
-				history = myResourceHistoryTableDao.findForIdAndVersion(theEntity.getId(), theEntity.getVersion());
-			} else {
-				history = theHistory;
+			ResourceHistoryTable history = (ResourceHistoryTable) theEntity;
+			resourceBytes = history.getResource();
+			resourceEncoding = history.getEncoding();
+			myTagList = history.getTags();
+		} else if (theEntity instanceof ResourceTable) {
+			ResourceTable resource = (ResourceTable) theEntity;
+			ResourceHistoryTable history = myResourceHistoryTableDao.findForIdAndVersion(theEntity.getId(), theEntity.getVersion());
+			if (history == null) {
+				return null;
 			}
-		}
-
-		if (history == null) {
+			resourceBytes = history.getResource();
+			resourceEncoding = history.getEncoding();
+			myTagList = resource.getTags();
+		} else if (theEntity instanceof ResourceSearchView) {
+			// This is the search View
+			ResourceSearchView myView = (ResourceSearchView) theEntity;
+			resourceBytes = myView.getResource();
+			resourceEncoding = myView.getEncoding();
+			if (theTagList == null)
+				myTagList = new HashSet<>();
+			else
+				myTagList = theTagList;
+		} else {
+			// something wrong
 			return null;
 		}
 
-		byte[] resourceBytes = history.getResource();
-		ResourceEncodingEnum resourceEncoding = history.getEncoding();
+		// 2. get The text
+		String resourceText = decodeResource(resourceBytes, resourceEncoding);
 
-		String resourceText = null;
-		switch (resourceEncoding) {
-			case JSON:
-				try {
-					resourceText = new String(resourceBytes, "UTF-8");
-				} catch (UnsupportedEncodingException e) {
-					throw new Error("Should not happen", e);
-				}
-				break;
-			case JSONC:
-				resourceText = GZipUtil.decompress(resourceBytes);
-				break;
-			case DEL:
-				break;
-		}
-
-		// get preload the tagList
-		Collection<? extends BaseTag> myTagList;
-		
-		if (theTagList == null)
-			myTagList = theEntity.getTags();
-		else
-			myTagList = theTagList;
-		
-		
-		/*
-		 * Use the appropriate custom type if one is specified in the context
-		 */
+		// 3. Use the appropriate custom type if one is specified in the context
 		Class<R> resourceType = theResourceType;
 		if (myContext.hasDefaultTypeForProfile()) {
 			for (BaseTag nextTag : myTagList) {
@@ -1674,6 +1669,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 			}
 		}
 
+		// 4. parse the text to FHIR
 		R retVal;
 		if (resourceEncoding != ResourceEncodingEnum.DEL) {
 			IParser parser = resourceEncoding.newParser(getContext(theEntity.getFhirVersion()));
@@ -1704,6 +1700,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 
 		}
 
+		// 5. fill MetaData
 		if (retVal instanceof IResource) {
 			IResource res = (IResource) retVal;
 			retVal = populateResourceMetadataHapi(resourceType, theEntity, myTagList, theForHistoryOperation, res);
@@ -1712,7 +1709,6 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 			retVal = populateResourceMetadataRi(resourceType, theEntity, myTagList, theForHistoryOperation, res);
 		}
 
-
 		return retVal;
 	}
 
@@ -1745,13 +1741,17 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 			return theResourceType + '/' + theId.toString();
 		}
 	}
-	
+
 	@SuppressWarnings("unchecked")
 	protected ResourceTable updateEntity(RequestDetails theRequest, final IBaseResource theResource, ResourceTable
 		theEntity, Date theDeletedTimestampOrNull, boolean thePerformIndexing,
 													 boolean theUpdateVersion, Date theUpdateTime, boolean theForceUpdate, boolean theCreateNewHistoryEntry) {
+		Validate.notNull(theEntity);
+		Validate.isTrue(theDeletedTimestampOrNull != null || theResource != null, "Must have either a resource[{}] or a deleted timestamp[{}] for resource PID[{}]", theDeletedTimestampOrNull != null, theResource != null, theEntity.getId());
+
 		ourLog.debug("Starting entity update");
 
+
 		/*
 		 * This should be the very first thing..
 		 */
@@ -1841,6 +1841,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 			theEntity.setNarrativeTextParsedIntoWords(null);
 			theEntity.setContentTextParsedIntoWords(null);
 			theEntity.setHashSha256(null);
+			theEntity.setIndexStatus(INDEX_STATUS_INDEXED);
 			changed = populateResourceIntoEntity(theRequest, theResource, theEntity, true);
 
 		} else {
@@ -2018,6 +2019,11 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 
 			postPersist(theEntity, (T) theResource);
 
+		} else if (theEntity.getDeleted() != null) {
+			theEntity = myEntityManager.merge(theEntity);
+
+			postDelete(theEntity);
+
 		} else {
 			theEntity = myEntityManager.merge(theEntity);
 
@@ -2029,10 +2035,6 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		 */
 		if (theCreateNewHistoryEntry) {
 			final ResourceHistoryTable historyEntry = theEntity.toHistory();
-//			if (theEntity.getVersion() > 1) {
-//				existing = myResourceHistoryTableDao.findForIdAndVersion(theEntity.getId(), theEntity.getVersion());
-//				ourLog.warn("Reusing existing history entry entity {}", theEntity.getIdDt().getValue());
-//			}
 			historyEntry.setEncoding(changed.getEncoding());
 			historyEntry.setResource(changed.getResource());
 
@@ -2072,6 +2074,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		if (thePerformIndexing) {
 
 			for (ResourceIndexedSearchParamString next : removeCommon(existingStringParams, stringParams)) {
+				next.setDaoConfig(myConfig);
 				myEntityManager.remove(next);
 				theEntity.getParamsString().remove(next);
 			}
@@ -2163,12 +2166,11 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 
 		} // if thePerformIndexing
 
-		theEntity = myEntityManager.merge(theEntity);
-
 		if (theResource != null) {
 			populateResourceIdFromEntity(theEntity, theResource);
 		}
 
+
 		return theEntity;
 	}
 
@@ -2286,7 +2288,7 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 		}
 	}
 
-	protected void validateDeleteConflictsEmptyOrThrowException(List<DeleteConflict> theDeleteConflicts) {
+	public void validateDeleteConflictsEmptyOrThrowException(List<DeleteConflict> theDeleteConflicts) {
 		if (theDeleteConflicts.isEmpty()) {
 			return;
 		}
@@ -2361,6 +2363,45 @@ public abstract class BaseHapiFhirDao<T extends IBaseResource> implements IDao,
 
 	}
 
+	public static String decodeResource(byte[] theResourceBytes, ResourceEncodingEnum theResourceEncoding) {
+		String resourceText = null;
+		switch (theResourceEncoding) {
+			case JSON:
+				resourceText = new String(theResourceBytes, Charsets.UTF_8);
+				break;
+			case JSONC:
+				resourceText = GZipUtil.decompress(theResourceBytes);
+				break;
+			case DEL:
+				break;
+		}
+		return resourceText;
+	}
+
+	public static byte[] encodeResource(IBaseResource theResource, ResourceEncodingEnum theEncoding, Set<String> theExcludeElements, FhirContext theContext) {
+		byte[] bytes;
+		IParser parser = theEncoding.newParser(theContext);
+		parser.setDontEncodeElements(theExcludeElements);
+		String encoded = parser.encodeResourceToString(theResource);
+
+
+		switch (theEncoding) {
+			case JSON:
+				bytes = encoded.getBytes(Charsets.UTF_8);
+				break;
+			case JSONC:
+				bytes = GZipUtil.compress(encoded);
+				break;
+			default:
+			case DEL:
+				bytes = new byte[0];
+				break;
+		}
+
+		ourLog.debug("Encoded {} chars of resource body as {} bytes", encoded.length(), bytes.length);
+		return bytes;
+	}
+
 	/**
 	 * This method is used to create a set of all possible combinations of
 	 * parameters across a set of search parameters. An example of why
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDao.java
index 2a8882f14fd..b8a5df18c3f 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirResourceDao.java
@@ -50,6 +50,7 @@ import ca.uhn.fhir.rest.server.method.SearchMethodBinding;
 import ca.uhn.fhir.util.*;
 import org.apache.commons.lang3.Validate;
 import org.hl7.fhir.instance.model.api.*;
+import org.hl7.fhir.r4.model.InstantType;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Required;
 import org.springframework.lang.NonNull;
@@ -207,7 +208,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 
 		StopWatch w = new StopWatch();
 
-		T resourceToDelete = toResource(myResourceType, entity, null, null, false);
+		T resourceToDelete = toResource(myResourceType, entity, null, false);
 
 		// Notify IServerOperationInterceptors about pre-action call
 		if (theReques != null) {
@@ -289,7 +290,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 			ResourceTable entity = myEntityManager.find(ResourceTable.class, pid);
 			deletedResources.add(entity);
 
-			T resourceToDelete = toResource(myResourceType, entity, null, null, false);
+			T resourceToDelete = toResource(myResourceType, entity, null, false);
 
 			// Notify IServerOperationInterceptors about pre-action call
 			if (theRequest != null) {
@@ -394,16 +395,6 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 					"This server cannot create an entity with a user-specified numeric ID - Client should not specify an ID when creating a new resource, or should include at least one letter in the ID to force a client-defined ID");
 			}
 			createForcedIdIfNeeded(entity, theResource.getIdElement());
-
-			if (entity.getForcedId() != null) {
-				try {
-					translateForcedIdToPid(getResourceName(), theResource.getIdElement().getIdPart());
-					throw new UnprocessableEntityException(getContext().getLocalizer().getMessage(BaseHapiFhirResourceDao.class, "duplicateCreateForcedId", theResource.getIdElement().getIdPart()));
-				} catch (ResourceNotFoundException e) {
-					// good, this ID doesn't exist so we can create it
-				}
-			}
-
 		}
 
 		// Notify interceptors
@@ -517,6 +508,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 	}
 
 	@Override
+	@Transactional(propagation = Propagation.NEVER)
 	public ExpungeOutcome expunge(IIdType theId, ExpungeOptions theExpungeOptions) {
 		BaseHasResource entity = readEntity(theId);
 		if (theId.hasVersionIdPart()) {
@@ -532,6 +524,7 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 	}
 
 	@Override
+	@Transactional(propagation = Propagation.NEVER)
 	public ExpungeOutcome expunge(ExpungeOptions theExpungeOptions) {
 		ourLog.info("Beginning TYPE[{}] expunge operation", getResourceName());
 
@@ -854,16 +847,10 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 		BaseHasResource entity = readEntity(theId);
 		validateResourceType(entity);
 
-		T retVal = toResource(myResourceType, entity, null, null, false);
+		T retVal = toResource(myResourceType, entity, null, false);
 
-		IPrimitiveType<Date> deleted;
-		if (retVal instanceof IResource) {
-			deleted = ResourceMetadataKeyEnum.DELETED_AT.get((IResource) retVal);
-		} else {
-			deleted = ResourceMetadataKeyEnum.DELETED_AT.get((IAnyResource) retVal);
-		}
-		if (deleted != null && !deleted.isEmpty()) {
-			throw new ResourceGoneException("Resource was deleted at " + deleted.getValueAsString());
+		if (entity.getDeleted() != null) {
+			throw new ResourceGoneException("Resource was deleted at " + new InstantType(entity.getDeleted()).getValueAsString());
 		}
 
 		ourLog.debug("Processed read on {} in {}ms", theId.getValue(), w.getMillisAndRestart());
@@ -930,10 +917,14 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 
 	@Override
 	public void reindex(T theResource, ResourceTable theEntity) {
-		ourLog.debug("Indexing resource {} - PID {}", theResource.getIdElement().getValue(), theEntity.getId());
-		CURRENTLY_REINDEXING.put(theResource, Boolean.TRUE);
-		updateEntity(null, theResource, theEntity, null, true, false, theEntity.getUpdatedDate(), true, false);
-		CURRENTLY_REINDEXING.put(theResource, null);
+		ourLog.debug("Indexing resource {} - PID {}", theEntity.getIdDt().getValue(), theEntity.getId());
+		if (theResource != null) {
+			CURRENTLY_REINDEXING.put(theResource, Boolean.TRUE);
+		}
+		updateEntity(null, theResource, theEntity, theEntity.getDeleted(), true, false, theEntity.getUpdatedDate(), true, false);
+		if (theResource != null) {
+			CURRENTLY_REINDEXING.put(theResource, null);
+		}
 	}
 
 	@Override
@@ -1065,6 +1056,11 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 		mySecondaryPrimaryKeyParamName = theSecondaryPrimaryKeyParamName;
 	}
 
+	@PostConstruct
+	public void start() {
+		ourLog.debug("Starting resource DAO for type: {}", getResourceName());
+	}
+
 	protected <MT extends IBaseMetaType> MT toMetaDt(Class<MT> theType, Collection<TagDefinition> tagDefinitions) {
 		MT retVal;
 		try {
@@ -1205,7 +1201,9 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 			}
 		} else {
 			/*
-			 * Note: resourcdeId will not be null or empty here, because we check it and reject requests in BaseOutcomeReturningMethodBindingWithResourceParam
+			 * Note: resourceId will not be null or empty here, because we
+			 * check it and reject requests in
+			 * BaseOutcomeReturningMethodBindingWithResourceParam
 			 */
 			resourceId = theResource.getIdElement();
 
@@ -1336,9 +1334,4 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
 		}
 	}
 
-	@PostConstruct
-	public void start() {
-		ourLog.debug("Starting resource DAO for type: {}", getResourceName());
-	}
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirSystemDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirSystemDao.java
index 71696321fdb..70188beca0e 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirSystemDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseHapiFhirSystemDao.java
@@ -256,6 +256,9 @@ public abstract class BaseHapiFhirSystemDao<T, MT> extends BaseHapiFhirDao<IBase
 	@Override
 	@Transactional(propagation = Propagation.NEVER)
 	public Integer performReindexingPass(final Integer theCount) {
+		if (getConfig().isStatusBasedReindexingDisabled()) {
+			return -1;
+		}
 		if (!myReindexLock.tryLock()) {
 			return -1;
 		}
@@ -305,7 +308,8 @@ public abstract class BaseHapiFhirSystemDao<T, MT> extends BaseHapiFhirDao<IBase
 
 							final IBaseResource resource = toResource(resourceTable, false);
 
-							@SuppressWarnings("rawtypes") final IFhirResourceDao dao = getDaoOrThrowException(resource.getClass());
+							Class<? extends IBaseResource> resourceClass = getContext().getResourceDefinition(resourceTable.getResourceType()).getImplementingClass();
+							@SuppressWarnings("rawtypes") final IFhirResourceDao dao = getDaoOrThrowException(resourceClass);
 							dao.reindex(resource, resourceTable);
 							return null;
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseSearchParamExtractor.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseSearchParamExtractor.java
index 62fb3442679..cfd452fe6bc 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseSearchParamExtractor.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/BaseSearchParamExtractor.java
@@ -20,45 +20,45 @@ package ca.uhn.fhir.jpa.dao;
  * #L%
  */
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.regex.Pattern;
-
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.RuntimeResourceDefinition;
+import ca.uhn.fhir.context.RuntimeSearchParam;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import ca.uhn.fhir.util.FhirTerser;
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang3.ObjectUtils;
 import org.hl7.fhir.instance.model.api.IBaseDatatype;
 import org.hl7.fhir.instance.model.api.IBaseExtension;
 import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import com.google.common.annotations.VisibleForTesting;
-
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.context.RuntimeResourceDefinition;
-import ca.uhn.fhir.context.RuntimeSearchParam;
-import ca.uhn.fhir.util.FhirTerser;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.regex.Pattern;
 
 public abstract class BaseSearchParamExtractor implements ISearchParamExtractor {
-	
-	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(BaseSearchParamExtractor.class);
-	public static final Pattern SPLIT = Pattern.compile("\\||( or )");
 
+	public static final Pattern SPLIT = Pattern.compile("\\||( or )");
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(BaseSearchParamExtractor.class);
 	@Autowired
 	private FhirContext myContext;
-	
+	@Autowired
+	private DaoConfig myDaoConfig;
 	@Autowired
 	private ISearchParamRegistry mySearchParamRegistry;
-	
+
 	public BaseSearchParamExtractor() {
 		super();
 	}
 
-	public BaseSearchParamExtractor(FhirContext theCtx, ISearchParamRegistry theSearchParamRegistry) {
+	public BaseSearchParamExtractor(DaoConfig theDaoConfig, FhirContext theCtx, ISearchParamRegistry theSearchParamRegistry) {
 		myContext = theCtx;
 		mySearchParamRegistry = theSearchParamRegistry;
+		myDaoConfig = theDaoConfig;
 	}
-	
+
 	@Override
 	public List<PathAndRef> extractResourceLinks(IBaseResource theResource, RuntimeSearchParam theNextSpDef) {
 		List<PathAndRef> refs = new ArrayList<PathAndRef>();
@@ -75,40 +75,20 @@ public abstract class BaseSearchParamExtractor implements ISearchParamExtractor
 		return refs;
 	}
 
-	protected List<Object> extractValues(String thePaths, IBaseResource theResource) {
-		List<Object> values = new ArrayList<Object>();
-		String[] nextPathsSplit = SPLIT.split(thePaths);
-		FhirTerser t = myContext.newTerser();
-		for (String nextPath : nextPathsSplit) {
-			String nextPathTrimmed = nextPath.trim();
-			try {
-				List<Object> allValues = t.getValues(theResource, nextPathTrimmed);
-				for (Object next : allValues) {
-					if (next instanceof IBaseExtension) {
-						IBaseDatatype value = ((IBaseExtension) next).getValue();
-						if (value != null) {
-							values.add(value);
-						}
-					} else {
-						values.add(next);
-					}
-				}
-			} catch (Exception e) {
-				RuntimeResourceDefinition def = myContext.getResourceDefinition(theResource);
-				ourLog.warn("Failed to index values from path[{}] in resource type[{}]: {}", new Object[] { nextPathTrimmed, def.getName(), e.toString(), e } );
-			}
-		}
-		return values;
-	}
-	
+	protected abstract List<Object> extractValues(String thePaths, IBaseResource theResource);
+
 	protected FhirContext getContext() {
 		return myContext;
 	}
 
+	public DaoConfig getDaoConfig() {
+		return myDaoConfig;
+	}
+
 	public Collection<RuntimeSearchParam> getSearchParams(IBaseResource theResource) {
 		RuntimeResourceDefinition def = getContext().getResourceDefinition(theResource);
 		Collection<RuntimeSearchParam> retVal = mySearchParamRegistry.getActiveSearchParams(def.getName()).values();
-		List<RuntimeSearchParam> defaultList= Collections.emptyList();
+		List<RuntimeSearchParam> defaultList = Collections.emptyList();
 		retVal = ObjectUtils.defaultIfNull(retVal, defaultList);
 		return retVal;
 	}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/DaoConfig.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/DaoConfig.java
index d2d3595f6bc..4dee2b1362b 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/DaoConfig.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/DaoConfig.java
@@ -8,6 +8,8 @@ import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.commons.lang3.time.DateUtils;
 import org.hl7.fhir.r4.model.Bundle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.*;
 
@@ -20,9 +22,9 @@ import java.util.*;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -58,6 +60,10 @@ public class DaoConfig {
 	 * @see #setTranslationCachesExpireAfterWriteInMinutes(Long)
 	 */
 	public static final Long DEFAULT_TRANSLATION_CACHES_EXPIRE_AFTER_WRITE_IN_MINUTES = 60L;
+	/**
+	 * See {@link #setStatusBasedReindexingDisabled(boolean)}
+	 */
+	public static final String DISABLE_STATUS_BASED_REINDEX = "disable_status_based_reindex";
 	/**
 	 * Default value for {@link #setMaximumSearchResultCountInTransaction(Integer)}
 	 *
@@ -77,6 +83,7 @@ public class DaoConfig {
 		Bundle.BundleType.DOCUMENT.toCode(),
 		Bundle.BundleType.MESSAGE.toCode()
 	)));
+	private static final Logger ourLog = LoggerFactory.getLogger(DaoConfig.class);
 	private IndexEnabledEnum myIndexMissingFieldsEnabled = IndexEnabledEnum.DISABLED;
 	/**
 	 * update setter javadoc if default changes
@@ -89,8 +96,7 @@ public class DaoConfig {
 	/**
 	 * update setter javadoc if default changes
 	 */
-	private boolean myAllowContainsSearches = true;
-
+	private boolean myAllowContainsSearches = false;
 	/**
 	 * update setter javadoc if default changes
 	 */
@@ -139,11 +145,13 @@ public class DaoConfig {
 	private boolean myAutoCreatePlaceholderReferenceTargets;
 	private Integer myCacheControlNoStoreMaxResultsUpperLimit = 1000;
 	private Integer myCountSearchResultsUpTo = null;
+	private boolean myStatusBasedReindexingDisabled;
 	private IdStrategyEnum myResourceServerIdStrategy = IdStrategyEnum.SEQUENTIAL_NUMERIC;
 	private boolean myMarkResourcesForReindexingUponSearchParameterChange;
 	private boolean myExpungeEnabled;
 	private int myReindexThreadCount;
 	private Set<String> myBundleTypesAllowedForStorage;
+	private boolean myValidateSearchParameterExpressionsOnSave = true;
 
 	/**
 	 * Constructor
@@ -155,6 +163,38 @@ public class DaoConfig {
 		setMarkResourcesForReindexingUponSearchParameterChange(true);
 		setReindexThreadCount(Runtime.getRuntime().availableProcessors());
 		setBundleTypesAllowedForStorage(DEFAULT_BUNDLE_TYPES_ALLOWED_FOR_STORAGE);
+
+
+		if ("true".equalsIgnoreCase(System.getProperty(DISABLE_STATUS_BASED_REINDEX))) {
+			ourLog.info("Status based reindexing is DISABLED");
+			setStatusBasedReindexingDisabled(true);
+		}
+	}
+
+	/**
+	 * If set to <code>true</code> (default is false), the reindexing of search parameters
+	 * using a query on the HFJ_RESOURCE.SP_INDEX_STATUS column will be disabled completely.
+	 * This query is just not efficient on Oracle and bogs the system down when there are
+	 * a lot of resources. A more efficient way of doing this will be introduced
+	 * in the next release of HAPI FHIR.
+	 *
+	 * @since 3.5.0
+	 */
+	public boolean isStatusBasedReindexingDisabled() {
+		return myStatusBasedReindexingDisabled;
+	}
+
+	/**
+	 * If set to <code>true</code> (default is false), the reindexing of search parameters
+	 * using a query on the HFJ_RESOURCE.SP_INDEX_STATUS column will be disabled completely.
+	 * This query is just not efficient on Oracle and bogs the system down when there are
+	 * a lot of resources. A more efficient way of doing this will be introduced
+	 * in the next release of HAPI FHIR.
+	 *
+	 * @since 3.5.0
+	 */
+	public void setStatusBasedReindexingDisabled(boolean theStatusBasedReindexingDisabled) {
+		myStatusBasedReindexingDisabled = theStatusBasedReindexingDisabled;
 	}
 
 	/**
@@ -460,6 +500,16 @@ public class DaoConfig {
 		myInterceptors = theInterceptors;
 	}
 
+	/**
+	 * This may be used to optionally register server interceptors directly against the DAOs.
+	 */
+	public void setInterceptors(IServerInterceptor... theInterceptor) {
+		setInterceptors(new ArrayList<IServerInterceptor>());
+		if (theInterceptor != null && theInterceptor.length != 0) {
+			getInterceptors().addAll(Arrays.asList(theInterceptor));
+		}
+	}
+
 	/**
 	 * See {@link #setMaximumExpansionSize(int)}
 	 */
@@ -705,9 +755,9 @@ public class DaoConfig {
 	 * references instead of being treated as real references.
 	 * <p>
 	 * A logical reference is a reference which is treated as an identifier, and
-	 * does not neccesarily resolve. See {@link "http://hl7.org/fhir/references.html"} for
+	 * does not neccesarily resolve. See <a href="http://hl7.org/fhir/references.html">references</a> for
 	 * a description of logical references. For example, the valueset
-	 * {@link "http://hl7.org/fhir/valueset-quantity-comparator.html"} is a logical
+	 * <a href="http://hl7.org/fhir/valueset-quantity-comparator.html">valueset-quantity-comparator</a> is a logical
 	 * reference.
 	 * </p>
 	 * <p>
@@ -730,9 +780,9 @@ public class DaoConfig {
 	 * references instead of being treated as real references.
 	 * <p>
 	 * A logical reference is a reference which is treated as an identifier, and
-	 * does not neccesarily resolve. See {@link "http://hl7.org/fhir/references.html"} for
+	 * does not neccesarily resolve. See <a href="http://hl7.org/fhir/references.html">references</a> for
 	 * a description of logical references. For example, the valueset
-	 * {@link "http://hl7.org/fhir/valueset-quantity-comparator.html"} is a logical
+	 * <a href="http://hl7.org/fhir/valueset-quantity-comparator.html">valueset-quantity-comparator</a> is a logical
 	 * reference.
 	 * </p>
 	 * <p>
@@ -754,7 +804,15 @@ public class DaoConfig {
 	 * If enabled, the server will support the use of :contains searches,
 	 * which are helpful but can have adverse effects on performance.
 	 * <p>
-	 * Default is <code>true</code>
+	 * Default is <code>false</code> (Note that prior to HAPI FHIR
+	 * 3.5.0 the default was <code>true</code>)
+	 * </p>
+	 * <p>
+	 * Note: If you change this value after data already has
+	 * already been stored in the database, you must for a reindexing
+	 * of all data in the database or resources may not be
+	 * searchable.
+	 * </p>
 	 */
 	public boolean isAllowContainsSearches() {
 		return myAllowContainsSearches;
@@ -764,7 +822,15 @@ public class DaoConfig {
 	 * If enabled, the server will support the use of :contains searches,
 	 * which are helpful but can have adverse effects on performance.
 	 * <p>
-	 * Default is <code>true</code>
+	 * Default is <code>false</code> (Note that prior to HAPI FHIR
+	 * 3.5.0 the default was <code>true</code>)
+	 * </p>
+	 * <p>
+	 * Note: If you change this value after data already has
+	 * already been stored in the database, you must for a reindexing
+	 * of all data in the database or resources may not be
+	 * searchable.
+	 * </p>
 	 */
 	public void setAllowContainsSearches(boolean theAllowContainsSearches) {
 		this.myAllowContainsSearches = theAllowContainsSearches;
@@ -1171,6 +1237,34 @@ public class DaoConfig {
 		myUniqueIndexesEnabled = theUniqueIndexesEnabled;
 	}
 
+	/**
+	 * If <code>true</code> (default is <code>true</code>), before allowing a
+	 * SearchParameter resource to be stored (create, update, etc.) the
+	 * expression will be performed against an empty resource to ensure that
+	 * the FHIRPath executor is able to process it.
+	 * <p>
+	 * This should proabably always be set to true, but is configurable
+	 * in order to support some unit tests.
+	 * </p>
+	 */
+	public boolean isValidateSearchParameterExpressionsOnSave() {
+		return myValidateSearchParameterExpressionsOnSave;
+	}
+
+	/**
+	 * If <code>true</code> (default is <code>true</code>), before allowing a
+	 * SearchParameter resource to be stored (create, update, etc.) the
+	 * expression will be performed against an empty resource to ensure that
+	 * the FHIRPath executor is able to process it.
+	 * <p>
+	 * This should proabably always be set to true, but is configurable
+	 * in order to support some unit tests.
+	 * </p>
+	 */
+	public void setValidateSearchParameterExpressionsOnSave(boolean theValidateSearchParameterExpressionsOnSave) {
+		myValidateSearchParameterExpressionsOnSave = theValidateSearchParameterExpressionsOnSave;
+	}
+
 	/**
 	 * Do not call this method, it exists only for legacy reasons. It
 	 * will be removed in a future version. Configure the page size on your
@@ -1196,16 +1290,6 @@ public class DaoConfig {
 		// nothing
 	}
 
-	/**
-	 * This may be used to optionally register server interceptors directly against the DAOs.
-	 */
-	public void setInterceptors(IServerInterceptor... theInterceptor) {
-		setInterceptors(new ArrayList<IServerInterceptor>());
-		if (theInterceptor != null && theInterceptor.length != 0) {
-			getInterceptors().addAll(Arrays.asList(theInterceptor));
-		}
-	}
-
 	/**
 	 * @deprecated As of HAPI FHIR 3.0.0, subscriptions no longer use polling for
 	 * detecting changes, so this setting has no effect
@@ -1237,18 +1321,6 @@ public class DaoConfig {
 		setSubscriptionPurgeInactiveAfterMillis(theSeconds * DateUtils.MILLIS_PER_SECOND);
 	}
 
-	private static void validateTreatBaseUrlsAsLocal(String theUrl) {
-		Validate.notBlank(theUrl, "Base URL must not be null or empty");
-
-		int starIdx = theUrl.indexOf('*');
-		if (starIdx != -1) {
-			if (starIdx != theUrl.length() - 1) {
-				throw new IllegalArgumentException("Base URL wildcard character (*) can only appear at the end of the string: " + theUrl);
-			}
-		}
-
-	}
-
 	public enum IndexEnabledEnum {
 		ENABLED,
 		DISABLED
@@ -1266,4 +1338,16 @@ public class DaoConfig {
 		UUID
 	}
 
+	private static void validateTreatBaseUrlsAsLocal(String theUrl) {
+		Validate.notBlank(theUrl, "Base URL must not be null or empty");
+
+		int starIdx = theUrl.indexOf('*');
+		if (starIdx != -1) {
+			if (starIdx != theUrl.length() - 1) {
+				throw new IllegalArgumentException("Base URL wildcard character (*) can only appear at the end of the string: " + theUrl);
+			}
+		}
+
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoCompositionDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoCompositionDstu2.java
new file mode 100644
index 00000000000..cfdcd0d28f1
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoCompositionDstu2.java
@@ -0,0 +1,41 @@
+package ca.uhn.fhir.jpa.dao;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.model.dstu2.resource.Composition;
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import ca.uhn.fhir.rest.server.exceptions.NotImplementedOperationException;
+import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class FhirResourceDaoCompositionDstu2 extends FhirResourceDaoDstu2<Composition>implements IFhirResourceDaoComposition<Composition> {
+
+	@Override
+	public IBundleProvider getDocumentForComposition(HttpServletRequest theServletRequest, IIdType theId, IPrimitiveType<Integer> theCount, DateRangeParam theLastUpdate, SortSpec theSort, RequestDetails theRequestDetails) {
+		throw new NotImplementedOperationException("$document not implemented in DSTU2");
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoMessageHeaderDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoMessageHeaderDstu2.java
new file mode 100644
index 00000000000..19c1c627d0e
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoMessageHeaderDstu2.java
@@ -0,0 +1,38 @@
+package ca.uhn.fhir.jpa.dao;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.model.dstu2.resource.MessageHeader;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.server.exceptions.NotImplementedOperationException;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+
+public class FhirResourceDaoMessageHeaderDstu2 extends FhirResourceDaoDstu2<MessageHeader> implements IFhirResourceDaoMessageHeader<MessageHeader> {
+
+	@Override
+	public IBaseBundle messageHeaderProcessMessage(RequestDetails theRequestDetails, IBaseBundle theMessage) {
+		return FhirResourceDaoMessageHeaderDstu2.throwProcessMessageNotImplemented();
+	}
+
+	public static IBaseBundle throwProcessMessageNotImplemented() {
+		throw new NotImplementedOperationException("This operation is not yet implemented on this server");
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoSearchParameterDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoSearchParameterDstu2.java
index 50bf987cbe1..7c4e8bcb7bf 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoSearchParameterDstu2.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoSearchParameterDstu2.java
@@ -29,14 +29,8 @@ import ca.uhn.fhir.model.dstu2.resource.SearchParameter;
 import ca.uhn.fhir.model.dstu2.valueset.ResourceTypeEnum;
 import ca.uhn.fhir.model.dstu2.valueset.SearchParamTypeEnum;
 import ca.uhn.fhir.model.primitive.BoundCodeDt;
-import ca.uhn.fhir.model.primitive.CodeDt;
-import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -83,7 +77,7 @@ public class FhirResourceDaoSearchParameterDstu2 extends FhirResourceDaoDstu2<Se
 		FhirContext context = getContext();
 		SearchParamTypeEnum type = theResource.getTypeElement().getValueAsEnum();
 
-		FhirResourceDaoSearchParameterR4.validateSearchParam(type, status, base, expression, context);
+		FhirResourceDaoSearchParameterR4.validateSearchParam(type, status, base, expression, context, getConfig());
 	}
 
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoValueSetDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoValueSetDstu2.java
index fb97650f2f6..b3a87e35165 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoValueSetDstu2.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/FhirResourceDaoValueSetDstu2.java
@@ -28,6 +28,7 @@ import java.util.*;
 import javax.annotation.PostConstruct;
 
 import org.apache.commons.codec.binary.StringUtils;
+import org.hl7.fhir.instance.hapi.validation.CachingValidationSupport;
 import org.hl7.fhir.instance.hapi.validation.DefaultProfileValidationSupport;
 import org.hl7.fhir.instance.hapi.validation.ValidationSupportChain;
 import org.hl7.fhir.instance.model.api.IIdType;
@@ -62,7 +63,7 @@ public class FhirResourceDaoValueSetDstu2 extends FhirResourceDaoDstu2<ValueSet>
 	@Qualifier("myFhirContextDstu2Hl7Org")
 	private FhirContext myRiCtx;
 
-	private ValidationSupportChain myValidationSupport;
+	private CachingValidationSupport myValidationSupport;
 
 	private void addCompose(String theFilter, ValueSet theValueSetToPopulate, ValueSet theSourceValueSet, CodeSystemConcept theConcept) {
 		if (isBlank(theFilter)) {
@@ -252,7 +253,7 @@ public class FhirResourceDaoValueSetDstu2 extends FhirResourceDaoDstu2<ValueSet>
 	public void postConstruct() {
 		super.postConstruct();
 		myDefaultProfileValidationSupport = new DefaultProfileValidationSupport();
-		myValidationSupport = new ValidationSupportChain(myDefaultProfileValidationSupport, myJpaValidationSupport);
+		myValidationSupport = new CachingValidationSupport(new ValidationSupportChain(myDefaultProfileValidationSupport, myJpaValidationSupport));
 	}
 
 	@Override
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IDao.java
index 1a389835ef1..fd47335fb25 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IDao.java
@@ -9,7 +9,7 @@ import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.context.RuntimeResourceDefinition;
 import ca.uhn.fhir.context.RuntimeSearchParam;
 import ca.uhn.fhir.jpa.entity.BaseHasResource;
-import ca.uhn.fhir.jpa.entity.ResourceHistoryTable;
+import ca.uhn.fhir.jpa.entity.IBaseResourceEntity;
 import ca.uhn.fhir.jpa.entity.ResourceTable;
 import ca.uhn.fhir.jpa.entity.ResourceTag;
 import ca.uhn.fhir.jpa.search.PersistedJpaBundleProvider;
@@ -59,6 +59,6 @@ public interface IDao {
 
 	IBaseResource toResource(BaseHasResource theEntity, boolean theForHistoryOperation);
 
-	<R extends IBaseResource> R toResource(Class<R> theResourceType, BaseHasResource theEntity, ResourceHistoryTable theHistory, Collection<ResourceTag> theTagList, boolean theForHistoryOperation);
+	<R extends IBaseResource> R toResource(Class<R> theResourceType, IBaseResourceEntity theEntity, Collection<ResourceTag> theTagList, boolean theForHistoryOperation);
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IFhirResourceDaoComposition.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IFhirResourceDaoComposition.java
new file mode 100644
index 00000000000..e9e17007b23
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IFhirResourceDaoComposition.java
@@ -0,0 +1,37 @@
+package ca.uhn.fhir.jpa.dao;
+
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+
+import javax.servlet.http.HttpServletRequest;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+public interface IFhirResourceDaoComposition<T extends IBaseResource> extends IFhirResourceDao<T> {
+
+	IBundleProvider getDocumentForComposition(HttpServletRequest theServletRequest, IIdType theId, IPrimitiveType<Integer> theCount, DateRangeParam theLastUpdate, SortSpec theSort, RequestDetails theRequestDetails);
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IFhirResourceDaoMessageHeader.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IFhirResourceDaoMessageHeader.java
new file mode 100644
index 00000000000..1bbc494b96c
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/IFhirResourceDaoMessageHeader.java
@@ -0,0 +1,31 @@
+package ca.uhn.fhir.jpa.dao;
+
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+public interface IFhirResourceDaoMessageHeader<T extends IBaseResource> extends IFhirResourceDao<T> {
+
+	IBaseBundle messageHeaderProcessMessage(RequestDetails theRequestDetails, IBaseBundle theMessage);
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/ISearchBuilder.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/ISearchBuilder.java
index f78f8617f90..90d5351a161 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/ISearchBuilder.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/ISearchBuilder.java
@@ -38,8 +38,8 @@ public interface ISearchBuilder {
 	void loadResourcesByPid(Collection<Long> theIncludePids, List<IBaseResource> theResourceListToPopulate, Set<Long> theRevIncludedPids, boolean theForHistoryOperation, EntityManager theEntityManager,
 									FhirContext theContext, IDao theDao);
 
-	Set<Long> loadReverseIncludes(IDao theCallingDao, FhirContext theContext, EntityManager theEntityManager, Collection<Long> theMatches, Set<Include> theRevIncludes, boolean theReverseMode,
-											DateRangeParam theLastUpdated);
+	Set<Long> loadIncludes(IDao theCallingDao, FhirContext theContext, EntityManager theEntityManager, Collection<Long> theMatches, Set<Include> theRevIncludes, boolean theReverseMode,
+								  DateRangeParam theLastUpdated);
 
 	/**
 	 * How many results may be fetched at once
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchBuilder.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchBuilder.java
index 978826d5bf3..266f118df47 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchBuilder.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchBuilder.java
@@ -1,58 +1,5 @@
 package ca.uhn.fhir.jpa.dao;
 
-import static org.apache.commons.lang3.StringUtils.defaultString;
-import static org.apache.commons.lang3.StringUtils.isBlank;
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
-import java.math.BigDecimal;
-import java.math.MathContext;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-
-import javax.persistence.EntityManager;
-import javax.persistence.TypedQuery;
-import javax.persistence.criteria.AbstractQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaBuilder.In;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Expression;
-import javax.persistence.criteria.From;
-import javax.persistence.criteria.Join;
-import javax.persistence.criteria.JoinType;
-import javax.persistence.criteria.Order;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.persistence.criteria.Subquery;
-
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.Validate;
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.apache.commons.lang3.tuple.Pair;
-import org.hibernate.ScrollMode;
-import org.hibernate.ScrollableResults;
-import org.hibernate.query.Query;
-import org.hl7.fhir.dstu3.model.BaseResource;
-import org.hl7.fhir.instance.model.api.IAnyResource;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.instance.model.api.IIdType;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
 /*
  * #%L
  * HAPI FHIR JPA Server
@@ -72,46 +19,19 @@ import com.google.common.collect.Sets;
  * limitations under the License.
  * #L%
  */
-import ca.uhn.fhir.context.BaseRuntimeChildDefinition;
-import ca.uhn.fhir.context.BaseRuntimeDeclaredChildDefinition;
-import ca.uhn.fhir.context.BaseRuntimeElementDefinition;
-import ca.uhn.fhir.context.ConfigurationException;
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.context.RuntimeChildChoiceDefinition;
-import ca.uhn.fhir.context.RuntimeChildResourceDefinition;
-import ca.uhn.fhir.context.RuntimeResourceDefinition;
-import ca.uhn.fhir.context.RuntimeSearchParam;
+
+import ca.uhn.fhir.context.*;
 import ca.uhn.fhir.jpa.dao.data.IForcedIdDao;
-import ca.uhn.fhir.jpa.dao.data.IResourceHistoryTableDao;
 import ca.uhn.fhir.jpa.dao.data.IResourceIndexedSearchParamUriDao;
+import ca.uhn.fhir.jpa.dao.data.IResourceSearchViewDao;
 import ca.uhn.fhir.jpa.dao.data.IResourceTagDao;
-import ca.uhn.fhir.jpa.entity.BaseHasResource;
-import ca.uhn.fhir.jpa.entity.BaseResourceIndexedSearchParam;
-import ca.uhn.fhir.jpa.entity.ForcedId;
-import ca.uhn.fhir.jpa.entity.ResourceHistoryTable;
-import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamDate;
-import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamNumber;
-import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamQuantity;
-import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamString;
-import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamToken;
-import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamUri;
-import ca.uhn.fhir.jpa.entity.ResourceLink;
-import ca.uhn.fhir.jpa.entity.ResourceTable;
-import ca.uhn.fhir.jpa.entity.ResourceTag;
-import ca.uhn.fhir.jpa.entity.SearchParam;
-import ca.uhn.fhir.jpa.entity.SearchParamPresent;
-import ca.uhn.fhir.jpa.entity.TagDefinition;
-import ca.uhn.fhir.jpa.entity.TagTypeEnum;
+import ca.uhn.fhir.jpa.entity.*;
 import ca.uhn.fhir.jpa.search.JpaRuntimeSearchParam;
 import ca.uhn.fhir.jpa.term.IHapiTerminologySvc;
 import ca.uhn.fhir.jpa.term.VersionIndependentConcept;
 import ca.uhn.fhir.jpa.util.BaseIterator;
 import ca.uhn.fhir.jpa.util.ScrollableResultsIterator;
-import ca.uhn.fhir.model.api.IPrimitiveDatatype;
-import ca.uhn.fhir.model.api.IQueryParameterType;
-import ca.uhn.fhir.model.api.IResource;
-import ca.uhn.fhir.model.api.Include;
-import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
+import ca.uhn.fhir.model.api.*;
 import ca.uhn.fhir.model.base.composite.BaseCodingDt;
 import ca.uhn.fhir.model.base.composite.BaseIdentifierDt;
 import ca.uhn.fhir.model.base.composite.BaseQuantityDt;
@@ -123,25 +43,42 @@ import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
 import ca.uhn.fhir.rest.api.SortOrderEnum;
 import ca.uhn.fhir.rest.api.SortSpec;
-import ca.uhn.fhir.rest.param.CompositeParam;
-import ca.uhn.fhir.rest.param.DateParam;
-import ca.uhn.fhir.rest.param.DateRangeParam;
-import ca.uhn.fhir.rest.param.HasParam;
-import ca.uhn.fhir.rest.param.NumberParam;
-import ca.uhn.fhir.rest.param.ParamPrefixEnum;
-import ca.uhn.fhir.rest.param.QuantityParam;
-import ca.uhn.fhir.rest.param.ReferenceParam;
-import ca.uhn.fhir.rest.param.StringParam;
-import ca.uhn.fhir.rest.param.TokenParam;
-import ca.uhn.fhir.rest.param.TokenParamModifier;
-import ca.uhn.fhir.rest.param.UriParam;
-import ca.uhn.fhir.rest.param.UriParamQualifierEnum;
+import ca.uhn.fhir.rest.param.*;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.rest.server.exceptions.MethodNotAllowedException;
 import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
 import ca.uhn.fhir.util.StopWatch;
 import ca.uhn.fhir.util.UrlUtil;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.commons.lang3.Validate;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.commons.lang3.tuple.Pair;
+import org.hibernate.ScrollMode;
+import org.hibernate.ScrollableResults;
+import org.hibernate.query.Query;
+import org.hibernate.query.criteria.internal.CriteriaBuilderImpl;
+import org.hibernate.query.criteria.internal.predicate.BooleanStaticAssertionPredicate;
+import org.hl7.fhir.dstu3.model.BaseResource;
+import org.hl7.fhir.instance.model.api.IAnyResource;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IIdType;
+
+import javax.annotation.Nonnull;
+import javax.persistence.EntityManager;
+import javax.persistence.TypedQuery;
+import javax.persistence.criteria.*;
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.util.*;
+import java.util.Map.Entry;
+
+import static org.apache.commons.lang3.StringUtils.*;
 
 /**
  * The SearchBuilder is responsible for actually forming the SQL query that handles
@@ -154,6 +91,8 @@ public class SearchBuilder implements ISearchBuilder {
 	private static Long NO_MORE = -1L;
 	private static HandlerTypeEnum ourLastHandlerMechanismForUnitTest;
 	private static SearchParameterMap ourLastHandlerParamsForUnitTest;
+	private static String ourLastHandlerThreadForUnitTest;
+	private static boolean ourTrackHandlersForUnitTest;
 	private List<Long> myAlsoIncludePids;
 	private CriteriaBuilder myBuilder;
 	private BaseHapiFhirDao<?> myCallingDao;
@@ -174,9 +113,9 @@ public class SearchBuilder implements ISearchBuilder {
 	private IHapiTerminologySvc myTerminologySvc;
 	private int myFetchSize;
 
-	protected IResourceHistoryTableDao myResourceHistoryTableDao;
 	protected IResourceTagDao myResourceTagDao;
-	
+	protected IResourceSearchViewDao myResourceSearchViewDao;
+
 	/**
 	 * Constructor
 	 */
@@ -184,7 +123,7 @@ public class SearchBuilder implements ISearchBuilder {
 			IFulltextSearchSvc theFulltextSearchSvc, BaseHapiFhirDao<?> theDao,
 			IResourceIndexedSearchParamUriDao theResourceIndexedSearchParamUriDao, IForcedIdDao theForcedIdDao,
 			IHapiTerminologySvc theTerminologySvc, ISearchParamRegistry theSearchParamRegistry,
-			IResourceHistoryTableDao theResourceHistoryTableDao, IResourceTagDao theResourceTagDao) {
+			IResourceTagDao theResourceTagDao, IResourceSearchViewDao theResourceViewDao) {
 		myContext = theFhirContext;
 		myEntityManager = theEntityManager;
 		myFulltextSearchSvc = theFulltextSearchSvc;
@@ -193,8 +132,8 @@ public class SearchBuilder implements ISearchBuilder {
 		myForcedIdDao = theForcedIdDao;
 		myTerminologySvc = theTerminologySvc;
 		mySearchParamRegistry = theSearchParamRegistry;
-		myResourceHistoryTableDao = theResourceHistoryTableDao;
 		myResourceTagDao = theResourceTagDao;
+		myResourceSearchViewDao = theResourceViewDao;
 	}
 
 	private void addPredicateComposite(String theResourceName, RuntimeSearchParam theParamDef, List<? extends IQueryParameterType> theNextAnd) {
@@ -330,7 +269,7 @@ public class SearchBuilder implements ISearchBuilder {
 			return;
 		}
 
-		List<Predicate> codePredicates = new ArrayList<Predicate>();
+		List<Predicate> codePredicates = new ArrayList<>();
 		for (IQueryParameterType nextOr : theList) {
 			IQueryParameterType params = nextOr;
 
@@ -346,8 +285,9 @@ public class SearchBuilder implements ISearchBuilder {
 				ParamPrefixEnum prefix = ObjectUtils.defaultIfNull(param.getPrefix(), ParamPrefixEnum.EQUAL);
 				String invalidMessageName = "invalidNumberPrefix";
 
-				Predicate num = createPredicateNumeric(theResourceName, theParamName, join, myBuilder, params, prefix, value, fromObj, invalidMessageName);
-				codePredicates.add(num);
+				Predicate predicateNumeric = createPredicateNumeric(theResourceName, theParamName, join, myBuilder, params, prefix, value, fromObj, invalidMessageName);
+				Predicate predicateOuter = combineParamIndexPredicateWithParamNamePredicate(theResourceName, theParamName, join, predicateNumeric );
+				codePredicates.add(predicateOuter);
 
 			} else {
 				throw new IllegalArgumentException("Invalid token type: " + params.getClass());
@@ -360,11 +300,10 @@ public class SearchBuilder implements ISearchBuilder {
 
 	private void addPredicateParamMissing(String theResourceName, String theParamName, boolean theMissing) {
 		Join<ResourceTable, SearchParamPresent> paramPresentJoin = myResourceTableRoot.join("mySearchParamPresents", JoinType.LEFT);
-		Join<SearchParamPresent, SearchParam> paramJoin = paramPresentJoin.join("mySearchParam", JoinType.LEFT);
 
-		myPredicates.add(myBuilder.equal(paramJoin.get("myResourceName"), theResourceName));
-		myPredicates.add(myBuilder.equal(paramJoin.get("myParamName"), theParamName));
-		myPredicates.add(myBuilder.equal(paramPresentJoin.get("myPresent"), !theMissing));
+		Expression<Long> hashPresence = paramPresentJoin.get("myHashPresence").as(Long.class);
+		Long hash = SearchParamPresent.calculateHashPresence(theResourceName, theParamName, !theMissing);
+		myPredicates.add(myBuilder.equal(hashPresence, hash));
 	}
 
 	private void addPredicateParamMissing(String theResourceName, String theParamName, boolean theMissing, Join<ResourceTable, ? extends BaseResourceIndexedSearchParam> theJoin) {
@@ -382,7 +321,7 @@ public class SearchBuilder implements ISearchBuilder {
 			return;
 		}
 
-		List<Predicate> codePredicates = new ArrayList<Predicate>();
+		List<Predicate> codePredicates = new ArrayList<>();
 		for (IQueryParameterType nextOr : theList) {
 
 			Predicate singleCode = createPredicateQuantity(nextOr, theResourceName, theParamName, myBuilder, join);
@@ -405,7 +344,7 @@ public class SearchBuilder implements ISearchBuilder {
 
 		Join<ResourceTable, ResourceLink> join = createOrReuseJoin(JoinEnum.REFERENCE, theParamName);
 
-		List<Predicate> codePredicates = new ArrayList<Predicate>();
+		List<Predicate> codePredicates = new ArrayList<>();
 
 		for (IQueryParameterType nextOr : theList) {
 
@@ -502,7 +441,7 @@ public class SearchBuilder implements ISearchBuilder {
 
 					} else {
 						RuntimeResourceDefinition resDef = myContext.getResourceDefinition(ref.getResourceType());
-						resourceTypes = new ArrayList<Class<? extends IBaseResource>>(1);
+						resourceTypes = new ArrayList<>(1);
 						resourceTypes.add(resDef.getImplementingClass());
 						resourceId = ref.getIdPart();
 					}
@@ -547,7 +486,7 @@ public class SearchBuilder implements ISearchBuilder {
 						IQueryParameterType chainValue;
 						if (remainingChain != null) {
 							if (param == null || param.getParamType() != RestSearchParameterTypeEnum.REFERENCE) {
-								ourLog.debug("Type {} parameter {} is not a reference, can not chain {}", new Object[] {nextType.getSimpleName(), chain, remainingChain});
+								ourLog.debug("Type {} parameter {} is not a reference, can not chain {}", nextType.getSimpleName(), chain, remainingChain);
 								continue;
 							}
 
@@ -568,7 +507,7 @@ public class SearchBuilder implements ISearchBuilder {
 						Root<ResourceTable> subQfrom = subQ.from(ResourceTable.class);
 						subQ.select(subQfrom.get("myId").as(Long.class));
 
-						List<List<? extends IQueryParameterType>> andOrParams = new ArrayList<List<? extends IQueryParameterType>>();
+						List<List<? extends IQueryParameterType>> andOrParams = new ArrayList<>();
 						andOrParams.add(Collections.singletonList(chainValue));
 
 						/*
@@ -619,7 +558,7 @@ public class SearchBuilder implements ISearchBuilder {
 
 	private void addPredicateResourceId(List<List<? extends IQueryParameterType>> theValues) {
 		for (List<? extends IQueryParameterType> nextValue : theValues) {
-			Set<Long> orPids = new HashSet<Long>();
+			Set<Long> orPids = new HashSet<>();
 			for (IQueryParameterType next : nextValue) {
 				String value = next.getValueAsQueryToken(myContext);
 				if (value != null && value.startsWith("|")) {
@@ -667,10 +606,9 @@ public class SearchBuilder implements ISearchBuilder {
 			return;
 		}
 
-		List<Predicate> codePredicates = new ArrayList<Predicate>();
+		List<Predicate> codePredicates = new ArrayList<>();
 		for (IQueryParameterType nextOr : theList) {
-			IQueryParameterType theParameter = nextOr;
-			Predicate singleCode = createPredicateString(theParameter, theResourceName, theParamName, myBuilder, join);
+			Predicate singleCode = createPredicateString(nextOr, theResourceName, theParamName, myBuilder, join);
 			codePredicates.add(singleCode);
 		}
 
@@ -815,7 +753,7 @@ public class SearchBuilder implements ISearchBuilder {
 			return;
 		}
 
-		List<Predicate> codePredicates = new ArrayList<Predicate>();
+		List<Predicate> codePredicates = new ArrayList<>();
 		for (IQueryParameterType nextOr : theList) {
 
 			if (nextOr instanceof TokenParam) {
@@ -858,7 +796,6 @@ public class SearchBuilder implements ISearchBuilder {
 					continue;
 				}
 
-				Predicate predicate;
 				if (param.getQualifier() == UriParamQualifierEnum.ABOVE) {
 
 					/*
@@ -887,14 +824,24 @@ public class SearchBuilder implements ISearchBuilder {
 						continue;
 					}
 
-					predicate = join.get("myUri").as(String.class).in(toFind);
+					Predicate uriPredicate = join.get("myUri").as(String.class).in(toFind);
+					Predicate hashAndUriPredicate = combineParamIndexPredicateWithParamNamePredicate(theResourceName, theParamName, join, uriPredicate);
+					codePredicates.add(hashAndUriPredicate);
 
 				} else if (param.getQualifier() == UriParamQualifierEnum.BELOW) {
-					predicate = myBuilder.like(join.get("myUri").as(String.class), createLeftMatchLikeExpression(value));
+
+					Predicate uriPredicate = myBuilder.like(join.get("myUri").as(String.class), createLeftMatchLikeExpression(value));
+					Predicate hashAndUriPredicate = combineParamIndexPredicateWithParamNamePredicate(theResourceName, theParamName, join, uriPredicate);
+					codePredicates.add(hashAndUriPredicate);
+
 				} else {
-					predicate = myBuilder.equal(join.get("myUri").as(String.class), value);
+
+					long hashUri = ResourceIndexedSearchParamUri.calculateHashUri(theResourceName, theParamName, value);
+					Predicate hashPredicate = myBuilder.equal(join.get("myHashUri"), hashUri);
+					codePredicates.add(hashPredicate);
+
 				}
-				codePredicates.add(predicate);
+
 			} else {
 				throw new IllegalArgumentException("Invalid URI type: " + nextOr.getClass());
 			}
@@ -912,16 +859,13 @@ public class SearchBuilder implements ISearchBuilder {
 		}
 
 		Predicate orPredicate = myBuilder.or(toArray(codePredicates));
-
-		Predicate outerPredicate = combineParamIndexPredicateWithParamNamePredicate(theResourceName, theParamName, join, orPredicate);
-		myPredicates.add(outerPredicate);
+		myPredicates.add(orPredicate);
 	}
 
 	private Predicate combineParamIndexPredicateWithParamNamePredicate(String theResourceName, String theParamName, From<?, ? extends BaseResourceIndexedSearchParam> theFrom, Predicate thePredicate) {
-		Predicate resourceTypePredicate = myBuilder.equal(theFrom.get("myResourceType"), theResourceName);
-		Predicate paramNamePredicate = myBuilder.equal(theFrom.get("myParamName"), theParamName);
-		Predicate outerPredicate = myBuilder.and(resourceTypePredicate, paramNamePredicate, thePredicate);
-		return outerPredicate;
+		long hashIdentity = BaseResourceIndexedSearchParam.calculateHashIdentity(theResourceName, theParamName);
+		Predicate hashIdentityPredicate = myBuilder.equal(theFrom.get("myHashIdentity"), hashIdentity);
+		return myBuilder.and(hashIdentityPredicate, thePredicate);
 	}
 
 	private Predicate createCompositeParamPart(String theResourceName, Root<ResourceTable> theRoot, RuntimeSearchParam theParam, IQueryParameterType leftValue) {
@@ -1101,7 +1045,7 @@ public class SearchBuilder implements ISearchBuilder {
 		if (theParamName == null) {
 			return num;
 		}
-		return combineParamIndexPredicateWithParamNamePredicate(theResourceName, theParamName, theFrom, num);
+		return num;
 	}
 
 	private Predicate createPredicateQuantity(IQueryParameterType theParam, String theResourceName, String theParamName, CriteriaBuilder theBuilder,
@@ -1127,39 +1071,31 @@ public class SearchBuilder implements ISearchBuilder {
 			throw new IllegalArgumentException("Invalid quantity type: " + theParam.getClass());
 		}
 
-		Predicate system = null;
-		if (!isBlank(systemValue)) {
-			system = theBuilder.equal(theFrom.get("mySystem"), systemValue);
-		}
-
-		Predicate code = null;
-		if (!isBlank(unitsValue)) {
-			code = theBuilder.equal(theFrom.get("myUnits"), unitsValue);
+		Predicate hashPredicate;
+		if (!isBlank(systemValue) && !isBlank(unitsValue)) {
+			long hash = ResourceIndexedSearchParamQuantity.calculateHashSystemAndUnits(theResourceName, theParamName, systemValue, unitsValue);
+			hashPredicate = myBuilder.equal(theFrom.get("myHashIdentitySystemAndUnits"), hash);
+		} else if (!isBlank(unitsValue)) {
+			long hash = ResourceIndexedSearchParamQuantity.calculateHashUnits(theResourceName, theParamName, unitsValue);
+			hashPredicate = myBuilder.equal(theFrom.get("myHashIdentityAndUnits"), hash);
+		} else {
+			long hash = BaseResourceIndexedSearchParam.calculateHashIdentity(theResourceName, theParamName);
+			hashPredicate = myBuilder.equal(theFrom.get("myHashIdentity"), hash);
 		}
 
 		cmpValue = ObjectUtils.defaultIfNull(cmpValue, ParamPrefixEnum.EQUAL);
 		final Expression<BigDecimal> path = theFrom.get("myValue");
 		String invalidMessageName = "invalidQuantityPrefix";
 
-		Predicate num = createPredicateNumeric(theResourceName, null, theFrom, theBuilder, theParam, cmpValue, valueValue, path, invalidMessageName);
+		Predicate numericPredicate = createPredicateNumeric(theResourceName, null, theFrom, theBuilder, theParam, cmpValue, valueValue, path, invalidMessageName);
 
-		Predicate singleCode;
-		if (system == null && code == null) {
-			singleCode = num;
-		} else if (system == null) {
-			singleCode = theBuilder.and(code, num);
-		} else if (code == null) {
-			singleCode = theBuilder.and(system, num);
-		} else {
-			singleCode = theBuilder.and(system, code, num);
-		}
-
-		return combineParamIndexPredicateWithParamNamePredicate(theResourceName, theParamName, theFrom, singleCode);
+		return theBuilder.and(hashPredicate, numericPredicate);
 	}
 
 	private Predicate createPredicateString(IQueryParameterType theParameter, String theResourceName, String theParamName, CriteriaBuilder theBuilder,
 														 From<?, ResourceIndexedSearchParamString> theFrom) {
 		String rawSearchTerm;
+		DaoConfig daoConfig = myCallingDao.getConfig();
 		if (theParameter instanceof TokenParam) {
 			TokenParam id = (TokenParam) theParameter;
 			if (!id.isText()) {
@@ -1170,7 +1106,7 @@ public class SearchBuilder implements ISearchBuilder {
 			StringParam id = (StringParam) theParameter;
 			rawSearchTerm = id.getValue();
 			if (id.isContains()) {
-				if (!myCallingDao.getConfig().isAllowContainsSearches()) {
+				if (!daoConfig.isAllowContainsSearches()) {
 					throw new MethodNotAllowedException(":contains modifier is disabled on this server");
 				}
 			}
@@ -1186,22 +1122,34 @@ public class SearchBuilder implements ISearchBuilder {
 				+ ResourceIndexedSearchParamString.MAX_LENGTH + "): " + rawSearchTerm);
 		}
 
-		String likeExpression = BaseHapiFhirDao.normalizeString(rawSearchTerm);
-		if (theParameter instanceof StringParam &&
-			((StringParam) theParameter).isContains() &&
-			myCallingDao.getConfig().isAllowContainsSearches()) {
-			likeExpression = createLeftAndRightMatchLikeExpression(likeExpression);
+		boolean exactMatch = theParameter instanceof StringParam && ((StringParam) theParameter).isExact();
+		if (exactMatch) {
+
+			// Exact match
+
+			Long hash = ResourceIndexedSearchParamString.calculateHashExact(theResourceName, theParamName, rawSearchTerm);
+			return theBuilder.equal(theFrom.get("myHashExact").as(Long.class), hash);
+
 		} else {
-			likeExpression = createLeftMatchLikeExpression(likeExpression);
-		}
 
-		Predicate singleCode = theBuilder.like(theFrom.get("myValueNormalized").as(String.class), likeExpression);
-		if (theParameter instanceof StringParam && ((StringParam) theParameter).isExact()) {
-			Predicate exactCode = theBuilder.equal(theFrom.get("myValueExact"), rawSearchTerm);
-			singleCode = theBuilder.and(singleCode, exactCode);
-		}
+			// Normalized Match
 
-		return combineParamIndexPredicateWithParamNamePredicate(theResourceName, theParamName, theFrom, singleCode);
+			String normalizedString = BaseHapiFhirDao.normalizeString(rawSearchTerm);
+			String likeExpression;
+			if (theParameter instanceof StringParam &&
+				((StringParam) theParameter).isContains() &&
+				daoConfig.isAllowContainsSearches()) {
+				likeExpression = createLeftAndRightMatchLikeExpression(normalizedString);
+			} else {
+				likeExpression = createLeftMatchLikeExpression(normalizedString);
+			}
+
+			Long hash = ResourceIndexedSearchParamString.calculateHashNormalized(daoConfig, theResourceName, theParamName, normalizedString);
+			Predicate hashCode = theBuilder.equal(theFrom.get("myHashNormalizedPrefix").as(Long.class), hash);
+			Predicate singleCode = theBuilder.like(theFrom.get("myValueNormalized").as(String.class), likeExpression);
+			return theBuilder.and(hashCode, singleCode);
+
+		}
 	}
 
 	private List<Predicate> createPredicateTagList(Path<TagDefinition> theDefJoin, CriteriaBuilder theBuilder, TagTypeEnum theTagType, List<Pair<String, String>> theTokens) {
@@ -1256,7 +1204,7 @@ public class SearchBuilder implements ISearchBuilder {
 		 * Process token modifiers (:in, :below, :above)
 		 */
 
-		List<VersionIndependentConcept> codes = null;
+		List<VersionIndependentConcept> codes;
 		if (modifier == TokenParamModifier.IN) {
 			codes = myTerminologySvc.expandValueSet(code);
 		} else if (modifier == TokenParamModifier.ABOVE) {
@@ -1265,81 +1213,53 @@ public class SearchBuilder implements ISearchBuilder {
 		} else if (modifier == TokenParamModifier.BELOW) {
 			system = determineSystemIfMissing(theParamName, code, system);
 			codes = myTerminologySvc.findCodesBelow(system, code);
-		}
-
-		ArrayList<Predicate> singleCodePredicates = new ArrayList<>();
-		if (codes != null) {
-
-			if (codes.isEmpty()) {
-
-				// This will never match anything
-				Predicate codePredicate = theBuilder.isNull(theFrom.get("myMissing"));
-				singleCodePredicates.add(codePredicate);
-
-			} else {
-				List<Predicate> orPredicates = new ArrayList<Predicate>();
-				Map<String, List<VersionIndependentConcept>> map = new HashMap<String, List<VersionIndependentConcept>>();
-				for (VersionIndependentConcept nextCode : codes) {
-					List<VersionIndependentConcept> systemCodes = map.get(nextCode.getSystem());
-					if (null == systemCodes) {
-						systemCodes = new ArrayList<>();
-						map.put(nextCode.getSystem(), systemCodes);
-					}
-					systemCodes.add(nextCode);
-				}
-				// Use "in" in case of large numbers of codes due to param modifiers
-				final Path<String> systemExpression = theFrom.get("mySystem");
-				final Path<String> valueExpression = theFrom.get("myValue");
-				for (Map.Entry<String, List<VersionIndependentConcept>> entry : map.entrySet()) {
-					Predicate systemPredicate = theBuilder.equal(systemExpression, entry.getKey());
-					In<String> codePredicate = theBuilder.in(valueExpression);
-					for (VersionIndependentConcept nextCode : entry.getValue()) {
-						codePredicate.value(nextCode.getCode());
-					}
-					orPredicates.add(theBuilder.and(systemPredicate, codePredicate));
-				}
-
-				singleCodePredicates.add(theBuilder.or(orPredicates.toArray(new Predicate[orPredicates.size()])));
-			}
-
 		} else {
+			codes = Collections.singletonList(new VersionIndependentConcept(system, code));
+		}
 
-			/*
-			 * Ok, this is a normal query
-			 */
+		if (codes.isEmpty()) {
+			// This will never match anything
+			return new BooleanStaticAssertionPredicate((CriteriaBuilderImpl) theBuilder, false);
+		}
 
-			if (StringUtils.isNotBlank(system)) {
-				if (modifier != null && modifier == TokenParamModifier.NOT) {
-					singleCodePredicates.add(theBuilder.notEqual(theFrom.get("mySystem"), system));
-				} else {
-					singleCodePredicates.add(theBuilder.equal(theFrom.get("mySystem"), system));
-				}
-			} else if (system == null) {
-				// don't check the system
+		/*
+		 * Note: A null system value means "match any system", but
+		 * an empty-string system value means "match values that
+		 * explicitly have no system".
+		 */
+		boolean haveSystem = codes.get(0).getSystem() != null;
+		boolean haveCode = isNotBlank(codes.get(0).getCode());
+		Expression<Long> hashField;
+		if (!haveSystem && !haveCode) {
+			// If we have neither, this isn't actually an expression so
+			// just return 1=1
+			return new BooleanStaticAssertionPredicate((CriteriaBuilderImpl) theBuilder, true);
+		} else if (haveSystem && haveCode) {
+			hashField = theFrom.get("myHashSystemAndValue").as(Long.class);
+		} else if (haveSystem) {
+			hashField = theFrom.get("myHashSystem").as(Long.class);
+		} else {
+			hashField = theFrom.get("myHashValue").as(Long.class);
+		}
+
+		List<Long> values = new ArrayList<>(codes.size());
+		for (VersionIndependentConcept next : codes) {
+			if (haveSystem && haveCode) {
+				values.add(ResourceIndexedSearchParamToken.calculateHashSystemAndValue(theResourceName, theParamName, next.getSystem(), next.getCode()));
+			} else if (haveSystem) {
+				values.add(ResourceIndexedSearchParamToken.calculateHashSystem(theResourceName, theParamName, next.getSystem()));
 			} else {
-				// If the system is "", we only match on null systems
-				singleCodePredicates.add(theBuilder.isNull(theFrom.get("mySystem")));
-			}
-
-			if (StringUtils.isNotBlank(code)) {
-				if (modifier != null && modifier == TokenParamModifier.NOT) {
-					singleCodePredicates.add(theBuilder.notEqual(theFrom.get("myValue"), code));
-				} else {
-					singleCodePredicates.add(theBuilder.equal(theFrom.get("myValue"), code));
-				}
-			} else {
-				/*
-				 * As of HAPI FHIR 1.5, if the client searched for a token with a system but no specified value this means to
-				 * match all tokens with the given value.
-				 *
-				 * I'm not sure I agree with this, but hey.. FHIR-I voted and this was the result :)
-				 */
-				// singleCodePredicates.add(theBuilder.isNull(theFrom.get("myValue")));
+				values.add(ResourceIndexedSearchParamToken.calculateHashValue(theResourceName, theParamName, next.getCode()));
 			}
 		}
 
-		Predicate singleCode = theBuilder.and(toArray(singleCodePredicates));
-		return combineParamIndexPredicateWithParamNamePredicate(theResourceName, theParamName, theFrom, singleCode);
+		Predicate predicate = hashField.in(values);
+		if (modifier == TokenParamModifier.NOT) {
+			Predicate identityPredicate = theBuilder.equal(theFrom.get("myHashIdentity").as(Long.class), BaseResourceIndexedSearchParam.calculateHashIdentity(theResourceName, theParamName));
+			Predicate disjunctionPredicate = theBuilder.not(predicate);
+			predicate = theBuilder.and(identityPredicate, disjunctionPredicate);
+		}
+		return predicate;
 	}
 
 	@Override
@@ -1378,8 +1298,11 @@ public class SearchBuilder implements ISearchBuilder {
 									}
 
 									Set<String> uniqueQueryStrings = BaseHapiFhirDao.extractCompositeStringUniquesValueChains(myResourceName, params);
-									ourLastHandlerParamsForUnitTest = theParams;
-									ourLastHandlerMechanismForUnitTest = HandlerTypeEnum.UNIQUE_INDEX;
+									if (ourTrackHandlersForUnitTest) {
+										ourLastHandlerParamsForUnitTest = theParams;
+										ourLastHandlerMechanismForUnitTest = HandlerTypeEnum.UNIQUE_INDEX;
+										ourLastHandlerThreadForUnitTest = Thread.currentThread().getName();
+									}
 									return new UniqueIndexIterator(uniqueQueryStrings);
 
 								}
@@ -1390,8 +1313,11 @@ public class SearchBuilder implements ISearchBuilder {
 			}
 		}
 
-		ourLastHandlerParamsForUnitTest = theParams;
-		ourLastHandlerMechanismForUnitTest = HandlerTypeEnum.STANDARD_QUERY;
+		if (ourTrackHandlersForUnitTest) {
+			ourLastHandlerParamsForUnitTest = theParams;
+			ourLastHandlerMechanismForUnitTest = HandlerTypeEnum.STANDARD_QUERY;
+			ourLastHandlerThreadForUnitTest = Thread.currentThread().getName();
+		}
 		return new QueryIterator();
 	}
 
@@ -1444,8 +1370,8 @@ public class SearchBuilder implements ISearchBuilder {
 		if (myParams.getEverythingMode() != null) {
 			Join<ResourceTable, ResourceLink> join = myResourceTableRoot.join("myResourceLinks", JoinType.LEFT);
 
-			if (myParams.get(BaseResource.SP_RES_ID) != null) {
-				StringParam idParm = (StringParam) myParams.get(BaseResource.SP_RES_ID).get(0).get(0);
+			if (myParams.get(IAnyResource.SP_RES_ID) != null) {
+				StringParam idParm = (StringParam) myParams.get(IAnyResource.SP_RES_ID).get(0).get(0);
 				Long pid = BaseHapiFhirDao.translateForcedIdToPid(myResourceName, idParm.getValue(), myForcedIdDao);
 				if (myAlsoIncludePids == null) {
 					myAlsoIncludePids = new ArrayList<>(1);
@@ -1535,7 +1461,7 @@ public class SearchBuilder implements ISearchBuilder {
 			return false;
 		}
 
-		if (BaseResource.SP_RES_ID.equals(theSort.getParamName())) {
+		if (IAnyResource.SP_RES_ID.equals(theSort.getParamName())) {
 			From<?, ?> forcedIdJoin = theFrom.join("myForcedId", JoinType.LEFT);
 			if (theSort.getOrder() == null || theSort.getOrder() == SortOrderEnum.ASC) {
 				theOrders.add(theBuilder.asc(forcedIdJoin.get("myForcedId")));
@@ -1675,52 +1601,39 @@ public class SearchBuilder implements ISearchBuilder {
 
 	private void doLoadPids(List<IBaseResource> theResourceListToPopulate, Set<Long> theRevIncludedPids, boolean theForHistoryOperation, EntityManager entityManager, FhirContext context, IDao theDao,
 									Map<Long, Integer> position, Collection<Long> pids) {
-		CriteriaBuilder builder = entityManager.getCriteriaBuilder();
-		CriteriaQuery<ResourceTable> cq = builder.createQuery(ResourceTable.class);
-		Root<ResourceTable> from = cq.from(ResourceTable.class);
-		cq.where(from.get("myId").in(pids));
-		TypedQuery<ResourceTable> q = entityManager.createQuery(cq);
 
-		List<ResourceTable> resultList = q.getResultList();
+		// -- get the resource from the searchView
+		Collection<ResourceSearchView> resourceSearchViewList = myResourceSearchViewDao.findByResourceIds(pids);
 
-		//-- Issue #963: Load resource histories based on pids once to improve the performance
-		Map<Long, ResourceHistoryTable> historyMap = getResourceHistoryMap(pids);
-		
 		//-- preload all tags with tag definition if any
-		Map<Long, Collection<ResourceTag>> tagMap = getResourceTagMap(resultList);
-		
-		//-- pre-load all forcedId
-		Map<Long, ForcedId> forcedIdMap = getForcedIdMap(pids);
-				
-		ForcedId forcedId = null;
+		Map<Long, Collection<ResourceTag>> tagMap = getResourceTagMap(resourceSearchViewList);
+
 		Long resourceId = null;
-		for (ResourceTable next : resultList) {
+		for (ResourceSearchView next : resourceSearchViewList) {
+
 			Class<? extends IBaseResource> resourceType = context.getResourceDefinition(next.getResourceType()).getImplementingClass();
-			
+
 			resourceId = next.getId();
-			forcedId = forcedIdMap.get(resourceId);
-			if (forcedId != null)
-				next.setForcedId(forcedId);
-			
-			IBaseResource resource = theDao.toResource(resourceType, next, historyMap.get(next.getId()), tagMap.get(next.getId()), theForHistoryOperation);
+
+			IBaseResource resource = theDao.toResource(resourceType, next, tagMap.get(resourceId), theForHistoryOperation);
 			if (resource == null) {
 				ourLog.warn("Unable to find resource {}/{}/_history/{} in database", next.getResourceType(), next.getIdDt().getIdPart(), next.getVersion());
 				continue;
 			}
-			Integer index = position.get(next.getId());
+			Integer index = position.get(resourceId);
 			if (index == null) {
-				ourLog.warn("Got back unexpected resource PID {}", next.getId());
+				ourLog.warn("Got back unexpected resource PID {}", resourceId);
 				continue;
 			}
 
 			if (resource instanceof IResource) {
-				if (theRevIncludedPids.contains(next.getId())) {
+				if (theRevIncludedPids.contains(resourceId)) {
 					ResourceMetadataKeyEnum.ENTRY_SEARCH_MODE.put((IResource) resource, BundleEntrySearchModeEnum.INCLUDE);
 				} else {
 					ResourceMetadataKeyEnum.ENTRY_SEARCH_MODE.put((IResource) resource, BundleEntrySearchModeEnum.MATCH);
 				}
 			} else {
-				if (theRevIncludedPids.contains(next.getId())) {
+				if (theRevIncludedPids.contains(resourceId)) {
 					ResourceMetadataKeyEnum.ENTRY_SEARCH_MODE.put((IAnyResource) resource, BundleEntrySearchModeEnum.INCLUDE.getCode());
 				} else {
 					ResourceMetadataKeyEnum.ENTRY_SEARCH_MODE.put((IAnyResource) resource, BundleEntrySearchModeEnum.MATCH.getCode());
@@ -1731,52 +1644,34 @@ public class SearchBuilder implements ISearchBuilder {
 		}
 	}
 
-	//-- load all history in to the map
-	private Map<Long, ResourceHistoryTable> getResourceHistoryMap(Collection<Long> pids) {
+	private Map<Long, Collection<ResourceTag>> getResourceTagMap(Collection<ResourceSearchView> theResourceSearchViewList) {
 
-		Map<Long, ResourceHistoryTable> historyMap = new HashMap<Long, ResourceHistoryTable>();
+		List<Long> idList = new ArrayList<Long>(theResourceSearchViewList.size());
 
-		if (pids.size() == 0)
-			return historyMap;
-
-		Collection<ResourceHistoryTable> historyList = myResourceHistoryTableDao.findByResourceIds(pids);
-
-		for (ResourceHistoryTable history : historyList) {
-
-			historyMap.put(history.getResourceId(), history);
-		}
-
-		return historyMap;
-	}
-	
-	private Map<Long, Collection<ResourceTag>> getResourceTagMap(List<ResourceTable> resourceList) {		
-		
-		List<Long> idList = new ArrayList<Long>(resourceList.size());
-		
 		//-- find all resource has tags
-		for (ResourceTable resource: resourceList) {			
+		for (ResourceSearchView resource: theResourceSearchViewList) {
 			if (resource.isHasTags())
 				idList.add(resource.getId());
 		}
-		
-		Map<Long, Collection<ResourceTag>> tagMap = new HashMap<Long, Collection<ResourceTag>>();
-		
+
+		Map<Long, Collection<ResourceTag>> tagMap = new HashMap<>();
+
 		//-- no tags
 		if (idList.size() == 0)
 			return tagMap;
-		
+
 		//-- get all tags for the idList
 		Collection<ResourceTag> tagList = myResourceTagDao.findByResourceIds(idList);
-	
+
 		//-- build the map, key = resourceId, value = list of ResourceTag
 		Long resourceId;
 		Collection<ResourceTag> tagCol;
 		for (ResourceTag tag : tagList) {
-			
+
 			resourceId = tag.getResourceId();
 			tagCol = tagMap.get(resourceId);
 			if (tagCol == null) {
-				tagCol = new ArrayList<ResourceTag>();
+				tagCol = new ArrayList<>();
 				tagCol.add(tag);
 				tagMap.put(resourceId, tagCol);
 			} else {
@@ -1784,26 +1679,9 @@ public class SearchBuilder implements ISearchBuilder {
 			}
 		}
 
-		return tagMap;		
+		return tagMap;
 	}
 
-	//-- load all forcedId in to the map
-	private Map<Long, ForcedId> getForcedIdMap(Collection<Long> pids) {
-
-		Map<Long, ForcedId> forceIdMap = new HashMap<Long, ForcedId>();
-
-		if (pids.size() == 0)
-			return forceIdMap;
-
-		Collection<ForcedId> forceIdList = myForcedIdDao.findByResourcePids(pids);
-
-		for (ForcedId forcedId : forceIdList) {
-
-			forceIdMap.put(forcedId.getResourcePid(), forcedId);
-		}
-
-		return forceIdMap;
-	}
 	@Override
 	public void loadResourcesByPid(Collection<Long> theIncludePids, List<IBaseResource> theResourceListToPopulate, Set<Long> theRevIncludedPids, boolean theForHistoryOperation,
 											 EntityManager entityManager, FhirContext context, IDao theDao) {
@@ -1840,18 +1718,16 @@ public class SearchBuilder implements ISearchBuilder {
 	}
 
 	/**
-	 * THIS SHOULD RETURN HASHSET and not jsut Set because we add to it later (so it can't be Collections.emptySet())
-	 *
-	 * @param theLastUpdated
+	 * THIS SHOULD RETURN HASHSET and not just Set because we add to it later (so it can't be Collections.emptySet())
 	 */
 	@Override
-	public HashSet<Long> loadReverseIncludes(IDao theCallingDao, FhirContext theContext, EntityManager theEntityManager, Collection<Long> theMatches, Set<Include> theRevIncludes,
-														  boolean theReverseMode, DateRangeParam theLastUpdated) {
+	public HashSet<Long> loadIncludes(IDao theCallingDao, FhirContext theContext, EntityManager theEntityManager, Collection<Long> theMatches, Set<Include> theRevIncludes,
+												 boolean theReverseMode, DateRangeParam theLastUpdated) {
 		if (theMatches.size() == 0) {
-			return new HashSet<Long>();
+			return new HashSet<>();
 		}
 		if (theRevIncludes == null || theRevIncludes.isEmpty()) {
-			return new HashSet<Long>();
+			return new HashSet<>();
 		}
 		String searchFieldName = theReverseMode ? "myTargetResourcePid" : "mySourceResourcePid";
 
@@ -1878,7 +1754,7 @@ public class SearchBuilder implements ISearchBuilder {
 				boolean matchAll = "*".equals(nextInclude.getValue());
 				if (matchAll) {
 					String sql;
-					sql = "SELECT r FROM ResourceLink r WHERE r." + searchFieldName + " IN (:target_pids)";
+					sql = "SELECT r FROM ResourceLink r WHERE r." + searchFieldName + " IN (:target_pids) ";
 					TypedQuery<ResourceLink> q = theEntityManager.createQuery(sql, ResourceLink.class);
 					q.setParameter("target_pids", nextRoundMatches);
 					List<ResourceLink> results = q.getResultList();
@@ -1892,7 +1768,7 @@ public class SearchBuilder implements ISearchBuilder {
 				} else {
 
 					List<String> paths;
-					RuntimeSearchParam param = null;
+					RuntimeSearchParam param;
 					String resType = nextInclude.getParamType();
 					if (isBlank(resType)) {
 						continue;
@@ -1953,8 +1829,10 @@ public class SearchBuilder implements ISearchBuilder {
 				}
 			}
 
-			if (theLastUpdated != null && (theLastUpdated.getLowerBoundAsInstant() != null || theLastUpdated.getUpperBoundAsInstant() != null)) {
-				pidsToInclude = new HashSet<>(filterResourceIdsByLastUpdated(theEntityManager, theLastUpdated, pidsToInclude));
+			if (theReverseMode) {
+				if (theLastUpdated != null && (theLastUpdated.getLowerBoundAsInstant() != null || theLastUpdated.getUpperBoundAsInstant() != null)) {
+					pidsToInclude = new HashSet<>(filterResourceIdsByLastUpdated(theEntityManager, theLastUpdated, pidsToInclude));
+				}
 			}
 			for (Long next : pidsToInclude) {
 				if (original.contains(next) == false && allAdded.contains(next) == false) {
@@ -1966,19 +1844,15 @@ public class SearchBuilder implements ISearchBuilder {
 			nextRoundMatches = pidsToInclude;
 		} while (includes.size() > 0 && nextRoundMatches.size() > 0 && addedSomeThisRound);
 
-		ourLog.info("Loaded {} {} in {} rounds and {} ms", new Object[] {allAdded.size(), theReverseMode ? "_revincludes" : "_includes", roundCounts, w.getMillisAndRestart()});
+		ourLog.info("Loaded {} {} in {} rounds and {} ms", allAdded.size(), theReverseMode ? "_revincludes" : "_includes", roundCounts, w.getMillisAndRestart());
 
 		return allAdded;
 	}
 
-	private void searchForIdsWithAndOr(SearchParameterMap theParams) {
-		SearchParameterMap params = theParams;
-		if (params == null) {
-			params = new SearchParameterMap();
-		}
+	private void searchForIdsWithAndOr(@Nonnull SearchParameterMap theParams) {
 		myParams = theParams;
 
-		for (Entry<String, List<List<? extends IQueryParameterType>>> nextParamEntry : params.entrySet()) {
+		for (Entry<String, List<List<? extends IQueryParameterType>>> nextParamEntry : myParams.entrySet()) {
 			String nextParamName = nextParamEntry.getKey();
 			List<List<? extends IQueryParameterType>> andOrParams = nextParamEntry.getValue();
 			searchForIdsWithAndOr(myResourceName, nextParamName, andOrParams);
@@ -2241,14 +2115,16 @@ public class SearchBuilder implements ISearchBuilder {
 	}
 
 	@VisibleForTesting
-	public static SearchParameterMap getLastHandlerParamsForUnitTest() {
-		return ourLastHandlerParamsForUnitTest;
+	public static String getLastHandlerParamsForUnitTest() {
+		return ourLastHandlerParamsForUnitTest.toString() + " on thread [" + ourLastHandlerThreadForUnitTest +"]";
 	}
 
 	@VisibleForTesting
 	public static void resetLastHandlerMechanismForUnitTest() {
 		ourLastHandlerMechanismForUnitTest = null;
 		ourLastHandlerParamsForUnitTest = null;
+		ourLastHandlerThreadForUnitTest = null;
+		ourTrackHandlersForUnitTest = true;
 	}
 
 	static Predicate[] toArray(List<Predicate> thePredicates) {
@@ -2305,7 +2181,7 @@ public class SearchBuilder implements ISearchBuilder {
 					myCurrentOffset = end;
 					Collection<Long> pidsToScan = myCurrentPids.subList(start, end);
 					Set<Include> includes = Collections.singleton(new Include("*", true));
-					Set<Long> newPids = loadReverseIncludes(myCallingDao, myContext, myEntityManager, pidsToScan, includes, false, myParams.getLastUpdated());
+					Set<Long> newPids = loadIncludes(myCallingDao, myContext, myEntityManager, pidsToScan, includes, false, myParams.getLastUpdated());
 					myCurrentIterator = newPids.iterator();
 				}
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchParamExtractorDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchParamExtractorDstu2.java
index 5fe006ecee1..cbcc69cec68 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchParamExtractorDstu2.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchParamExtractorDstu2.java
@@ -19,33 +19,40 @@ package ca.uhn.fhir.jpa.dao;
  * limitations under the License.
  * #L%
  */
-import static org.apache.commons.lang3.StringUtils.isBlank;
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-import javax.measure.quantity.Quantity;
-import javax.measure.unit.NonSI;
-import javax.measure.unit.Unit;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.hl7.fhir.instance.model.api.IBaseResource;
 
 import ca.uhn.fhir.context.ConfigurationException;
 import ca.uhn.fhir.context.RuntimeSearchParam;
 import ca.uhn.fhir.jpa.entity.*;
-import ca.uhn.fhir.model.api.*;
+import ca.uhn.fhir.model.api.IDatatype;
+import ca.uhn.fhir.model.api.IPrimitiveDatatype;
+import ca.uhn.fhir.model.api.IValueSetEnumBinder;
 import ca.uhn.fhir.model.base.composite.BaseHumanNameDt;
 import ca.uhn.fhir.model.dstu2.composite.*;
-import ca.uhn.fhir.model.dstu2.composite.BoundCodeableConceptDt;
-import ca.uhn.fhir.model.dstu2.resource.*;
 import ca.uhn.fhir.model.dstu2.resource.Conformance.RestSecurity;
+import ca.uhn.fhir.model.dstu2.resource.Location;
+import ca.uhn.fhir.model.dstu2.resource.Patient;
 import ca.uhn.fhir.model.dstu2.resource.Patient.Communication;
+import ca.uhn.fhir.model.dstu2.resource.Questionnaire;
+import ca.uhn.fhir.model.dstu2.resource.ValueSet;
 import ca.uhn.fhir.model.dstu2.valueset.RestfulSecurityServiceEnum;
 import ca.uhn.fhir.model.primitive.*;
 import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import ca.uhn.fhir.util.FhirTerser;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.hl7.fhir.instance.model.api.IBaseDatatype;
+import org.hl7.fhir.instance.model.api.IBaseExtension;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+import javax.measure.quantity.Quantity;
+import javax.measure.unit.NonSI;
+import javax.measure.unit.Unit;
+import java.math.BigDecimal;
+import java.util.*;
+
+import static org.apache.commons.lang3.StringUtils.isBlank;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implements ISearchParamExtractor {
 
@@ -59,7 +66,7 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 			searchTerm = searchTerm.substring(0, ResourceIndexedSearchParamString.MAX_LENGTH);
 		}
 
-		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(resourceName, BaseHapiFhirDao.normalizeString(searchTerm), searchTerm);
+		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(getDaoConfig(), resourceName, BaseHapiFhirDao.normalizeString(searchTerm), searchTerm);
 		nextEntity.setResource(theEntity);
 		retVal.add(nextEntity);
 	}
@@ -68,7 +75,7 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 		if (value.length() > ResourceIndexedSearchParamString.MAX_LENGTH) {
 			value = value.substring(0, ResourceIndexedSearchParamString.MAX_LENGTH);
 		}
-		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(nextSpDef.getName(), BaseHapiFhirDao.normalizeString(value), value);
+		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(getDaoConfig(), nextSpDef.getName(), BaseHapiFhirDao.normalizeString(value), value);
 		nextEntity.setResource(theEntity);
 		retVal.add(nextEntity);
 	}
@@ -81,13 +88,13 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamDates(ca.uhn.fhir.jpa.entity.ResourceTable,
 	 * ca.uhn.fhir.model.api.IResource)
 	 */
 	@Override
 	public Set<ResourceIndexedSearchParamDate> extractSearchParamDates(ResourceTable theEntity, IBaseResource theResource) {
-		HashSet<ResourceIndexedSearchParamDate> retVal = new HashSet<ResourceIndexedSearchParamDate>();
+		HashSet<ResourceIndexedSearchParamDate> retVal = new HashSet<>();
 
 		Collection<RuntimeSearchParam> searchParams = getSearchParams(theResource);
 		for (RuntimeSearchParam nextSpDef : searchParams) {
@@ -142,7 +149,7 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamNumber(ca.uhn.fhir.jpa.entity.ResourceTable,
 	 * ca.uhn.fhir.model.api.IResource)
 	 */
@@ -196,7 +203,7 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 							 * org.unitsofmeasurement.quantity.Quantity<?>>)
 							 * UCUMFormat.getCaseInsensitiveInstance().parse(nextValue.getCode().getValue(), null); if
 							 * (unit.isCompatible(UCUM.DAY)) {
-							 * 
+							 *
 							 * @SuppressWarnings("unchecked") PhysicsUnit<org.unitsofmeasurement.quantity.Time> timeUnit =
 							 * (PhysicsUnit<Time>) unit; UnitConverter conv = timeUnit.getConverterTo(UCUM.DAY); double
 							 * dayValue = conv.convert(nextValue.getValue().getValue().doubleValue()); DurationDt newValue =
@@ -251,7 +258,7 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamQuantity(ca.uhn.fhir.jpa.entity.ResourceTable,
 	 * ca.uhn.fhir.model.api.IResource)
 	 */
@@ -305,7 +312,7 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamStrings(ca.uhn.fhir.jpa.entity.ResourceTable,
 	 * ca.uhn.fhir.model.api.IResource)
 	 */
@@ -314,7 +321,7 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 		HashSet<ResourceIndexedSearchParamString> retVal = new HashSet<ResourceIndexedSearchParamString>();
 
 		String resourceName = getContext().getResourceDefinition(theResource).getName();
-		
+
 		Collection<RuntimeSearchParam> searchParams = getSearchParams(theResource);
 		for (RuntimeSearchParam nextSpDef : searchParams) {
 			if (nextSpDef.getParamType() != RestSearchParameterTypeEnum.STRING) {
@@ -389,7 +396,7 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamTokens(ca.uhn.fhir.jpa.entity.ResourceTable,
 	 * ca.uhn.fhir.model.api.IResource)
 	 */
@@ -626,6 +633,35 @@ public class SearchParamExtractorDstu2 extends BaseSearchParamExtractor implemen
 		}
 	}
 
+	@Override
+	protected List<Object> extractValues(String thePaths, IBaseResource theResource) {
+		List<Object> values = new ArrayList<>();
+		String[] nextPathsSplit = SPLIT.split(thePaths);
+		FhirTerser t = getContext().newTerser();
+		for (String nextPath : nextPathsSplit) {
+			String nextPathTrimmed = nextPath.trim();
+			List<Object> allValues;
+			try {
+				allValues = t.getValues(theResource, nextPathTrimmed);
+			} catch (Exception e) {
+				String msg = getContext().getLocalizer().getMessage(BaseSearchParamExtractor.class, "failedToExtractPaths", nextPath, e.toString());
+				throw new InternalErrorException(msg, e);
+			}
+			for (Object next : allValues) {
+				if (next instanceof IBaseExtension) {
+					IBaseDatatype value = ((IBaseExtension) next).getValue();
+					if (value != null) {
+						values.add(value);
+					}
+				} else {
+					values.add(next);
+				}
+			}
+		}
+		return values;
+	}
+
+
 	private static <T extends Enum<?>> String extractSystem(BoundCodeDt<T> theBoundCode) {
 		if (theBoundCode.getValueAsEnum() != null) {
 			IValueSetEnumBinder<T> binder = theBoundCode.getBinder();
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchParameterMap.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchParameterMap.java
index b2342074604..0d48401393d 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchParameterMap.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/SearchParameterMap.java
@@ -1,5 +1,24 @@
 package ca.uhn.fhir.jpa.dao;
 
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.model.api.IQueryParameterAnd;
+import ca.uhn.fhir.model.api.IQueryParameterOr;
+import ca.uhn.fhir.model.api.IQueryParameterType;
+import ca.uhn.fhir.model.api.Include;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.SortOrderEnum;
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.param.DateParam;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import ca.uhn.fhir.util.ObjectUtil;
+import ca.uhn.fhir.util.UrlUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.Validate;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.*;
+
 import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 /*
@@ -21,20 +40,6 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
  * limitations under the License.
  * #L%
  */
-import java.util.*;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.Validate;
-import org.apache.commons.lang3.builder.ToStringBuilder;
-import org.apache.commons.lang3.builder.ToStringStyle;
-
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.model.api.*;
-import ca.uhn.fhir.rest.api.*;
-import ca.uhn.fhir.rest.param.DateParam;
-import ca.uhn.fhir.rest.param.DateRangeParam;
-import ca.uhn.fhir.util.ObjectUtil;
-import ca.uhn.fhir.util.UrlUtil;
 
 public class SearchParameterMap extends LinkedHashMap<String, List<List<? extends IQueryParameterType>>> {
 
@@ -48,7 +53,7 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 	private Integer myLoadSynchronousUpTo;
 	private Set<Include> myRevIncludes;
 	private SortSpec mySort;
-	
+
 	/**
 	 * Constructor
 	 */
@@ -130,7 +135,7 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 
 	private void addUrlIncludeParams(StringBuilder b, String paramName, Set<Include> theList) {
 		ArrayList<Include> list = new ArrayList<Include>(theList);
-		
+
 		Collections.sort(list, new IncludeComparator());
 		for (Include nextInclude : list) {
 			addUrlParamSeparator(b);
@@ -158,10 +163,18 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 		return myCount;
 	}
 
+	public void setCount(Integer theCount) {
+		myCount = theCount;
+	}
+
 	public EverythingModeEnum getEverythingMode() {
 		return myEverythingMode;
 	}
 
+	public void setEverythingMode(EverythingModeEnum theConsolidateMatches) {
+		myEverythingMode = theConsolidateMatches;
+	}
+
 	public Set<Include> getIncludes() {
 		if (myIncludes == null) {
 			myIncludes = new HashSet<Include>();
@@ -169,6 +182,10 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 		return myIncludes;
 	}
 
+	public void setIncludes(Set<Include> theIncludes) {
+		myIncludes = theIncludes;
+	}
+
 	/**
 	 * Returns null if there is no last updated value
 	 */
@@ -181,6 +198,10 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 		return myLastUpdated;
 	}
 
+	public void setLastUpdated(DateRangeParam theLastUpdated) {
+		myLastUpdated = theLastUpdated;
+	}
+
 	/**
 	 * Returns null if there is no last updated value, and removes the lastupdated
 	 * value from this map
@@ -199,6 +220,19 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 		return myLoadSynchronousUpTo;
 	}
 
+	/**
+	 * If set, tells the server to load these results synchronously, and not to load
+	 * more than X results. Note that setting this to a value will also set
+	 * {@link #setLoadSynchronous(boolean)} to true
+	 */
+	public SearchParameterMap setLoadSynchronousUpTo(Integer theLoadSynchronousUpTo) {
+		myLoadSynchronousUpTo = theLoadSynchronousUpTo;
+		if (myLoadSynchronousUpTo != null) {
+			setLoadSynchronous(true);
+		}
+		return this;
+	}
+
 	public Set<Include> getRevIncludes() {
 		if (myRevIncludes == null) {
 			myRevIncludes = new HashSet<>();
@@ -206,10 +240,18 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 		return myRevIncludes;
 	}
 
+	public void setRevIncludes(Set<Include> theRevIncludes) {
+		myRevIncludes = theRevIncludes;
+	}
+
 	public SortSpec getSort() {
 		return mySort;
 	}
 
+	public void setSort(SortSpec theSort) {
+		mySort = theSort;
+	}
+
 	/**
 	 * This will only return true if all parameters have no modifier of any kind
 	 */
@@ -234,22 +276,6 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 		return myLoadSynchronous;
 	}
 
-	public void setCount(Integer theCount) {
-		myCount = theCount;
-	}
-
-	public void setEverythingMode(EverythingModeEnum theConsolidateMatches) {
-		myEverythingMode = theConsolidateMatches;
-	}
-
-	public void setIncludes(Set<Include> theIncludes) {
-		myIncludes = theIncludes;
-	}
-
-	public void setLastUpdated(DateRangeParam theLastUpdated) {
-		myLastUpdated = theLastUpdated;
-	}
-
 	/**
 	 * If set, tells the server to load these results synchronously, and not to load
 	 * more than X results
@@ -259,27 +285,6 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 		return this;
 	}
 
-	/**
-	 * If set, tells the server to load these results synchronously, and not to load
-	 * more than X results. Note that setting this to a value will also set
-	 * {@link #setLoadSynchronous(boolean)} to true
-	 */
-	public SearchParameterMap setLoadSynchronousUpTo(Integer theLoadSynchronousUpTo) {
-		myLoadSynchronousUpTo = theLoadSynchronousUpTo;
-		if (myLoadSynchronousUpTo != null) {
-			setLoadSynchronous(true);
-		}
-		return this;
-	}
-
-	public void setRevIncludes(Set<Include> theRevIncludes) {
-		myRevIncludes = theRevIncludes;
-	}
-
-	public void setSort(SortSpec theSort) {
-		mySort = theSort;
-	}
-
 	public String toNormalizedQueryString(FhirContext theCtx) {
 		StringBuilder b = new StringBuilder();
 
@@ -298,7 +303,7 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 						nextValuesOrsOut.add(nextValueOrIn);
 					}
 				}
-				
+
 				Collections.sort(nextValuesOrsOut, new QueryParameterTypeComparator(theCtx));
 
 				if (nextValuesOrsOut.size() > 0) {
@@ -308,7 +313,7 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 			} // for AND
 
 			Collections.sort(nextValuesAndsOut, new QueryParameterOrComparator(theCtx));
-			
+
 			for (List<IQueryParameterType> nextValuesAnd : nextValuesAndsOut) {
 				addUrlParamSeparator(b);
 				IQueryParameterType firstValue = nextValuesAnd.get(0);
@@ -319,18 +324,18 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 					b.append('=');
 					if (firstValue.getMissing()) {
 						b.append(Constants.PARAMQUALIFIER_MISSING_TRUE);
-					}else {
+					} else {
 						b.append(Constants.PARAMQUALIFIER_MISSING_FALSE);
 					}
 					continue;
 				}
-				
-				if (isNotBlank(firstValue.getQueryParameterQualifier())){
+
+				if (isNotBlank(firstValue.getQueryParameterQualifier())) {
 					b.append(firstValue.getQueryParameterQualifier());
 				}
-				
+
 				b.append('=');
-				
+
 				for (int i = 0; i < nextValuesAnd.size(); i++) {
 					IQueryParameterType nextValueOr = nextValuesAnd.get(i);
 					if (i > 0) {
@@ -341,13 +346,13 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 					b.append(UrlUtil.escapeUrlParam(valueAsQueryToken));
 				}
 			}
-			
+
 		} // for keys
-		
+
 		SortSpec sort = getSort();
 		boolean first = true;
 		while (sort != null) {
-			
+
 			if (isNotBlank(sort.getParamName())) {
 				if (first) {
 					addUrlParamSeparator(b);
@@ -362,32 +367,32 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 				}
 				b.append(sort.getParamName());
 			}
-			
+
 			Validate.isTrue(sort != sort.getChain()); // just in case, shouldn't happen
 			sort = sort.getChain();
 		}
-		
+
 		addUrlIncludeParams(b, Constants.PARAM_INCLUDE, getIncludes());
 		addUrlIncludeParams(b, Constants.PARAM_REVINCLUDE, getRevIncludes());
-		
+
 		if (getLastUpdated() != null) {
 			DateParam lb = getLastUpdated().getLowerBound();
 			addLastUpdateParam(b, lb);
 			DateParam ub = getLastUpdated().getUpperBound();
 			addLastUpdateParam(b, ub);
 		}
-		
+
 		if (getCount() != null) {
 			addUrlParamSeparator(b);
 			b.append(Constants.PARAM_COUNT);
 			b.append('=');
 			b.append(getCount());
 		}
-		
+
 		if (b.length() == 0) {
 			b.append('?');
 		}
-		
+
 		return b.toString();
 	}
 
@@ -439,7 +444,10 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 		/*
 		 * Don't reorder! We rely on the ordinals
 		 */
-		ENCOUNTER_INSTANCE(false, true, true), ENCOUNTER_TYPE(false, true, false), PATIENT_INSTANCE(true, false, true), PATIENT_TYPE(true, false, false);
+		ENCOUNTER_INSTANCE(false, true, true),
+		ENCOUNTER_TYPE(false, true, false),
+		PATIENT_INSTANCE(true, false, true),
+		PATIENT_TYPE(true, false, false);
 
 		private final boolean myEncounter;
 
@@ -447,7 +455,7 @@ public class SearchParameterMap extends LinkedHashMap<String, List<List<? extend
 
 		private final boolean myPatient;
 
-		private EverythingModeEnum(boolean thePatient, boolean theEncounter, boolean theInstance) {
+		EverythingModeEnum(boolean thePatient, boolean theEncounter, boolean theInstance) {
 			assert thePatient ^ theEncounter;
 			myPatient = thePatient;
 			myEncounter = theEncounter;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/TransactionProcessor.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/TransactionProcessor.java
new file mode 100644
index 00000000000..554a3e58723
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/TransactionProcessor.java
@@ -0,0 +1,964 @@
+package ca.uhn.fhir.jpa.dao;
+
+/*-
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.RuntimeResourceDefinition;
+import ca.uhn.fhir.jpa.entity.ResourceTable;
+import ca.uhn.fhir.jpa.provider.ServletSubRequestDetails;
+import ca.uhn.fhir.jpa.util.DeleteConflict;
+import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
+import ca.uhn.fhir.parser.DataFormatException;
+import ca.uhn.fhir.parser.IParser;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.PreferReturnEnum;
+import ca.uhn.fhir.rest.api.RequestTypeEnum;
+import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.param.ParameterUtil;
+import ca.uhn.fhir.rest.server.RestfulServerUtils;
+import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.rest.server.exceptions.NotModifiedException;
+import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
+import ca.uhn.fhir.rest.server.method.BaseMethodBinding;
+import ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding;
+import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
+import ca.uhn.fhir.util.FhirTerser;
+import ca.uhn.fhir.util.ResourceReferenceInfo;
+import ca.uhn.fhir.util.StopWatch;
+import ca.uhn.fhir.util.UrlUtil;
+import com.google.common.collect.ArrayListMultimap;
+import org.apache.commons.lang3.Validate;
+import org.apache.http.NameValuePair;
+import org.hibernate.Session;
+import org.hibernate.internal.SessionImpl;
+import org.hl7.fhir.dstu3.model.Bundle;
+import org.hl7.fhir.exceptions.FHIRException;
+import org.hl7.fhir.instance.model.api.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.support.TransactionCallback;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+import javax.persistence.PersistenceContextType;
+import java.util.*;
+
+import static org.apache.commons.lang3.StringUtils.*;
+
+public class TransactionProcessor<BUNDLE extends IBaseBundle, BUNDLEENTRY> {
+
+	public static final String URN_PREFIX = "urn:";
+	private static final Logger ourLog = LoggerFactory.getLogger(TransactionProcessor.class);
+	private BaseHapiFhirDao myDao;
+	@Autowired
+	private PlatformTransactionManager myTxManager;
+	@PersistenceContext(type = PersistenceContextType.TRANSACTION)
+	private EntityManager myEntityManager;
+	@Autowired
+	private FhirContext myContext;
+	@Autowired
+	private ITransactionProcessorVersionAdapter<BUNDLE, BUNDLEENTRY> myVersionAdapter;
+
+	public static boolean isPlaceholder(IIdType theId) {
+		if (theId != null && theId.getValue() != null) {
+			return theId.getValue().startsWith("urn:oid:") || theId.getValue().startsWith("urn:uuid:");
+		}
+		return false;
+	}
+
+	private static String toStatusString(int theStatusCode) {
+		return Integer.toString(theStatusCode) + " " + defaultString(Constants.HTTP_STATUS_NAMES.get(theStatusCode));
+	}
+
+	private void populateEntryWithOperationOutcome(BaseServerResponseException caughtEx, BUNDLEENTRY nextEntry) {
+		myVersionAdapter.populateEntryWithOperationOutcome(caughtEx, nextEntry);
+	}
+
+	private void handleTransactionCreateOrUpdateOutcome(Map<IIdType, IIdType> idSubstitutions, Map<IIdType, DaoMethodOutcome> idToPersistedOutcome, IIdType nextResourceId, DaoMethodOutcome outcome,
+																		 BUNDLEENTRY newEntry, String theResourceType, IBaseResource theRes, ServletRequestDetails theRequestDetails) {
+		IIdType newId = outcome.getId().toUnqualifiedVersionless();
+		IIdType resourceId = isPlaceholder(nextResourceId) ? nextResourceId : nextResourceId.toUnqualifiedVersionless();
+		if (newId.equals(resourceId) == false) {
+			idSubstitutions.put(resourceId, newId);
+			if (isPlaceholder(resourceId)) {
+				/*
+				 * The correct way for substitution IDs to be is to be with no resource type, but we'll accept the qualified kind too just to be lenient.
+				 */
+				IIdType id = myContext.getVersion().newIdType();
+				id.setValue(theResourceType + '/' + resourceId.getValue());
+				idSubstitutions.put(id, newId);
+			}
+		}
+		idToPersistedOutcome.put(newId, outcome);
+		if (outcome.getCreated().booleanValue()) {
+			myVersionAdapter.setResponseStatus(newEntry, toStatusString(Constants.STATUS_HTTP_201_CREATED));
+		} else {
+			myVersionAdapter.setResponseStatus(newEntry, toStatusString(Constants.STATUS_HTTP_200_OK));
+		}
+		Date lastModifier = getLastModified(theRes);
+		myVersionAdapter.setResponseLastModified(newEntry, lastModifier);
+
+		if (theRequestDetails != null) {
+			if (outcome.getResource() != null) {
+				String prefer = theRequestDetails.getHeader(Constants.HEADER_PREFER);
+				PreferReturnEnum preferReturn = RestfulServerUtils.parsePreferHeader(prefer);
+				if (preferReturn != null) {
+					if (preferReturn == PreferReturnEnum.REPRESENTATION) {
+						myVersionAdapter.setResource(newEntry, outcome.getResource());
+					}
+				}
+			}
+		}
+
+	}
+
+	private Date getLastModified(IBaseResource theRes) {
+		return theRes.getMeta().getLastUpdated();
+	}
+
+	private String performIdSubstitutionsInMatchUrl(Map<IIdType, IIdType> theIdSubstitutions, String theMatchUrl) {
+		String matchUrl = theMatchUrl;
+		if (isNotBlank(matchUrl)) {
+			for (Map.Entry<IIdType, IIdType> nextSubstitutionEntry : theIdSubstitutions.entrySet()) {
+				IIdType nextTemporaryId = nextSubstitutionEntry.getKey();
+				IIdType nextReplacementId = nextSubstitutionEntry.getValue();
+				String nextTemporaryIdPart = nextTemporaryId.getIdPart();
+				String nextReplacementIdPart = nextReplacementId.getValueAsString();
+				if (isUrn(nextTemporaryId) && nextTemporaryIdPart.length() > URN_PREFIX.length()) {
+					matchUrl = matchUrl.replace(nextTemporaryIdPart, nextReplacementIdPart);
+					matchUrl = matchUrl.replace(UrlUtil.escapeUrlParam(nextTemporaryIdPart), nextReplacementIdPart);
+				}
+			}
+		}
+		return matchUrl;
+	}
+
+	private boolean isUrn(IIdType theId) {
+		return defaultString(theId.getValue()).startsWith(URN_PREFIX);
+	}
+
+
+	public void setDao(BaseHapiFhirDao theDao) {
+		myDao = theDao;
+	}
+
+	public BUNDLE transaction(RequestDetails theRequestDetails, BUNDLE theRequest) {
+		if (theRequestDetails != null) {
+			IServerInterceptor.ActionRequestDetails requestDetails = new IServerInterceptor.ActionRequestDetails(theRequestDetails, theRequest, "Bundle", null);
+			myDao.notifyInterceptors(RestOperationTypeEnum.TRANSACTION, requestDetails);
+		}
+
+		String actionName = "Transaction";
+		return processTransactionAsSubRequest((ServletRequestDetails) theRequestDetails, theRequest, actionName);
+	}
+
+	private BUNDLE processTransactionAsSubRequest(ServletRequestDetails theRequestDetails, BUNDLE theRequest, String theActionName) {
+		BaseHapiFhirDao.markRequestAsProcessingSubRequest(theRequestDetails);
+		try {
+			return processTransaction(theRequestDetails, theRequest, theActionName);
+		} finally {
+			BaseHapiFhirDao.clearRequestAsProcessingSubRequest(theRequestDetails);
+		}
+	}
+
+	private BUNDLE batch(final RequestDetails theRequestDetails, BUNDLE theRequest) {
+		ourLog.info("Beginning batch with {} resources", myVersionAdapter.getEntries(theRequest).size());
+		long start = System.currentTimeMillis();
+
+		TransactionTemplate txTemplate = new TransactionTemplate(myTxManager);
+		txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
+
+		BUNDLE resp = myVersionAdapter.createBundle(org.hl7.fhir.r4.model.Bundle.BundleType.BATCHRESPONSE.toCode());
+
+		/*
+		 * For batch, we handle each entry as a mini-transaction in its own database transaction so that if one fails, it doesn't prevent others
+		 */
+
+		for (final BUNDLEENTRY nextRequestEntry : myVersionAdapter.getEntries(theRequest)) {
+
+			BaseServerResponseExceptionHolder caughtEx = new BaseServerResponseExceptionHolder();
+
+			TransactionCallback<BUNDLE> callback = theStatus -> {
+				BUNDLE subRequestBundle = myVersionAdapter.createBundle(org.hl7.fhir.r4.model.Bundle.BundleType.TRANSACTION.toCode());
+				myVersionAdapter.addEntry(subRequestBundle, nextRequestEntry);
+
+				BUNDLE subResponseBundle = processTransactionAsSubRequest((ServletRequestDetails) theRequestDetails, subRequestBundle, "Batch sub-request");
+				return subResponseBundle;
+			};
+
+			try {
+				// FIXME: this doesn't need to be a callback
+				BUNDLE nextResponseBundle = callback.doInTransaction(null);
+
+				BUNDLEENTRY subResponseEntry = myVersionAdapter.getEntries(nextResponseBundle).get(0);
+				myVersionAdapter.addEntry(resp, subResponseEntry);
+
+				/*
+				 * If the individual entry didn't have a resource in its response, bring the sub-transaction's OperationOutcome across so the client can see it
+				 */
+				if (myVersionAdapter.getResource(subResponseEntry) == null) {
+					BUNDLEENTRY nextResponseBundleFirstEntry = myVersionAdapter.getEntries(nextResponseBundle).get(0);
+					myVersionAdapter.setResource(subResponseEntry, myVersionAdapter.getResource(nextResponseBundleFirstEntry));
+				}
+
+			} catch (BaseServerResponseException e) {
+				caughtEx.setException(e);
+			} catch (Throwable t) {
+				ourLog.error("Failure during BATCH sub transaction processing", t);
+				caughtEx.setException(new InternalErrorException(t));
+			}
+
+			if (caughtEx.getException() != null) {
+				BUNDLEENTRY nextEntry = myVersionAdapter.addEntry(resp);
+
+				populateEntryWithOperationOutcome(caughtEx.getException(), nextEntry);
+
+				myVersionAdapter.setResponseStatus(nextEntry, toStatusString(caughtEx.getException().getStatusCode()));
+			}
+
+		}
+
+		long delay = System.currentTimeMillis() - start;
+		ourLog.info("Batch completed in {}ms", new Object[]{delay});
+
+		return resp;
+	}
+
+	private BUNDLE processTransaction(final ServletRequestDetails theRequestDetails, final BUNDLE theRequest, final String theActionName) {
+		validateDependencies();
+
+		String transactionType = myVersionAdapter.getBundleType(theRequest);
+		if (org.hl7.fhir.r4.model.Bundle.BundleType.BATCH.toCode().equals(transactionType)) {
+			return batch(theRequestDetails, theRequest);
+		}
+
+		if (transactionType == null) {
+			String message = "Transaction Bundle did not specify valid Bundle.type, assuming " + Bundle.BundleType.TRANSACTION.toCode();
+			ourLog.warn(message);
+			transactionType = org.hl7.fhir.r4.model.Bundle.BundleType.TRANSACTION.toCode();
+		}
+		if (!org.hl7.fhir.r4.model.Bundle.BundleType.TRANSACTION.toCode().equals(transactionType)) {
+			throw new InvalidRequestException("Unable to process transaction where incoming Bundle.type = " + transactionType);
+		}
+
+		ourLog.debug("Beginning {} with {} resources", theActionName, myVersionAdapter.getEntries(theRequest).size());
+
+		final Date updateTime = new Date();
+		final StopWatch transactionStopWatch = new StopWatch();
+
+		final Set<IIdType> allIds = new LinkedHashSet<>();
+		final Map<IIdType, IIdType> idSubstitutions = new HashMap<>();
+		final Map<IIdType, DaoMethodOutcome> idToPersistedOutcome = new HashMap<>();
+		List<BUNDLEENTRY> requestEntries = myVersionAdapter.getEntries(theRequest);
+
+		// Do all entries have a verb?
+		for (int i = 0; i < myVersionAdapter.getEntries(theRequest).size(); i++) {
+			BUNDLEENTRY nextReqEntry = requestEntries.get(i);
+			String verb = myVersionAdapter.getEntryRequestVerb(nextReqEntry);
+			if (verb == null || !isValidVerb(verb)) {
+				throw new InvalidRequestException(myContext.getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionEntryHasInvalidVerb", verb, i));
+			}
+		}
+
+		/*
+		 * We want to execute the transaction request bundle elements in the order
+		 * specified by the FHIR specification (see TransactionSorter) so we save the
+		 * original order in the request, then sort it.
+		 *
+		 * Entries with a type of GET are removed from the bundle so that they
+		 * can be processed at the very end. We do this because the incoming resources
+		 * are saved in a two-phase way in order to deal with interdependencies, and
+		 * we want the GET processing to use the final indexing state
+		 */
+		final BUNDLE response = myVersionAdapter.createBundle(org.hl7.fhir.r4.model.Bundle.BundleType.TRANSACTIONRESPONSE.toCode());
+		List<BUNDLEENTRY> getEntries = new ArrayList<>();
+		final IdentityHashMap<BUNDLEENTRY, Integer> originalRequestOrder = new IdentityHashMap<>();
+		for (int i = 0; i < requestEntries.size(); i++) {
+			originalRequestOrder.put(requestEntries.get(i), i);
+			myVersionAdapter.addEntry(response);
+			if (myVersionAdapter.getEntryRequestVerb(requestEntries.get(i)).equals("GET")) {
+				getEntries.add(requestEntries.get(i));
+			}
+		}
+
+		/*
+		 * See FhirSystemDaoDstu3Test#testTransactionWithPlaceholderIdInMatchUrl
+		 * Basically if the resource has a match URL that references a placeholder,
+		 * we try to handle the resource with the placeholder first.
+		 */
+		Set<String> placeholderIds = new HashSet<>();
+		final List<BUNDLEENTRY> entries = requestEntries;
+		for (BUNDLEENTRY nextEntry : entries) {
+			String fullUrl = myVersionAdapter.getFullUrl(nextEntry);
+			if (isNotBlank(fullUrl) && fullUrl.startsWith(URN_PREFIX)) {
+				placeholderIds.add(fullUrl);
+			}
+		}
+		Collections.sort(entries, new TransactionSorter(placeholderIds));
+
+		/*
+		 * All of the write operations in the transaction (PUT, POST, etc.. basically anything
+		 * except GET) are performed in their own database transaction before we do the reads.
+		 * We do this because the reads (specifically the searches) often spawn their own
+		 * secondary database transaction and if we allow that within the primary
+		 * database transaction we can end up with deadlocks if the server is under
+		 * heavy load with lots of concurrent transactions using all available
+		 * database connections.
+		 */
+		TransactionTemplate txManager = new TransactionTemplate(myTxManager);
+		Map<BUNDLEENTRY, ResourceTable> entriesToProcess = txManager.execute(status -> {
+			Map<BUNDLEENTRY, ResourceTable> retVal = doTransactionWriteOperations(theRequestDetails, theActionName, updateTime, allIds, idSubstitutions, idToPersistedOutcome, response, originalRequestOrder, entries, transactionStopWatch);
+
+			transactionStopWatch.startTask("Commit writes to database");
+			return retVal;
+		});
+		transactionStopWatch.endCurrentTask();
+
+		for (Map.Entry<BUNDLEENTRY, ResourceTable> nextEntry : entriesToProcess.entrySet()) {
+			String responseLocation = nextEntry.getValue().getIdDt().toUnqualified().getValue();
+			String responseEtag = nextEntry.getValue().getIdDt().getVersionIdPart();
+			myVersionAdapter.setResponseLocation(nextEntry.getKey(), responseLocation);
+			myVersionAdapter.setResponseETag(nextEntry.getKey(), responseEtag);
+		}
+
+		/*
+		 * Loop through the request and process any entries of type GET
+		 */
+		if (getEntries.size() > 0) {
+			transactionStopWatch.startTask("Process " + getEntries.size() + " GET entries");
+		}
+		for (BUNDLEENTRY nextReqEntry : getEntries) {
+			Integer originalOrder = originalRequestOrder.get(nextReqEntry);
+			BUNDLEENTRY nextRespEntry = myVersionAdapter.getEntries(response).get(originalOrder);
+
+			ServletSubRequestDetails requestDetails = new ServletSubRequestDetails();
+			requestDetails.setServletRequest(theRequestDetails.getServletRequest());
+			requestDetails.setRequestType(RequestTypeEnum.GET);
+			requestDetails.setServer(theRequestDetails.getServer());
+
+			String url = extractTransactionUrlOrThrowException(nextReqEntry, "GET");
+
+			int qIndex = url.indexOf('?');
+			ArrayListMultimap<String, String> paramValues = ArrayListMultimap.create();
+			requestDetails.setParameters(new HashMap<>());
+			if (qIndex != -1) {
+				String params = url.substring(qIndex);
+				List<NameValuePair> parameters = BaseHapiFhirDao.translateMatchUrl(params);
+				for (NameValuePair next : parameters) {
+					paramValues.put(next.getName(), next.getValue());
+				}
+				for (Map.Entry<String, Collection<String>> nextParamEntry : paramValues.asMap().entrySet()) {
+					String[] nextValue = nextParamEntry.getValue().toArray(new String[nextParamEntry.getValue().size()]);
+					requestDetails.addParameter(nextParamEntry.getKey(), nextValue);
+				}
+				url = url.substring(0, qIndex);
+			}
+
+			requestDetails.setRequestPath(url);
+			requestDetails.setFhirServerBase(theRequestDetails.getFhirServerBase());
+
+			theRequestDetails.getServer().populateRequestDetailsFromRequestPath(requestDetails, url);
+			BaseMethodBinding<?> method = theRequestDetails.getServer().determineResourceMethod(requestDetails, url);
+			if (method == null) {
+				throw new IllegalArgumentException("Unable to handle GET " + url);
+			}
+
+			if (isNotBlank(myVersionAdapter.getEntryRequestIfMatch(nextReqEntry))) {
+				requestDetails.addHeader(Constants.HEADER_IF_MATCH, myVersionAdapter.getEntryRequestIfMatch(nextReqEntry));
+			}
+			if (isNotBlank(myVersionAdapter.getEntryRequestIfNoneExist(nextReqEntry))) {
+				requestDetails.addHeader(Constants.HEADER_IF_NONE_EXIST, myVersionAdapter.getEntryRequestIfNoneExist(nextReqEntry));
+			}
+			if (isNotBlank(myVersionAdapter.getEntryRequestIfNoneMatch(nextReqEntry))) {
+				requestDetails.addHeader(Constants.HEADER_IF_NONE_MATCH, myVersionAdapter.getEntryRequestIfNoneMatch(nextReqEntry));
+			}
+
+			Validate.isTrue(method instanceof BaseResourceReturningMethodBinding, "Unable to handle GET {}", url);
+			try {
+				IBaseResource resource = ((BaseResourceReturningMethodBinding) method).doInvokeServer(theRequestDetails.getServer(), requestDetails);
+				if (paramValues.containsKey(Constants.PARAM_SUMMARY) || paramValues.containsKey(Constants.PARAM_CONTENT)) {
+					resource = filterNestedBundle(requestDetails, resource);
+				}
+				myVersionAdapter.setResource(nextRespEntry, resource);
+				myVersionAdapter.setResponseStatus(nextRespEntry, toStatusString(Constants.STATUS_HTTP_200_OK));
+			} catch (NotModifiedException e) {
+				myVersionAdapter.setResponseStatus(nextRespEntry, toStatusString(Constants.STATUS_HTTP_304_NOT_MODIFIED));
+			} catch (BaseServerResponseException e) {
+				ourLog.info("Failure processing transaction GET {}: {}", url, e.toString());
+				myVersionAdapter.setResponseStatus(nextRespEntry, toStatusString(e.getStatusCode()));
+				populateEntryWithOperationOutcome(e, nextRespEntry);
+			}
+
+		}
+		transactionStopWatch.endCurrentTask();
+
+		ourLog.info("Transaction timing:\n{}", transactionStopWatch.formatTaskDurations());
+
+		return response;
+	}
+
+	private boolean isValidVerb(String theVerb) {
+		try {
+			return org.hl7.fhir.r4.model.Bundle.HTTPVerb.fromCode(theVerb) != null;
+		} catch (FHIRException theE) {
+			return false;
+		}
+	}
+
+	/**
+	 * This method is called for nested bundles (e.g. if we received a transaction with an entry that
+	 * was a GET search, this method is called on the bundle for the search result, that will be placed in the
+	 * outer bundle). This method applies the _summary and _content parameters to the output of
+	 * that bundle.
+	 * <p>
+	 * TODO: This isn't the most efficient way of doing this.. hopefully we can come up with something better in the future.
+	 */
+	private IBaseResource filterNestedBundle(RequestDetails theRequestDetails, IBaseResource theResource) {
+		IParser p = myContext.newJsonParser();
+		RestfulServerUtils.configureResponseParser(theRequestDetails, p);
+		return p.parseResource(theResource.getClass(), p.encodeResourceToString(theResource));
+	}
+
+	public void setEntityManager(EntityManager theEntityManager) {
+		myEntityManager = theEntityManager;
+	}
+
+	private void validateDependencies() {
+		Validate.notNull(myEntityManager);
+		Validate.notNull(myContext);
+		Validate.notNull(myDao);
+		Validate.notNull(myTxManager);
+	}
+
+	private IIdType newIdType(String theValue) {
+		return myContext.getVersion().newIdType().setValue(theValue);
+	}
+
+	private Map<BUNDLEENTRY, ResourceTable> doTransactionWriteOperations(ServletRequestDetails theRequestDetails, String theActionName, Date theUpdateTime, Set<IIdType> theAllIds,
+																								Map<IIdType, IIdType> theIdSubstitutions, Map<IIdType, DaoMethodOutcome> theIdToPersistedOutcome, BUNDLE theResponse, IdentityHashMap<BUNDLEENTRY, Integer> theOriginalRequestOrder, List<BUNDLEENTRY> theEntries, StopWatch theTransactionStopWatch) {
+		Set<String> deletedResources = new HashSet<>();
+		List<DeleteConflict> deleteConflicts = new ArrayList<>();
+		Map<BUNDLEENTRY, ResourceTable> entriesToProcess = new IdentityHashMap<>();
+		Set<ResourceTable> nonUpdatedEntities = new HashSet<>();
+		Set<ResourceTable> updatedEntities = new HashSet<>();
+		Map<String, Class<? extends IBaseResource>> conditionalRequestUrls = new HashMap<>();
+
+		/*
+		 * Loop through the request and process any entries of type
+		 * PUT, POST or DELETE
+		 */
+		for (int i = 0; i < theEntries.size(); i++) {
+
+			if (i % 100 == 0) {
+				ourLog.debug("Processed {} non-GET entries out of {}", i, theEntries.size());
+			}
+
+			BUNDLEENTRY nextReqEntry = theEntries.get(i);
+			IBaseResource res = myVersionAdapter.getResource(nextReqEntry);
+			IIdType nextResourceId = null;
+			if (res != null) {
+
+				nextResourceId = res.getIdElement();
+
+				if (!nextResourceId.hasIdPart()) {
+					if (isNotBlank(myVersionAdapter.getFullUrl(nextReqEntry))) {
+						nextResourceId = newIdType(myVersionAdapter.getFullUrl(nextReqEntry));
+					}
+				}
+
+				if (nextResourceId.hasIdPart() && nextResourceId.getIdPart().matches("[a-zA-Z]+\\:.*") && !isPlaceholder(nextResourceId)) {
+					throw new InvalidRequestException("Invalid placeholder ID found: " + nextResourceId.getIdPart() + " - Must be of the form 'urn:uuid:[uuid]' or 'urn:oid:[oid]'");
+				}
+
+				if (nextResourceId.hasIdPart() && !nextResourceId.hasResourceType() && !isPlaceholder(nextResourceId)) {
+					nextResourceId = newIdType(toResourceName(res.getClass()), nextResourceId.getIdPart());
+					res.setId(nextResourceId);
+				}
+
+				/*
+				 * Ensure that the bundle doesn't have any duplicates, since this causes all kinds of weirdness
+				 */
+				if (isPlaceholder(nextResourceId)) {
+					if (!theAllIds.add(nextResourceId)) {
+						throw new InvalidRequestException(myContext.getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionContainsMultipleWithDuplicateId", nextResourceId));
+					}
+				} else if (nextResourceId.hasResourceType() && nextResourceId.hasIdPart()) {
+					IIdType nextId = nextResourceId.toUnqualifiedVersionless();
+					if (!theAllIds.add(nextId)) {
+						throw new InvalidRequestException(myContext.getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionContainsMultipleWithDuplicateId", nextId));
+					}
+				}
+
+			}
+
+			String verb = myVersionAdapter.getEntryRequestVerb(nextReqEntry);
+			String resourceType = res != null ? myContext.getResourceDefinition(res).getName() : null;
+			Integer order = theOriginalRequestOrder.get(nextReqEntry);
+			BUNDLEENTRY nextRespEntry = myVersionAdapter.getEntries(theResponse).get(order);
+
+			theTransactionStopWatch.startTask("Bundle.entry[" + i + "]: " + verb + " " + defaultString(resourceType));
+
+			switch (verb) {
+				case "POST": {
+					// CREATE
+					@SuppressWarnings("rawtypes")
+					IFhirResourceDao resourceDao = getDaoOrThrowException(res.getClass());
+					res.setId((String) null);
+					DaoMethodOutcome outcome;
+					String matchUrl = myVersionAdapter.getEntryRequestIfNoneExist(nextReqEntry);
+					matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
+					outcome = resourceDao.create(res, matchUrl, false, theRequestDetails);
+					if (nextResourceId != null) {
+						handleTransactionCreateOrUpdateOutcome(theIdSubstitutions, theIdToPersistedOutcome, nextResourceId, outcome, nextRespEntry, resourceType, res, theRequestDetails);
+					}
+					entriesToProcess.put(nextRespEntry, outcome.getEntity());
+					if (outcome.getCreated() == false) {
+						nonUpdatedEntities.add(outcome.getEntity());
+					} else {
+						if (isNotBlank(matchUrl)) {
+							conditionalRequestUrls.put(matchUrl, res.getClass());
+						}
+					}
+
+					break;
+				}
+				case "DELETE": {
+					// DELETE
+					String url = extractTransactionUrlOrThrowException(nextReqEntry, verb);
+					UrlUtil.UrlParts parts = UrlUtil.parseUrl(url);
+					ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> dao = toDao(parts, verb, url);
+					int status = Constants.STATUS_HTTP_204_NO_CONTENT;
+					if (parts.getResourceId() != null) {
+						IIdType deleteId = newIdType(parts.getResourceType(), parts.getResourceId());
+						if (!deletedResources.contains(deleteId.getValueAsString())) {
+							DaoMethodOutcome outcome = dao.delete(deleteId, deleteConflicts, theRequestDetails);
+							if (outcome.getEntity() != null) {
+								deletedResources.add(deleteId.getValueAsString());
+								entriesToProcess.put(nextRespEntry, outcome.getEntity());
+							}
+						}
+					} else {
+						String matchUrl = parts.getResourceType() + '?' + parts.getParams();
+						matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
+						DeleteMethodOutcome deleteOutcome = dao.deleteByUrl(matchUrl, deleteConflicts, theRequestDetails);
+						List<ResourceTable> allDeleted = deleteOutcome.getDeletedEntities();
+						for (ResourceTable deleted : allDeleted) {
+							deletedResources.add(deleted.getIdDt().toUnqualifiedVersionless().getValueAsString());
+						}
+						if (allDeleted.isEmpty()) {
+							status = Constants.STATUS_HTTP_204_NO_CONTENT;
+						}
+
+						myVersionAdapter.setResponseOutcome(nextRespEntry, deleteOutcome.getOperationOutcome());
+					}
+
+					myVersionAdapter.setResponseStatus(nextRespEntry, toStatusString(status));
+
+					break;
+				}
+				case "PUT": {
+					// UPDATE
+					@SuppressWarnings("rawtypes")
+					IFhirResourceDao resourceDao = getDaoOrThrowException(res.getClass());
+
+					String url = extractTransactionUrlOrThrowException(nextReqEntry, verb);
+
+					DaoMethodOutcome outcome;
+					UrlUtil.UrlParts parts = UrlUtil.parseUrl(url);
+					if (isNotBlank(parts.getResourceId())) {
+						String version = null;
+						if (isNotBlank(myVersionAdapter.getEntryRequestIfMatch(nextReqEntry))) {
+							version = ParameterUtil.parseETagValue(myVersionAdapter.getEntryRequestIfMatch(nextReqEntry));
+						}
+						res.setId(newIdType(parts.getResourceType(), parts.getResourceId(), version));
+						outcome = resourceDao.update(res, null, false, theRequestDetails);
+					} else {
+						res.setId((String) null);
+						String matchUrl;
+						if (isNotBlank(parts.getParams())) {
+							matchUrl = parts.getResourceType() + '?' + parts.getParams();
+						} else {
+							matchUrl = parts.getResourceType();
+						}
+						matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
+						outcome = resourceDao.update(res, matchUrl, false, theRequestDetails);
+						if (Boolean.TRUE.equals(outcome.getCreated())) {
+							conditionalRequestUrls.put(matchUrl, res.getClass());
+						}
+					}
+
+					if (outcome.getCreated() == Boolean.FALSE) {
+						updatedEntities.add(outcome.getEntity());
+					}
+
+					handleTransactionCreateOrUpdateOutcome(theIdSubstitutions, theIdToPersistedOutcome, nextResourceId, outcome, nextRespEntry, resourceType, res, theRequestDetails);
+					entriesToProcess.put(nextRespEntry, outcome.getEntity());
+					break;
+				}
+				case "GET":
+				default:
+					break;
+
+			}
+
+			theTransactionStopWatch.endCurrentTask();
+		}
+
+
+		/*
+		 * Make sure that there are no conflicts from deletions. E.g. we can't delete something
+		 * if something else has a reference to it.. Unless the thing that has a reference to it
+		 * was also deleted as a part of this transaction, which is why we check this now at the
+		 * end.
+		 */
+
+		deleteConflicts.removeIf(next ->
+			deletedResources.contains(next.getTargetId().toUnqualifiedVersionless().getValue()));
+		myDao.validateDeleteConflictsEmptyOrThrowException(deleteConflicts);
+
+		/*
+		 * Perform ID substitutions and then index each resource we have saved
+		 */
+
+		FhirTerser terser = myContext.newTerser();
+		theTransactionStopWatch.startTask("Index " + theIdToPersistedOutcome.size() + " resources");
+		for (DaoMethodOutcome nextOutcome : theIdToPersistedOutcome.values()) {
+			IBaseResource nextResource = nextOutcome.getResource();
+			if (nextResource == null) {
+				continue;
+			}
+
+			// References
+			List<ResourceReferenceInfo> allRefs = terser.getAllResourceReferences(nextResource);
+			for (ResourceReferenceInfo nextRef : allRefs) {
+				IIdType nextId = nextRef.getResourceReference().getReferenceElement();
+				if (!nextId.hasIdPart()) {
+					continue;
+				}
+				if (theIdSubstitutions.containsKey(nextId)) {
+					IIdType newId = theIdSubstitutions.get(nextId);
+					ourLog.debug(" * Replacing resource ref {} with {}", nextId, newId);
+					nextRef.getResourceReference().setReference(newId.getValue());
+				} else if (nextId.getValue().startsWith("urn:")) {
+					throw new InvalidRequestException("Unable to satisfy placeholder ID " + nextId.getValue() + " found in element named '" + nextRef.getName() + "' within resource of type: " + nextResource.getIdElement().getResourceType());
+				} else {
+					ourLog.debug(" * Reference [{}] does not exist in bundle", nextId);
+				}
+			}
+
+			// URIs
+			Class<? extends IPrimitiveType<?>> uriType = (Class<? extends IPrimitiveType<?>>) myContext.getElementDefinition("uri").getImplementingClass();
+			List<? extends IPrimitiveType<?>> allUris = terser.getAllPopulatedChildElementsOfType(nextResource, uriType);
+			for (IPrimitiveType<?> nextRef : allUris) {
+				if (nextRef instanceof IIdType) {
+					continue; // No substitution on the resource ID itself!
+				}
+				IIdType nextUriString = newIdType(nextRef.getValueAsString());
+				if (theIdSubstitutions.containsKey(nextUriString)) {
+					IIdType newId = theIdSubstitutions.get(nextUriString);
+					ourLog.debug(" * Replacing resource ref {} with {}", nextUriString, newId);
+					nextRef.setValueAsString(newId.getValue());
+				} else {
+					ourLog.debug(" * Reference [{}] does not exist in bundle", nextUriString);
+				}
+			}
+
+			IPrimitiveType<Date> deletedInstantOrNull = ResourceMetadataKeyEnum.DELETED_AT.get((IAnyResource) nextResource);
+			Date deletedTimestampOrNull = deletedInstantOrNull != null ? deletedInstantOrNull.getValue() : null;
+
+			if (updatedEntities.contains(nextOutcome.getEntity())) {
+				myDao.updateInternal(theRequestDetails, nextResource, true, false, theRequestDetails, nextOutcome.getEntity(), nextResource.getIdElement(), nextOutcome.getPreviousResource());
+			} else if (!nonUpdatedEntities.contains(nextOutcome.getEntity())) {
+				myDao.updateEntity(theRequestDetails, nextResource, nextOutcome.getEntity(), deletedTimestampOrNull, true, false, theUpdateTime, false, true);
+			}
+		}
+
+		theTransactionStopWatch.endCurrentTask();
+		theTransactionStopWatch.startTask("Flush writes to database");
+
+		flushJpaSession();
+
+		theTransactionStopWatch.endCurrentTask();
+		if (conditionalRequestUrls.size() > 0) {
+			theTransactionStopWatch.startTask("Check for conflicts in conditional resources");
+		}
+
+		/*
+		 * Double check we didn't allow any duplicates we shouldn't have
+		 */
+		for (Map.Entry<String, Class<? extends IBaseResource>> nextEntry : conditionalRequestUrls.entrySet()) {
+			String matchUrl = nextEntry.getKey();
+			Class<? extends IBaseResource> resType = nextEntry.getValue();
+			if (isNotBlank(matchUrl)) {
+				IFhirResourceDao<?> resourceDao = myDao.getDao(resType);
+				Set<Long> val = resourceDao.processMatchUrl(matchUrl);
+				if (val.size() > 1) {
+					throw new InvalidRequestException(
+						"Unable to process " + theActionName + " - Request would cause multiple resources to match URL: \"" + matchUrl + "\". Does transaction request contain duplicates?");
+				}
+			}
+		}
+
+		theTransactionStopWatch.endCurrentTask();
+
+		for (IIdType next : theAllIds) {
+			IIdType replacement = theIdSubstitutions.get(next);
+			if (replacement == null) {
+				continue;
+			}
+			if (replacement.equals(next)) {
+				continue;
+			}
+			ourLog.debug("Placeholder resource ID \"{}\" was replaced with permanent ID \"{}\"", next, replacement);
+		}
+		return entriesToProcess;
+	}
+
+	private IIdType newIdType(String theResourceType, String theResourceId, String theVersion) {
+		org.hl7.fhir.r4.model.IdType id = new org.hl7.fhir.r4.model.IdType(theResourceType, theResourceId, theVersion);
+		return myContext.getVersion().newIdType().setValue(id.getValue());
+	}
+
+	private IIdType newIdType(String theToResourceName, String theIdPart) {
+		return newIdType(theToResourceName, theIdPart, null);
+	}
+
+	private IFhirResourceDao getDaoOrThrowException(Class<? extends IBaseResource> theClass) {
+		return myDao.getDaoOrThrowException(theClass);
+	}
+
+	protected void flushJpaSession() {
+		SessionImpl session = (SessionImpl) myEntityManager.unwrap(Session.class);
+		int insertionCount = session.getActionQueue().numberOfInsertions();
+		int updateCount = session.getActionQueue().numberOfUpdates();
+
+		StopWatch sw = new StopWatch();
+		myEntityManager.flush();
+		ourLog.debug("Session flush took {}ms for {} inserts and {} updates", sw.getMillis(), insertionCount, updateCount);
+	}
+
+	protected String toResourceName(Class<? extends IBaseResource> theResourceType) {
+		return myContext.getResourceDefinition(theResourceType).getName();
+	}
+
+	public void setContext(FhirContext theContext) {
+		myContext = theContext;
+	}
+
+	private String extractTransactionUrlOrThrowException(BUNDLEENTRY nextEntry, String verb) {
+		String url = myVersionAdapter.getEntryRequestUrl(nextEntry);
+		if (isBlank(url)) {
+			throw new InvalidRequestException(myContext.getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionMissingUrl", verb));
+		}
+		return url;
+	}
+
+	private ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> toDao(UrlUtil.UrlParts theParts, String theVerb, String theUrl) {
+		RuntimeResourceDefinition resType;
+		try {
+			resType = myContext.getResourceDefinition(theParts.getResourceType());
+		} catch (DataFormatException e) {
+			String msg = myContext.getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
+			throw new InvalidRequestException(msg);
+		}
+		IFhirResourceDao<? extends IBaseResource> dao = null;
+		if (resType != null) {
+			dao = myDao.getDao(resType.getImplementingClass());
+		}
+		if (dao == null) {
+			String msg = myContext.getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
+			throw new InvalidRequestException(msg);
+		}
+
+		// if (theParts.getResourceId() == null && theParts.getParams() == null) {
+		// String msg = getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
+		// throw new InvalidRequestException(msg);
+		// }
+
+		return dao;
+	}
+
+	public interface ITransactionProcessorVersionAdapter<BUNDLE, BUNDLEENTRY> {
+
+		void setResponseStatus(BUNDLEENTRY theBundleEntry, String theStatus);
+
+		void setResponseLastModified(BUNDLEENTRY theBundleEntry, Date theLastModified);
+
+		void setResource(BUNDLEENTRY theBundleEntry, IBaseResource theResource);
+
+		IBaseResource getResource(BUNDLEENTRY theBundleEntry);
+
+		String getBundleType(BUNDLE theRequest);
+
+		void populateEntryWithOperationOutcome(BaseServerResponseException theCaughtEx, BUNDLEENTRY theEntry);
+
+		BUNDLE createBundle(String theBundleType);
+
+		List<BUNDLEENTRY> getEntries(BUNDLE theRequest);
+
+		void addEntry(BUNDLE theBundle, BUNDLEENTRY theEntry);
+
+		BUNDLEENTRY addEntry(BUNDLE theBundle);
+
+		String getEntryRequestVerb(BUNDLEENTRY theEntry);
+
+		String getFullUrl(BUNDLEENTRY theEntry);
+
+		String getEntryIfNoneExist(BUNDLEENTRY theEntry);
+
+		String getEntryRequestUrl(BUNDLEENTRY theEntry);
+
+		void setResponseLocation(BUNDLEENTRY theEntry, String theResponseLocation);
+
+		void setResponseETag(BUNDLEENTRY theEntry, String theEtag);
+
+		String getEntryRequestIfMatch(BUNDLEENTRY theEntry);
+
+		String getEntryRequestIfNoneExist(BUNDLEENTRY theEntry);
+
+		String getEntryRequestIfNoneMatch(BUNDLEENTRY theEntry);
+
+		void setResponseOutcome(BUNDLEENTRY theEntry, IBaseOperationOutcome theOperationOutcome);
+	}
+
+	private static class BaseServerResponseExceptionHolder {
+		private BaseServerResponseException myException;
+
+		public BaseServerResponseException getException() {
+			return myException;
+		}
+
+		public void setException(BaseServerResponseException myException) {
+			this.myException = myException;
+		}
+	}
+
+	/**
+	 * Transaction Order, per the spec:
+	 * <p>
+	 * Process any DELETE interactions
+	 * Process any POST interactions
+	 * Process any PUT interactions
+	 * Process any GET interactions
+	 */
+	//@formatter:off
+	public class TransactionSorter implements Comparator<BUNDLEENTRY> {
+
+		private Set<String> myPlaceholderIds;
+
+		public TransactionSorter(Set<String> thePlaceholderIds) {
+			myPlaceholderIds = thePlaceholderIds;
+		}
+
+		@Override
+		public int compare(BUNDLEENTRY theO1, BUNDLEENTRY theO2) {
+			int o1 = toOrder(theO1);
+			int o2 = toOrder(theO2);
+
+			if (o1 == o2) {
+				String matchUrl1 = toMatchUrl(theO1);
+				String matchUrl2 = toMatchUrl(theO2);
+				if (isBlank(matchUrl1) && isBlank(matchUrl2)) {
+					return 0;
+				}
+				if (isBlank(matchUrl1)) {
+					return -1;
+				}
+				if (isBlank(matchUrl2)) {
+					return 1;
+				}
+
+				boolean match1containsSubstitutions = false;
+				boolean match2containsSubstitutions = false;
+				for (String nextPlaceholder : myPlaceholderIds) {
+					if (matchUrl1.contains(nextPlaceholder)) {
+						match1containsSubstitutions = true;
+					}
+					if (matchUrl2.contains(nextPlaceholder)) {
+						match2containsSubstitutions = true;
+					}
+				}
+
+				if (match1containsSubstitutions && match2containsSubstitutions) {
+					return 0;
+				}
+				if (!match1containsSubstitutions && !match2containsSubstitutions) {
+					return 0;
+				}
+				if (match1containsSubstitutions) {
+					return 1;
+				} else {
+					return -1;
+				}
+			}
+
+			return o1 - o2;
+		}
+
+		private String toMatchUrl(BUNDLEENTRY theEntry) {
+			String verb = myVersionAdapter.getEntryRequestVerb(theEntry);
+			if (verb.equals("POST")) {
+				return myVersionAdapter.getEntryIfNoneExist(theEntry);
+			}
+			if (verb.equals("PUT") || verb.equals("DELETE")) {
+				String url = extractTransactionUrlOrThrowException(theEntry, verb);
+				UrlUtil.UrlParts parts = UrlUtil.parseUrl(url);
+				if (isBlank(parts.getResourceId())) {
+					return parts.getResourceType() + '?' + parts.getParams();
+				}
+			}
+			return null;
+		}
+
+		private int toOrder(BUNDLEENTRY theO1) {
+			int o1 = 0;
+			if (myVersionAdapter.getEntryRequestVerb(theO1) != null) {
+				switch (myVersionAdapter.getEntryRequestVerb(theO1)) {
+					case "DELETE":
+						o1 = 1;
+						break;
+					case "POST":
+						o1 = 2;
+						break;
+					case "PUT":
+						o1 = 3;
+						break;
+					case "GET":
+						o1 = 4;
+						break;
+					default:
+						o1 = 0;
+						break;
+				}
+			}
+			return o1;
+		}
+
+	}
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceIndexedSearchParamStringDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceIndexedSearchParamStringDao.java
index 6bd5724bc8a..7b1ae15b3e7 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceIndexedSearchParamStringDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceIndexedSearchParamStringDao.java
@@ -23,7 +23,12 @@ package ca.uhn.fhir.jpa.dao.data;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamString;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 public interface IResourceIndexedSearchParamStringDao extends JpaRepository<ResourceIndexedSearchParamString, Long> {
-	// nothing yet
+
+	@Query("select count(*) from ResourceIndexedSearchParamString t WHERE t.myResourcePid = :resid")
+	int countForResourceId(@Param("resid") Long theResourcePid);
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceIndexedSearchParamTokenDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceIndexedSearchParamTokenDao.java
index 09679d390b0..9e30fd3b026 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceIndexedSearchParamTokenDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceIndexedSearchParamTokenDao.java
@@ -20,10 +20,14 @@ package ca.uhn.fhir.jpa.dao.data;
  * #L%
  */
 
-import org.springframework.data.jpa.repository.JpaRepository;
-
 import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamToken;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 public interface IResourceIndexedSearchParamTokenDao extends JpaRepository<ResourceIndexedSearchParamToken, Long> {
-	// nothing yet
+
+	@Query("select count(*) from ResourceIndexedSearchParamToken t WHERE t.myResourcePid = :resid")
+	int countForResourceId(@Param("resid") Long theResourcePid);
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ISearchParamDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceSearchViewDao.java
similarity index 68%
rename from hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ISearchParamDao.java
rename to hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceSearchViewDao.java
index e2184820d55..cf13d923fc6 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ISearchParamDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/IResourceSearchViewDao.java
@@ -1,5 +1,7 @@
 package ca.uhn.fhir.jpa.dao.data;
 
+import java.util.Collection;
+
 /*
  * #%L
  * HAPI FHIR JPA Server
@@ -10,7 +12,7 @@ package ca.uhn.fhir.jpa.dao.data;
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  * 
- * http://www.apache.org/licenses/LICENSE-2.0
+ *      http://www.apache.org/licenses/LICENSE-2.0
  * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -24,11 +26,10 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 
-import ca.uhn.fhir.jpa.entity.SearchParam;
+import ca.uhn.fhir.jpa.entity.ResourceSearchView;
 
-public interface ISearchParamDao extends JpaRepository<SearchParam, Long> {
-
-	@Query("SELECT s FROM SearchParam s WHERE s.myResourceName = :resname AND s.myParamName = :parmname")
-	public SearchParam findForResource(@Param("resname") String theResourceType, @Param("parmname") String theParamName);
+public interface IResourceSearchViewDao extends JpaRepository<ResourceSearchView, Long> {
 
+	@Query("SELECT v FROM ResourceSearchView v WHERE v.myResourceId in (:pids)")
+	Collection<ResourceSearchView> findByResourceIds(@Param("pids") Collection<Long> pids);
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermCodeSystemDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermCodeSystemDao.java
index fd09ba65cef..910cc556ef6 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermCodeSystemDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermCodeSystemDao.java
@@ -26,6 +26,8 @@ import org.springframework.data.repository.query.Param;
 
 import ca.uhn.fhir.jpa.entity.TermCodeSystem;
 
+import java.util.Optional;
+
 public interface ITermCodeSystemDao  extends JpaRepository<TermCodeSystem, Long> {
 
 	@Query("SELECT cs FROM TermCodeSystem cs WHERE cs.myCodeSystemUri = :code_system_uri")
@@ -34,4 +36,7 @@ public interface ITermCodeSystemDao  extends JpaRepository<TermCodeSystem, Long>
 	@Query("SELECT cs FROM TermCodeSystem cs WHERE cs.myResourcePid = :resource_pid")
 	TermCodeSystem findByResourcePid(@Param("resource_pid") Long theReourcePid);
 
+	@Query("SELECT cs FROM TermCodeSystem cs WHERE cs.myCurrentVersion.myId = :csv_pid")
+	Optional<TermCodeSystem> findWithCodeSystemVersionAsCurrentVersion(@Param("csv_pid") Long theCodeSystemVersionPid);
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptDao.java
index 5f9dc078b6f..f64059eeb8f 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptDao.java
@@ -1,9 +1,16 @@
 package ca.uhn.fhir.jpa.dao.data;
 
-import java.util.List;
-
+import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
+import ca.uhn.fhir.jpa.entity.TermConcept;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Slice;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
 
 /*
  * #%L
@@ -25,31 +32,25 @@ import org.springframework.data.domain.Pageable;
  * #L%
  */
 
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
-import ca.uhn.fhir.jpa.entity.TermConcept;
-
 public interface ITermConceptDao extends JpaRepository<TermConcept, Long> {
 
+	@Query("SELECT COUNT(t) FROM TermConcept t WHERE t.myCodeSystem.myId = :cs_pid")
+	Integer countByCodeSystemVersion(@Param("cs_pid") Long thePid);
+
 	@Query("SELECT c FROM TermConcept c WHERE c.myCodeSystem = :code_system AND c.myCode = :code")
 	TermConcept findByCodeSystemAndCode(@Param("code_system") TermCodeSystemVersion theCodeSystem, @Param("code") String theCode);
 
+	@Query("SELECT t FROM TermConcept t WHERE t.myCodeSystem.myId = :cs_pid")
+	Slice<TermConcept> findByCodeSystemVersion(Pageable thePage, @Param("cs_pid") Long thePid);
+
 	@Query("SELECT c FROM TermConcept c WHERE c.myCodeSystem = :code_system")
 	List<TermConcept> findByCodeSystemVersion(@Param("code_system") TermCodeSystemVersion theCodeSystem);
 
-	@Query("SELECT t FROM TermConcept t WHERE t.myCodeSystem.myId = :cs_pid")
-	@Modifying
-	List<TermConcept> findByCodeSystemVersion(@Param("cs_pid") Long thePid);
+	@Query("SELECT t FROM TermConcept t WHERE t.myIndexStatus = null")
+	Page<TermConcept> findResourcesRequiringReindexing(Pageable thePageRequest);
 
 	@Query("UPDATE TermConcept t SET t.myIndexStatus = null")
 	@Modifying
 	int markAllForReindexing();
 
-	@Query("SELECT t FROM TermConcept t WHERE t.myIndexStatus = null")
-	Page<TermConcept> findResourcesRequiringReindexing(Pageable thePageRequest);
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptDesignationDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptDesignationDao.java
index 4be607a9390..38c8346b790 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptDesignationDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptDesignationDao.java
@@ -1,7 +1,11 @@
 package ca.uhn.fhir.jpa.dao.data;
 
 import ca.uhn.fhir.jpa.entity.TermConceptDesignation;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Slice;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 
 /*
  * #%L
@@ -24,5 +28,11 @@ import org.springframework.data.jpa.repository.JpaRepository;
  */
 
 public interface ITermConceptDesignationDao extends JpaRepository<TermConceptDesignation, Long> {
-	// nothing
+
+	@Query("SELECT t FROM TermConceptDesignation t WHERE t.myCodeSystemVersion.myId = :csv_pid")
+	Slice<TermConceptDesignation> findByCodeSystemVersion(Pageable thePage, @Param("csv_pid") Long thePid);
+
+	@Query("SELECT COUNT(t) FROM TermConceptDesignation t WHERE t.myCodeSystemVersion.myId = :csv_pid")
+	Integer countByCodeSystemVersion(@Param("csv_pid") Long thePid);
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptParentChildLinkDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptParentChildLinkDao.java
index 5f5be6d3716..d3cb23d9896 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptParentChildLinkDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptParentChildLinkDao.java
@@ -1,5 +1,12 @@
 package ca.uhn.fhir.jpa.dao.data;
 
+import ca.uhn.fhir.jpa.entity.TermConceptParentChildLink;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Slice;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
 import java.util.Collection;
 
 /*
@@ -22,20 +29,15 @@ import java.util.Collection;
  * #L%
  */
 
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import ca.uhn.fhir.jpa.entity.TermConceptParentChildLink;
-
 public interface ITermConceptParentChildLinkDao extends JpaRepository<TermConceptParentChildLink, Long> {
 
-	@Query("DELETE FROM TermConceptParentChildLink t WHERE t.myCodeSystem.myId = :cs_pid")
-	@Modifying
-	void deleteByCodeSystemVersion(@Param("cs_pid") Long thePid);
+	@Query("SELECT COUNT(t) FROM TermConceptParentChildLink t WHERE t.myCodeSystem.myId = :cs_pid")
+	Integer countByCodeSystemVersion(@Param("cs_pid") Long thePid);
 
 	@Query("SELECT t.myParentPid FROM TermConceptParentChildLink t WHERE t.myChildPid = :child_pid")
 	Collection<Long> findAllWithChild(@Param("child_pid") Long theConceptPid);
-	
+
+	@Query("SELECT t FROM TermConceptParentChildLink t WHERE t.myCodeSystem.myId = :cs_pid")
+	Slice<TermConceptParentChildLink> findByCodeSystemVersion(Pageable thePage, @Param("cs_pid") Long thePid);
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptPropertyDao.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptPropertyDao.java
index d0906cef88f..37d276e6e1c 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptPropertyDao.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/data/ITermConceptPropertyDao.java
@@ -1,17 +1,12 @@
 package ca.uhn.fhir.jpa.dao.data;
 
-import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
-import ca.uhn.fhir.jpa.entity.TermConcept;
 import ca.uhn.fhir.jpa.entity.TermConceptProperty;
-import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Slice;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 
-import java.util.List;
-
 /*
  * #%L
  * HAPI FHIR JPA Server
@@ -33,5 +28,10 @@ import java.util.List;
  */
 
 public interface ITermConceptPropertyDao extends JpaRepository<TermConceptProperty, Long> {
-	// nothing
+
+	@Query("SELECT t FROM TermConceptProperty t WHERE t.myCodeSystemVersion.myId = :cs_pid")
+	Slice<TermConceptProperty> findByCodeSystemVersion(Pageable thePage, @Param("cs_pid") Long thePid);
+
+	@Query("SELECT COUNT(t) FROM TermConceptProperty t WHERE t.myCodeSystemVersion.myId = :cs_pid")
+	Integer countByCodeSystemVersion(@Param("cs_pid") Long thePid);
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoCompositionDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoCompositionDstu3.java
new file mode 100644
index 00000000000..12781bccd86
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoCompositionDstu3.java
@@ -0,0 +1,58 @@
+package ca.uhn.fhir.jpa.dao.dstu3;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoComposition;
+import ca.uhn.fhir.jpa.dao.ISearchParamRegistry;
+import ca.uhn.fhir.jpa.dao.SearchParameterMap;
+import ca.uhn.fhir.model.api.IResource;
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import ca.uhn.fhir.rest.param.StringParam;
+import org.hl7.fhir.dstu3.model.Composition;
+import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Collections;
+
+public class FhirResourceDaoCompositionDstu3 extends FhirResourceDaoDstu3<Composition> implements IFhirResourceDaoComposition<Composition> {
+
+	@Override
+	public IBundleProvider getDocumentForComposition(HttpServletRequest theServletRequest, IIdType theId, IPrimitiveType<Integer> theCount, DateRangeParam theLastUpdate, SortSpec theSort, RequestDetails theRequestDetails) {
+		SearchParameterMap paramMap = new SearchParameterMap();
+		if (theCount != null) {
+			paramMap.setCount(theCount.getValue());
+		}
+		paramMap.setIncludes(Collections.singleton(IResource.INCLUDE_ALL.asRecursive()));
+		paramMap.setSort(theSort);
+		paramMap.setLastUpdated(theLastUpdate);
+		if (theId != null) {
+			paramMap.add("_id", new StringParam(theId.getIdPart()));
+		}
+		IBundleProvider bundleProvider = search(paramMap);
+		return bundleProvider;
+	}
+}
+
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoConceptMapDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoConceptMapDstu3.java
index 2df99332ab4..26160fc8244 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoConceptMapDstu3.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoConceptMapDstu3.java
@@ -87,7 +87,9 @@ public class FhirResourceDaoConceptMapDstu3 extends FhirResourceDaoDstu3<Concept
 				if (targetsToReturn.add(target)) {
 					translationMatch = new TranslationMatch();
 
-					translationMatch.setEquivalence(new CodeType(target.getEquivalence().toCode()));
+					if (target.getEquivalence() != null) {
+						translationMatch.setEquivalence(new CodeType(target.getEquivalence().toCode()));
+					}
 
 					translationMatch.setConcept(
 						new Coding()
@@ -160,13 +162,16 @@ public class FhirResourceDaoConceptMapDstu3 extends FhirResourceDaoDstu3<Concept
 													 boolean theUpdateVersion, Date theUpdateTime, boolean theForceUpdate, boolean theCreateNewHistoryEntry) {
 		ResourceTable retVal = super.updateEntity(theRequestDetails, theResource, theEntity, theDeletedTimestampOrNull, thePerformIndexing, theUpdateVersion, theUpdateTime, theForceUpdate, theCreateNewHistoryEntry);
 
-		ConceptMap conceptMap = (ConceptMap) theResource;
-
-		// Convert from DSTU3 to R4
-		try {
-			myHapiTerminologySvc.storeTermConceptMapAndChildren(retVal, VersionConvertor_30_40.convertConceptMap(conceptMap));
-		} catch (FHIRException fe) {
-			throw new InternalErrorException(fe);
+		if (retVal.getDeleted() == null) {
+			try {
+				ConceptMap conceptMap = (ConceptMap) theResource;
+				org.hl7.fhir.r4.model.ConceptMap converted = VersionConvertor_30_40.convertConceptMap(conceptMap);
+				myHapiTerminologySvc.storeTermConceptMapAndChildren(retVal, converted);
+			} catch (FHIRException fe) {
+				throw new InternalErrorException(fe);
+			}
+		} else {
+			myHapiTerminologySvc.deleteConceptMapAndChildren(retVal);
 		}
 
 		return retVal;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3.java
index 8ee4904f3af..c4d6892b829 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3.java
@@ -73,8 +73,10 @@ public class FhirResourceDaoDstu3<T extends IAnyResource> extends BaseHapiFhirRe
 
 	@Override
 	public MethodOutcome validate(T theResource, IIdType theId, String theRawResource, EncodingEnum theEncoding, ValidationModeEnum theMode, String theProfile, RequestDetails theRequestDetails) {
-		ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, theResource, null, theId);
-		notifyInterceptors(RestOperationTypeEnum.VALIDATE, requestDetails);
+		if (theRequestDetails != null) {
+			ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, theResource, null, theId);
+			notifyInterceptors(RestOperationTypeEnum.VALIDATE, requestDetails);
+		}
 
 		if (theMode == ValidationModeEnum.DELETE) {
 			if (theId == null || theId.hasIdPart() == false) {
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoMessageHeaderDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoMessageHeaderDstu3.java
new file mode 100644
index 00000000000..5be5bb25661
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoMessageHeaderDstu3.java
@@ -0,0 +1,36 @@
+package ca.uhn.fhir.jpa.dao.dstu3;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.dao.FhirResourceDaoMessageHeaderDstu2;
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoMessageHeader;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.dstu3.model.MessageHeader;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+
+public class FhirResourceDaoMessageHeaderDstu3 extends FhirResourceDaoDstu3<MessageHeader> implements IFhirResourceDaoMessageHeader<MessageHeader> {
+
+	@Override
+	public IBaseBundle messageHeaderProcessMessage(RequestDetails theRequestDetails, IBaseBundle theMessage) {
+		return FhirResourceDaoMessageHeaderDstu2.throwProcessMessageNotImplemented();
+	}
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoPatientDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoPatientDstu3.java
index 6277e1f1412..b9df3416257 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoPatientDstu3.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoPatientDstu3.java
@@ -41,9 +41,6 @@ import ca.uhn.fhir.rest.param.*;
 
 public class FhirResourceDaoPatientDstu3 extends FhirResourceDaoDstu3<Patient>implements IFhirResourceDaoPatient<Patient> {
 
-	@Autowired
-	private ISearchParamRegistry mySerarchParamRegistry;
-
 	private IBundleProvider doEverythingOperation(IIdType theId, IPrimitiveType<Integer> theCount, DateRangeParam theLastUpdated, SortSpec theSort, StringAndListParam theContent, StringAndListParam theNarrative, RequestDetails theRequestDetails) {
 		SearchParameterMap paramMap = new SearchParameterMap();
 		if (theCount != null) {
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoSearchParameterDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoSearchParameterDstu3.java
index b2f404e27f8..bb9111291cd 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoSearchParameterDstu3.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoSearchParameterDstu3.java
@@ -74,7 +74,7 @@ public class FhirResourceDaoSearchParameterDstu3 extends FhirResourceDaoDstu3<Se
 		FhirContext context = getContext();
 		Enumerations.SearchParamType type = theResource.getType();
 
-		FhirResourceDaoSearchParameterR4.validateSearchParam(type, status, base, expression, context);
+		FhirResourceDaoSearchParameterR4.validateSearchParam(type, status, base, expression, context, getConfig());
 	}
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoValueSetDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoValueSetDstu3.java
index 23397616bc0..ebfb44ed472 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoValueSetDstu3.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoValueSetDstu3.java
@@ -9,9 +9,9 @@ package ca.uhn.fhir.jpa.dao.dstu3;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -20,24 +20,6 @@ package ca.uhn.fhir.jpa.dao.dstu3;
  * #L%
  */
 
-import static org.apache.commons.lang3.StringUtils.isBlank;
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.codec.binary.StringUtils;
-import org.hl7.fhir.dstu3.hapi.ctx.HapiWorkerContext;
-import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
-import org.hl7.fhir.dstu3.model.*;
-import org.hl7.fhir.dstu3.model.Enumerations.PublicationStatus;
-import org.hl7.fhir.dstu3.model.ValueSet.*;
-import org.hl7.fhir.dstu3.terminologies.ValueSetExpander.ValueSetExpansionOutcome;
-import org.hl7.fhir.instance.model.api.IIdType;
-import org.hl7.fhir.instance.model.api.IPrimitiveType;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-
 import ca.uhn.fhir.jpa.dao.IFhirResourceDaoCodeSystem;
 import ca.uhn.fhir.jpa.dao.IFhirResourceDaoCodeSystem.LookupCodeResult;
 import ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet;
@@ -45,13 +27,35 @@ import ca.uhn.fhir.jpa.util.LogicUtil;
 import ca.uhn.fhir.rest.api.server.RequestDetails;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.util.ElementUtil;
+import org.apache.commons.codec.binary.StringUtils;
+import org.hl7.fhir.dstu3.hapi.ctx.HapiWorkerContext;
+import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
+import org.hl7.fhir.dstu3.model.*;
+import org.hl7.fhir.dstu3.model.Enumerations.PublicationStatus;
+import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetComponent;
+import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetFilterComponent;
+import org.hl7.fhir.dstu3.model.ValueSet.FilterOperator;
+import org.hl7.fhir.dstu3.model.ValueSet.ValueSetExpansionContainsComponent;
+import org.hl7.fhir.dstu3.terminologies.ValueSetExpander.ValueSetExpansionOutcome;
+import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+
+import java.util.Collections;
+import java.util.List;
+
+import static org.apache.commons.lang3.StringUtils.isBlank;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 public class FhirResourceDaoValueSetDstu3 extends FhirResourceDaoDstu3<ValueSet> implements IFhirResourceDaoValueSet<ValueSet, Coding, CodeableConcept> {
 
+	private static final Logger ourLog = LoggerFactory.getLogger(FhirResourceDaoValueSetDstu3.class);
 	@Autowired
 	@Qualifier("myJpaValidationSupportChainDstu3")
 	private IValidationSupport myValidationSupport;
-
 	@Autowired
 	private IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept> myCodeSystemDao;
 
@@ -66,21 +70,32 @@ public class FhirResourceDaoValueSetDstu3 extends FhirResourceDaoDstu3<ValueSet>
 		validateIncludes("include", theSource.getCompose().getInclude());
 		validateIncludes("exclude", theSource.getCompose().getExclude());
 
+		/*
+		 * If all of the code systems are supported by the HAPI FHIR terminology service, let's
+		 * use that as it's more efficient.
+		 */
+
+		boolean allSystemsAreSuppportedByTerminologyService = true;
+		for (ConceptSetComponent next : theSource.getCompose().getInclude()) {
+			if (!myTerminologySvc.supportsSystem(next.getSystem())) {
+				allSystemsAreSuppportedByTerminologyService = false;
+			}
+		}
+		for (ConceptSetComponent next : theSource.getCompose().getExclude()) {
+			if (!myTerminologySvc.supportsSystem(next.getSystem())) {
+				allSystemsAreSuppportedByTerminologyService = false;
+			}
+		}
+		if (allSystemsAreSuppportedByTerminologyService) {
+			return (ValueSet) myTerminologySvc.expandValueSet(theSource);
+		}
+
 		HapiWorkerContext workerContext = new HapiWorkerContext(getContext(), myValidationSupport);
-
 		ValueSetExpansionOutcome outcome = workerContext.expand(theSource, null);
-
 		ValueSet retVal = outcome.getValueset();
 		retVal.setStatus(PublicationStatus.ACTIVE);
-
 		return retVal;
 
-		// ValueSetExpansionComponent expansion = outcome.getValueset().getExpansion();
-		//
-		// ValueSet retVal = new ValueSet();
-		// retVal.getMeta().setLastUpdated(new Date());
-		// retVal.setExpansion(expansion);
-		// return retVal;
 	}
 
 	private void validateIncludes(String name, List<ConceptSetComponent> listToValidate) {
@@ -182,8 +197,8 @@ public class FhirResourceDaoValueSetDstu3 extends FhirResourceDaoDstu3<ValueSet>
 
 	@Override
 	public ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet.ValidateCodeResult validateCode(IPrimitiveType<String> theValueSetIdentifier, IIdType theId, IPrimitiveType<String> theCode,
-			IPrimitiveType<String> theSystem, IPrimitiveType<String> theDisplay, Coding theCoding,
-			CodeableConcept theCodeableConcept, RequestDetails theRequestDetails) {
+																													IPrimitiveType<String> theSystem, IPrimitiveType<String> theDisplay, Coding theCoding,
+																													CodeableConcept theCodeableConcept, RequestDetails theRequestDetails) {
 
 		List<IIdType> valueSetIds = Collections.emptyList();
 
@@ -223,6 +238,7 @@ public class FhirResourceDaoValueSetDstu3 extends FhirResourceDaoDstu3<ValueSet>
 		if (vs != null) {
 			ValueSet expansion = doExpand(vs);
 			List<ValueSetExpansionContainsComponent> contains = expansion.getExpansion().getContains();
+
 			ValidateCodeResult result = validateCodeIsInContains(contains, toStringOrNull(theSystem), toStringOrNull(theCode), theCoding, theCodeableConcept);
 			if (result != null) {
 				if (theDisplay != null && isNotBlank(theDisplay.getValue()) && isNotBlank(result.getDisplay())) {
@@ -243,7 +259,7 @@ public class FhirResourceDaoValueSetDstu3 extends FhirResourceDaoDstu3<ValueSet>
 	}
 
 	private ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet.ValidateCodeResult validateCodeIsInContains(List<ValueSetExpansionContainsComponent> contains, String theSystem, String theCode,
-			Coding theCoding, CodeableConcept theCodeableConcept) {
+																																	 Coding theCoding, CodeableConcept theCodeableConcept) {
 		for (ValueSetExpansionContainsComponent nextCode : contains) {
 			ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet.ValidateCodeResult result = validateCodeIsInContains(nextCode.getContains(), theSystem, theCode, theCoding, theCodeableConcept);
 			if (result != null) {
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirSystemDaoDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirSystemDaoDstu3.java
index 2204f1c49f9..32e664faeb0 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirSystemDaoDstu3.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/FhirSystemDaoDstu3.java
@@ -20,610 +20,34 @@ package ca.uhn.fhir.jpa.dao.dstu3;
  * #L%
  */
 
-import ca.uhn.fhir.context.RuntimeResourceDefinition;
 import ca.uhn.fhir.jpa.dao.BaseHapiFhirSystemDao;
-import ca.uhn.fhir.jpa.dao.DaoMethodOutcome;
-import ca.uhn.fhir.jpa.dao.DeleteMethodOutcome;
-import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
-import ca.uhn.fhir.jpa.entity.ResourceTable;
+import ca.uhn.fhir.jpa.dao.TransactionProcessor;
 import ca.uhn.fhir.jpa.entity.TagDefinition;
-import ca.uhn.fhir.jpa.provider.ServletSubRequestDetails;
-import ca.uhn.fhir.jpa.util.DeleteConflict;
-import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
-import ca.uhn.fhir.parser.DataFormatException;
-import ca.uhn.fhir.parser.IParser;
-import ca.uhn.fhir.rest.api.Constants;
-import ca.uhn.fhir.rest.api.PreferReturnEnum;
-import ca.uhn.fhir.rest.api.RequestTypeEnum;
 import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
 import ca.uhn.fhir.rest.api.server.RequestDetails;
-import ca.uhn.fhir.rest.param.ParameterUtil;
-import ca.uhn.fhir.rest.server.RestfulServerUtils;
-import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
-import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-import ca.uhn.fhir.rest.server.exceptions.NotModifiedException;
 import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor.ActionRequestDetails;
-import ca.uhn.fhir.rest.server.method.BaseMethodBinding;
-import ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding;
-import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
-import ca.uhn.fhir.util.FhirTerser;
-import ca.uhn.fhir.util.StopWatch;
-import ca.uhn.fhir.util.UrlUtil;
-import ca.uhn.fhir.util.UrlUtil.UrlParts;
-import com.google.common.collect.ArrayListMultimap;
-import org.apache.commons.lang3.Validate;
-import org.apache.http.NameValuePair;
-import org.hl7.fhir.dstu3.model.*;
+import org.hl7.fhir.dstu3.model.Bundle;
 import org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
-import org.hl7.fhir.dstu3.model.Bundle.BundleEntryResponseComponent;
-import org.hl7.fhir.dstu3.model.Bundle.BundleType;
-import org.hl7.fhir.dstu3.model.Bundle.HTTPVerb;
-import org.hl7.fhir.dstu3.model.OperationOutcome.IssueSeverity;
-import org.hl7.fhir.instance.model.api.*;
+import org.hl7.fhir.dstu3.model.Meta;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.support.TransactionCallback;
-import org.springframework.transaction.support.TransactionTemplate;
 
+import javax.annotation.PostConstruct;
 import javax.persistence.TypedQuery;
-import java.util.*;
-import java.util.Map.Entry;
-
-import static org.apache.commons.lang3.StringUtils.*;
+import java.util.Collection;
+import java.util.List;
 
 public class FhirSystemDaoDstu3 extends BaseHapiFhirSystemDao<Bundle, Meta> {
 
-	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirSystemDaoDstu3.class);
-
 	@Autowired
-	private PlatformTransactionManager myTxManager;
+	private TransactionProcessor<Bundle, BundleEntryComponent> myTransactionProcessor;
 
-	private Bundle batch(final RequestDetails theRequestDetails, Bundle theRequest) {
-		ourLog.info("Beginning batch with {} resources", theRequest.getEntry().size());
-		long start = System.currentTimeMillis();
-
-		TransactionTemplate txTemplate = new TransactionTemplate(myTxManager);
-		txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
-
-		Bundle resp = new Bundle();
-		resp.setType(BundleType.BATCHRESPONSE);
-
-		/*
-		 * For batch, we handle each entry as a mini-transaction in its own database transaction so that if one fails, it doesn't prevent others
-		 */
-
-		for (final BundleEntryComponent nextRequestEntry : theRequest.getEntry()) {
-
-			BaseServerResponseExceptionHolder caughtEx = new BaseServerResponseExceptionHolder();
-
-			TransactionCallback<Bundle> callback = new TransactionCallback<Bundle>() {
-				@Override
-				public Bundle doInTransaction(TransactionStatus theStatus) {
-					Bundle subRequestBundle = new Bundle();
-					subRequestBundle.setType(BundleType.TRANSACTION);
-					subRequestBundle.addEntry(nextRequestEntry);
-
-					Bundle subResponseBundle = transaction((ServletRequestDetails) theRequestDetails, subRequestBundle, "Batch sub-request");
-					return subResponseBundle;
-				}
-			};
-
-			try {
-				Bundle nextResponseBundle = callback.doInTransaction(null);
-
-				BundleEntryComponent subResponseEntry = nextResponseBundle.getEntry().get(0);
-				resp.addEntry(subResponseEntry);
-
-				/*
-				 * If the individual entry didn't have a resource in its response, bring the sub-transaction's OperationOutcome across so the client can see it
-				 */
-				if (subResponseEntry.getResource() == null) {
-					subResponseEntry.setResource(nextResponseBundle.getEntry().get(0).getResource());
-				}
-
-			} catch (BaseServerResponseException e) {
-				caughtEx.setException(e);
-			} catch (Throwable t) {
-				ourLog.error("Failure during BATCH sub transaction processing", t);
-				caughtEx.setException(new InternalErrorException(t));
-			}
-
-			if (caughtEx.getException() != null) {
-				BundleEntryComponent nextEntry = resp.addEntry();
-
-				populateEntryWithOperationOutcome(caughtEx.getException(), nextEntry);
-
-				BundleEntryResponseComponent nextEntryResp = nextEntry.getResponse();
-				nextEntryResp.setStatus(toStatusString(caughtEx.getException().getStatusCode()));
-			}
-
-		}
-
-		long delay = System.currentTimeMillis() - start;
-		ourLog.info("Batch completed in {}ms", new Object[] {delay});
-
-		return resp;
+	@PostConstruct
+	public void start() {
+		myTransactionProcessor.setDao(this);
 	}
 
-	private Bundle doTransaction(final ServletRequestDetails theRequestDetails, final Bundle theRequest, final String theActionName) {
-		BundleType transactionType = theRequest.getTypeElement().getValue();
-		if (transactionType == BundleType.BATCH) {
-			return batch(theRequestDetails, theRequest);
-		}
-
-		if (transactionType == null) {
-			String message = "Transaction Bundle did not specify valid Bundle.type, assuming " + BundleType.TRANSACTION.toCode();
-			ourLog.warn(message);
-			transactionType = BundleType.TRANSACTION;
-		}
-		if (transactionType != BundleType.TRANSACTION) {
-			throw new InvalidRequestException("Unable to process transaction where incoming Bundle.type = " + transactionType.toCode());
-		}
-
-		ourLog.debug("Beginning {} with {} resources", theActionName, theRequest.getEntry().size());
-
-		final Date updateTime = new Date();
-		final StopWatch transactionStopWatch = new StopWatch();
-
-		final Set<IdType> allIds = new LinkedHashSet<>();
-		final Map<IdType, IdType> idSubstitutions = new HashMap<>();
-		final Map<IdType, DaoMethodOutcome> idToPersistedOutcome = new HashMap<>();
-
-		// Do all entries have a verb?
-		for (int i = 0; i < theRequest.getEntry().size(); i++) {
-			BundleEntryComponent nextReqEntry = theRequest.getEntry().get(i);
-			HTTPVerb verb = nextReqEntry.getRequest().getMethodElement().getValue();
-			if (verb == null) {
-				throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionEntryHasInvalidVerb", nextReqEntry.getRequest().getMethod(), i));
-			}
-		}
-
-		/*
-		 * We want to execute the transaction request bundle elements in the order
-		 * specified by the FHIR specification (see TransactionSorter) so we save the
-		 * original order in the request, then sort it.
-		 *
-		 * Entries with a type of GET are removed from the bundle so that they
-		 * can be processed at the very end. We do this because the incoming resources
-		 * are saved in a two-phase way in order to deal with interdependencies, and
-		 * we want the GET processing to use the final indexing state
-		 */
-		final Bundle response = new Bundle();
-		List<BundleEntryComponent> getEntries = new ArrayList<BundleEntryComponent>();
-		final IdentityHashMap<BundleEntryComponent, Integer> originalRequestOrder = new IdentityHashMap<Bundle.BundleEntryComponent, Integer>();
-		for (int i = 0; i < theRequest.getEntry().size(); i++) {
-			originalRequestOrder.put(theRequest.getEntry().get(i), i);
-			response.addEntry();
-			if (theRequest.getEntry().get(i).getRequest().getMethodElement().getValue() == HTTPVerb.GET) {
-				getEntries.add(theRequest.getEntry().get(i));
-			}
-		}
-
-		/*
-		 * See FhirSystemDaoDstu3Test#testTransactionWithPlaceholderIdInMatchUrl
-		 * Basically if the resource has a match URL that references a placeholder,
-		 * we try to handle the resource with the placeholder first.
-		 */
-		Set<String> placeholderIds = new HashSet<>();
-		final List<BundleEntryComponent> entries = theRequest.getEntry();
-		for (BundleEntryComponent nextEntry : entries) {
-			if (isNotBlank(nextEntry.getFullUrl()) && nextEntry.getFullUrl().startsWith(IdType.URN_PREFIX)) {
-				placeholderIds.add(nextEntry.getFullUrl());
-			}
-		}
-		Collections.sort(entries, new TransactionSorter(placeholderIds));
-
-		/*
-		 * All of the write operations in the transaction (PUT, POST, etc.. basically anything
-		 * except GET) are performed in their own database transaction before we do the reads.
-		 * We do this because the reads (specifically the searches) often spawn their own
-		 * secondary database transaction and if we allow that within the primary
-		 * database transaction we can end up with deadlocks if the server is under
-		 * heavy load with lots of concurrent transactions using all available
-		 * database connections.
-		 */
-		TransactionTemplate txManager = new TransactionTemplate(myTxManager);
-		Map<BundleEntryComponent, ResourceTable> entriesToProcess = txManager.execute(new TransactionCallback<Map<BundleEntryComponent, ResourceTable>>() {
-			@Override
-			public Map<BundleEntryComponent, ResourceTable> doInTransaction(TransactionStatus status) {
-				Map<BundleEntryComponent, ResourceTable> retVal = doTransactionWriteOperations(theRequestDetails, theActionName, updateTime, allIds, idSubstitutions, idToPersistedOutcome, response, originalRequestOrder, entries, transactionStopWatch);
-
-				transactionStopWatch.startTask("Commit writes to database");
-				return retVal;
-			}
-		});
-		transactionStopWatch.endCurrentTask();
-
-		for (Entry<BundleEntryComponent, ResourceTable> nextEntry : entriesToProcess.entrySet()) {
-			String responseLocation = nextEntry.getValue().getIdDt().toUnqualified().getValue();
-			String responseEtag = nextEntry.getValue().getIdDt().getVersionIdPart();
-			nextEntry.getKey().getResponse().setLocation(responseLocation);
-			nextEntry.getKey().getResponse().setEtag(responseEtag);
-		}
-
-		/*
-		 * Loop through the request and process any entries of type GET
-		 */
-		if (getEntries.size() > 0) {
-			transactionStopWatch.startTask("Process " + getEntries.size() + " GET entries");
-		}
-		for (BundleEntryComponent nextReqEntry : getEntries) {
-			Integer originalOrder = originalRequestOrder.get(nextReqEntry);
-			BundleEntryComponent nextRespEntry = response.getEntry().get(originalOrder);
-
-			ServletSubRequestDetails requestDetails = new ServletSubRequestDetails();
-			requestDetails.setServletRequest(theRequestDetails.getServletRequest());
-			requestDetails.setRequestType(RequestTypeEnum.GET);
-			requestDetails.setServer(theRequestDetails.getServer());
-
-			String url = extractTransactionUrlOrThrowException(nextReqEntry, HTTPVerb.GET);
-
-			int qIndex = url.indexOf('?');
-			ArrayListMultimap<String, String> paramValues = ArrayListMultimap.create();
-			requestDetails.setParameters(new HashMap<>());
-			if (qIndex != -1) {
-				String params = url.substring(qIndex);
-				List<NameValuePair> parameters = translateMatchUrl(params);
-				for (NameValuePair next : parameters) {
-					paramValues.put(next.getName(), next.getValue());
-				}
-				for (Entry<String, Collection<String>> nextParamEntry : paramValues.asMap().entrySet()) {
-					String[] nextValue = nextParamEntry.getValue().toArray(new String[nextParamEntry.getValue().size()]);
-					requestDetails.addParameter(nextParamEntry.getKey(), nextValue);
-				}
-				url = url.substring(0, qIndex);
-			}
-
-			requestDetails.setRequestPath(url);
-			requestDetails.setFhirServerBase(theRequestDetails.getFhirServerBase());
-
-			theRequestDetails.getServer().populateRequestDetailsFromRequestPath(requestDetails, url);
-			BaseMethodBinding<?> method = theRequestDetails.getServer().determineResourceMethod(requestDetails, url);
-			if (method == null) {
-				throw new IllegalArgumentException("Unable to handle GET " + url);
-			}
-
-			if (isNotBlank(nextReqEntry.getRequest().getIfMatch())) {
-				requestDetails.addHeader(Constants.HEADER_IF_MATCH, nextReqEntry.getRequest().getIfMatch());
-			}
-			if (isNotBlank(nextReqEntry.getRequest().getIfNoneExist())) {
-				requestDetails.addHeader(Constants.HEADER_IF_NONE_EXIST, nextReqEntry.getRequest().getIfNoneExist());
-			}
-			if (isNotBlank(nextReqEntry.getRequest().getIfNoneMatch())) {
-				requestDetails.addHeader(Constants.HEADER_IF_NONE_MATCH, nextReqEntry.getRequest().getIfNoneMatch());
-			}
-
-			Validate.isTrue(method instanceof BaseResourceReturningMethodBinding, "Unable to handle GET {}", url);
-			try {
-				IBaseResource resource = ((BaseResourceReturningMethodBinding) method).doInvokeServer(theRequestDetails.getServer(), requestDetails);
-				if (paramValues.containsKey(Constants.PARAM_SUMMARY) || paramValues.containsKey(Constants.PARAM_CONTENT)) {
-					resource = filterNestedBundle(requestDetails, resource);
-				}
-				nextRespEntry.setResource((Resource) resource);
-				nextRespEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_200_OK));
-			} catch (NotModifiedException e) {
-				nextRespEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_304_NOT_MODIFIED));
-			} catch (BaseServerResponseException e) {
-				ourLog.info("Failure processing transaction GET {}: {}", url, e.toString());
-				nextRespEntry.getResponse().setStatus(toStatusString(e.getStatusCode()));
-				populateEntryWithOperationOutcome(e, nextRespEntry);
-			}
-
-		}
-		transactionStopWatch.endCurrentTask();
-
-		response.setType(BundleType.TRANSACTIONRESPONSE);
-
-		ourLog.info("Transaction timing:\n{}", transactionStopWatch.formatTaskDurations());
-
-		return response;
-	}
-
-	private Map<BundleEntryComponent, ResourceTable> doTransactionWriteOperations(ServletRequestDetails theRequestDetails, String theActionName, Date theUpdateTime, Set<IdType> theAllIds,
-																											Map<IdType, IdType> theIdSubstitutions, Map<IdType, DaoMethodOutcome> theIdToPersistedOutcome, Bundle theResponse, IdentityHashMap<BundleEntryComponent, Integer> theOriginalRequestOrder, List<BundleEntryComponent> theEntries, StopWatch theTransactionStopWatch) {
-		Set<String> deletedResources = new HashSet<>();
-		List<DeleteConflict> deleteConflicts = new ArrayList<>();
-		Map<BundleEntryComponent, ResourceTable> entriesToProcess = new IdentityHashMap<>();
-		Set<ResourceTable> nonUpdatedEntities = new HashSet<>();
-		Set<ResourceTable> updatedEntities = new HashSet<>();
-		Map<String, Class<? extends IBaseResource>> conditionalRequestUrls = new HashMap<>();
-
-		/*
-		 * Loop through the request and process any entries of type
-		 * PUT, POST or DELETE
-		 */
-		for (int i = 0; i < theEntries.size(); i++) {
-
-			if (i % 100 == 0) {
-				ourLog.debug("Processed {} non-GET entries out of {}", i, theEntries.size());
-			}
-
-			BundleEntryComponent nextReqEntry = theEntries.get(i);
-			Resource res = nextReqEntry.getResource();
-			IdType nextResourceId = null;
-			if (res != null) {
-
-				nextResourceId = res.getIdElement();
-
-				if (!nextResourceId.hasIdPart()) {
-					if (isNotBlank(nextReqEntry.getFullUrl())) {
-						nextResourceId = new IdType(nextReqEntry.getFullUrl());
-					}
-				}
-
-				if (nextResourceId.hasIdPart() && nextResourceId.getIdPart().matches("[a-zA-Z]+\\:.*") && !isPlaceholder(nextResourceId)) {
-					throw new InvalidRequestException("Invalid placeholder ID found: " + nextResourceId.getIdPart() + " - Must be of the form 'urn:uuid:[uuid]' or 'urn:oid:[oid]'");
-				}
-
-				if (nextResourceId.hasIdPart() && !nextResourceId.hasResourceType() && !isPlaceholder(nextResourceId)) {
-					nextResourceId = new IdType(toResourceName(res.getClass()), nextResourceId.getIdPart());
-					res.setId(nextResourceId);
-				}
-
-				/*
-				 * Ensure that the bundle doesn't have any duplicates, since this causes all kinds of weirdness
-				 */
-				if (isPlaceholder(nextResourceId)) {
-					if (!theAllIds.add(nextResourceId)) {
-						throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionContainsMultipleWithDuplicateId", nextResourceId));
-					}
-				} else if (nextResourceId.hasResourceType() && nextResourceId.hasIdPart()) {
-					IdType nextId = nextResourceId.toUnqualifiedVersionless();
-					if (!theAllIds.add(nextId)) {
-						throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionContainsMultipleWithDuplicateId", nextId));
-					}
-				}
-
-			}
-
-			HTTPVerb verb = nextReqEntry.getRequest().getMethodElement().getValue();
-			String resourceType = res != null ? getContext().getResourceDefinition(res).getName() : null;
-			BundleEntryComponent nextRespEntry = theResponse.getEntry().get(theOriginalRequestOrder.get(nextReqEntry));
-
-			theTransactionStopWatch.startTask("Bundle.entry[" + i + "]: " + verb.name() + " " + defaultString(resourceType));
-
-			switch (verb) {
-				case POST: {
-					// CREATE
-					@SuppressWarnings("rawtypes")
-					IFhirResourceDao resourceDao = getDaoOrThrowException(res.getClass());
-					res.setId((String) null);
-					DaoMethodOutcome outcome;
-					String matchUrl = nextReqEntry.getRequest().getIfNoneExist();
-					matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
-					outcome = resourceDao.create(res, matchUrl, false, theRequestDetails);
-					if (nextResourceId != null) {
-						handleTransactionCreateOrUpdateOutcome(theIdSubstitutions, theIdToPersistedOutcome, nextResourceId, outcome, nextRespEntry, resourceType, res, theRequestDetails);
-					}
-					entriesToProcess.put(nextRespEntry, outcome.getEntity());
-					if (outcome.getCreated() == false) {
-						nonUpdatedEntities.add(outcome.getEntity());
-					} else {
-						if (isNotBlank(matchUrl)) {
-							conditionalRequestUrls.put(matchUrl, res.getClass());
-						}
-					}
-
-					break;
-				}
-				case DELETE: {
-					// DELETE
-					String url = extractTransactionUrlOrThrowException(nextReqEntry, verb);
-					UrlParts parts = UrlUtil.parseUrl(url);
-					ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> dao = toDao(parts, verb.toCode(), url);
-					int status = Constants.STATUS_HTTP_204_NO_CONTENT;
-					if (parts.getResourceId() != null) {
-						IdType deleteId = new IdType(parts.getResourceType(), parts.getResourceId());
-						if (!deletedResources.contains(deleteId.getValueAsString())) {
-							DaoMethodOutcome outcome = dao.delete(deleteId, deleteConflicts, theRequestDetails);
-							if (outcome.getEntity() != null) {
-								deletedResources.add(deleteId.getValueAsString());
-								entriesToProcess.put(nextRespEntry, outcome.getEntity());
-							}
-						}
-					} else {
-						String matchUrl = parts.getResourceType() + '?' + parts.getParams();
-						matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
-						DeleteMethodOutcome deleteOutcome = dao.deleteByUrl(matchUrl, deleteConflicts, theRequestDetails);
-						List<ResourceTable> allDeleted = deleteOutcome.getDeletedEntities();
-						for (ResourceTable deleted : allDeleted) {
-							deletedResources.add(deleted.getIdDt().toUnqualifiedVersionless().getValueAsString());
-						}
-						if (allDeleted.isEmpty()) {
-							status = Constants.STATUS_HTTP_204_NO_CONTENT;
-						}
-
-						nextRespEntry.getResponse().setOutcome((Resource) deleteOutcome.getOperationOutcome());
-					}
-
-					nextRespEntry.getResponse().setStatus(toStatusString(status));
-
-					break;
-				}
-				case PUT: {
-					// UPDATE
-					@SuppressWarnings("rawtypes")
-					IFhirResourceDao resourceDao = getDaoOrThrowException(res.getClass());
-
-					String url = extractTransactionUrlOrThrowException(nextReqEntry, verb);
-
-					DaoMethodOutcome outcome;
-					UrlParts parts = UrlUtil.parseUrl(url);
-					if (isNotBlank(parts.getResourceId())) {
-						String version = null;
-						if (isNotBlank(nextReqEntry.getRequest().getIfMatch())) {
-							version = ParameterUtil.parseETagValue(nextReqEntry.getRequest().getIfMatch());
-						}
-						res.setId(new IdType(parts.getResourceType(), parts.getResourceId(), version));
-						outcome = resourceDao.update(res, null, false, theRequestDetails);
-					} else {
-						res.setId((String) null);
-						String matchUrl;
-						if (isNotBlank(parts.getParams())) {
-							matchUrl = parts.getResourceType() + '?' + parts.getParams();
-						} else {
-							matchUrl = parts.getResourceType();
-						}
-						matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
-						outcome = resourceDao.update(res, matchUrl, false, theRequestDetails);
-						if (Boolean.TRUE.equals(outcome.getCreated())) {
-							conditionalRequestUrls.put(matchUrl, res.getClass());
-						}
-					}
-
-					if (outcome.getCreated() == Boolean.FALSE) {
-						updatedEntities.add(outcome.getEntity());
-					}
-
-					handleTransactionCreateOrUpdateOutcome(theIdSubstitutions, theIdToPersistedOutcome, nextResourceId, outcome, nextRespEntry, resourceType, res, theRequestDetails);
-					entriesToProcess.put(nextRespEntry, outcome.getEntity());
-					break;
-				}
-				case GET:
-				case NULL:
-					break;
-
-			}
-
-			theTransactionStopWatch.endCurrentTask();
-		}
-
-		/*
-		 * Make sure that there are no conflicts from deletions. E.g. we can't delete something
-		 * if something else has a reference to it.. Unless the thing that has a reference to it
-		 * was also deleted as a part of this transaction, which is why we check this now at the
-		 * end.
-		 */
-
-		deleteConflicts.removeIf(next ->
-			deletedResources.contains(next.getTargetId().toUnqualifiedVersionless().getValue()));
-		validateDeleteConflictsEmptyOrThrowException(deleteConflicts);
-
-		/*
-		 * Perform ID substitutions and then index each resource we have saved
-		 */
-
-		FhirTerser terser = getContext().newTerser();
-		theTransactionStopWatch.startTask("Index " + theIdToPersistedOutcome.size() + " resources");
-		for (DaoMethodOutcome nextOutcome : theIdToPersistedOutcome.values()) {
-			IBaseResource nextResource = nextOutcome.getResource();
-			if (nextResource == null) {
-				continue;
-			}
-
-			// References
-			List<IBaseReference> allRefs = terser.getAllPopulatedChildElementsOfType(nextResource, IBaseReference.class);
-			for (IBaseReference nextRef : allRefs) {
-				IIdType nextId = nextRef.getReferenceElement();
-				if (!nextId.hasIdPart()) {
-					continue;
-				}
-				if (theIdSubstitutions.containsKey(nextId)) {
-					IdType newId = theIdSubstitutions.get(nextId);
-					ourLog.debug(" * Replacing resource ref {} with {}", nextId, newId);
-					nextRef.setReference(newId.getValue());
-				} else if (nextId.getValue().startsWith("urn:")) {
-					throw new InvalidRequestException("Unable to satisfy placeholder ID: " + nextId.getValue());
-				} else {
-					ourLog.debug(" * Reference [{}] does not exist in bundle", nextId);
-				}
-			}
-
-			// URIs
-			List<UriType> allUris = terser.getAllPopulatedChildElementsOfType(nextResource, UriType.class);
-			for (UriType nextRef : allUris) {
-				if (nextRef instanceof IIdType) {
-					continue; // No substitution on the resource ID itself!
-				}
-				IdType nextUriString = new IdType(nextRef.getValueAsString());
-				if (theIdSubstitutions.containsKey(nextUriString)) {
-					IdType newId = theIdSubstitutions.get(nextUriString);
-					ourLog.debug(" * Replacing resource ref {} with {}", nextUriString, newId);
-					nextRef.setValue(newId.getValue());
-				} else {
-					ourLog.debug(" * Reference [{}] does not exist in bundle", nextUriString);
-				}
-			}
-
-			IPrimitiveType<Date> deletedInstantOrNull = ResourceMetadataKeyEnum.DELETED_AT.get((IAnyResource) nextResource);
-			Date deletedTimestampOrNull = deletedInstantOrNull != null ? deletedInstantOrNull.getValue() : null;
-
-			if (updatedEntities.contains(nextOutcome.getEntity())) {
-				updateInternal(theRequestDetails, nextResource, true, false, theRequestDetails, nextOutcome.getEntity(), nextResource.getIdElement(), nextOutcome.getPreviousResource());
-			} else if (!nonUpdatedEntities.contains(nextOutcome.getEntity())) {
-				updateEntity(theRequestDetails, nextResource, nextOutcome.getEntity(), deletedTimestampOrNull, true, false, theUpdateTime, false, true);
-			}
-		}
-
-		theTransactionStopWatch.endCurrentTask();
-		theTransactionStopWatch.startTask("Flush writes to database");
-
-		flushJpaSession();
-
-		theTransactionStopWatch.endCurrentTask();
-		if (conditionalRequestUrls.size() > 0) {
-			theTransactionStopWatch.startTask("Check for conflicts in conditional resources");
-		}
-
-		/*
-		 * Double check we didn't allow any duplicates we shouldn't have
-		 */
-		for (Entry<String, Class<? extends IBaseResource>> nextEntry : conditionalRequestUrls.entrySet()) {
-			String matchUrl = nextEntry.getKey();
-			Class<? extends IBaseResource> resType = nextEntry.getValue();
-			if (isNotBlank(matchUrl)) {
-				IFhirResourceDao<?> resourceDao = getDao(resType);
-				Set<Long> val = resourceDao.processMatchUrl(matchUrl);
-				if (val.size() > 1) {
-					throw new InvalidRequestException(
-						"Unable to process " + theActionName + " - Request would cause multiple resources to match URL: \"" + matchUrl + "\". Does transaction request contain duplicates?");
-				}
-			}
-		}
-
-		theTransactionStopWatch.endCurrentTask();
-
-		for (IdType next : theAllIds) {
-			IdType replacement = theIdSubstitutions.get(next);
-			if (replacement == null) {
-				continue;
-			}
-			if (replacement.equals(next)) {
-				continue;
-			}
-			ourLog.debug("Placeholder resource ID \"{}\" was replaced with permanent ID \"{}\"", next, replacement);
-		}
-		return entriesToProcess;
-	}
-
-	private String extractTransactionUrlOrThrowException(BundleEntryComponent nextEntry, HTTPVerb verb) {
-		String url = nextEntry.getRequest().getUrl();
-		if (isBlank(url)) {
-			throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionMissingUrl", verb.name()));
-		}
-		return url;
-	}
-
-	/**
-	 * This method is called for nested bundles (e.g. if we received a transaction with an entry that
-	 * was a GET search, this method is called on the bundle for the search result, that will be placed in the
-	 * outer bundle). This method applies the _summary and _content parameters to the output of
-	 * that bundle.
-	 * <p>
-	 * TODO: This isn't the most efficient way of doing this.. hopefully we can come up with something better in the future.
-	 */
-	private IBaseResource filterNestedBundle(RequestDetails theRequestDetails, IBaseResource theResource) {
-		IParser p = getContext().newJsonParser();
-		RestfulServerUtils.configureResponseParser(theRequestDetails, p);
-		return p.parseResource(theResource.getClass(), p.encodeResourceToString(theResource));
-	}
-
-
 	@Override
 	public Meta metaGetOperation(RequestDetails theRequestDetails) {
 		// Notify interceptors
@@ -634,60 +58,10 @@ public class FhirSystemDaoDstu3 extends BaseHapiFhirSystemDao<Bundle, Meta> {
 		TypedQuery<TagDefinition> q = myEntityManager.createQuery(sql, TagDefinition.class);
 		List<TagDefinition> tagDefinitions = q.getResultList();
 
-		Meta retVal = toMeta(tagDefinitions);
-
-		return retVal;
+		return toMeta(tagDefinitions);
 	}
 
-	private String performIdSubstitutionsInMatchUrl(Map<IdType, IdType> theIdSubstitutions, String theMatchUrl) {
-		String matchUrl = theMatchUrl;
-		if (isNotBlank(matchUrl)) {
-			for (Entry<IdType, IdType> nextSubstitutionEntry : theIdSubstitutions.entrySet()) {
-				IdType nextTemporaryId = nextSubstitutionEntry.getKey();
-				IdType nextReplacementId = nextSubstitutionEntry.getValue();
-				String nextTemporaryIdPart = nextTemporaryId.getIdPart();
-				String nextReplacementIdPart = nextReplacementId.getValueAsString();
-				if (nextTemporaryId.isUrn() && nextTemporaryIdPart.length() > IdType.URN_PREFIX.length()) {
-					matchUrl = matchUrl.replace(nextTemporaryIdPart, nextReplacementIdPart);
-					matchUrl = matchUrl.replace(UrlUtil.escapeUrlParam(nextTemporaryIdPart), nextReplacementIdPart);
-				}
-			}
-		}
-		return matchUrl;
-	}
-
-	private void populateEntryWithOperationOutcome(BaseServerResponseException caughtEx, BundleEntryComponent nextEntry) {
-		OperationOutcome oo = new OperationOutcome();
-		oo.addIssue().setSeverity(IssueSeverity.ERROR).setDiagnostics(caughtEx.getMessage());
-		nextEntry.getResponse().setOutcome(oo);
-	}
-
-	private ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> toDao(UrlParts theParts, String theVerb, String theUrl) {
-		RuntimeResourceDefinition resType;
-		try {
-			resType = getContext().getResourceDefinition(theParts.getResourceType());
-		} catch (DataFormatException e) {
-			String msg = getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
-			throw new InvalidRequestException(msg);
-		}
-		IFhirResourceDao<? extends IBaseResource> dao = null;
-		if (resType != null) {
-			dao = getDao(resType.getImplementingClass());
-		}
-		if (dao == null) {
-			String msg = getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
-			throw new InvalidRequestException(msg);
-		}
-
-		// if (theParts.getResourceId() == null && theParts.getParams() == null) {
-		// String msg = getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
-		// throw new InvalidRequestException(msg);
-		// }
-
-		return dao;
-	}
-
-	protected Meta toMeta(Collection<TagDefinition> tagDefinitions) {
+	private Meta toMeta(Collection<TagDefinition> tagDefinitions) {
 		Meta retVal = new Meta();
 		for (TagDefinition next : tagDefinitions) {
 			switch (next.getTagType()) {
@@ -708,187 +82,8 @@ public class FhirSystemDaoDstu3 extends BaseHapiFhirSystemDao<Bundle, Meta> {
 	@Transactional(propagation = Propagation.NEVER)
 	@Override
 	public Bundle transaction(RequestDetails theRequestDetails, Bundle theRequest) {
-		if (theRequestDetails != null) {
-			ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, theRequest, "Bundle", null);
-			notifyInterceptors(RestOperationTypeEnum.TRANSACTION, requestDetails);
-		}
-
-		String actionName = "Transaction";
-		return transaction((ServletRequestDetails) theRequestDetails, theRequest, actionName);
+		return myTransactionProcessor.transaction(theRequestDetails, theRequest);
 	}
 
-	private Bundle transaction(ServletRequestDetails theRequestDetails, Bundle theRequest, String theActionName) {
-		super.markRequestAsProcessingSubRequest(theRequestDetails);
-		try {
-			return doTransaction(theRequestDetails, theRequest, theActionName);
-		} finally {
-			super.clearRequestAsProcessingSubRequest(theRequestDetails);
-		}
-	}
-
-	private static void handleTransactionCreateOrUpdateOutcome(Map<IdType, IdType> idSubstitutions, Map<IdType, DaoMethodOutcome> idToPersistedOutcome, IdType nextResourceId, DaoMethodOutcome outcome,
-																				  BundleEntryComponent newEntry, String theResourceType, IBaseResource theRes, ServletRequestDetails theRequestDetails) {
-		IdType newId = (IdType) outcome.getId().toUnqualifiedVersionless();
-		IdType resourceId = isPlaceholder(nextResourceId) ? nextResourceId : nextResourceId.toUnqualifiedVersionless();
-		if (newId.equals(resourceId) == false) {
-			idSubstitutions.put(resourceId, newId);
-			if (isPlaceholder(resourceId)) {
-				/*
-				 * The correct way for substitution IDs to be is to be with no resource type, but we'll accept the qualified kind too just to be lenient.
-				 */
-				idSubstitutions.put(new IdType(theResourceType + '/' + resourceId.getValue()), newId);
-			}
-		}
-		idToPersistedOutcome.put(newId, outcome);
-		if (outcome.getCreated().booleanValue()) {
-			newEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_201_CREATED));
-		} else {
-			newEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_200_OK));
-		}
-		newEntry.getResponse().setLastModified(((Resource) theRes).getMeta().getLastUpdated());
-
-		if (theRequestDetails != null) {
-			if (outcome.getResource() != null) {
-				String prefer = theRequestDetails.getHeader(Constants.HEADER_PREFER);
-				PreferReturnEnum preferReturn = RestfulServerUtils.parsePreferHeader(prefer);
-				if (preferReturn != null) {
-					if (preferReturn == PreferReturnEnum.REPRESENTATION) {
-						newEntry.setResource((Resource) outcome.getResource());
-					}
-				}
-			}
-		}
-
-	}
-
-	private static boolean isPlaceholder(IdType theId) {
-		if (theId != null && theId.getValue() != null) {
-			if (theId.getValue().startsWith("urn:oid:") || theId.getValue().startsWith("urn:uuid:")) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private static String toStatusString(int theStatusCode) {
-		return Integer.toString(theStatusCode) + " " + defaultString(Constants.HTTP_STATUS_NAMES.get(theStatusCode));
-	}
-
-	/**
-	 * Transaction Order, per the spec:
-	 * <p>
-	 * Process any DELETE interactions
-	 * Process any POST interactions
-	 * Process any PUT interactions
-	 * Process any GET interactions
-	 */
-	//@formatter:off
-	public class TransactionSorter implements Comparator<BundleEntryComponent> {
-
-		private Set<String> myPlaceholderIds;
-
-		public TransactionSorter(Set<String> thePlaceholderIds) {
-			myPlaceholderIds = thePlaceholderIds;
-		}
-
-		@Override
-		public int compare(BundleEntryComponent theO1, BundleEntryComponent theO2) {
-			int o1 = toOrder(theO1);
-			int o2 = toOrder(theO2);
-
-			if (o1 == o2) {
-				String matchUrl1 = toMatchUrl(theO1);
-				String matchUrl2 = toMatchUrl(theO2);
-				if (isBlank(matchUrl1) && isBlank(matchUrl2)) {
-					return 0;
-				}
-				if (isBlank(matchUrl1)) {
-					return -1;
-				}
-				if (isBlank(matchUrl2)) {
-					return 1;
-				}
-
-				boolean match1containsSubstitutions = false;
-				boolean match2containsSubstitutions = false;
-				for (String nextPlaceholder : myPlaceholderIds) {
-					if (matchUrl1.contains(nextPlaceholder)) {
-						match1containsSubstitutions = true;
-					}
-					if (matchUrl2.contains(nextPlaceholder)) {
-						match2containsSubstitutions = true;
-					}
-				}
-
-				if (match1containsSubstitutions && match2containsSubstitutions) {
-					return 0;
-				}
-				if (!match1containsSubstitutions && !match2containsSubstitutions) {
-					return 0;
-				}
-				if (match1containsSubstitutions) {
-					return 1;
-				} else {
-					return -1;
-				}
-			}
-
-			return o1 - o2;
-		}
-
-		private String toMatchUrl(BundleEntryComponent theEntry) {
-			HTTPVerb verb = theEntry.getRequest().getMethod();
-			if (verb == HTTPVerb.POST) {
-				return theEntry.getRequest().getIfNoneExist();
-			}
-			if (verb == HTTPVerb.PUT || verb == HTTPVerb.DELETE) {
-				String url = extractTransactionUrlOrThrowException(theEntry, verb);
-				UrlParts parts = UrlUtil.parseUrl(url);
-				if (isBlank(parts.getResourceId())) {
-					return parts.getResourceType() + '?' + parts.getParams();
-				}
-			}
-			return null;
-		}
-
-		private int toOrder(BundleEntryComponent theO1) {
-			int o1 = 0;
-			if (theO1.getRequest().getMethodElement().getValue() != null) {
-				switch (theO1.getRequest().getMethodElement().getValue()) {
-					case DELETE:
-						o1 = 1;
-						break;
-					case POST:
-						o1 = 2;
-						break;
-					case PUT:
-						o1 = 3;
-						break;
-					case GET:
-						o1 = 4;
-						break;
-					case NULL:
-						o1 = 0;
-						break;
-				}
-			}
-			return o1;
-		}
-
-	}
-
-	//@formatter:off
-
-	private static class BaseServerResponseExceptionHolder {
-		private BaseServerResponseException myException;
-
-		public BaseServerResponseException getException() {
-			return myException;
-		}
-
-		public void setException(BaseServerResponseException myException) {
-			this.myException = myException;
-		}
-	}
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/SearchParamExtractorDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/SearchParamExtractorDstu3.java
index ca2ff8df921..a9fb3f13995 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/SearchParamExtractorDstu3.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/SearchParamExtractorDstu3.java
@@ -19,19 +19,18 @@ package ca.uhn.fhir.jpa.dao.dstu3;
  * limitations under the License.
  * #L%
  */
-import static org.apache.commons.lang3.StringUtils.isBlank;
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-import static org.apache.commons.lang3.StringUtils.trim;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-import javax.measure.unit.NonSI;
-import javax.measure.unit.Unit;
 
+import ca.uhn.fhir.context.ConfigurationException;
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.RuntimeSearchParam;
+import ca.uhn.fhir.jpa.dao.*;
+import ca.uhn.fhir.jpa.entity.*;
+import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
-import org.hl7.fhir.dstu3.context.IWorkerContext;
+import org.hl7.fhir.dstu3.hapi.ctx.HapiWorkerContext;
 import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
 import org.hl7.fhir.dstu3.model.*;
 import org.hl7.fhir.dstu3.model.CapabilityStatement.CapabilityStatementRestSecurityComponent;
@@ -40,16 +39,18 @@ import org.hl7.fhir.dstu3.model.Location.LocationPositionComponent;
 import org.hl7.fhir.dstu3.model.Patient.PatientCommunicationComponent;
 import org.hl7.fhir.dstu3.utils.FHIRPathEngine;
 import org.hl7.fhir.exceptions.FHIRException;
-import org.hl7.fhir.instance.model.api.*;
+import org.hl7.fhir.instance.model.api.IBase;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import com.google.common.annotations.VisibleForTesting;
+import javax.annotation.PostConstruct;
+import javax.measure.unit.NonSI;
+import javax.measure.unit.Unit;
+import java.math.BigDecimal;
+import java.util.*;
 
-import ca.uhn.fhir.context.*;
-import ca.uhn.fhir.jpa.dao.*;
-import ca.uhn.fhir.jpa.entity.*;
-import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
-import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import static org.apache.commons.lang3.StringUtils.*;
 
 public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implements ISearchParamExtractor {
 
@@ -58,6 +59,8 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 	@Autowired
 	private org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport myValidationSupport;
 
+	private HapiWorkerContext myWorkerContext;
+
 	/**
 	 * Constructor
 	 */
@@ -65,11 +68,22 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 		super();
 	}
 
-	public SearchParamExtractorDstu3(FhirContext theCtx, IValidationSupport theValidationSupport, ISearchParamRegistry theSearchParamRegistry) {
-		super(theCtx, theSearchParamRegistry);
+	public SearchParamExtractorDstu3(DaoConfig theDaoConfig, FhirContext theCtx, IValidationSupport theValidationSupport, ISearchParamRegistry theSearchParamRegistry) {
+		super(theDaoConfig, theCtx, theSearchParamRegistry);
 		myValidationSupport = theValidationSupport;
 	}
 
+	private void addQuantity(ResourceTable theEntity, HashSet<ResourceIndexedSearchParamQuantity> retVal, String resourceName, Quantity nextValue) {
+		if (!nextValue.getValueElement().isEmpty()) {
+			BigDecimal nextValueValue = nextValue.getValueElement().getValue();
+			String nextValueString = nextValue.getSystemElement().getValueAsString();
+			String nextValueCode = nextValue.getCode();
+			ResourceIndexedSearchParamQuantity nextEntity = new ResourceIndexedSearchParamQuantity(resourceName, nextValueValue, nextValueString, nextValueCode);
+			nextEntity.setResource(theEntity);
+			retVal.add(nextEntity);
+		}
+	}
+
 	private void addSearchTerm(ResourceTable theEntity, Set<ResourceIndexedSearchParamString> retVal, String resourceName, String searchTerm) {
 		if (isBlank(searchTerm)) {
 			return;
@@ -78,7 +92,7 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 			searchTerm = searchTerm.substring(0, ResourceIndexedSearchParamString.MAX_LENGTH);
 		}
 
-		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(resourceName, BaseHapiFhirDao.normalizeString(searchTerm), searchTerm);
+		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(getDaoConfig(), resourceName, BaseHapiFhirDao.normalizeString(searchTerm), searchTerm);
 		nextEntity.setResource(theEntity);
 		retVal.add(nextEntity);
 	}
@@ -87,11 +101,28 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 		if (value.length() > ResourceIndexedSearchParamString.MAX_LENGTH) {
 			value = value.substring(0, ResourceIndexedSearchParamString.MAX_LENGTH);
 		}
-		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(nextSpDef.getName(), BaseHapiFhirDao.normalizeString(value), value);
+		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(getDaoConfig(), nextSpDef.getName(), BaseHapiFhirDao.normalizeString(value), value);
 		nextEntity.setResource(theEntity);
 		retVal.add(nextEntity);
 	}
 
+	@Override
+	public List<PathAndRef> extractResourceLinks(IBaseResource theResource, RuntimeSearchParam theNextSpDef) {
+		ArrayList<PathAndRef> retVal = new ArrayList<PathAndRef>();
+
+		String[] nextPathsSplit = SPLIT.split(theNextSpDef.getPath());
+		for (String path : nextPathsSplit) {
+			path = path.trim();
+			if (isNotBlank(path)) {
+				for (Object next : extractValues(path, theResource)) {
+					retVal.add(new PathAndRef(path, next));
+				}
+			}
+		}
+
+		return retVal;
+	}
+
 	@Override
 	public Set<ResourceIndexedSearchParamCoords> extractSearchParamCoords(ResourceTable theEntity, IBaseResource theResource) {
 		// TODO: implement
@@ -100,7 +131,7 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamDates(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
@@ -187,12 +218,12 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamNumber(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
 	public HashSet<ResourceIndexedSearchParamNumber> extractSearchParamNumber(ResourceTable theEntity, IBaseResource theResource) {
-		HashSet<ResourceIndexedSearchParamNumber> retVal = new HashSet<ResourceIndexedSearchParamNumber>();
+		HashSet<ResourceIndexedSearchParamNumber> retVal = new HashSet<>();
 
 		Collection<RuntimeSearchParam> searchParams = getSearchParams(theResource);
 		for (RuntimeSearchParam nextSpDef : searchParams) {
@@ -237,7 +268,7 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 							/*
 							 * @SuppressWarnings("unchecked") PhysicsUnit<? extends org.unitsofmeasurement.quantity.Quantity<?>> unit = (PhysicsUnit<? extends org.unitsofmeasurement.quantity.Quantity<?>>)
 							 * UCUMFormat.getCaseInsensitiveInstance().parse(nextValue.getCode().getValue(), null); if (unit.isCompatible(UCUM.DAY)) {
-							 * 
+							 *
 							 * @SuppressWarnings("unchecked") PhysicsUnit<org.unitsofmeasurement.quantity.Time> timeUnit = (PhysicsUnit<Time>) unit; UnitConverter conv = timeUnit.getConverterTo(UCUM.DAY);
 							 * double dayValue = conv.convert(nextValue.getValue().getValue().doubleValue()); Duration newValue = new Duration(); newValue.setSystem(UCUM_NS);
 							 * newValue.setCode(UCUM.DAY.getSymbol()); newValue.setValue(dayValue); nextValue=newValue; }
@@ -290,7 +321,7 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamQuantity(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
@@ -341,20 +372,9 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 		return retVal;
 	}
 
-	private void addQuantity(ResourceTable theEntity, HashSet<ResourceIndexedSearchParamQuantity> retVal, String resourceName, Quantity nextValue) {
-		if (!nextValue.getValueElement().isEmpty()) {
-			BigDecimal nextValueValue = nextValue.getValueElement().getValue();
-			String nextValueString = nextValue.getSystemElement().getValueAsString();
-			String nextValueCode = nextValue.getCode();
-			ResourceIndexedSearchParamQuantity nextEntity = new ResourceIndexedSearchParamQuantity(resourceName, nextValueValue, nextValueString, nextValueCode);
-			nextEntity.setResource(theEntity);
-			retVal.add(nextEntity);
-		}
-	}
-
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamStrings(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
@@ -454,7 +474,7 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamTokens(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
@@ -666,14 +686,14 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 	}
 
 	private void extractTokensFromCodeableConcept(List<String> theSystems, List<String> theCodes, CodeableConcept theCodeableConcept, ResourceTable theEntity,
-			Set<BaseResourceIndexedSearchParam> theListToPopulate, RuntimeSearchParam theParameterDef) {
+																 Set<BaseResourceIndexedSearchParam> theListToPopulate, RuntimeSearchParam theParameterDef) {
 		for (Coding nextCoding : theCodeableConcept.getCoding()) {
 			extractTokensFromCoding(theSystems, theCodes, theEntity, theListToPopulate, theParameterDef, nextCoding);
 		}
 	}
 
 	private void extractTokensFromCoding(List<String> theSystems, List<String> theCodes, ResourceTable theEntity, Set<BaseResourceIndexedSearchParam> theListToPopulate,
-			RuntimeSearchParam theParameterDef, Coding nextCoding) {
+													 RuntimeSearchParam theParameterDef, Coding nextCoding) {
 		if (nextCoding != null && !nextCoding.isEmpty()) {
 
 			String nextSystem = nextCoding.getSystemElement().getValueAsString();
@@ -695,20 +715,21 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 	 */
 	@Override
 	protected List<Object> extractValues(String thePaths, IBaseResource theResource) {
-		IWorkerContext worker = new org.hl7.fhir.dstu3.hapi.ctx.HapiWorkerContext(getContext(), myValidationSupport);
-		FHIRPathEngine fp = new FHIRPathEngine(worker);
+		FHIRPathEngine fp = new FHIRPathEngine(myWorkerContext);
 
 		List<Object> values = new ArrayList<>();
-		try {
-			String[] nextPathsSplit = SPLIT.split(thePaths);
-			for (String nextPath : nextPathsSplit) {
-				List<Base> allValues = fp.evaluate((Base) theResource, trim(nextPath));
-				if (allValues.isEmpty() == false) {
-					values.addAll(allValues);
-				}
+		String[] nextPathsSplit = SPLIT.split(thePaths);
+		for (String nextPath : nextPathsSplit) {
+			List<Base> allValues;
+			try {
+				allValues = fp.evaluate((Base) theResource, trim(nextPath));
+			} catch (FHIRException e) {
+				String msg = getContext().getLocalizer().getMessage(BaseSearchParamExtractor.class, "failedToExtractPaths", nextPath, e.toString());
+				throw new InternalErrorException(msg, e);
+			}
+			if (allValues.isEmpty() == false) {
+				values.addAll(allValues);
 			}
-		} catch (FHIRException e) {
-			throw new InternalErrorException(e);
 		}
 
 		for (int i = 0; i < values.size(); i++) {
@@ -723,28 +744,16 @@ public class SearchParamExtractorDstu3 extends BaseSearchParamExtractor implemen
 		return values;
 	}
 
-	@Override
-	public List<PathAndRef> extractResourceLinks(IBaseResource theResource, RuntimeSearchParam theNextSpDef) {
-		ArrayList<PathAndRef> retVal = new ArrayList<PathAndRef>();
-
-		String[] nextPathsSplit = SPLIT.split(theNextSpDef.getPath());
-		for (String path : nextPathsSplit) {
-			path = path.trim();
-			if (isNotBlank(path)) {
-				for (Object next : extractValues(path, theResource)) {
-					retVal.add(new PathAndRef(path, next));
-				}
-			}
-		}
-
-		return retVal;
-	}
-
 	@VisibleForTesting
 	void setValidationSupportForTesting(org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport theValidationSupport) {
 		myValidationSupport = theValidationSupport;
 	}
 
+	@PostConstruct
+	public void start() {
+		myWorkerContext = new HapiWorkerContext(getContext(), myValidationSupport);
+	}
+
 	private static <T extends Enum<?>> String extractSystem(Enumeration<T> theBoundCode) {
 		if (theBoundCode.getValue() != null) {
 			return theBoundCode.getEnumFactory().toSystem(theBoundCode.getValue());
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/TransactionProcessorVersionAdapterDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/TransactionProcessorVersionAdapterDstu3.java
new file mode 100644
index 00000000000..ddb198db705
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/dstu3/TransactionProcessorVersionAdapterDstu3.java
@@ -0,0 +1,153 @@
+package ca.uhn.fhir.jpa.dao.dstu3;
+
+/*-
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.dao.TransactionProcessor;
+import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import org.hl7.fhir.dstu3.model.Bundle;
+import org.hl7.fhir.dstu3.model.OperationOutcome;
+import org.hl7.fhir.dstu3.model.Resource;
+import org.hl7.fhir.exceptions.FHIRException;
+import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+import java.util.Date;
+import java.util.List;
+
+public class TransactionProcessorVersionAdapterDstu3 implements TransactionProcessor.ITransactionProcessorVersionAdapter<Bundle, Bundle.BundleEntryComponent> {
+	@Override
+	public void setResponseStatus(Bundle.BundleEntryComponent theBundleEntry, String theStatus) {
+		theBundleEntry.getResponse().setStatus(theStatus);
+	}
+
+	@Override
+	public void setResponseLastModified(Bundle.BundleEntryComponent theBundleEntry, Date theLastModified) {
+		theBundleEntry.getResponse().setLastModified(theLastModified);
+	}
+
+	@Override
+	public void setResource(Bundle.BundleEntryComponent theBundleEntry, IBaseResource theResource) {
+		theBundleEntry.setResource((Resource) theResource);
+	}
+
+	@Override
+	public IBaseResource getResource(Bundle.BundleEntryComponent theBundleEntry) {
+		return theBundleEntry.getResource();
+	}
+
+	@Override
+	public String getBundleType(Bundle theRequest) {
+		if (theRequest.getType() == null) {
+			return null;
+		}
+		return theRequest.getTypeElement().getValue().toCode();
+	}
+
+	@Override
+	public void populateEntryWithOperationOutcome(BaseServerResponseException theCaughtEx, Bundle.BundleEntryComponent theEntry) {
+		OperationOutcome oo = new OperationOutcome();
+		oo.addIssue().setSeverity(OperationOutcome.IssueSeverity.ERROR).setDiagnostics(theCaughtEx.getMessage());
+		theEntry.getResponse().setOutcome(oo);
+	}
+
+	@Override
+	public Bundle createBundle(String theBundleType) {
+		Bundle resp = new Bundle();
+		try {
+			resp.setType(Bundle.BundleType.fromCode(theBundleType));
+		} catch (FHIRException theE) {
+			throw new InternalErrorException("Unknown bundle type: " + theBundleType);
+		}
+		return resp;
+	}
+
+	@Override
+	public List<Bundle.BundleEntryComponent> getEntries(Bundle theRequest) {
+		return theRequest.getEntry();
+	}
+
+	@Override
+	public void addEntry(Bundle theBundle, Bundle.BundleEntryComponent theEntry) {
+		theBundle.addEntry(theEntry);
+	}
+
+	@Override
+	public Bundle.BundleEntryComponent addEntry(Bundle theBundle) {
+		return theBundle.addEntry();
+	}
+
+	@Override
+	public String getEntryRequestVerb(Bundle.BundleEntryComponent theEntry) {
+		String retVal = null;
+		Bundle.HTTPVerb value = theEntry.getRequest().getMethodElement().getValue();
+		if (value != null) {
+			retVal = value.toCode();
+		}
+		return retVal;
+	}
+
+	@Override
+	public String getFullUrl(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getFullUrl();
+	}
+
+	@Override
+	public String getEntryIfNoneExist(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getIfNoneExist();
+	}
+
+	@Override
+	public String getEntryRequestUrl(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getUrl();
+	}
+
+	@Override
+	public void setResponseLocation(Bundle.BundleEntryComponent theEntry, String theResponseLocation) {
+		theEntry.getResponse().setLocation(theResponseLocation);
+	}
+
+	@Override
+	public void setResponseETag(Bundle.BundleEntryComponent theEntry, String theEtag) {
+		theEntry.getResponse().setEtag(theEtag);
+	}
+
+	@Override
+	public String getEntryRequestIfMatch(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getIfMatch();
+	}
+
+	@Override
+	public String getEntryRequestIfNoneExist(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getIfNoneExist();
+	}
+
+	@Override
+	public String getEntryRequestIfNoneMatch(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getIfNoneMatch();
+	}
+
+	@Override
+	public void setResponseOutcome(Bundle.BundleEntryComponent theEntry, IBaseOperationOutcome theOperationOutcome) {
+		theEntry.getResponse().setOutcome((Resource) theOperationOutcome);
+	}
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoCodeSystemR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoCodeSystemR4.java
index 0f3bd4cdec8..d3a99267ead 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoCodeSystemR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoCodeSystemR4.java
@@ -38,7 +38,7 @@ import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.instance.model.api.IPrimitiveType;
 import org.hl7.fhir.r4.hapi.ctx.IValidationSupport.CodeValidationResult;
-import org.hl7.fhir.r4.hapi.ctx.ValidationSupportChain;
+import org.hl7.fhir.r4.hapi.validation.ValidationSupportChain;
 import org.hl7.fhir.r4.model.CodeSystem;
 import org.hl7.fhir.r4.model.CodeSystem.CodeSystemContentMode;
 import org.hl7.fhir.r4.model.CodeSystem.ConceptDefinitionComponent;
@@ -47,7 +47,6 @@ import org.hl7.fhir.r4.model.Coding;
 import org.hl7.fhir.r4.model.IdType;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoCompositionR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoCompositionR4.java
new file mode 100644
index 00000000000..6dbe159ca52
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoCompositionR4.java
@@ -0,0 +1,58 @@
+package ca.uhn.fhir.jpa.dao.r4;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoComposition;
+import ca.uhn.fhir.jpa.dao.ISearchParamRegistry;
+import ca.uhn.fhir.jpa.dao.SearchParameterMap;
+import ca.uhn.fhir.model.api.IResource;
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import ca.uhn.fhir.rest.param.StringParam;
+import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+import org.hl7.fhir.r4.model.Composition;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Collections;
+
+public class FhirResourceDaoCompositionR4 extends FhirResourceDaoR4<Composition>implements IFhirResourceDaoComposition<Composition> {
+
+	@Override
+	public IBundleProvider getDocumentForComposition(HttpServletRequest theServletRequest, IIdType theId, IPrimitiveType<Integer> theCount, DateRangeParam theLastUpdate, SortSpec theSort, RequestDetails theRequestDetails) {
+		SearchParameterMap paramMap = new SearchParameterMap();
+		if (theCount != null) {
+			paramMap.setCount(theCount.getValue());
+		}
+		paramMap.setIncludes(Collections.singleton(IResource.INCLUDE_ALL.asRecursive()));
+		paramMap.setSort(theSort);
+		paramMap.setLastUpdated(theLastUpdate);
+		if (theId != null) {
+			paramMap.add("_id", new StringParam(theId.getIdPart()));
+		}
+		IBundleProvider bundleProvider = search(paramMap);
+		return bundleProvider;
+	}
+}
+
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoConceptMapR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoConceptMapR4.java
index c9c3d4d54ae..4a73bdc8fa7 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoConceptMapR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoConceptMapR4.java
@@ -83,7 +83,9 @@ public class FhirResourceDaoConceptMapR4 extends FhirResourceDaoR4<ConceptMap> i
 				if (targetsToReturn.add(target)) {
 					translationMatch = new TranslationMatch();
 
-					translationMatch.setEquivalence(new CodeType(target.getEquivalence().toCode()));
+					if (target.getEquivalence() != null) {
+						translationMatch.setEquivalence(new CodeType(target.getEquivalence().toCode()));
+					}
 
 					translationMatch.setConcept(
 						new Coding()
@@ -143,6 +145,10 @@ public class FhirResourceDaoConceptMapR4 extends FhirResourceDaoR4<ConceptMap> i
 
 					translationMatch.setSource(new UriType(element.getConceptMapUrl()));
 
+					if (element.getConceptMapGroupElementTargets().size() == 1) {
+						translationMatch.setEquivalence(new CodeType(element.getConceptMapGroupElementTargets().get(0).getEquivalence().toCode()));
+					}
+
 					retVal.addMatch(translationMatch);
 				}
 			}
@@ -156,9 +162,12 @@ public class FhirResourceDaoConceptMapR4 extends FhirResourceDaoR4<ConceptMap> i
 													 boolean theUpdateVersion, Date theUpdateTime, boolean theForceUpdate, boolean theCreateNewHistoryEntry) {
 		ResourceTable retVal = super.updateEntity(theRequestDetails, theResource, theEntity, theDeletedTimestampOrNull, thePerformIndexing, theUpdateVersion, theUpdateTime, theForceUpdate, theCreateNewHistoryEntry);
 
-		ConceptMap conceptMap = (ConceptMap) theResource;
-
-		myHapiTerminologySvc.storeTermConceptMapAndChildren(retVal, conceptMap);
+		if (retVal.getDeleted() == null) {
+			ConceptMap conceptMap = (ConceptMap) theResource;
+			myHapiTerminologySvc.storeTermConceptMapAndChildren(retVal, conceptMap);
+		} else {
+			myHapiTerminologySvc.deleteConceptMapAndChildren(retVal);
+		}
 
 		return retVal;
 	}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoMessageHeaderR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoMessageHeaderR4.java
new file mode 100644
index 00000000000..ba8ce1d8ded
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoMessageHeaderR4.java
@@ -0,0 +1,36 @@
+package ca.uhn.fhir.jpa.dao.r4;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.dao.FhirResourceDaoMessageHeaderDstu2;
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoMessageHeader;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+import org.hl7.fhir.r4.model.MessageHeader;
+
+public class FhirResourceDaoMessageHeaderR4 extends FhirResourceDaoR4<MessageHeader> implements IFhirResourceDaoMessageHeader<MessageHeader> {
+
+	@Override
+	public IBaseBundle messageHeaderProcessMessage(RequestDetails theRequestDetails, IBaseBundle theMessage) {
+		return FhirResourceDaoMessageHeaderDstu2.throwProcessMessageNotImplemented();
+	}
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoPatientR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoPatientR4.java
index e439c993258..f88706fac71 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoPatientR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoPatientR4.java
@@ -41,9 +41,6 @@ import ca.uhn.fhir.rest.param.*;
 
 public class FhirResourceDaoPatientR4 extends FhirResourceDaoR4<Patient>implements IFhirResourceDaoPatient<Patient> {
 
-	@Autowired
-	private ISearchParamRegistry mySerarchParamRegistry;
-
 	private IBundleProvider doEverythingOperation(IIdType theId, IPrimitiveType<Integer> theCount, DateRangeParam theLastUpdated, SortSpec theSort, StringAndListParam theContent, StringAndListParam theNarrative, RequestDetails theRequestDetails) {
 		SearchParameterMap paramMap = new SearchParameterMap();
 		if (theCount != null) {
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoSearchParameterR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoSearchParameterR4.java
index d2e964e913e..7648d725649 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoSearchParameterR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoSearchParameterR4.java
@@ -1,13 +1,17 @@
 package ca.uhn.fhir.jpa.dao.r4;
 
 import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.FhirVersionEnum;
 import ca.uhn.fhir.jpa.dao.BaseSearchParamExtractor;
+import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.jpa.dao.IFhirResourceDaoSearchParameter;
 import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
 import ca.uhn.fhir.jpa.entity.ResourceTable;
 import ca.uhn.fhir.parser.DataFormatException;
 import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
 import ca.uhn.fhir.util.ElementUtil;
+import org.hl7.fhir.instance.model.api.IBase;
+import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IPrimitiveType;
 import org.hl7.fhir.r4.model.*;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -76,10 +80,10 @@ public class FhirResourceDaoSearchParameterR4 extends FhirResourceDaoR4<SearchPa
 		FhirContext context = getContext();
 		Enum<?> type = theResource.getType();
 
-		FhirResourceDaoSearchParameterR4.validateSearchParam(type, status, base, expression, context);
+		FhirResourceDaoSearchParameterR4.validateSearchParam(type, status, base, expression, context, getConfig());
 	}
 
-	public static void validateSearchParam(Enum<?> theType, Enum<?> theStatus, List<? extends IPrimitiveType> theBase, String theExpression, FhirContext theContext) {
+	public static void validateSearchParam(Enum<?> theType, Enum<?> theStatus, List<? extends IPrimitiveType> theBase, String theExpression, FhirContext theContext, DaoConfig theDaoConfig) {
 		if (theStatus == null) {
 			throw new UnprocessableEntityException("SearchParameter.status is missing or invalid");
 		}
@@ -116,6 +120,17 @@ public class FhirResourceDaoSearchParameterR4 extends FhirResourceDaoR4<SearchPa
 					throw new UnprocessableEntityException("Invalid SearchParameter.expression value \"" + nextPath + "\": " + e.getMessage());
 				}
 
+				if (theContext.getVersion().getVersion().isEqualOrNewerThan(FhirVersionEnum.DSTU3)) {
+					if (theDaoConfig.isValidateSearchParameterExpressionsOnSave()) {
+						IBaseResource temporaryInstance = theContext.getResourceDefinition(resourceName).newInstance();
+						try {
+							theContext.newFluentPath().evaluate(temporaryInstance, nextPath, IBase.class);
+						} catch (Exception e) {
+							String msg = theContext.getLocalizer().getMessage(FhirResourceDaoSearchParameterR4.class, "invalidSearchParamExpression", nextPath, e.getMessage());
+							throw new UnprocessableEntityException(msg, e);
+						}
+					}
+				}
 			}
 
 		} // if have expression
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoValueSetR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoValueSetR4.java
index 96656508902..6965832985b 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoValueSetR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoValueSetR4.java
@@ -63,8 +63,25 @@ public class FhirResourceDaoValueSetR4 extends FhirResourceDaoR4<ValueSet> imple
 
 	private ValueSet doExpand(ValueSet theSource) {
 
-		validateIncludes("include", theSource.getCompose().getInclude());
-		validateIncludes("exclude", theSource.getCompose().getExclude());
+		/*
+		 * If all of the code systems are supported by the HAPI FHIR terminology service, let's
+		 * use that as it's more efficient.
+		 */
+
+		boolean allSystemsAreSuppportedByTerminologyService = true;
+		for (ConceptSetComponent next : theSource.getCompose().getInclude()) {
+			if (!isBlank(next.getSystem()) && !myTerminologySvc.supportsSystem(next.getSystem())) {
+				allSystemsAreSuppportedByTerminologyService = false;
+			}
+		}
+		for (ConceptSetComponent next : theSource.getCompose().getExclude()) {
+			if (!isBlank(next.getSystem()) && !myTerminologySvc.supportsSystem(next.getSystem())) {
+				allSystemsAreSuppportedByTerminologyService = false;
+			}
+		}
+		if (allSystemsAreSuppportedByTerminologyService) {
+			return myTerminologySvc.expandValueSet(theSource);
+		}
 
 		HapiWorkerContext workerContext = new HapiWorkerContext(getContext(), myValidationSupport);
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirSystemDaoR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirSystemDaoR4.java
index ad74a60f642..9d06dbe3d38 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirSystemDaoR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/FhirSystemDaoR4.java
@@ -20,587 +20,34 @@ package ca.uhn.fhir.jpa.dao.r4;
  * #L%
  */
 
-import ca.uhn.fhir.context.RuntimeResourceDefinition;
 import ca.uhn.fhir.jpa.dao.BaseHapiFhirSystemDao;
-import ca.uhn.fhir.jpa.dao.DaoMethodOutcome;
-import ca.uhn.fhir.jpa.dao.DeleteMethodOutcome;
-import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
-import ca.uhn.fhir.jpa.entity.ResourceTable;
+import ca.uhn.fhir.jpa.dao.TransactionProcessor;
 import ca.uhn.fhir.jpa.entity.TagDefinition;
-import ca.uhn.fhir.jpa.provider.ServletSubRequestDetails;
-import ca.uhn.fhir.jpa.util.DeleteConflict;
-import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
-import ca.uhn.fhir.parser.DataFormatException;
-import ca.uhn.fhir.parser.IParser;
-import ca.uhn.fhir.rest.api.Constants;
-import ca.uhn.fhir.rest.api.PreferReturnEnum;
-import ca.uhn.fhir.rest.api.RequestTypeEnum;
 import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
 import ca.uhn.fhir.rest.api.server.RequestDetails;
-import ca.uhn.fhir.rest.param.ParameterUtil;
-import ca.uhn.fhir.rest.server.RestfulServerUtils;
-import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
-import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-import ca.uhn.fhir.rest.server.exceptions.NotModifiedException;
 import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor.ActionRequestDetails;
-import ca.uhn.fhir.rest.server.method.BaseMethodBinding;
-import ca.uhn.fhir.rest.server.method.BaseResourceReturningMethodBinding;
-import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
-import ca.uhn.fhir.util.FhirTerser;
-import ca.uhn.fhir.util.UrlUtil;
-import ca.uhn.fhir.util.UrlUtil.UrlParts;
-import com.google.common.collect.ArrayListMultimap;
-import org.apache.commons.lang3.Validate;
-import org.apache.http.NameValuePair;
-import org.hl7.fhir.instance.model.api.*;
-import org.hl7.fhir.r4.model.*;
+import org.hl7.fhir.r4.model.Bundle;
 import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent;
-import org.hl7.fhir.r4.model.Bundle.BundleEntryResponseComponent;
-import org.hl7.fhir.r4.model.Bundle.BundleType;
-import org.hl7.fhir.r4.model.Bundle.HTTPVerb;
-import org.hl7.fhir.r4.model.OperationOutcome.IssueSeverity;
+import org.hl7.fhir.r4.model.Meta;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.TransactionDefinition;
-import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.transaction.support.TransactionCallback;
-import org.springframework.transaction.support.TransactionTemplate;
 
+import javax.annotation.PostConstruct;
 import javax.persistence.TypedQuery;
-import java.util.*;
-import java.util.Map.Entry;
-
-import static org.apache.commons.lang3.StringUtils.*;
+import java.util.Collection;
+import java.util.List;
 
 public class FhirSystemDaoR4 extends BaseHapiFhirSystemDao<Bundle, Meta> {
 
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirSystemDaoR4.class);
 
 	@Autowired
-	private PlatformTransactionManager myTxManager;
+	private TransactionProcessor<Bundle, BundleEntryComponent> myTransactionProcessor;
 
-	private Bundle batch(final RequestDetails theRequestDetails, Bundle theRequest) {
-		ourLog.info("Beginning batch with {} resources", theRequest.getEntry().size());
-		long start = System.currentTimeMillis();
-
-		TransactionTemplate txTemplate = new TransactionTemplate(myTxManager);
-		txTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
-
-		Bundle resp = new Bundle();
-		resp.setType(BundleType.BATCHRESPONSE);
-
-		/*
-		 * For batch, we handle each entry as a mini-transaction in its own database transaction so that if one fails, it doesn't prevent others
-		 */
-
-		for (final BundleEntryComponent nextRequestEntry : theRequest.getEntry()) {
-
-			BaseServerResponseExceptionHolder caughtEx = new BaseServerResponseExceptionHolder();
-
-			TransactionCallback<Bundle> callback = new TransactionCallback<Bundle>() {
-				@Override
-				public Bundle doInTransaction(TransactionStatus theStatus) {
-					Bundle subRequestBundle = new Bundle();
-					subRequestBundle.setType(BundleType.TRANSACTION);
-					subRequestBundle.addEntry(nextRequestEntry);
-
-					Bundle subResponseBundle = transaction((ServletRequestDetails) theRequestDetails, subRequestBundle, "Batch sub-request");
-					return subResponseBundle;
-				}
-			};
-
-			try {
-				Bundle nextResponseBundle = callback.doInTransaction(null);
-
-				BundleEntryComponent subResponseEntry = nextResponseBundle.getEntry().get(0);
-				resp.addEntry(subResponseEntry);
-
-				/*
-				 * If the individual entry didn't have a resource in its response, bring the sub-transaction's OperationOutcome across so the client can see it
-				 */
-				if (subResponseEntry.getResource() == null) {
-					subResponseEntry.setResource(nextResponseBundle.getEntry().get(0).getResource());
-				}
-
-			} catch (BaseServerResponseException e) {
-				caughtEx.setException(e);
-			} catch (Throwable t) {
-				ourLog.error("Failure during BATCH sub transaction processing", t);
-				caughtEx.setException(new InternalErrorException(t));
-			}
-
-			if (caughtEx.getException() != null) {
-				BundleEntryComponent nextEntry = resp.addEntry();
-
-				populateEntryWithOperationOutcome(caughtEx.getException(), nextEntry);
-
-				BundleEntryResponseComponent nextEntryResp = nextEntry.getResponse();
-				nextEntryResp.setStatus(toStatusString(caughtEx.getException().getStatusCode()));
-			}
-
-		}
-
-		long delay = System.currentTimeMillis() - start;
-		ourLog.info("Batch completed in {}ms", new Object[] {delay});
-
-		return resp;
-	}
-
-	private Bundle doTransaction(final ServletRequestDetails theRequestDetails, final Bundle theRequest, final String theActionName) {
-		BundleType transactionType = theRequest.getTypeElement().getValue();
-		if (transactionType == BundleType.BATCH) {
-			return batch(theRequestDetails, theRequest);
-		}
-
-		if (transactionType == null) {
-			String message = "Transaction Bundle did not specify valid Bundle.type, assuming " + BundleType.TRANSACTION.toCode();
-			ourLog.warn(message);
-			transactionType = BundleType.TRANSACTION;
-		}
-		if (transactionType != BundleType.TRANSACTION) {
-			throw new InvalidRequestException("Unable to process transaction where incoming Bundle.type = " + transactionType.toCode());
-		}
-
-		ourLog.debug("Beginning {} with {} resources", theActionName, theRequest.getEntry().size());
-
-		long start = System.currentTimeMillis();
-		final Date updateTime = new Date();
-
-		final Set<IdType> allIds = new LinkedHashSet<>();
-		final Map<IdType, IdType> idSubstitutions = new HashMap<>();
-		final Map<IdType, DaoMethodOutcome> idToPersistedOutcome = new HashMap<>();
-
-		// Do all entries have a verb?
-		for (int i = 0; i < theRequest.getEntry().size(); i++) {
-			BundleEntryComponent nextReqEntry = theRequest.getEntry().get(i);
-			HTTPVerb verb = nextReqEntry.getRequest().getMethodElement().getValue();
-			if (verb == null) {
-				throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionEntryHasInvalidVerb", nextReqEntry.getRequest().getMethod(), i));
-			}
-		}
-
-		/*
-		 * We want to execute the transaction request bundle elements in the order
-		 * specified by the FHIR specification (see TransactionSorter) so we save the
-		 * original order in the request, then sort it.
-		 *
-		 * Entries with a type of GET are removed from the bundle so that they
-		 * can be processed at the very end. We do this because the incoming resources
-		 * are saved in a two-phase way in order to deal with interdependencies, and
-		 * we want the GET processing to use the final indexing state
-		 */
-		final Bundle response = new Bundle();
-		List<BundleEntryComponent> getEntries = new ArrayList<>();
-		final IdentityHashMap<BundleEntryComponent, Integer> originalRequestOrder = new IdentityHashMap<>();
-		for (int i = 0; i < theRequest.getEntry().size(); i++) {
-			originalRequestOrder.put(theRequest.getEntry().get(i), i);
-			response.addEntry();
-			if (theRequest.getEntry().get(i).getRequest().getMethodElement().getValue() == HTTPVerb.GET) {
-				getEntries.add(theRequest.getEntry().get(i));
-			}
-		}
-
-		/*
-		 * See FhirSystemDaoR4Test#testTransactionWithPlaceholderIdInMatchUrl
-		 * Basically if the resource has a match URL that references a placeholder,
-		 * we try to handle the resource with the placeholder first.
-		 */
-		Set<String> placeholderIds = new HashSet<String>();
-		final List<BundleEntryComponent> entries = theRequest.getEntry();
-		for (BundleEntryComponent nextEntry : entries) {
-			if (isNotBlank(nextEntry.getFullUrl()) && nextEntry.getFullUrl().startsWith(IdType.URN_PREFIX)) {
-				placeholderIds.add(nextEntry.getFullUrl());
-			}
-		}
-		Collections.sort(entries, new TransactionSorter(placeholderIds));
-
-		/*
-		 * All of the write operations in the transaction (PUT, POST, etc.. basically anything
-		 * except GET) are performed in their own database transaction before we do the reads.
-		 * We do this because the reads (specifically the searches) often spawn their own
-		 * secondary database transaction and if we allow that within the primary
-		 * database transaction we can end up with deadlocks if the server is under
-		 * heavy load with lots of concurrent transactions using all available
-		 * database connections.
-		 */
-		TransactionTemplate txManager = new TransactionTemplate(myTxManager);
-		Map<BundleEntryComponent, ResourceTable> entriesToProcess = txManager.execute(new TransactionCallback<Map<BundleEntryComponent, ResourceTable>>() {
-			@Override
-			public Map<BundleEntryComponent, ResourceTable> doInTransaction(TransactionStatus status) {
-				return doTransactionWriteOperations(theRequestDetails, theRequest, theActionName, updateTime, allIds, idSubstitutions, idToPersistedOutcome, response, originalRequestOrder, entries);
-			}
-		});
-		for (Entry<BundleEntryComponent, ResourceTable> nextEntry : entriesToProcess.entrySet()) {
-			String responseLocation = nextEntry.getValue().getIdDt().toUnqualified().getValue();
-			String responseEtag = nextEntry.getValue().getIdDt().getVersionIdPart();
-			nextEntry.getKey().getResponse().setLocation(responseLocation);
-			nextEntry.getKey().getResponse().setEtag(responseEtag);
-		}
-
-		/*
-		 * Loop through the request and process any entries of type GET
-		 */
-		for (int i = 0; i < getEntries.size(); i++) {
-			BundleEntryComponent nextReqEntry = getEntries.get(i);
-			Integer originalOrder = originalRequestOrder.get(nextReqEntry);
-			BundleEntryComponent nextRespEntry = response.getEntry().get(originalOrder);
-
-			ServletSubRequestDetails requestDetails = new ServletSubRequestDetails();
-			requestDetails.setServletRequest(theRequestDetails.getServletRequest());
-			requestDetails.setRequestType(RequestTypeEnum.GET);
-			requestDetails.setServer(theRequestDetails.getServer());
-
-			String url = extractTransactionUrlOrThrowException(nextReqEntry, HTTPVerb.GET);
-
-			int qIndex = url.indexOf('?');
-			ArrayListMultimap<String, String> paramValues = ArrayListMultimap.create();
-			requestDetails.setParameters(new HashMap<String, String[]>());
-			if (qIndex != -1) {
-				String params = url.substring(qIndex);
-				List<NameValuePair> parameters = translateMatchUrl(params);
-				for (NameValuePair next : parameters) {
-					paramValues.put(next.getName(), next.getValue());
-				}
-				for (java.util.Map.Entry<String, Collection<String>> nextParamEntry : paramValues.asMap().entrySet()) {
-					String[] nextValue = nextParamEntry.getValue().toArray(new String[nextParamEntry.getValue().size()]);
-					requestDetails.addParameter(nextParamEntry.getKey(), nextValue);
-				}
-				url = url.substring(0, qIndex);
-			}
-
-			requestDetails.setRequestPath(url);
-			requestDetails.setFhirServerBase(theRequestDetails.getFhirServerBase());
-
-			theRequestDetails.getServer().populateRequestDetailsFromRequestPath(requestDetails, url);
-			BaseMethodBinding<?> method = theRequestDetails.getServer().determineResourceMethod(requestDetails, url);
-			if (method == null) {
-				throw new IllegalArgumentException("Unable to handle GET " + url);
-			}
-
-			if (isNotBlank(nextReqEntry.getRequest().getIfMatch())) {
-				requestDetails.addHeader(Constants.HEADER_IF_MATCH, nextReqEntry.getRequest().getIfMatch());
-			}
-			if (isNotBlank(nextReqEntry.getRequest().getIfNoneExist())) {
-				requestDetails.addHeader(Constants.HEADER_IF_NONE_EXIST, nextReqEntry.getRequest().getIfNoneExist());
-			}
-			if (isNotBlank(nextReqEntry.getRequest().getIfNoneMatch())) {
-				requestDetails.addHeader(Constants.HEADER_IF_NONE_MATCH, nextReqEntry.getRequest().getIfNoneMatch());
-			}
-
-			Validate.isTrue(method instanceof BaseResourceReturningMethodBinding, "Unable to handle GET {0}", url);
-			try {
-				IBaseResource resource = ((BaseResourceReturningMethodBinding) method).doInvokeServer(theRequestDetails.getServer(), requestDetails);
-				if (paramValues.containsKey(Constants.PARAM_SUMMARY) || paramValues.containsKey(Constants.PARAM_CONTENT)) {
-					resource = filterNestedBundle(requestDetails, resource);
-				}
-				nextRespEntry.setResource((Resource) resource);
-				nextRespEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_200_OK));
-			} catch (NotModifiedException e) {
-				nextRespEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_304_NOT_MODIFIED));
-			} catch (BaseServerResponseException e) {
-				ourLog.info("Failure processing transaction GET {}: {}", url, e.toString());
-				nextRespEntry.getResponse().setStatus(toStatusString(e.getStatusCode()));
-				populateEntryWithOperationOutcome(e, nextRespEntry);
-			}
-
-		}
-
-		long delay = System.currentTimeMillis() - start;
-		ourLog.info(theActionName + " completed in {}ms", new Object[] {delay});
-
-		response.setType(BundleType.TRANSACTIONRESPONSE);
-		return response;
-	}
-
-	@SuppressWarnings("unchecked")
-	private Map<BundleEntryComponent, ResourceTable> doTransactionWriteOperations(RequestDetails theRequestDetails, Bundle theRequest, String theActionName, Date theUpdateTime, Set<IdType> theAllIds,
-																											Map<IdType, IdType> theIdSubstitutions, Map<IdType, DaoMethodOutcome> theIdToPersistedOutcome, Bundle theResponse, IdentityHashMap<BundleEntryComponent, Integer> theOriginalRequestOrder, List<BundleEntryComponent> theEntries) {
-		Set<String> deletedResources = new HashSet<>();
-		List<DeleteConflict> deleteConflicts = new ArrayList<>();
-		Map<BundleEntryComponent, ResourceTable> entriesToProcess = new IdentityHashMap<>();
-		Set<ResourceTable> nonUpdatedEntities = new HashSet<>();
-		Set<ResourceTable> updatedEntities = new HashSet<>();
-		Map<String, Class<? extends IBaseResource>> conditionalRequestUrls = new HashMap<>();
-
-		/*
-		 * Loop through the request and process any entries of type
-		 * PUT, POST or DELETE
-		 */
-		for (int i = 0; i < theEntries.size(); i++) {
-
-			if (i % 100 == 0) {
-				ourLog.debug("Processed {} non-GET entries out of {}", i, theEntries.size());
-			}
-
-			BundleEntryComponent nextReqEntry = theEntries.get(i);
-			Resource res = nextReqEntry.getResource();
-			IdType nextResourceId = null;
-			if (res != null) {
-
-				nextResourceId = res.getIdElement();
-
-				if (!nextResourceId.hasIdPart()) {
-					if (isNotBlank(nextReqEntry.getFullUrl())) {
-						nextResourceId = new IdType(nextReqEntry.getFullUrl());
-					}
-				}
-
-				if (nextResourceId.hasIdPart() && nextResourceId.getIdPart().matches("[a-zA-Z]+\\:.*") && !isPlaceholder(nextResourceId)) {
-					throw new InvalidRequestException("Invalid placeholder ID found: " + nextResourceId.getIdPart() + " - Must be of the form 'urn:uuid:[uuid]' or 'urn:oid:[oid]'");
-				}
-
-				if (nextResourceId.hasIdPart() && !nextResourceId.hasResourceType() && !isPlaceholder(nextResourceId)) {
-					nextResourceId = new IdType(toResourceName(res.getClass()), nextResourceId.getIdPart());
-					res.setId(nextResourceId);
-				}
-
-				/*
-				 * Ensure that the bundle doesn't have any duplicates, since this causes all kinds of weirdness
-				 */
-				if (isPlaceholder(nextResourceId)) {
-					if (!theAllIds.add(nextResourceId)) {
-						throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionContainsMultipleWithDuplicateId", nextResourceId));
-					}
-				} else if (nextResourceId.hasResourceType() && nextResourceId.hasIdPart()) {
-					IdType nextId = nextResourceId.toUnqualifiedVersionless();
-					if (!theAllIds.add(nextId)) {
-						throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionContainsMultipleWithDuplicateId", nextId));
-					}
-				}
-
-			}
-
-			HTTPVerb verb = nextReqEntry.getRequest().getMethodElement().getValue();
-
-			String resourceType = res != null ? getContext().getResourceDefinition(res).getName() : null;
-			BundleEntryComponent nextRespEntry = theResponse.getEntry().get(theOriginalRequestOrder.get(nextReqEntry));
-
-			switch (verb) {
-				case POST: {
-					// CREATE
-					@SuppressWarnings("rawtypes")
-					IFhirResourceDao resourceDao = getDaoOrThrowException(res.getClass());
-					res.setId((String) null);
-					DaoMethodOutcome outcome;
-					String matchUrl = nextReqEntry.getRequest().getIfNoneExist();
-					matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
-					outcome = resourceDao.create(res, matchUrl, false, theRequestDetails);
-					if (nextResourceId != null) {
-						handleTransactionCreateOrUpdateOutcome(theIdSubstitutions, theIdToPersistedOutcome, nextResourceId, outcome, nextRespEntry, resourceType, res, theRequestDetails);
-					}
-					entriesToProcess.put(nextRespEntry, outcome.getEntity());
-					if (outcome.getCreated() == false) {
-						nonUpdatedEntities.add(outcome.getEntity());
-					} else {
-						if (isNotBlank(matchUrl)) {
-							conditionalRequestUrls.put(matchUrl, res.getClass());
-						}
-					}
-
-					break;
-				}
-				case DELETE: {
-					// DELETE
-					String url = extractTransactionUrlOrThrowException(nextReqEntry, verb);
-					UrlParts parts = UrlUtil.parseUrl(url);
-					ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> dao = toDao(parts, verb.toCode(), url);
-					int status = Constants.STATUS_HTTP_204_NO_CONTENT;
-					if (parts.getResourceId() != null) {
-						IdType deleteId = new IdType(parts.getResourceType(), parts.getResourceId());
-						if (!deletedResources.contains(deleteId.getValueAsString())) {
-							DaoMethodOutcome outcome = dao.delete(deleteId, deleteConflicts, theRequestDetails);
-							if (outcome.getEntity() != null) {
-								deletedResources.add(deleteId.getValueAsString());
-								entriesToProcess.put(nextRespEntry, outcome.getEntity());
-							}
-						}
-					} else {
-						String matchUrl = parts.getResourceType() + '?' + parts.getParams();
-						matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
-						DeleteMethodOutcome deleteOutcome = dao.deleteByUrl(matchUrl, deleteConflicts, theRequestDetails);
-						List<ResourceTable> allDeleted = deleteOutcome.getDeletedEntities();
-						for (ResourceTable deleted : allDeleted) {
-							deletedResources.add(deleted.getIdDt().toUnqualifiedVersionless().getValueAsString());
-						}
-						if (allDeleted.isEmpty()) {
-							status = Constants.STATUS_HTTP_204_NO_CONTENT;
-						}
-
-						nextRespEntry.getResponse().setOutcome((Resource) deleteOutcome.getOperationOutcome());
-					}
-
-					nextRespEntry.getResponse().setStatus(toStatusString(status));
-
-					break;
-				}
-				case PUT: {
-					// UPDATE
-					@SuppressWarnings("rawtypes")
-					IFhirResourceDao resourceDao = getDaoOrThrowException(res.getClass());
-
-					String url = extractTransactionUrlOrThrowException(nextReqEntry, verb);
-
-					DaoMethodOutcome outcome;
-					UrlParts parts = UrlUtil.parseUrl(url);
-					if (isNotBlank(parts.getResourceId())) {
-						String version = null;
-						if (isNotBlank(nextReqEntry.getRequest().getIfMatch())) {
-							version = ParameterUtil.parseETagValue(nextReqEntry.getRequest().getIfMatch());
-						}
-						res.setId(new IdType(parts.getResourceType(), parts.getResourceId(), version));
-						outcome = resourceDao.update(res, null, false, theRequestDetails);
-					} else {
-						res.setId((String) null);
-						String matchUrl;
-						if (isNotBlank(parts.getParams())) {
-							matchUrl = parts.getResourceType() + '?' + parts.getParams();
-						} else {
-							matchUrl = parts.getResourceType();
-						}
-						matchUrl = performIdSubstitutionsInMatchUrl(theIdSubstitutions, matchUrl);
-						outcome = resourceDao.update(res, matchUrl, false, theRequestDetails);
-						if (Boolean.TRUE.equals(outcome.getCreated())) {
-							conditionalRequestUrls.put(matchUrl, res.getClass());
-						}
-					}
-
-					if (outcome.getCreated() == Boolean.FALSE) {
-						updatedEntities.add(outcome.getEntity());
-					}
-
-					handleTransactionCreateOrUpdateOutcome(theIdSubstitutions, theIdToPersistedOutcome, nextResourceId, outcome, nextRespEntry, resourceType, res, theRequestDetails);
-					entriesToProcess.put(nextRespEntry, outcome.getEntity());
-					break;
-				}
-				case GET:
-				case NULL:
-				case HEAD:
-				case PATCH:
-					break;
-
-			}
-		}
-
-		/*
-		 * Make sure that there are no conflicts from deletions. E.g. we can't delete something
-		 * if something else has a reference to it.. Unless the thing that has a reference to it
-		 * was also deleted as a part of this transaction, which is why we check this now at the
-		 * end.
-		 */
-
-		deleteConflicts.removeIf(next ->
-			deletedResources.contains(next.getTargetId().toUnqualifiedVersionless().getValue()));
-		validateDeleteConflictsEmptyOrThrowException(deleteConflicts);
-
-		/*
-		 * Perform ID substitutions and then index each resource we have saved
-		 */
-
-		FhirTerser terser = getContext().newTerser();
-		for (DaoMethodOutcome nextOutcome : theIdToPersistedOutcome.values()) {
-			IBaseResource nextResource = nextOutcome.getResource();
-			if (nextResource == null) {
-				continue;
-			}
-
-			// References
-			List<IBaseReference> allRefs = terser.getAllPopulatedChildElementsOfType(nextResource, IBaseReference.class);
-			for (IBaseReference nextRef : allRefs) {
-				IIdType nextId = nextRef.getReferenceElement();
-				if (!nextId.hasIdPart()) {
-					continue;
-				}
-				if (theIdSubstitutions.containsKey(nextId)) {
-					IdType newId = theIdSubstitutions.get(nextId);
-					ourLog.debug(" * Replacing resource ref {} with {}", nextId, newId);
-					nextRef.setReference(newId.getValue());
-				} else if (nextId.getValue().startsWith("urn:")) {
-					throw new InvalidRequestException("Unable to satisfy placeholder ID: " + nextId.getValue());
-				} else {
-					ourLog.debug(" * Reference [{}] does not exist in bundle", nextId);
-				}
-			}
-
-			// URIs
-			List<UriType> allUris = terser.getAllPopulatedChildElementsOfType(nextResource, UriType.class);
-			for (UriType nextRef : allUris) {
-				if (nextRef instanceof IIdType) {
-					continue; // No substitution on the resource ID itself!
-				}
-				IdType nextUriString = new IdType(nextRef.getValueAsString());
-				if (theIdSubstitutions.containsKey(nextUriString)) {
-					IdType newId = theIdSubstitutions.get(nextUriString);
-					ourLog.debug(" * Replacing resource ref {} with {}", nextUriString, newId);
-					nextRef.setValue(newId.getValue());
-				} else {
-					ourLog.debug(" * Reference [{}] does not exist in bundle", nextUriString);
-				}
-			}
-
-			IPrimitiveType<Date> deletedInstantOrNull = ResourceMetadataKeyEnum.DELETED_AT.get((IAnyResource) nextResource);
-			Date deletedTimestampOrNull = deletedInstantOrNull != null ? deletedInstantOrNull.getValue() : null;
-
-			if (updatedEntities.contains(nextOutcome.getEntity())) {
-				updateInternal(theRequestDetails, nextResource, true, false, theRequestDetails, nextOutcome.getEntity(), nextResource.getIdElement(), nextOutcome.getPreviousResource());
-			} else if (!nonUpdatedEntities.contains(nextOutcome.getEntity())) {
-				updateEntity(theRequestDetails, nextResource, nextOutcome.getEntity(), deletedTimestampOrNull, true, false, theUpdateTime, false, true);
-			}
-		}
-
-		flushJpaSession();
-
-		/*
-		 * Double check we didn't allow any duplicates we shouldn't have
-		 */
-		for (Entry<String, Class<? extends IBaseResource>> nextEntry : conditionalRequestUrls.entrySet()) {
-			String matchUrl = nextEntry.getKey();
-			Class<? extends IBaseResource> resType = nextEntry.getValue();
-			if (isNotBlank(matchUrl)) {
-				IFhirResourceDao<?> resourceDao = getDao(resType);
-				Set<Long> val = resourceDao.processMatchUrl(matchUrl);
-				if (val.size() > 1) {
-					throw new InvalidRequestException(
-						"Unable to process " + theActionName + " - Request would cause multiple resources to match URL: \"" + matchUrl + "\". Does transaction request contain duplicates?");
-				}
-			}
-		}
-
-		for (IdType next : theAllIds) {
-			IdType replacement = theIdSubstitutions.get(next);
-			if (replacement == null) {
-				continue;
-			}
-			if (replacement.equals(next)) {
-				continue;
-			}
-			ourLog.debug("Placeholder resource ID \"{}\" was replaced with permanent ID \"{}\"", next, replacement);
-		}
-		return entriesToProcess;
-	}
-
-	private String extractTransactionUrlOrThrowException(BundleEntryComponent nextEntry, HTTPVerb verb) {
-		String url = nextEntry.getRequest().getUrl();
-		if (isBlank(url)) {
-			throw new InvalidRequestException(getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionMissingUrl", verb.name()));
-		}
-		return url;
-	}
-
-	/**
-	 * This method is called for nested bundles (e.g. if we received a transaction with an entry that
-	 * was a GET search, this method is called on the bundle for the search result, that will be placed in the
-	 * outer bundle). This method applies the _summary and _content parameters to the output of
-	 * that bundle.
-	 * <p>
-	 * TODO: This isn't the most efficient way of doing this.. hopefully we can come up with something better in the future.
-	 */
-	private IBaseResource filterNestedBundle(RequestDetails theRequestDetails, IBaseResource theResource) {
-		IParser p = getContext().newJsonParser();
-		RestfulServerUtils.configureResponseParser(theRequestDetails, p);
-		return p.parseResource(theResource.getClass(), p.encodeResourceToString(theResource));
+	@PostConstruct
+	public void start() {
+		myTransactionProcessor.setDao(this);
 	}
 
 
@@ -617,53 +64,6 @@ public class FhirSystemDaoR4 extends BaseHapiFhirSystemDao<Bundle, Meta> {
 		return toMeta(tagDefinitions);
 	}
 
-	private String performIdSubstitutionsInMatchUrl(Map<IdType, IdType> theIdSubstitutions, String theMatchUrl) {
-		String matchUrl = theMatchUrl;
-		if (isNotBlank(matchUrl)) {
-			for (Entry<IdType, IdType> nextSubstitutionEntry : theIdSubstitutions.entrySet()) {
-				IdType nextTemporaryId = nextSubstitutionEntry.getKey();
-				IdType nextReplacementId = nextSubstitutionEntry.getValue();
-				String nextTemporaryIdPart = nextTemporaryId.getIdPart();
-				String nextReplacementIdPart = nextReplacementId.getValueAsString();
-				if (nextTemporaryId.isUrn() && nextTemporaryIdPart.length() > IdType.URN_PREFIX.length()) {
-					matchUrl = matchUrl.replace(nextTemporaryIdPart, nextReplacementIdPart);
-					matchUrl = matchUrl.replace(UrlUtil.escapeUrlParam(nextTemporaryIdPart), nextReplacementIdPart);
-				}
-			}
-		}
-		return matchUrl;
-	}
-
-	private void populateEntryWithOperationOutcome(BaseServerResponseException caughtEx, BundleEntryComponent nextEntry) {
-		OperationOutcome oo = new OperationOutcome();
-		oo.addIssue().setSeverity(IssueSeverity.ERROR).setDiagnostics(caughtEx.getMessage());
-		nextEntry.getResponse().setOutcome(oo);
-	}
-
-	private ca.uhn.fhir.jpa.dao.IFhirResourceDao<? extends IBaseResource> toDao(UrlParts theParts, String theVerb, String theUrl) {
-		RuntimeResourceDefinition resType;
-		try {
-			resType = getContext().getResourceDefinition(theParts.getResourceType());
-		} catch (DataFormatException e) {
-			String msg = getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
-			throw new InvalidRequestException(msg);
-		}
-		IFhirResourceDao<? extends IBaseResource> dao = null;
-		if (resType != null) {
-			dao = getDao(resType.getImplementingClass());
-		}
-		if (dao == null) {
-			String msg = getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
-			throw new InvalidRequestException(msg);
-		}
-
-		// if (theParts.getResourceId() == null && theParts.getParams() == null) {
-		// String msg = getContext().getLocalizer().getMessage(BaseHapiFhirSystemDao.class, "transactionInvalidUrl", theVerb, theUrl);
-		// throw new InvalidRequestException(msg);
-		// }
-
-		return dao;
-	}
 
 	protected Meta toMeta(Collection<TagDefinition> tagDefinitions) {
 		Meta retVal = new Meta();
@@ -686,193 +86,7 @@ public class FhirSystemDaoR4 extends BaseHapiFhirSystemDao<Bundle, Meta> {
 	@Transactional(propagation = Propagation.NEVER)
 	@Override
 	public Bundle transaction(RequestDetails theRequestDetails, Bundle theRequest) {
-		if (theRequestDetails != null) {
-			ActionRequestDetails requestDetails = new ActionRequestDetails(theRequestDetails, theRequest, "Bundle", null);
-			notifyInterceptors(RestOperationTypeEnum.TRANSACTION, requestDetails);
-		}
-
-		String actionName = "Transaction";
-		return transaction((ServletRequestDetails) theRequestDetails, theRequest, actionName);
-	}
-
-	private Bundle transaction(ServletRequestDetails theRequestDetails, Bundle theRequest, String theActionName) {
-		super.markRequestAsProcessingSubRequest(theRequestDetails);
-		try {
-			return doTransaction(theRequestDetails, theRequest, theActionName);
-		} finally {
-			super.clearRequestAsProcessingSubRequest(theRequestDetails);
-		}
-	}
-
-	private static void handleTransactionCreateOrUpdateOutcome(Map<IdType, IdType> idSubstitutions, Map<IdType, DaoMethodOutcome> idToPersistedOutcome, IdType nextResourceId, DaoMethodOutcome outcome,
-																				  BundleEntryComponent newEntry, String theResourceType, IBaseResource theRes, RequestDetails theRequestDetails) {
-		IdType newId = (IdType) outcome.getId().toUnqualifiedVersionless();
-		IdType resourceId = isPlaceholder(nextResourceId) ? nextResourceId : nextResourceId.toUnqualifiedVersionless();
-		if (newId.equals(resourceId) == false) {
-			idSubstitutions.put(resourceId, newId);
-			if (isPlaceholder(resourceId)) {
-				/*
-				 * The correct way for substitution IDs to be is to be with no resource type, but we'll accept the qualified kind too just to be lenient.
-				 */
-				idSubstitutions.put(new IdType(theResourceType + '/' + resourceId.getValue()), newId);
-			}
-		}
-		idToPersistedOutcome.put(newId, outcome);
-		if (outcome.getCreated().booleanValue()) {
-			newEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_201_CREATED));
-		} else {
-			newEntry.getResponse().setStatus(toStatusString(Constants.STATUS_HTTP_200_OK));
-		}
-		newEntry.getResponse().setLastModified(((Resource) theRes).getMeta().getLastUpdated());
-
-		if (theRequestDetails != null) {
-			if (outcome.getResource() != null) {
-				String prefer = theRequestDetails.getHeader(Constants.HEADER_PREFER);
-				PreferReturnEnum preferReturn = RestfulServerUtils.parsePreferHeader(prefer);
-				if (preferReturn != null) {
-					if (preferReturn == PreferReturnEnum.REPRESENTATION) {
-						newEntry.setResource((Resource) outcome.getResource());
-					}
-				}
-			}
-		}
-
-	}
-
-	private static boolean isPlaceholder(IdType theId) {
-		if (theId != null && theId.getValue() != null) {
-			if (theId.getValue().startsWith("urn:oid:") || theId.getValue().startsWith("urn:uuid:")) {
-				return true;
-			}
-		}
-		return false;
-	}
-
-	private static String toStatusString(int theStatusCode) {
-		return Integer.toString(theStatusCode) + " " + defaultString(Constants.HTTP_STATUS_NAMES.get(theStatusCode));
-	}
-
-	/**
-	 * Transaction Order, per the spec:
-	 * <p>
-	 * Process any DELETE interactions
-	 * Process any POST interactions
-	 * Process any PUT interactions
-	 * Process any GET interactions
-	 */
-	//@formatter:off
-	public class TransactionSorter implements Comparator<BundleEntryComponent> {
-
-		private Set<String> myPlaceholderIds;
-
-		public TransactionSorter(Set<String> thePlaceholderIds) {
-			myPlaceholderIds = thePlaceholderIds;
-		}
-
-		@Override
-		public int compare(BundleEntryComponent theO1, BundleEntryComponent theO2) {
-			int o1 = toOrder(theO1);
-			int o2 = toOrder(theO2);
-
-			if (o1 == o2) {
-				String matchUrl1 = toMatchUrl(theO1);
-				String matchUrl2 = toMatchUrl(theO2);
-				if (isBlank(matchUrl1) && isBlank(matchUrl2)) {
-					return 0;
-				}
-				if (isBlank(matchUrl1)) {
-					return -1;
-				}
-				if (isBlank(matchUrl2)) {
-					return 1;
-				}
-
-				boolean match1containsSubstitutions = false;
-				boolean match2containsSubstitutions = false;
-				for (String nextPlaceholder : myPlaceholderIds) {
-					if (matchUrl1.contains(nextPlaceholder)) {
-						match1containsSubstitutions = true;
-					}
-					if (matchUrl2.contains(nextPlaceholder)) {
-						match2containsSubstitutions = true;
-					}
-				}
-
-				if (match1containsSubstitutions && match2containsSubstitutions) {
-					return 0;
-				}
-				if (!match1containsSubstitutions && !match2containsSubstitutions) {
-					return 0;
-				}
-				if (match1containsSubstitutions) {
-					return 1;
-				} else {
-					return -1;
-				}
-			}
-
-			return o1 - o2;
-		}
-
-		private String toMatchUrl(BundleEntryComponent theEntry) {
-			HTTPVerb verb = theEntry.getRequest().getMethod();
-			if (verb == HTTPVerb.POST) {
-				return theEntry.getRequest().getIfNoneExist();
-			}
-			if (verb == HTTPVerb.PUT || verb == HTTPVerb.DELETE) {
-				String url = extractTransactionUrlOrThrowException(theEntry, verb);
-				UrlParts parts = UrlUtil.parseUrl(url);
-				if (isBlank(parts.getResourceId())) {
-					return parts.getResourceType() + '?' + parts.getParams();
-				}
-			}
-			return null;
-		}
-
-		private int toOrder(BundleEntryComponent theO1) {
-			int o1 = 0;
-			if (theO1.getRequest().getMethodElement().getValue() != null) {
-				switch (theO1.getRequest().getMethodElement().getValue()) {
-					case DELETE:
-						o1 = 1;
-						break;
-					case POST:
-						o1 = 2;
-						break;
-					case PUT:
-						o1 = 3;
-						break;
-					case PATCH:
-						o1 = 4;
-						break;
-					case HEAD:
-						o1 = 5;
-						break;
-					case GET:
-						o1 = 6;
-						break;
-					case NULL:
-						o1 = 0;
-						break;
-				}
-			}
-			return o1;
-		}
-
-	}
-
-	//@formatter:off
-
-	private static class BaseServerResponseExceptionHolder {
-		private BaseServerResponseException myException;
-
-		public BaseServerResponseException getException() {
-			return myException;
-		}
-
-		public void setException(BaseServerResponseException myException) {
-			this.myException = myException;
-		}
+		return myTransactionProcessor.transaction(theRequestDetails, theRequest);
 	}
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4.java
index 8aab08abb97..e08680761f5 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4.java
@@ -19,17 +19,21 @@ package ca.uhn.fhir.jpa.dao.r4;
  * limitations under the License.
  * #L%
  */
-import static org.apache.commons.lang3.StringUtils.isBlank;
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
-import java.math.BigDecimal;
-import java.util.*;
-
-import javax.measure.unit.NonSI;
-import javax.measure.unit.Unit;
 
+import ca.uhn.fhir.context.ConfigurationException;
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.RuntimeSearchParam;
+import ca.uhn.fhir.jpa.dao.*;
+import ca.uhn.fhir.jpa.entity.*;
+import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import com.google.common.annotations.VisibleForTesting;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.Pair;
+import org.hl7.fhir.exceptions.FHIRException;
+import org.hl7.fhir.instance.model.api.IBase;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
 import org.hl7.fhir.r4.context.IWorkerContext;
 import org.hl7.fhir.r4.hapi.ctx.IValidationSupport;
 import org.hl7.fhir.r4.model.*;
@@ -38,17 +42,15 @@ import org.hl7.fhir.r4.model.Enumeration;
 import org.hl7.fhir.r4.model.Location.LocationPositionComponent;
 import org.hl7.fhir.r4.model.Patient.PatientCommunicationComponent;
 import org.hl7.fhir.r4.utils.FHIRPathEngine;
-import org.hl7.fhir.exceptions.FHIRException;
-import org.hl7.fhir.instance.model.api.*;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import com.google.common.annotations.VisibleForTesting;
+import javax.measure.unit.NonSI;
+import javax.measure.unit.Unit;
+import java.math.BigDecimal;
+import java.util.*;
 
-import ca.uhn.fhir.context.*;
-import ca.uhn.fhir.jpa.dao.*;
-import ca.uhn.fhir.jpa.entity.*;
-import ca.uhn.fhir.rest.api.RestSearchParameterTypeEnum;
-import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import static org.apache.commons.lang3.StringUtils.isBlank;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements ISearchParamExtractor {
 
@@ -64,11 +66,22 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 		super();
 	}
 
-	public SearchParamExtractorR4(FhirContext theCtx, IValidationSupport theValidationSupport, ISearchParamRegistry theSearchParamRegistry) {
-		super(theCtx, theSearchParamRegistry);
+	public SearchParamExtractorR4(DaoConfig theDaoConfig, FhirContext theCtx, IValidationSupport theValidationSupport, ISearchParamRegistry theSearchParamRegistry) {
+		super(theDaoConfig, theCtx, theSearchParamRegistry);
 		myValidationSupport = theValidationSupport;
 	}
 
+	private void addQuantity(ResourceTable theEntity, HashSet<ResourceIndexedSearchParamQuantity> retVal, String resourceName, Quantity nextValue) {
+		if (!nextValue.getValueElement().isEmpty()) {
+			BigDecimal nextValueValue = nextValue.getValueElement().getValue();
+			String nextValueString = nextValue.getSystemElement().getValueAsString();
+			String nextValueCode = nextValue.getCode();
+			ResourceIndexedSearchParamQuantity nextEntity = new ResourceIndexedSearchParamQuantity(resourceName, nextValueValue, nextValueString, nextValueCode);
+			nextEntity.setResource(theEntity);
+			retVal.add(nextEntity);
+		}
+	}
+
 	private void addSearchTerm(ResourceTable theEntity, Set<ResourceIndexedSearchParamString> retVal, String resourceName, String searchTerm) {
 		if (isBlank(searchTerm)) {
 			return;
@@ -77,7 +90,7 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 			searchTerm = searchTerm.substring(0, ResourceIndexedSearchParamString.MAX_LENGTH);
 		}
 
-		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(resourceName, BaseHapiFhirDao.normalizeString(searchTerm), searchTerm);
+		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(getDaoConfig(), resourceName, BaseHapiFhirDao.normalizeString(searchTerm), searchTerm);
 		nextEntity.setResource(theEntity);
 		retVal.add(nextEntity);
 	}
@@ -86,11 +99,28 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 		if (value.length() > ResourceIndexedSearchParamString.MAX_LENGTH) {
 			value = value.substring(0, ResourceIndexedSearchParamString.MAX_LENGTH);
 		}
-		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(nextSpDef.getName(), BaseHapiFhirDao.normalizeString(value), value);
+		ResourceIndexedSearchParamString nextEntity = new ResourceIndexedSearchParamString(getDaoConfig(), nextSpDef.getName(), BaseHapiFhirDao.normalizeString(value), value);
 		nextEntity.setResource(theEntity);
 		retVal.add(nextEntity);
 	}
 
+	@Override
+	public List<PathAndRef> extractResourceLinks(IBaseResource theResource, RuntimeSearchParam theNextSpDef) {
+		ArrayList<PathAndRef> retVal = new ArrayList<>();
+
+		String[] nextPathsSplit = SPLIT.split(theNextSpDef.getPath());
+		for (String path : nextPathsSplit) {
+			path = path.trim();
+			if (isNotBlank(path)) {
+				for (Object next : extractValues(path, theResource)) {
+					retVal.add(new PathAndRef(path, next));
+				}
+			}
+		}
+
+		return retVal;
+	}
+
 	@Override
 	public Set<ResourceIndexedSearchParamCoords> extractSearchParamCoords(ResourceTable theEntity, IBaseResource theResource) {
 		// TODO: implement
@@ -99,12 +129,12 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamDates(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
 	public Set<ResourceIndexedSearchParamDate> extractSearchParamDates(ResourceTable theEntity, IBaseResource theResource) {
-		HashSet<ResourceIndexedSearchParamDate> retVal = new HashSet<ResourceIndexedSearchParamDate>();
+		HashSet<ResourceIndexedSearchParamDate> retVal = new HashSet<>();
 
 		Collection<RuntimeSearchParam> searchParams = getSearchParams(theResource);
 		for (RuntimeSearchParam nextSpDef : searchParams) {
@@ -182,12 +212,12 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamNumber(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
 	public HashSet<ResourceIndexedSearchParamNumber> extractSearchParamNumber(ResourceTable theEntity, IBaseResource theResource) {
-		HashSet<ResourceIndexedSearchParamNumber> retVal = new HashSet<ResourceIndexedSearchParamNumber>();
+		HashSet<ResourceIndexedSearchParamNumber> retVal = new HashSet<>();
 
 		Collection<RuntimeSearchParam> searchParams = getSearchParams(theResource);
 		for (RuntimeSearchParam nextSpDef : searchParams) {
@@ -232,7 +262,7 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 							/*
 							 * @SuppressWarnings("unchecked") PhysicsUnit<? extends org.unitsofmeasurement.quantity.Quantity<?>> unit = (PhysicsUnit<? extends org.unitsofmeasurement.quantity.Quantity<?>>)
 							 * UCUMFormat.getCaseInsensitiveInstance().parse(nextValue.getCode().getValue(), null); if (unit.isCompatible(UCUM.DAY)) {
-							 * 
+							 *
 							 * @SuppressWarnings("unchecked") PhysicsUnit<org.unitsofmeasurement.quantity.Time> timeUnit = (PhysicsUnit<Time>) unit; UnitConverter conv = timeUnit.getConverterTo(UCUM.DAY);
 							 * double dayValue = conv.convert(nextValue.getValue().getValue().doubleValue()); Duration newValue = new Duration(); newValue.setSystem(UCUM_NS);
 							 * newValue.setCode(UCUM.DAY.getSymbol()); newValue.setValue(dayValue); nextValue=newValue; }
@@ -285,12 +315,12 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamQuantity(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
 	public Set<ResourceIndexedSearchParamQuantity> extractSearchParamQuantity(ResourceTable theEntity, IBaseResource theResource) {
-		HashSet<ResourceIndexedSearchParamQuantity> retVal = new HashSet<ResourceIndexedSearchParamQuantity>();
+		HashSet<ResourceIndexedSearchParamQuantity> retVal = new HashSet<>();
 
 		Collection<RuntimeSearchParam> searchParams = getSearchParams(theResource);
 		for (RuntimeSearchParam nextSpDef : searchParams) {
@@ -336,25 +366,14 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 		return retVal;
 	}
 
-	private void addQuantity(ResourceTable theEntity, HashSet<ResourceIndexedSearchParamQuantity> retVal, String resourceName, Quantity nextValue) {
-		if (!nextValue.getValueElement().isEmpty()) {
-			BigDecimal nextValueValue = nextValue.getValueElement().getValue();
-			String nextValueString = nextValue.getSystemElement().getValueAsString();
-			String nextValueCode = nextValue.getCode();
-			ResourceIndexedSearchParamQuantity nextEntity = new ResourceIndexedSearchParamQuantity(resourceName, nextValueValue, nextValueString, nextValueCode);
-			nextEntity.setResource(theEntity);
-			retVal.add(nextEntity);
-		}
-	}
-
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamStrings(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
 	public Set<ResourceIndexedSearchParamString> extractSearchParamStrings(ResourceTable theEntity, IBaseResource theResource) {
-		HashSet<ResourceIndexedSearchParamString> retVal = new HashSet<ResourceIndexedSearchParamString>();
+		HashSet<ResourceIndexedSearchParamString> retVal = new HashSet<>();
 
 		String resourceName = getContext().getResourceDefinition(theResource).getName();
 
@@ -397,7 +416,7 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 					addSearchTerm(theEntity, retVal, nextSpName, searchTerm);
 				} else {
 					if (nextObject instanceof HumanName) {
-						ArrayList<StringType> allNames = new ArrayList<StringType>();
+						ArrayList<StringType> allNames = new ArrayList<>();
 						HumanName nextHumanName = (HumanName) nextObject;
 						if (isNotBlank(nextHumanName.getFamily())) {
 							allNames.add(nextHumanName.getFamilyElement());
@@ -407,7 +426,7 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 							addSearchTerm(theEntity, retVal, nextSpName, nextName.getValue());
 						}
 					} else if (nextObject instanceof Address) {
-						ArrayList<StringType> allNames = new ArrayList<StringType>();
+						ArrayList<StringType> allNames = new ArrayList<>();
 						Address nextAddress = (Address) nextObject;
 						allNames.addAll(nextAddress.getLine());
 						allNames.add(nextAddress.getCityElement());
@@ -449,7 +468,7 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see ca.uhn.fhir.jpa.dao.ISearchParamExtractor#extractSearchParamTokens(ca.uhn.fhir.jpa.entity.ResourceTable, ca.uhn.fhir.model.api.IBaseResource)
 	 */
 	@Override
@@ -573,7 +592,7 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 
 			assert systems.size() == codes.size() : "Systems contains " + systems + ", codes contains: " + codes;
 
-			Set<Pair<String, String>> haveValues = new HashSet<Pair<String, String>>();
+			Set<Pair<String, String>> haveValues = new HashSet<>();
 			for (int i = 0; i < systems.size(); i++) {
 				String system = systems.get(i);
 				String code = codes.get(i);
@@ -608,7 +627,7 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 
 	@Override
 	public Set<ResourceIndexedSearchParamUri> extractSearchParamUri(ResourceTable theEntity, IBaseResource theResource) {
-		HashSet<ResourceIndexedSearchParamUri> retVal = new HashSet<ResourceIndexedSearchParamUri>();
+		HashSet<ResourceIndexedSearchParamUri> retVal = new HashSet<>();
 
 		Collection<RuntimeSearchParam> searchParams = getSearchParams(theResource);
 		for (RuntimeSearchParam nextSpDef : searchParams) {
@@ -658,14 +677,14 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 	}
 
 	private void extractTokensFromCodeableConcept(List<String> theSystems, List<String> theCodes, CodeableConcept theCodeableConcept, ResourceTable theEntity,
-			Set<BaseResourceIndexedSearchParam> theListToPopulate, RuntimeSearchParam theParameterDef) {
+																 Set<BaseResourceIndexedSearchParam> theListToPopulate, RuntimeSearchParam theParameterDef) {
 		for (Coding nextCoding : theCodeableConcept.getCoding()) {
 			extractTokensFromCoding(theSystems, theCodes, theEntity, theListToPopulate, theParameterDef, nextCoding);
 		}
 	}
 
 	private void extractTokensFromCoding(List<String> theSystems, List<String> theCodes, ResourceTable theEntity, Set<BaseResourceIndexedSearchParam> theListToPopulate,
-			RuntimeSearchParam theParameterDef, Coding nextCoding) {
+													 RuntimeSearchParam theParameterDef, Coding nextCoding) {
 		if (nextCoding != null && !nextCoding.isEmpty()) {
 
 			String nextSystem = nextCoding.getSystemElement().getValueAsString();
@@ -690,17 +709,19 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 		IWorkerContext worker = new org.hl7.fhir.r4.hapi.ctx.HapiWorkerContext(getContext(), myValidationSupport);
 		FHIRPathEngine fp = new FHIRPathEngine(worker);
 
-		List<Object> values = new ArrayList<Object>();
-		try {
-			String[] nextPathsSplit = SPLIT.split(thePaths);
-			for (String nextPath : nextPathsSplit) {
-				List<Base> allValues = fp.evaluate((Base) theResource, nextPath);
-				if (allValues.isEmpty() == false) {
-					values.addAll(allValues);
-				}
+		List<Object> values = new ArrayList<>();
+		String[] nextPathsSplit = SPLIT.split(thePaths);
+		for (String nextPath : nextPathsSplit) {
+			List<Base> allValues;
+			try {
+				allValues = fp.evaluate((Base) theResource, nextPath);
+			} catch (FHIRException e) {
+				String msg = getContext().getLocalizer().getMessage(BaseSearchParamExtractor.class, "failedToExtractPaths", nextPath, e.toString());
+				throw new InternalErrorException(msg, e);
+			}
+			if (allValues.isEmpty() == false) {
+				values.addAll(allValues);
 			}
-		} catch (FHIRException e) {
-			throw new InternalErrorException(e);
 		}
 
 		for (int i = 0; i < values.size(); i++) {
@@ -715,23 +736,6 @@ public class SearchParamExtractorR4 extends BaseSearchParamExtractor implements
 		return values;
 	}
 
-	@Override
-	public List<PathAndRef> extractResourceLinks(IBaseResource theResource, RuntimeSearchParam theNextSpDef) {
-		ArrayList<PathAndRef> retVal = new ArrayList<PathAndRef>();
-
-		String[] nextPathsSplit = SPLIT.split(theNextSpDef.getPath());
-		for (String path : nextPathsSplit) {
-			path = path.trim();
-			if (isNotBlank(path)) {
-				for (Object next : extractValues(path, theResource)) {
-					retVal.add(new PathAndRef(path, next));
-				}
-			}
-		}
-
-		return retVal;
-	}
-
 	@VisibleForTesting
 	void setValidationSupportForTesting(org.hl7.fhir.r4.hapi.ctx.IValidationSupport theValidationSupport) {
 		myValidationSupport = theValidationSupport;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/TransactionProcessorVersionAdapterR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/TransactionProcessorVersionAdapterR4.java
new file mode 100644
index 00000000000..db5be3e65c0
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/dao/r4/TransactionProcessorVersionAdapterR4.java
@@ -0,0 +1,153 @@
+package ca.uhn.fhir.jpa.dao.r4;
+
+/*-
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.dao.TransactionProcessor;
+import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import org.hl7.fhir.r4.model.Bundle;
+import org.hl7.fhir.r4.model.OperationOutcome;
+import org.hl7.fhir.r4.model.Resource;
+import org.hl7.fhir.exceptions.FHIRException;
+import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+import java.util.Date;
+import java.util.List;
+
+public class TransactionProcessorVersionAdapterR4 implements TransactionProcessor.ITransactionProcessorVersionAdapter<Bundle, Bundle.BundleEntryComponent> {
+	@Override
+	public void setResponseStatus(Bundle.BundleEntryComponent theBundleEntry, String theStatus) {
+		theBundleEntry.getResponse().setStatus(theStatus);
+	}
+
+	@Override
+	public void setResponseLastModified(Bundle.BundleEntryComponent theBundleEntry, Date theLastModified) {
+		theBundleEntry.getResponse().setLastModified(theLastModified);
+	}
+
+	@Override
+	public void setResource(Bundle.BundleEntryComponent theBundleEntry, IBaseResource theResource) {
+		theBundleEntry.setResource((Resource) theResource);
+	}
+
+	@Override
+	public IBaseResource getResource(Bundle.BundleEntryComponent theBundleEntry) {
+		return theBundleEntry.getResource();
+	}
+
+	@Override
+	public String getBundleType(Bundle theRequest) {
+		if (theRequest.getType() == null) {
+			return null;
+		}
+		return theRequest.getTypeElement().getValue().toCode();
+	}
+
+	@Override
+	public void populateEntryWithOperationOutcome(BaseServerResponseException theCaughtEx, Bundle.BundleEntryComponent theEntry) {
+		OperationOutcome oo = new OperationOutcome();
+		oo.addIssue().setSeverity(OperationOutcome.IssueSeverity.ERROR).setDiagnostics(theCaughtEx.getMessage());
+		theEntry.getResponse().setOutcome(oo);
+	}
+
+	@Override
+	public Bundle createBundle(String theBundleType) {
+		Bundle resp = new Bundle();
+		try {
+			resp.setType(Bundle.BundleType.fromCode(theBundleType));
+		} catch (FHIRException theE) {
+			throw new InternalErrorException("Unknown bundle type: " + theBundleType);
+		}
+		return resp;
+	}
+
+	@Override
+	public List<Bundle.BundleEntryComponent> getEntries(Bundle theRequest) {
+		return theRequest.getEntry();
+	}
+
+	@Override
+	public void addEntry(Bundle theBundle, Bundle.BundleEntryComponent theEntry) {
+		theBundle.addEntry(theEntry);
+	}
+
+	@Override
+	public Bundle.BundleEntryComponent addEntry(Bundle theBundle) {
+		return theBundle.addEntry();
+	}
+
+	@Override
+	public String getEntryRequestVerb(Bundle.BundleEntryComponent theEntry) {
+		String retVal = null;
+		Bundle.HTTPVerb value = theEntry.getRequest().getMethodElement().getValue();
+		if (value != null) {
+			retVal = value.toCode();
+		}
+		return retVal;
+	}
+
+	@Override
+	public String getFullUrl(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getFullUrl();
+	}
+
+	@Override
+	public String getEntryIfNoneExist(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getIfNoneExist();
+	}
+
+	@Override
+	public String getEntryRequestUrl(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getUrl();
+	}
+
+	@Override
+	public void setResponseLocation(Bundle.BundleEntryComponent theEntry, String theResponseLocation) {
+		theEntry.getResponse().setLocation(theResponseLocation);
+	}
+
+	@Override
+	public void setResponseETag(Bundle.BundleEntryComponent theEntry, String theEtag) {
+		theEntry.getResponse().setEtag(theEtag);
+	}
+
+	@Override
+	public String getEntryRequestIfMatch(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getIfMatch();
+	}
+
+	@Override
+	public String getEntryRequestIfNoneExist(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getIfNoneExist();
+	}
+
+	@Override
+	public String getEntryRequestIfNoneMatch(Bundle.BundleEntryComponent theEntry) {
+		return theEntry.getRequest().getIfNoneMatch();
+	}
+
+	@Override
+	public void setResponseOutcome(Bundle.BundleEntryComponent theEntry, IBaseOperationOutcome theOperationOutcome) {
+		theEntry.getResponse().setOutcome((Resource) theOperationOutcome);
+	}
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/BaseHasResource.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/BaseHasResource.java
index 177220e1b37..8d8d270471c 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/BaseHasResource.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/BaseHasResource.java
@@ -30,7 +30,7 @@ import java.util.Collection;
 import java.util.Date;
 
 @MappedSuperclass
-public abstract class BaseHasResource {
+public abstract class BaseHasResource implements IBaseResourceEntity {
 
 	@Column(name = "RES_DELETED_AT", nullable = true)
 	@Temporal(TemporalType.TIMESTAMP)
@@ -63,6 +63,7 @@ public abstract class BaseHasResource {
 
 	public abstract BaseTag addTag(TagDefinition theDef);
 
+	@Override
 	public Date getDeleted() {
 		return myDeleted;
 	}
@@ -72,6 +73,7 @@ public abstract class BaseHasResource {
 	}
 
 
+	@Override
 	public FhirVersionEnum getFhirVersion() {
 		return myFhirVersion;
 	}
@@ -88,10 +90,13 @@ public abstract class BaseHasResource {
 		myForcedId = theForcedId;
 	}
 
+	@Override
 	public abstract Long getId();
 
+	@Override
 	public abstract IdDt getIdDt();
 
+	@Override
 	public InstantDt getPublished() {
 		if (myPublished != null) {
 			return new InstantDt(myPublished);
@@ -104,12 +109,15 @@ public abstract class BaseHasResource {
 		myPublished = thePublished;
 	}
 
+	@Override
 	public abstract Long getResourceId();
 
+	@Override
 	public abstract String getResourceType();
 
 	public abstract Collection<? extends BaseTag> getTags();
 
+	@Override
 	public InstantDt getUpdated() {
 		return new InstantDt(myUpdated);
 	}
@@ -118,12 +126,15 @@ public abstract class BaseHasResource {
 		myUpdated = theUpdated;
 	}
 
+	@Override
 	public Date getUpdatedDate() {
 		return myUpdated;
 	}
 
+	@Override
 	public abstract long getVersion();
 
+	@Override
 	public boolean isHasTags() {
 		return myHasTags;
 	}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/BaseResourceIndexedSearchParam.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/BaseResourceIndexedSearchParam.java
index e27becf4200..97890d45032 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/BaseResourceIndexedSearchParam.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/BaseResourceIndexedSearchParam.java
@@ -36,13 +36,15 @@ import java.util.Date;
 
 @MappedSuperclass
 public abstract class BaseResourceIndexedSearchParam implements Serializable {
-	/** Don't change this without careful consideration. You will break existing hashes! */
-	private static final HashFunction HASH_FUNCTION = Hashing.murmur3_128(0);
-	/** Don't make this public 'cause nobody better touch it! */
-	private static final byte[] DELIMITER_BYTES = "|".getBytes(Charsets.UTF_8);
-
 	static final int MAX_SP_NAME = 100;
-
+	/**
+	 * Don't change this without careful consideration. You will break existing hashes!
+	 */
+	private static final HashFunction HASH_FUNCTION = Hashing.murmur3_128(0);
+	/**
+	 * Don't make this public 'cause nobody better be able to modify it!
+	 */
+	private static final byte[] DELIMITER_BYTES = "|".getBytes(Charsets.UTF_8);
 	private static final long serialVersionUID = 1L;
 
 	// TODO: make this nullable=false and a primitive (written may 2017)
@@ -71,6 +73,13 @@ public abstract class BaseResourceIndexedSearchParam implements Serializable {
 	@Temporal(TemporalType.TIMESTAMP)
 	private Date myUpdated;
 
+	/**
+	 * Subclasses may override
+	 */
+	protected void clearHashes() {
+		// nothing
+	}
+
 	protected abstract Long getId();
 
 	public String getParamName() {
@@ -82,13 +91,6 @@ public abstract class BaseResourceIndexedSearchParam implements Serializable {
 		myParamName = theName;
 	}
 
-	/**
-	 * Subclasses may override
-	 */
-	protected void clearHashes() {
-		// nothing
-	}
-
 	public ResourceTable getResource() {
 		return myResource;
 	}
@@ -127,6 +129,10 @@ public abstract class BaseResourceIndexedSearchParam implements Serializable {
 
 	public abstract IQueryParameterType toQueryParameterType();
 
+	public static long calculateHashIdentity(String theResourceType, String theParamName) {
+		return hash(theResourceType, theParamName);
+	}
+
 	/**
 	 * Applies a fast and consistent hashing algorithm to a set of strings
 	 */
@@ -148,5 +154,4 @@ public abstract class BaseResourceIndexedSearchParam implements Serializable {
 		return hashCode.asLong();
 	}
 
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ForcedId.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ForcedId.java
index 80dbb1a7488..0c451533c70 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ForcedId.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ForcedId.java
@@ -20,30 +20,22 @@ package ca.uhn.fhir.jpa.entity;
  * #L%
  */
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.ForeignKey;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Index;
-import javax.persistence.JoinColumn;
-import javax.persistence.OneToOne;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
 import org.hibernate.annotations.ColumnDefault;
 
-//@formatter:off
+import javax.persistence.*;
+
 @Entity()
 @Table(name = "HFJ_FORCED_ID", uniqueConstraints = {
 	@UniqueConstraint(name = "IDX_FORCEDID_RESID", columnNames = {"RESOURCE_PID"}),
-	@UniqueConstraint(name = "IDX_FORCEDID_TYPE_RESID", columnNames = {"RESOURCE_TYPE", "RESOURCE_PID"})
-}, indexes= {
-	@Index(name = "IDX_FORCEDID_TYPE_FORCEDID", columnList = "RESOURCE_TYPE,FORCED_ID"),
+	@UniqueConstraint(name = "IDX_FORCEDID_TYPE_FID", columnNames = {"RESOURCE_TYPE", "FORCED_ID"})
+}, indexes = {
+	/*
+	 * NB: We previously had indexes named
+	 * - IDX_FORCEDID_TYPE_FORCEDID
+	 * - IDX_FORCEDID_TYPE_RESID
+	 * so don't reuse these names
+	 */
 })
-//@formatter:on
 public class ForcedId {
 
 	public static final int MAX_FORCED_ID_LENGTH = 100;
@@ -57,11 +49,11 @@ public class ForcedId {
 	@Column(name = "PID")
 	private Long myId;
 
-	@JoinColumn(name = "RESOURCE_PID", nullable = false, updatable = false, foreignKey=@ForeignKey(name="FK_FORCEDID_RESOURCE"))
+	@JoinColumn(name = "RESOURCE_PID", nullable = false, updatable = false, foreignKey = @ForeignKey(name = "FK_FORCEDID_RESOURCE"))
 	@OneToOne()
 	private ResourceTable myResource;
 
-	@Column(name = "RESOURCE_PID", nullable = false, updatable = false, insertable=false)
+	@Column(name = "RESOURCE_PID", nullable = false, updatable = false, insertable = false)
 	private Long myResourcePid;
 
 	// This is updatable=true because it was added in 1.6 and needs to be set.. At some
@@ -81,39 +73,39 @@ public class ForcedId {
 		return myForcedId;
 	}
 
-	public ResourceTable getResource() {
-		return myResource;
-	}
-	
-	public Long getResourcePid() {
-		if (myResourcePid==null) {
-			return myResource.getId();
-		}
-		return myResourcePid;
-	}
-
-	public String getResourceType() {
-		return myResourceType;
-	}
-
 	public void setForcedId(String theForcedId) {
 		myForcedId = theForcedId;
 	}
 
+	public ResourceTable getResource() {
+		return myResource;
+	}
+
 	public void setResource(ResourceTable theResource) {
 		myResource = theResource;
 	}
 
-	public void setResourcePid(Long theResourcePid) {
-		myResourcePid = theResourcePid;
+	public Long getResourcePid() {
+		if (myResourcePid == null) {
+			return myResource.getId();
+		}
+		return myResourcePid;
 	}
 
 	public void setResourcePid(ResourceTable theResourcePid) {
 		myResource = theResourcePid;
 	}
 
+	public String getResourceType() {
+		return myResourceType;
+	}
+
 	public void setResourceType(String theResourceType) {
 		myResourceType = theResourceType;
 	}
 
+	public void setResourcePid(Long theResourcePid) {
+		myResourcePid = theResourcePid;
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/IBaseResourceEntity.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/IBaseResourceEntity.java
new file mode 100644
index 00000000000..157818ee740
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/IBaseResourceEntity.java
@@ -0,0 +1,41 @@
+package ca.uhn.fhir.jpa.entity;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+import java.util.Date;
+
+import ca.uhn.fhir.context.FhirVersionEnum;
+import ca.uhn.fhir.model.primitive.IdDt;
+import ca.uhn.fhir.model.primitive.InstantDt;
+
+public interface IBaseResourceEntity {
+
+	Date getDeleted();
+	FhirVersionEnum getFhirVersion();
+	Long getId();
+	IdDt getIdDt();
+	InstantDt getPublished();
+	Long getResourceId();
+	String getResourceType();
+	InstantDt getUpdated();
+	Date getUpdatedDate();
+	long getVersion();
+	boolean isHasTags();
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceEncodingEnum.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceEncodingEnum.java
index 00e535300d2..d7b00c15277 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceEncodingEnum.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceEncodingEnum.java
@@ -23,6 +23,9 @@ package ca.uhn.fhir.jpa.entity;
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.parser.IParser;
 
+/**
+ * @see ResourceHistoryTable#ENCODING_COL_LENGTH
+ */
 public enum ResourceEncodingEnum {
 
 	/*
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceHistoryTable.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceHistoryTable.java
index 007c2b2912c..19e66707ba6 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceHistoryTable.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceHistoryTable.java
@@ -43,6 +43,10 @@ public class ResourceHistoryTable extends BaseHasResource implements Serializabl
 
 	private static final long serialVersionUID = 1L;
 	public static final String IDX_RESVER_ID_VER = "IDX_RESVER_ID_VER";
+	/**
+	 * @see ResourceEncodingEnum
+	 */
+	public static final int ENCODING_COL_LENGTH = 5;
 
 	@Id
 	@SequenceGenerator(name = "SEQ_RESOURCE_HISTORY_ID", sequenceName = "SEQ_RESOURCE_HISTORY_ID")
@@ -67,7 +71,7 @@ public class ResourceHistoryTable extends BaseHasResource implements Serializabl
 	@OptimisticLock(excluded = true)
 	private byte[] myResource;
 
-	@Column(name = "RES_ENCODING", nullable = false, length = 5)
+	@Column(name = "RES_ENCODING", nullable = false, length = ENCODING_COL_LENGTH)
 	@Enumerated(EnumType.STRING)
 	@OptimisticLock(excluded = true)
 	private ResourceEncodingEnum myEncoding;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedCompositeStringUnique.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedCompositeStringUnique.java
index ff8c6eae3b7..0da8a00bc3e 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedCompositeStringUnique.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedCompositeStringUnique.java
@@ -32,7 +32,7 @@ import javax.persistence.*;
 })
 public class ResourceIndexedCompositeStringUnique implements Comparable<ResourceIndexedCompositeStringUnique> {
 
-	public static final int MAX_STRING_LENGTH = 150;
+	public static final int MAX_STRING_LENGTH = 200;
 	public static final String IDX_IDXCMPSTRUNIQ_STRING = "IDX_IDXCMPSTRUNIQ_STRING";
 	public static final String IDX_IDXCMPSTRUNIQ_RESOURCE = "IDX_IDXCMPSTRUNIQ_RESOURCE";
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamCoords.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamCoords.java
index 4661405a2bc..7ac859e262f 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamCoords.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamCoords.java
@@ -31,30 +31,32 @@ import javax.persistence.*;
 
 @Embeddable
 @Entity
-@Table(name = "HFJ_SPIDX_COORDS", indexes = { 
-	@Index(name = "IDX_SP_COORDS", columnList = "RES_TYPE,SP_NAME,SP_LATITUDE,SP_LONGITUDE"), 
-	@Index(name = "IDX_SP_COORDS_UPDATED", columnList = "SP_UPDATED"), 
-	@Index(name = "IDX_SP_COORDS_RESID", columnList = "RES_ID") 
+@Table(name = "HFJ_SPIDX_COORDS", indexes = {
+	@Index(name = "IDX_SP_COORDS", columnList = "RES_TYPE,SP_NAME,SP_LATITUDE,SP_LONGITUDE"),
+	@Index(name = "IDX_SP_COORDS_UPDATED", columnList = "SP_UPDATED"),
+	@Index(name = "IDX_SP_COORDS_RESID", columnList = "RES_ID")
 })
 public class ResourceIndexedSearchParamCoords extends BaseResourceIndexedSearchParam {
 
 	public static final int MAX_LENGTH = 100;
 
 	private static final long serialVersionUID = 1L;
-
+	@Column(name = "SP_LATITUDE")
+	@Field
+	public double myLatitude;
+	@Column(name = "SP_LONGITUDE")
+	@Field
+	public double myLongitude;
 	@Id
 	@SequenceGenerator(name = "SEQ_SPIDX_COORDS", sequenceName = "SEQ_SPIDX_COORDS")
 	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_SPIDX_COORDS")
 	@Column(name = "SP_ID")
 	private Long myId;
-
-	@Column(name = "SP_LATITUDE")
-	@Field
-	public double myLatitude;
-
-	@Column(name = "SP_LONGITUDE")
-	@Field
-	public double myLongitude;
+	/**
+	 * @since 3.5.0 - At some point this should be made not-null
+	 */
+	@Column(name = "HASH_IDENTITY", nullable = true)
+	private Long myHashIdentity;
 
 	public ResourceIndexedSearchParamCoords() {
 	}
@@ -65,6 +67,20 @@ public class ResourceIndexedSearchParamCoords extends BaseResourceIndexedSearchP
 		setLongitude(theLongitude);
 	}
 
+	@PrePersist
+	public void calculateHashes() {
+		if (myHashIdentity == null) {
+			String resourceType = getResourceType();
+			String paramName = getParamName();
+			setHashIdentity(calculateHashIdentity(resourceType, paramName));
+		}
+	}
+
+	@Override
+	protected void clearHashes() {
+		myHashIdentity = null;
+	}
+
 	@Override
 	public boolean equals(Object theObj) {
 		if (this == theObj) {
@@ -82,27 +98,39 @@ public class ResourceIndexedSearchParamCoords extends BaseResourceIndexedSearchP
 		b.append(getResource(), obj.getResource());
 		b.append(getLatitude(), obj.getLatitude());
 		b.append(getLongitude(), obj.getLongitude());
+		b.append(getHashIdentity(), obj.getHashIdentity());
 		return b.isEquals();
 	}
 
+	public Long getHashIdentity() {
+		return myHashIdentity;
+	}
+
+	public void setHashIdentity(Long theHashIdentity) {
+		myHashIdentity = theHashIdentity;
+	}
+
 	@Override
 	protected Long getId() {
 		return myId;
 	}
 
-	@Override
-	public IQueryParameterType toQueryParameterType() {
-		return null;
-	}
-
 	public double getLatitude() {
 		return myLatitude;
 	}
 
+	public void setLatitude(double theLatitude) {
+		myLatitude = theLatitude;
+	}
+
 	public double getLongitude() {
 		return myLongitude;
 	}
 
+	public void setLongitude(double theLongitude) {
+		myLongitude = theLongitude;
+	}
+
 	@Override
 	public int hashCode() {
 		HashCodeBuilder b = new HashCodeBuilder();
@@ -113,12 +141,9 @@ public class ResourceIndexedSearchParamCoords extends BaseResourceIndexedSearchP
 		return b.toHashCode();
 	}
 
-	public void setLatitude(double theLatitude) {
-		myLatitude = theLatitude;
-	}
-
-	public void setLongitude(double theLongitude) {
-		myLongitude = theLongitude;
+	@Override
+	public IQueryParameterType toQueryParameterType() {
+		return null;
 	}
 
 	@Override
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamDate.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamDate.java
index 858a20de253..63e54be4b30 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamDate.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamDate.java
@@ -37,17 +37,14 @@ import java.util.Date;
 @Embeddable
 @Entity
 @Table(name = "HFJ_SPIDX_DATE", indexes = {
-	@Index(name = "IDX_SP_DATE", columnList = "RES_TYPE,SP_NAME,SP_VALUE_LOW,SP_VALUE_HIGH"),
+//	@Index(name = "IDX_SP_DATE", columnList = "RES_TYPE,SP_NAME,SP_VALUE_LOW,SP_VALUE_HIGH"),
+	@Index(name = "IDX_SP_DATE_HASH", columnList = "HASH_IDENTITY,SP_VALUE_LOW,SP_VALUE_HIGH"),
 	@Index(name = "IDX_SP_DATE_UPDATED", columnList = "SP_UPDATED"),
 	@Index(name = "IDX_SP_DATE_RESID", columnList = "RES_ID")
 })
 public class ResourceIndexedSearchParamDate extends BaseResourceIndexedSearchParam {
 
 	private static final long serialVersionUID = 1L;
-
-	@Transient
-	private transient String myOriginalValue;
-
 	@Column(name = "SP_VALUE_HIGH", nullable = true)
 	@Temporal(TemporalType.TIMESTAMP)
 	@Field
@@ -56,11 +53,18 @@ public class ResourceIndexedSearchParamDate extends BaseResourceIndexedSearchPar
 	@Temporal(TemporalType.TIMESTAMP)
 	@Field
 	public Date myValueLow;
+	@Transient
+	private transient String myOriginalValue;
 	@Id
 	@SequenceGenerator(name = "SEQ_SPIDX_DATE", sequenceName = "SEQ_SPIDX_DATE")
 	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_SPIDX_DATE")
 	@Column(name = "SP_ID")
 	private Long myId;
+	/**
+	 * @since 3.5.0 - At some point this should be made not-null
+	 */
+	@Column(name = "HASH_IDENTITY", nullable = true)
+	private Long myHashIdentity;
 
 	/**
 	 * Constructor
@@ -79,6 +83,20 @@ public class ResourceIndexedSearchParamDate extends BaseResourceIndexedSearchPar
 		myOriginalValue = theOriginalValue;
 	}
 
+	@PrePersist
+	public void calculateHashes() {
+		if (myHashIdentity == null) {
+			String resourceType = getResourceType();
+			String paramName = getParamName();
+			setHashIdentity(calculateHashIdentity(resourceType, paramName));
+		}
+	}
+
+	@Override
+	protected void clearHashes() {
+		myHashIdentity = null;
+	}
+
 	@Override
 	public boolean equals(Object theObj) {
 		if (this == theObj) {
@@ -97,9 +115,23 @@ public class ResourceIndexedSearchParamDate extends BaseResourceIndexedSearchPar
 		b.append(getResource(), obj.getResource());
 		b.append(getTimeFromDate(getValueHigh()), getTimeFromDate(obj.getValueHigh()));
 		b.append(getTimeFromDate(getValueLow()), getTimeFromDate(obj.getValueLow()));
+		b.append(getHashIdentity(), obj.getHashIdentity());
 		return b.isEquals();
 	}
 
+	public Long getHashIdentity() {
+		return myHashIdentity;
+	}
+
+	public void setHashIdentity(Long theHashIdentity) {
+		myHashIdentity = theHashIdentity;
+	}
+
+	@Override
+	protected Long getId() {
+		return myId;
+	}
+
 	protected Long getTimeFromDate(Date date) {
 		if (date != null) {
 			return date.getTime();
@@ -107,11 +139,6 @@ public class ResourceIndexedSearchParamDate extends BaseResourceIndexedSearchPar
 		return null;
 	}
 
-	@Override
-	protected Long getId() {
-		return myId;
-	}
-
 	public Date getValueHigh() {
 		return myValueHigh;
 	}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamNumber.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamNumber.java
index 0232ff25ad9..71d5f0b56fb 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamNumber.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamNumber.java
@@ -34,15 +34,14 @@ import org.hibernate.search.annotations.NumericField;
 import javax.persistence.*;
 import java.math.BigDecimal;
 
-//@formatter:off
 @Embeddable
 @Entity
 @Table(name = "HFJ_SPIDX_NUMBER", indexes = {
-	@Index(name = "IDX_SP_NUMBER", columnList = "RES_TYPE,SP_NAME,SP_VALUE"),
+//	@Index(name = "IDX_SP_NUMBER", columnList = "RES_TYPE,SP_NAME,SP_VALUE"),
+	@Index(name = "IDX_SP_NUMBER_HASH_VAL", columnList = "HASH_IDENTITY,SP_VALUE"),
 	@Index(name = "IDX_SP_NUMBER_UPDATED", columnList = "SP_UPDATED"),
 	@Index(name = "IDX_SP_NUMBER_RESID", columnList = "RES_ID")
 })
-//@formatter:on
 public class ResourceIndexedSearchParamNumber extends BaseResourceIndexedSearchParam {
 
 	private static final long serialVersionUID = 1L;
@@ -56,6 +55,11 @@ public class ResourceIndexedSearchParamNumber extends BaseResourceIndexedSearchP
 	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_SPIDX_NUMBER")
 	@Column(name = "SP_ID")
 	private Long myId;
+	/**
+	 * @since 3.5.0 - At some point this should be made not-null
+	 */
+	@Column(name = "HASH_IDENTITY", nullable = true)
+	private Long myHashIdentity;
 
 	public ResourceIndexedSearchParamNumber() {
 	}
@@ -65,6 +69,20 @@ public class ResourceIndexedSearchParamNumber extends BaseResourceIndexedSearchP
 		setValue(theValue);
 	}
 
+	@PrePersist
+	public void calculateHashes() {
+		if (myHashIdentity == null) {
+			String resourceType = getResourceType();
+			String paramName = getParamName();
+			setHashIdentity(calculateHashIdentity(resourceType, paramName));
+		}
+	}
+
+	@Override
+	protected void clearHashes() {
+		myHashIdentity = null;
+	}
+
 	@Override
 	public boolean equals(Object theObj) {
 		if (this == theObj) {
@@ -82,9 +100,18 @@ public class ResourceIndexedSearchParamNumber extends BaseResourceIndexedSearchP
 		b.append(getResource(), obj.getResource());
 		b.append(getValue(), obj.getValue());
 		b.append(isMissing(), obj.isMissing());
+		b.append(getHashIdentity(), obj.getHashIdentity());
 		return b.isEquals();
 	}
 
+	public Long getHashIdentity() {
+		return myHashIdentity;
+	}
+
+	public void setHashIdentity(Long theHashIdentity) {
+		myHashIdentity = theHashIdentity;
+	}
+
 	@Override
 	protected Long getId() {
 		return myId;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamQuantity.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamQuantity.java
index 1398d6913a2..8eb9caddc96 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamQuantity.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamQuantity.java
@@ -33,13 +33,14 @@ import org.hibernate.search.annotations.NumericField;
 
 import javax.persistence.*;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 
 //@formatter:off
 @Embeddable
 @Entity
 @Table(name = "HFJ_SPIDX_QUANTITY", indexes = {
-	@Index(name = "IDX_SP_QUANTITY", columnList = "RES_TYPE,SP_NAME,SP_SYSTEM,SP_UNITS,SP_VALUE"),
+//	@Index(name = "IDX_SP_QUANTITY", columnList = "RES_TYPE,SP_NAME,SP_SYSTEM,SP_UNITS,SP_VALUE"),
+	@Index(name = "IDX_SP_QUANTITY_HASH", columnList = "HASH_IDENTITY,SP_VALUE"),
+	@Index(name = "IDX_SP_QUANTITY_HASH_UN", columnList = "HASH_IDENTITY_AND_UNITS,SP_VALUE"),
 	@Index(name = "IDX_SP_QUANTITY_UPDATED", columnList = "SP_UPDATED"),
 	@Index(name = "IDX_SP_QUANTITY_RESID", columnList = "RES_ID")
 })
@@ -66,20 +67,26 @@ public class ResourceIndexedSearchParamQuantity extends BaseResourceIndexedSearc
 	@Column(name = "SP_ID")
 	private Long myId;
 	/**
-	 * @since 3.4.0 - At some point this should be made not-null
+	 * @since 3.5.0 - At some point this should be made not-null
 	 */
-	@Column(name = "HASH_UNITS_AND_VALPREFIX", nullable = true)
-	private Long myHashUnitsAndValPrefix;
+	@Column(name = "HASH_IDENTITY_AND_UNITS", nullable = true)
+	private Long myHashIdentityAndUnits;
 	/**
-	 * @since 3.4.0 - At some point this should be made not-null
+	 * @since 3.5.0 - At some point this should be made not-null
 	 */
-	@Column(name = "HASH_VALPREFIX", nullable = true)
-	private Long myHashValPrefix;
+	@Column(name = "HASH_IDENTITY_SYS_UNITS", nullable = true)
+	private Long myHashIdentitySystemAndUnits;
+	/**
+	 * @since 3.5.0 - At some point this should be made not-null
+	 */
+	@Column(name = "HASH_IDENTITY", nullable = true)
+	private Long myHashIdentity;
 
 	public ResourceIndexedSearchParamQuantity() {
 		// nothing
 	}
 
+
 	public ResourceIndexedSearchParamQuantity(String theParamName, BigDecimal theValue, String theSystem, String theUnits) {
 		setParamName(theParamName);
 		setSystem(theSystem);
@@ -89,16 +96,21 @@ public class ResourceIndexedSearchParamQuantity extends BaseResourceIndexedSearc
 
 	@PrePersist
 	public void calculateHashes() {
-		if (myHashUnitsAndValPrefix == null) {
-			setHashUnitsAndValPrefix(hash(getResourceType(), getParamName(), getSystem(), getUnits(), toTruncatedString(getValue())));
-			setHashValPrefix(hash(getResourceType(), getParamName(), toTruncatedString(getValue())));
+		if (myHashIdentity == null) {
+			String resourceType = getResourceType();
+			String paramName = getParamName();
+			String units = getUnits();
+			String system = getSystem();
+			setHashIdentity(calculateHashIdentity(resourceType, paramName));
+			setHashIdentityAndUnits(calculateHashUnits(resourceType, paramName, units));
+			setHashIdentitySystemAndUnits(calculateHashSystemAndUnits(resourceType, paramName, system, units));
 		}
 	}
 
 	@Override
 	protected void clearHashes() {
-		myHashUnitsAndValPrefix = null;
-		myHashValPrefix = null;
+		myHashIdentity = null;
+		myHashIdentityAndUnits = null;
 	}
 
 	@Override
@@ -119,27 +131,36 @@ public class ResourceIndexedSearchParamQuantity extends BaseResourceIndexedSearc
 		b.append(getSystem(), obj.getSystem());
 		b.append(getUnits(), obj.getUnits());
 		b.append(getValue(), obj.getValue());
-		b.append(getHashUnitsAndValPrefix(), obj.getHashUnitsAndValPrefix());
-		b.append(getHashValPrefix(), obj.getHashValPrefix());
+		b.append(getHashIdentity(), obj.getHashIdentity());
+		b.append(getHashIdentitySystemAndUnits(), obj.getHashIdentitySystemAndUnits());
+		b.append(getHashIdentityAndUnits(), obj.getHashIdentityAndUnits());
 		return b.isEquals();
 	}
 
-	public Long getHashUnitsAndValPrefix() {
+	public Long getHashIdentity() {
 		calculateHashes();
-		return myHashUnitsAndValPrefix;
+		return myHashIdentity;
 	}
 
-	public void setHashUnitsAndValPrefix(Long theHashUnitsAndValPrefix) {
-		myHashUnitsAndValPrefix = theHashUnitsAndValPrefix;
+	public void setHashIdentity(Long theHashIdentity) {
+		myHashIdentity = theHashIdentity;
 	}
 
-	public Long getHashValPrefix() {
+	public Long getHashIdentityAndUnits() {
 		calculateHashes();
-		return myHashValPrefix;
+		return myHashIdentityAndUnits;
 	}
 
-	public void setHashValPrefix(Long theHashValPrefix) {
-		myHashValPrefix = theHashValPrefix;
+	public void setHashIdentityAndUnits(Long theHashIdentityAndUnits) {
+		myHashIdentityAndUnits = theHashIdentityAndUnits;
+	}
+
+	private Long getHashIdentitySystemAndUnits() {
+		return myHashIdentitySystemAndUnits;
+	}
+
+	public void setHashIdentitySystemAndUnits(Long theHashIdentitySystemAndUnits) {
+		myHashIdentitySystemAndUnits = theHashIdentitySystemAndUnits;
 	}
 
 	@Override
@@ -176,14 +197,13 @@ public class ResourceIndexedSearchParamQuantity extends BaseResourceIndexedSearc
 
 	@Override
 	public int hashCode() {
+		calculateHashes();
 		HashCodeBuilder b = new HashCodeBuilder();
+		b.append(getResourceType());
 		b.append(getParamName());
-		b.append(getResource());
 		b.append(getSystem());
 		b.append(getUnits());
 		b.append(getValue());
-		b.append(getHashUnitsAndValPrefix());
-		b.append(getHashValPrefix());
 		return b.toHashCode();
 	}
 
@@ -201,14 +221,16 @@ public class ResourceIndexedSearchParamQuantity extends BaseResourceIndexedSearc
 		b.append("units", getUnits());
 		b.append("value", getValue());
 		b.append("missing", isMissing());
+		b.append("hashIdentitySystemAndUnits", myHashIdentitySystemAndUnits);
 		return b.build();
 	}
 
-	private static String toTruncatedString(BigDecimal theValue) {
-		if (theValue == null) {
-			return null;
-		}
-		return theValue.setScale(0, RoundingMode.FLOOR).toPlainString();
+	public static long calculateHashSystemAndUnits(String theResourceType, String theParamName, String theSystem, String theUnits) {
+		return hash(theResourceType, theParamName, theSystem, theUnits);
+	}
+
+	public static long calculateHashUnits(String theResourceType, String theParamName, String theUnits) {
+		return hash(theResourceType, theParamName, theUnits);
 	}
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamString.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamString.java
index 133c8d78930..1ee6dfccd46 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamString.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamString.java
@@ -20,6 +20,7 @@ package ca.uhn.fhir.jpa.entity;
  * #L%
  */
 
+import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.model.api.IQueryParameterType;
 import ca.uhn.fhir.rest.param.StringParam;
 import org.apache.commons.lang3.StringUtils;
@@ -38,7 +39,14 @@ import static org.apache.commons.lang3.StringUtils.left;
 @Embeddable
 @Entity
 @Table(name = "HFJ_SPIDX_STRING", indexes = {
-	@Index(name = "IDX_SP_STRING", columnList = "RES_TYPE,SP_NAME,SP_VALUE_NORMALIZED"),
+	/*
+	 * Note: We previously had indexes with the following names,
+	 * do not reuse these names:
+	 * IDX_SP_STRING
+	 */
+	@Index(name = "IDX_SP_STRING_HASH_NRM", columnList = "HASH_NORM_PREFIX,SP_VALUE_NORMALIZED"),
+	@Index(name = "IDX_SP_STRING_HASH_EXCT", columnList = "HASH_EXACT"),
+
 	@Index(name = "IDX_SP_STRING_UPDATED", columnList = "SP_UPDATED"),
 	@Index(name = "IDX_SP_STRING_RESID", columnList = "RES_ID")
 })
@@ -127,13 +135,16 @@ public class ResourceIndexedSearchParamString extends BaseResourceIndexedSearchP
 	 */
 	@Column(name = "HASH_EXACT", nullable = true)
 	private Long myHashExact;
+	@Transient
+	private transient DaoConfig myDaoConfig;
 
 	public ResourceIndexedSearchParamString() {
 		super();
 	}
 
 
-	public ResourceIndexedSearchParamString(String theName, String theValueNormalized, String theValueExact) {
+	public ResourceIndexedSearchParamString(DaoConfig theDaoConfig, String theName, String theValueNormalized, String theValueExact) {
+		setDaoConfig(theDaoConfig);
 		setParamName(theName);
 		setValueNormalized(theValueNormalized);
 		setValueExact(theValueExact);
@@ -141,9 +152,13 @@ public class ResourceIndexedSearchParamString extends BaseResourceIndexedSearchP
 
 	@PrePersist
 	public void calculateHashes() {
-		if (myHashNormalizedPrefix == null) {
-			setHashNormalizedPrefix(hash(getResourceType(), getParamName(), left(getValueNormalized(), HASH_PREFIX_LENGTH)));
-			setHashExact(hash(getResourceType(), getParamName(), getValueExact()));
+		if (myHashNormalizedPrefix == null && myDaoConfig != null) {
+			String resourceType = getResourceType();
+			String paramName = getParamName();
+			String valueNormalized = getValueNormalized();
+			String valueExact = getValueExact();
+			setHashNormalizedPrefix(calculateHashNormalized(myDaoConfig, resourceType, paramName, valueNormalized));
+			setHashExact(calculateHashExact(resourceType, paramName, valueExact));
 		}
 	}
 
@@ -169,8 +184,8 @@ public class ResourceIndexedSearchParamString extends BaseResourceIndexedSearchP
 		b.append(getParamName(), obj.getParamName());
 		b.append(getResource(), obj.getResource());
 		b.append(getValueExact(), obj.getValueExact());
-		b.append(getHashNormalizedPrefix(), obj.getHashNormalizedPrefix());
 		b.append(getHashExact(), obj.getHashExact());
+		b.append(getHashNormalizedPrefix(), obj.getHashNormalizedPrefix());
 		return b.isEquals();
 	}
 
@@ -225,11 +240,14 @@ public class ResourceIndexedSearchParamString extends BaseResourceIndexedSearchP
 		b.append(getParamName());
 		b.append(getResource());
 		b.append(getValueExact());
-		b.append(getHashNormalizedPrefix());
-		b.append(getHashExact());
 		return b.toHashCode();
 	}
 
+	public BaseResourceIndexedSearchParam setDaoConfig(DaoConfig theDaoConfig) {
+		myDaoConfig = theDaoConfig;
+		return this;
+	}
+
 	@Override
 	public IQueryParameterType toQueryParameterType() {
 		return new StringParam(getValueExact());
@@ -244,4 +262,23 @@ public class ResourceIndexedSearchParamString extends BaseResourceIndexedSearchP
 		return b.build();
 	}
 
+	public static long calculateHashExact(String theResourceType, String theParamName, String theValueExact) {
+		return hash(theResourceType, theParamName, theValueExact);
+	}
+
+	public static long calculateHashNormalized(DaoConfig theDaoConfig, String theResourceType, String theParamName, String theValueNormalized) {
+		/*
+		 * If we're not allowing contained searches, we'll add the first
+		 * bit of the normalized value to the hash. This helps to
+		 * make the hash even more unique, which will be good for
+		 * performance.
+		 */
+		int hashPrefixLength = HASH_PREFIX_LENGTH;
+		if (theDaoConfig.isAllowContainsSearches()) {
+			hashPrefixLength = 0;
+		}
+
+		return hash(theResourceType, theParamName, left(theValueNormalized, hashPrefixLength));
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamToken.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamToken.java
index 55a4c8c00c7..75938fb79e8 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamToken.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamToken.java
@@ -31,11 +31,23 @@ import org.hibernate.search.annotations.Field;
 
 import javax.persistence.*;
 
+import static org.apache.commons.lang3.StringUtils.defaultString;
+import static org.apache.commons.lang3.StringUtils.trim;
+
 @Embeddable
 @Entity
 @Table(name = "HFJ_SPIDX_TOKEN", indexes = {
-	@Index(name = "IDX_SP_TOKEN", columnList = "RES_TYPE,SP_NAME,SP_SYSTEM,SP_VALUE"),
-	@Index(name = "IDX_SP_TOKEN_UNQUAL", columnList = "RES_TYPE,SP_NAME,SP_VALUE"),
+	/*
+	 * Note: We previously had indexes with the following names,
+	 * do not reuse these names:
+	 * IDX_SP_TOKEN
+	 * IDX_SP_TOKEN_UNQUAL
+	 */
+	@Index(name = "IDX_SP_TOKEN_HASH", columnList = "HASH_IDENTITY"),
+	@Index(name = "IDX_SP_TOKEN_HASH_S", columnList = "HASH_SYS"),
+	@Index(name = "IDX_SP_TOKEN_HASH_SV", columnList = "HASH_SYS_AND_VALUE"),
+	@Index(name = "IDX_SP_TOKEN_HASH_V", columnList = "HASH_VALUE"),
+
 	@Index(name = "IDX_SP_TOKEN_UPDATED", columnList = "SP_UPDATED"),
 	@Index(name = "IDX_SP_TOKEN_RESID", columnList = "RES_ID")
 })
@@ -50,12 +62,18 @@ public class ResourceIndexedSearchParamToken extends BaseResourceIndexedSearchPa
 	public String mySystem;
 	@Field()
 	@Column(name = "SP_VALUE", nullable = true, length = MAX_LENGTH)
-	public String myValue;
+	private String myValue;
+	@SuppressWarnings("unused")
 	@Id
 	@SequenceGenerator(name = "SEQ_SPIDX_TOKEN", sequenceName = "SEQ_SPIDX_TOKEN")
 	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_SPIDX_TOKEN")
 	@Column(name = "SP_ID")
 	private Long myId;
+	/**
+	 * @since 3.4.0 - At some point this should be made not-null
+	 */
+	@Column(name = "HASH_IDENTITY", nullable = true)
+	private Long myHashIdentity;
 	/**
 	 * @since 3.4.0 - At some point this should be made not-null
 	 */
@@ -90,17 +108,20 @@ public class ResourceIndexedSearchParamToken extends BaseResourceIndexedSearchPa
 		setValue(theValue);
 	}
 
-
 	@PrePersist
 	public void calculateHashes() {
 		if (myHashSystem == null) {
-			setHashSystem(hash(getResourceType(), getParamName(), getSystem()));
-			setHashSystemAndValue(hash(getResourceType(), getParamName(), getSystem(), getValue()));
-			setHashValue(hash(getResourceType(), getParamName(), getValue()));
+			String resourceType = getResourceType();
+			String paramName = getParamName();
+			String system = getSystem();
+			String value = getValue();
+			setHashIdentity(calculateHashIdentity(resourceType, paramName));
+			setHashSystem(calculateHashSystem(resourceType, paramName, system));
+			setHashSystemAndValue(calculateHashSystemAndValue(resourceType, paramName, system, value));
+			setHashValue(calculateHashValue(resourceType, paramName, value));
 		}
 	}
 
-
 	@Override
 	protected void clearHashes() {
 		myHashSystem = null;
@@ -125,37 +146,47 @@ public class ResourceIndexedSearchParamToken extends BaseResourceIndexedSearchPa
 		b.append(getResource(), obj.getResource());
 		b.append(getSystem(), obj.getSystem());
 		b.append(getValue(), obj.getValue());
+		b.append(getHashIdentity(), obj.getHashIdentity());
 		b.append(getHashSystem(), obj.getHashSystem());
 		b.append(getHashSystemAndValue(), obj.getHashSystemAndValue());
 		b.append(getHashValue(), obj.getHashValue());
 		return b.isEquals();
 	}
 
-	public Long getHashSystem() {
+	Long getHashSystem() {
 		calculateHashes();
 		return myHashSystem;
 	}
 
-	public void setHashSystem(Long theHashSystem) {
+	private Long getHashIdentity() {
+		calculateHashes();
+		return myHashIdentity;
+	}
+
+	private void setHashIdentity(Long theHashIdentity) {
+		myHashIdentity = theHashIdentity;
+	}
+
+	private void setHashSystem(Long theHashSystem) {
 		myHashSystem = theHashSystem;
 	}
 
-	public Long getHashSystemAndValue() {
+	Long getHashSystemAndValue() {
 		calculateHashes();
 		return myHashSystemAndValue;
 	}
 
-	public void setHashSystemAndValue(Long theHashSystemAndValue) {
+	private void setHashSystemAndValue(Long theHashSystemAndValue) {
 		calculateHashes();
 		myHashSystemAndValue = theHashSystemAndValue;
 	}
 
-	public Long getHashValue() {
+	Long getHashValue() {
 		calculateHashes();
 		return myHashValue;
 	}
 
-	public void setHashValue(Long theHashValue) {
+	private void setHashValue(Long theHashValue) {
 		myHashValue = theHashValue;
 	}
 
@@ -184,18 +215,15 @@ public class ResourceIndexedSearchParamToken extends BaseResourceIndexedSearchPa
 
 	@Override
 	public int hashCode() {
+		calculateHashes();
 		HashCodeBuilder b = new HashCodeBuilder();
 		b.append(getParamName());
 		b.append(getResource());
 		b.append(getSystem());
 		b.append(getValue());
-		b.append(getHashSystem());
-		b.append(getHashSystemAndValue());
-		b.append(getHashValue());
 		return b.toHashCode();
 	}
 
-
 	@Override
 	public IQueryParameterType toQueryParameterType() {
 		return new TokenParam(getSystem(), getValue());
@@ -210,4 +238,16 @@ public class ResourceIndexedSearchParamToken extends BaseResourceIndexedSearchPa
 		b.append("value", getValue());
 		return b.build();
 	}
+
+	public static long calculateHashSystem(String theResourceType, String theParamName, String theSystem) {
+		return hash(theResourceType, theParamName, trim(theSystem));
+	}
+
+	public static long calculateHashSystemAndValue(String theResourceType, String theParamName, String theSystem, String theValue) {
+		return hash(theResourceType, theParamName, defaultString(trim(theSystem)), trim(theValue));
+	}
+
+	public static long calculateHashValue(String theResourceType, String theParamName, String theValue) {
+		return hash(theResourceType, theParamName, trim(theValue));
+	}
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamUri.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamUri.java
index 27b52efeac9..6f35d8809e9 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamUri.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamUri.java
@@ -34,6 +34,8 @@ import javax.persistence.*;
 @Entity
 @Table(name = "HFJ_SPIDX_URI", indexes = {
 	@Index(name = "IDX_SP_URI", columnList = "RES_TYPE,SP_NAME,SP_URI"),
+	@Index(name = "IDX_SP_URI_HASH_IDENTITY", columnList = "HASH_IDENTITY,SP_URI"),
+	@Index(name = "IDX_SP_URI_HASH_URI", columnList = "HASH_URI"),
 	@Index(name = "IDX_SP_URI_RESTYPE_NAME", columnList = "RES_TYPE,SP_NAME"),
 	@Index(name = "IDX_SP_URI_UPDATED", columnList = "SP_UPDATED"),
 	@Index(name = "IDX_SP_URI_COORDS", columnList = "RES_ID")
@@ -59,11 +61,17 @@ public class ResourceIndexedSearchParamUri extends BaseResourceIndexedSearchPara
 	 */
 	@Column(name = "HASH_URI", nullable = true)
 	private Long myHashUri;
+	/**
+	 * @since 3.5.0 - At some point this should be made not-null
+	 */
+	@Column(name = "HASH_IDENTITY", nullable = true)
+	private Long myHashIdentity;
 
 	/**
 	 * Constructor
 	 */
 	public ResourceIndexedSearchParamUri() {
+		super();
 	}
 
 	/**
@@ -77,7 +85,11 @@ public class ResourceIndexedSearchParamUri extends BaseResourceIndexedSearchPara
 	@PrePersist
 	public void calculateHashes() {
 		if (myHashUri == null) {
-			setHashUri(hash(getResourceType(), getParamName(), getUri()));
+			String resourceType = getResourceType();
+			String paramName = getParamName();
+			String uri = getUri();
+			setHashIdentity(calculateHashIdentity(resourceType, paramName));
+			setHashUri(calculateHashUri(resourceType, paramName, uri));
 		}
 	}
 
@@ -103,9 +115,18 @@ public class ResourceIndexedSearchParamUri extends BaseResourceIndexedSearchPara
 		b.append(getResource(), obj.getResource());
 		b.append(getUri(), obj.getUri());
 		b.append(getHashUri(), obj.getHashUri());
+		b.append(getHashIdentity(), obj.getHashIdentity());
 		return b.isEquals();
 	}
 
+	private Long getHashIdentity() {
+		return myHashIdentity;
+	}
+
+	private void setHashIdentity(long theHashIdentity) {
+		myHashIdentity = theHashIdentity;
+	}
+
 	public Long getHashUri() {
 		calculateHashes();
 		return myHashUri;
@@ -153,4 +174,8 @@ public class ResourceIndexedSearchParamUri extends BaseResourceIndexedSearchPara
 		return b.toString();
 	}
 
+	public static long calculateHashUri(String theResourceType, String theParamName, String theUri) {
+		return hash(theResourceType, theParamName, theUri);
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceLink.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceLink.java
index 00310269e56..8f027ce5276 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceLink.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceLink.java
@@ -66,14 +66,12 @@ public class ResourceLink implements Serializable {
 
 	@ManyToOne(optional = false, fetch=FetchType.LAZY)
 	@JoinColumn(name = "SRC_RESOURCE_ID", referencedColumnName = "RES_ID", nullable = false, foreignKey=@ForeignKey(name="FK_RESLINK_SOURCE"))
-//	@ContainedIn()
 	private ResourceTable mySourceResource;
 
 	@Column(name = "SRC_RESOURCE_ID", insertable = false, updatable = false, nullable = false)
 	private Long mySourceResourcePid;
 
 	@Column(name = "SOURCE_RESOURCE_TYPE", nullable=false, length=ResourceTable.RESTYPE_LEN)
-	@ColumnDefault("''") // TODO: remove this (it's only here for simplifying upgrades of 1.3 -> 1.4)
 	@Field()
 	private String mySourceResourceType;
 
@@ -86,7 +84,6 @@ public class ResourceLink implements Serializable {
 	private Long myTargetResourcePid;
 
 	@Column(name = "TARGET_RESOURCE_TYPE", nullable=false, length=ResourceTable.RESTYPE_LEN)
-	@ColumnDefault("''") // TODO: remove this (it's only here for simplifying upgrades of 1.3 -> 1.4)
 	@Field()
 	private String myTargetResourceType;
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceSearchView.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceSearchView.java
new file mode 100644
index 00000000000..e62712ebbe7
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/ResourceSearchView.java
@@ -0,0 +1,200 @@
+package ca.uhn.fhir.jpa.entity;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+import java.io.Serializable;
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.hibernate.annotations.Immutable;
+import org.hibernate.annotations.Subselect;
+
+import ca.uhn.fhir.context.FhirVersionEnum;
+import ca.uhn.fhir.model.primitive.IdDt;
+import ca.uhn.fhir.model.primitive.InstantDt;
+import ca.uhn.fhir.rest.api.Constants;
+
+//@formatter:off
+@Entity
+@Immutable
+@Subselect("SELECT h.pid        as pid            " + 
+		",  h.res_id            as res_id         "	+ 
+		",  h.res_type          as res_type       " + 
+		",  h.res_version       as res_version    " + // FHIR version
+		",  h.res_ver           as res_ver        " + // resource version
+		",  h.has_tags          as has_tags       " + 
+		",  h.res_deleted_at    as res_deleted_at "	+ 
+		",  h.res_published     as res_published  " + 
+		",  h.res_updated       as res_updated    "	+ 
+		",  h.res_text          as res_text       " + 
+		",  h.res_encoding      as res_encoding   "	+ 
+		",  f.forced_id         as forced_pid      " + 
+		"FROM HFJ_RES_VER h "
+		+ "    LEFT OUTER JOIN HFJ_FORCED_ID f ON f.resource_pid = h.res_id "
+		+ "    INNER JOIN HFJ_RESOURCE r       ON r.res_id = h.res_id and r.res_ver = h.res_ver")
+// @formatter:on
+public class ResourceSearchView implements IBaseResourceEntity, Serializable {
+
+	private static final long serialVersionUID = 1L;
+
+	@Id
+	@Column(name = "PID")
+	private Long myId;
+
+	@Column(name = "RES_ID")
+	private Long myResourceId;
+
+	@Column(name = "RES_TYPE")
+	private String myResourceType;
+
+	@Column(name = "RES_VERSION")
+	@Enumerated(EnumType.STRING)
+	private FhirVersionEnum myFhirVersion;
+
+	@Column(name = "RES_VER")
+	private Long myResourceVersion;
+
+	@Column(name = "HAS_TAGS")
+	private boolean myHasTags;
+
+	@Column(name = "RES_DELETED_AT")
+	@Temporal(TemporalType.TIMESTAMP)
+	private Date myDeleted;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "RES_PUBLISHED")
+	private Date myPublished;
+
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "RES_UPDATED")
+	private Date myUpdated;
+
+	@Column(name = "RES_TEXT")
+	@Lob()
+	private byte[] myResource;
+
+	@Column(name = "RES_ENCODING")
+	@Enumerated(EnumType.STRING)
+	private ResourceEncodingEnum myEncoding;
+
+	@Column(name = "forced_pid")
+	private String myForcedPid;
+
+	public ResourceSearchView() {
+	}
+
+	@Override
+	public Date getDeleted() {
+		return myDeleted;
+	}
+
+	public void setDeleted(Date theDate) {
+		myDeleted = theDate;
+	}
+
+	@Override
+	public FhirVersionEnum getFhirVersion() {
+		return myFhirVersion;
+	}
+
+	public void setFhirVersion(FhirVersionEnum theFhirVersion) {
+		myFhirVersion = theFhirVersion;
+	}
+
+	public String getForcedId() {
+		return myForcedPid;
+	}
+
+	@Override
+	public Long getId() {
+		return myResourceId;
+	}
+
+	@Override
+	public IdDt getIdDt() {
+		if (myForcedPid == null) {
+			Long id = myResourceId;
+			return new IdDt(myResourceType + '/' + id + '/' + Constants.PARAM_HISTORY + '/' + getVersion());
+		} else {
+			return new IdDt(
+					getResourceType() + '/' + getForcedId() + '/' + Constants.PARAM_HISTORY + '/' + getVersion());
+		}
+	}
+
+	@Override
+	public InstantDt getPublished() {
+		if (myPublished != null) {
+			return new InstantDt(myPublished);
+		} else {
+			return null;
+		}
+	}
+
+	public void setPublished(Date thePublished) {
+		myPublished = thePublished;
+	}
+
+	@Override
+	public Long getResourceId() {
+		return myResourceId;
+	}
+
+	@Override
+	public String getResourceType() {
+		return myResourceType;
+	}
+
+	@Override
+	public InstantDt getUpdated() {
+		return new InstantDt(myUpdated);
+	}
+
+	@Override
+	public Date getUpdatedDate() {
+		return myUpdated;
+	}
+
+	@Override
+	public long getVersion() {
+		return myResourceVersion;
+	}
+
+	@Override
+	public boolean isHasTags() {
+		return myHasTags;
+	}
+
+	public byte[] getResource() {
+		return myResource;
+	}
+
+	public ResourceEncodingEnum getEncoding() {
+		return myEncoding;
+	}
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Search.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Search.java
index d357611b123..d3ed16c910b 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Search.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/Search.java
@@ -1,5 +1,13 @@
 package ca.uhn.fhir.jpa.entity;
 
+import ca.uhn.fhir.model.api.Include;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+
+import javax.persistence.*;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.*;
+
 import static org.apache.commons.lang3.StringUtils.left;
 
 /*
@@ -22,105 +30,89 @@ import static org.apache.commons.lang3.StringUtils.left;
  * #L%
  */
 
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.persistence.*;
-import javax.validation.constraints.NotNull;
-
-import org.hibernate.annotations.Fetch;
-
-import ca.uhn.fhir.model.api.Include;
-import ca.uhn.fhir.rest.param.DateRangeParam;
-
 @Entity
-@Table(name = "HFJ_SEARCH", uniqueConstraints= {
-	@UniqueConstraint(name="IDX_SEARCH_UUID", columnNames="SEARCH_UUID")
-}, indexes= {
-	@Index(name="IDX_SEARCH_LASTRETURNED", columnList="SEARCH_LAST_RETURNED"),
-	@Index(name="IDX_SEARCH_RESTYPE_HASHS", columnList="RESOURCE_TYPE,SEARCH_QUERY_STRING_HASH,CREATED")
+@Table(name = "HFJ_SEARCH", uniqueConstraints = {
+	@UniqueConstraint(name = "IDX_SEARCH_UUID", columnNames = "SEARCH_UUID")
+}, indexes = {
+	@Index(name = "IDX_SEARCH_LASTRETURNED", columnList = "SEARCH_LAST_RETURNED"),
+	@Index(name = "IDX_SEARCH_RESTYPE_HASHS", columnList = "RESOURCE_TYPE,SEARCH_QUERY_STRING_HASH,CREATED")
 })
 public class Search implements Serializable {
 
+	private static final int MAX_SEARCH_QUERY_STRING = 10000;
+	@SuppressWarnings("WeakerAccess")
+	public static final int UUID_COLUMN_LENGTH = 36;
 	private static final int FAILURE_MESSAGE_LENGTH = 500;
-
 	private static final long serialVersionUID = 1L;
-	public static final int MAX_SEARCH_QUERY_STRING = 10000;
-
 	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="CREATED", nullable=false, updatable=false)
+	@Column(name = "CREATED", nullable = false, updatable = false)
 	private Date myCreated;
 
-	@Column(name="FAILURE_CODE", nullable=true)
+	@Column(name = "FAILURE_CODE", nullable = true)
 	private Integer myFailureCode;
-	
-	@Column(name="FAILURE_MESSAGE", length=FAILURE_MESSAGE_LENGTH, nullable=true)
+
+	@Column(name = "FAILURE_MESSAGE", length = FAILURE_MESSAGE_LENGTH, nullable = true)
 	private String myFailureMessage;
 
 	@Id
-	@GeneratedValue(strategy = GenerationType.AUTO, generator="SEQ_SEARCH")
-	@SequenceGenerator(name="SEQ_SEARCH", sequenceName="SEQ_SEARCH")
+	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_SEARCH")
+	@SequenceGenerator(name = "SEQ_SEARCH", sequenceName = "SEQ_SEARCH")
 	@Column(name = "PID")
 	private Long myId;
 
-	@OneToMany(mappedBy="mySearch")
+	@OneToMany(mappedBy = "mySearch")
 	private Collection<SearchInclude> myIncludes;
 
 	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="LAST_UPDATED_HIGH", nullable=true, insertable=true, updatable=false)
+	@Column(name = "LAST_UPDATED_HIGH", nullable = true, insertable = true, updatable = false)
 	private Date myLastUpdatedHigh;
 
 	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="LAST_UPDATED_LOW", nullable=true, insertable=true, updatable=false)
+	@Column(name = "LAST_UPDATED_LOW", nullable = true, insertable = true, updatable = false)
 	private Date myLastUpdatedLow;
 
-	@Column(name="NUM_FOUND", nullable=false)
+	@Column(name = "NUM_FOUND", nullable = false)
 	private int myNumFound;
 
-	@Column(name="PREFERRED_PAGE_SIZE", nullable=true)
+	@Column(name = "PREFERRED_PAGE_SIZE", nullable = true)
 	private Integer myPreferredPageSize;
 
-	@Column(name="RESOURCE_ID", nullable=true)
+	@Column(name = "RESOURCE_ID", nullable = true)
 	private Long myResourceId;
-	
-	@Column(name="RESOURCE_TYPE", length=200, nullable=true)
+
+	@Column(name = "RESOURCE_TYPE", length = 200, nullable = true)
 	private String myResourceType;
 
-	@OneToMany(mappedBy="mySearch")
+	@OneToMany(mappedBy = "mySearch")
 	private Collection<SearchResult> myResults;
 
 	@NotNull
 	@Temporal(TemporalType.TIMESTAMP)
-	@Column(name="SEARCH_LAST_RETURNED", nullable=false, updatable=false)
+	@Column(name = "SEARCH_LAST_RETURNED", nullable = false, updatable = false)
 	private Date mySearchLastReturned;
 
 	@Lob()
-	@Basic(fetch=FetchType.LAZY)
-	@Column(name="SEARCH_QUERY_STRING", nullable=true, updatable=false, length = MAX_SEARCH_QUERY_STRING)
+	@Basic(fetch = FetchType.LAZY)
+	@Column(name = "SEARCH_QUERY_STRING", nullable = true, updatable = false, length = MAX_SEARCH_QUERY_STRING)
 	private String mySearchQueryString;
 
-	@Column(name="SEARCH_QUERY_STRING_HASH", nullable=true, updatable=false)
+	@Column(name = "SEARCH_QUERY_STRING_HASH", nullable = true, updatable = false)
 	private Integer mySearchQueryStringHash;
 
 	@Enumerated(EnumType.ORDINAL)
-	@Column(name="SEARCH_TYPE", nullable=false)
+	@Column(name = "SEARCH_TYPE", nullable = false)
 	private SearchTypeEnum mySearchType;
 
 	@Enumerated(EnumType.STRING)
-	@Column(name="SEARCH_STATUS", nullable=false, length=10)
+	@Column(name = "SEARCH_STATUS", nullable = false, length = 10)
 	private SearchStatusEnum myStatus;
 
-	@Column(name="TOTAL_COUNT", nullable=true)
+	@Column(name = "TOTAL_COUNT", nullable = true)
 	private Integer myTotalCount;
-	
-	@Column(name="SEARCH_UUID", length=40, nullable=false, updatable=false)
+
+	@Column(name = "SEARCH_UUID", length = UUID_COLUMN_LENGTH, nullable = false, updatable = false)
 	private String myUuid;
-	
+
 	/**
 	 * Constructor
 	 */
@@ -132,21 +124,33 @@ public class Search implements Serializable {
 		return myCreated;
 	}
 
+	public void setCreated(Date theCreated) {
+		myCreated = theCreated;
+	}
+
 	public Integer getFailureCode() {
 		return myFailureCode;
 	}
 
+	public void setFailureCode(Integer theFailureCode) {
+		myFailureCode = theFailureCode;
+	}
+
 	public String getFailureMessage() {
 		return myFailureMessage;
 	}
 
+	public void setFailureMessage(String theFailureMessage) {
+		myFailureMessage = left(theFailureMessage, FAILURE_MESSAGE_LENGTH);
+	}
+
 	public Long getId() {
 		return myId;
 	}
 
 	public Collection<SearchInclude> getIncludes() {
 		if (myIncludes == null) {
-			myIncludes = new ArrayList<SearchInclude>();
+			myIncludes = new ArrayList<>();
 		}
 		return myIncludes;
 	}
@@ -159,6 +163,16 @@ public class Search implements Serializable {
 		}
 	}
 
+	public void setLastUpdated(DateRangeParam theLastUpdated) {
+		if (theLastUpdated == null) {
+			myLastUpdatedLow = null;
+			myLastUpdatedHigh = null;
+		} else {
+			myLastUpdatedLow = theLastUpdated.getLowerBoundAsInstant();
+			myLastUpdatedHigh = theLastUpdated.getUpperBoundAsInstant();
+		}
+	}
+
 	public Date getLastUpdatedHigh() {
 		return myLastUpdatedHigh;
 	}
@@ -171,90 +185,46 @@ public class Search implements Serializable {
 		return myNumFound;
 	}
 
+	public void setNumFound(int theNumFound) {
+		myNumFound = theNumFound;
+	}
+
 	public Integer getPreferredPageSize() {
 		return myPreferredPageSize;
 	}
 
+	public void setPreferredPageSize(Integer thePreferredPageSize) {
+		myPreferredPageSize = thePreferredPageSize;
+	}
+
 	public Long getResourceId() {
 		return myResourceId;
 	}
 
-	public String getResourceType() {
-		return myResourceType;
-	}
-
-	public Date getSearchLastReturned() {
-		return mySearchLastReturned;
-	}
-	
-	public String getSearchQueryString() {
-		return mySearchQueryString;
-	}
-
-	public SearchTypeEnum getSearchType() {
-		return mySearchType;
-	}
-
-	public SearchStatusEnum getStatus() {
-		return myStatus;
-	}
-
-	public Integer getTotalCount() {
-		return myTotalCount;
-	}
-
-	public String getUuid() {
-		return myUuid;
-	}
-
-	public void setCreated(Date theCreated) {
-		myCreated = theCreated;
-	}
-
-
-	public void setFailureCode(Integer theFailureCode) {
-		myFailureCode = theFailureCode;
-	}
-
-	public void setFailureMessage(String theFailureMessage) {
-		myFailureMessage = left(theFailureMessage, FAILURE_MESSAGE_LENGTH);
-	}
-
-	public void setLastUpdated(Date theLowerBound, Date theUpperBound) {
-		myLastUpdatedLow = theLowerBound;
-		myLastUpdatedHigh = theUpperBound;
-	}
-	public void setLastUpdated(DateRangeParam theLastUpdated) {
-		if (theLastUpdated == null) {
-			myLastUpdatedLow = null;
-			myLastUpdatedHigh = null;
-		} else {
-			myLastUpdatedLow = theLastUpdated.getLowerBoundAsInstant();
-			myLastUpdatedHigh = theLastUpdated.getUpperBoundAsInstant();
-		}
-	}
-	
-	public void setNumFound(int theNumFound) {
-		myNumFound = theNumFound;
-	}
-
-	public void setPreferredPageSize(Integer thePreferredPageSize) {
-		myPreferredPageSize = thePreferredPageSize;
-	}
-	
 	public void setResourceId(Long theResourceId) {
 		myResourceId = theResourceId;
 	}
 
+	public String getResourceType() {
+		return myResourceType;
+	}
 
 	public void setResourceType(String theResourceType) {
 		myResourceType = theResourceType;
 	}
 
+	public Date getSearchLastReturned() {
+		return mySearchLastReturned;
+	}
+
 	public void setSearchLastReturned(Date theDate) {
 		mySearchLastReturned = theDate;
 	}
 
+	public String getSearchQueryString() {
+		return mySearchQueryString;
+	}
+
 	public void setSearchQueryString(String theSearchQueryString) {
 		if (theSearchQueryString != null && theSearchQueryString.length() > MAX_SEARCH_QUERY_STRING) {
 			mySearchQueryString = null;
@@ -263,26 +233,47 @@ public class Search implements Serializable {
 		}
 	}
 
-	public void setSearchQueryStringHash(Integer theSearchQueryStringHash) {
-		mySearchQueryStringHash = theSearchQueryStringHash;
+	public SearchTypeEnum getSearchType() {
+		return mySearchType;
 	}
 
 	public void setSearchType(SearchTypeEnum theSearchType) {
 		mySearchType = theSearchType;
 	}
 
+	public SearchStatusEnum getStatus() {
+		return myStatus;
+	}
+
 	public void setStatus(SearchStatusEnum theStatus) {
 		myStatus = theStatus;
 	}
 
+	public Integer getTotalCount() {
+		return myTotalCount;
+	}
+
 	public void setTotalCount(Integer theTotalCount) {
 		myTotalCount = theTotalCount;
 	}
 
+	public String getUuid() {
+		return myUuid;
+	}
+
 	public void setUuid(String theUuid) {
 		myUuid = theUuid;
 	}
 
+	public void setLastUpdated(Date theLowerBound, Date theUpperBound) {
+		myLastUpdatedLow = theLowerBound;
+		myLastUpdatedHigh = theUpperBound;
+	}
+
+	public void setSearchQueryStringHash(Integer theSearchQueryStringHash) {
+		mySearchQueryStringHash = theSearchQueryStringHash;
+	}
+
 	private Set<Include> toIncList(boolean theWantReverse) {
 		HashSet<Include> retVal = new HashSet<Include>();
 		for (SearchInclude next : getIncludes()) {
@@ -300,5 +291,8 @@ public class Search implements Serializable {
 	public Set<Include> toRevIncludesList() {
 		return toIncList(true);
 	}
-	
+
+	public void addInclude(SearchInclude theInclude) {
+		getIncludes().add(theInclude);
+	}
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SearchParam.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SearchParam.java
deleted file mode 100644
index 79cb7398f63..00000000000
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SearchParam.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package ca.uhn.fhir.jpa.entity;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server
- * %%
- * Copyright (C) 2014 - 2018 University Health Network
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import javax.persistence.*;
-
-@Entity
-@Table(name = "HFJ_SEARCH_PARM", uniqueConstraints= {
-	@UniqueConstraint(name="IDX_SEARCHPARM_RESTYPE_SPNAME", columnNames= {"RES_TYPE", "PARAM_NAME"})
-})
-public class SearchParam {
-
-	@Id
-	@SequenceGenerator(name = "SEQ_SEARCHPARM_ID", sequenceName = "SEQ_SEARCHPARM_ID")
-	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_SEARCHPARM_ID")
-	@Column(name = "PID")
-	private Long myId;
-
-	@Column(name="PARAM_NAME", length=BaseResourceIndexedSearchParam.MAX_SP_NAME, nullable=false, updatable=false)
-	private String myParamName;
-
-	@Column(name="RES_TYPE", length=ResourceTable.RESTYPE_LEN, nullable=false, updatable=false)
-	private String myResourceName;
-
-	public String getParamName() {
-		return myParamName;
-	}
-
-	public void setParamName(String theParamName) {
-		myParamName = theParamName;
-	}
-
-	public void setResourceName(String theResourceName) {
-		myResourceName = theResourceName;
-	}
-
-	public Long getId() {
-		return myId;
-	}
-	
-}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SearchParamPresent.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SearchParamPresent.java
index 06082ba06bd..d5245966225 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SearchParamPresent.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/SearchParamPresent.java
@@ -20,18 +20,16 @@ package ca.uhn.fhir.jpa.entity;
  * #L%
  */
 
-import java.io.Serializable;
-
-import javax.persistence.*;
-
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
+import javax.persistence.*;
+import java.io.Serializable;
+
 @Entity
 @Table(name = "HFJ_RES_PARAM_PRESENT", indexes = {
-		@Index(name = "IDX_RESPARMPRESENT_RESID", columnList = "RES_ID")
-}, uniqueConstraints = {
-		@UniqueConstraint(name = "IDX_RESPARMPRESENT_SPID_RESID", columnNames = { "SP_ID", "RES_ID" })
+	@Index(name = "IDX_RESPARMPRESENT_RESID", columnList = "RES_ID"),
+	@Index(name = "IDX_RESPARMPRESENT_HASHPRES", columnList = "HASH_PRESENCE")
 })
 public class SearchParamPresent implements Serializable {
 
@@ -42,17 +40,15 @@ public class SearchParamPresent implements Serializable {
 	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_RESPARMPRESENT_ID")
 	@Column(name = "PID")
 	private Long myId;
-
 	@Column(name = "SP_PRESENT", nullable = false)
 	private boolean myPresent;
-
 	@ManyToOne()
 	@JoinColumn(name = "RES_ID", referencedColumnName = "RES_ID", nullable = false, foreignKey = @ForeignKey(name = "FK_RESPARMPRES_RESID"))
 	private ResourceTable myResource;
-
-	@ManyToOne()
-	@JoinColumn(name = "SP_ID", referencedColumnName = "PID", nullable = false, foreignKey = @ForeignKey(name = "FK_RESPARMPRES_SPID"))
-	private SearchParam mySearchParam;
+	@Transient
+	private transient String myParamName;
+	@Column(name = "HASH_PRESENCE")
+	private Long myHashPresence;
 
 	/**
 	 * Constructor
@@ -60,13 +56,40 @@ public class SearchParamPresent implements Serializable {
 	public SearchParamPresent() {
 		super();
 	}
-	
+
+	@SuppressWarnings("unused")
+	@PrePersist
+	public void calculateHashes() {
+		if (myHashPresence == null) {
+			String resourceType = getResource().getResourceType();
+			String paramName = getParamName();
+			boolean present = myPresent;
+			setHashPresence(calculateHashPresence(resourceType, paramName, present));
+		}
+	}
+
+	public Long getHashPresence() {
+		return myHashPresence;
+	}
+
+	public void setHashPresence(Long theHashPresence) {
+		myHashPresence = theHashPresence;
+	}
+
+	public String getParamName() {
+		return myParamName;
+	}
+
+	public void setParamName(String theParamName) {
+		myParamName = theParamName;
+	}
+
 	public ResourceTable getResource() {
 		return myResource;
 	}
 
-	public SearchParam getSearchParam() {
-		return mySearchParam;
+	public void setResource(ResourceTable theResourceTable) {
+		myResource = theResourceTable;
 	}
 
 	public boolean isPresent() {
@@ -77,22 +100,18 @@ public class SearchParamPresent implements Serializable {
 		myPresent = thePresent;
 	}
 
-	public void setResource(ResourceTable theResourceTable) {
-		myResource = theResourceTable;
-	}
-
-	public void setSearchParam(SearchParam theSearchParam) {
-		mySearchParam = theSearchParam;
-	}
-
 	@Override
 	public String toString() {
 		ToStringBuilder b = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
-		
-		b.append("res_pid", myResource.getIdDt().toUnqualifiedVersionless().getValue());
-		b.append("param", mySearchParam.getParamName());
+
+		b.append("resPid", myResource.getIdDt().toUnqualifiedVersionless().getValue());
+		b.append("paramName", myParamName);
 		b.append("present", myPresent);
 		return b.build();
 	}
 
+	public static long calculateHashPresence(String theResourceType, String theParamName, boolean thePresent) {
+		return BaseResourceIndexedSearchParam.hash(theResourceType, theParamName, Boolean.toString(thePresent));
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConcept.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConcept.java
index 013cf26d233..1b501d9e1c8 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConcept.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConcept.java
@@ -45,9 +45,11 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
 @Table(name = "TRM_CONCEPT", uniqueConstraints = {
 	@UniqueConstraint(name = "IDX_CONCEPT_CS_CODE", columnNames = {"CODESYSTEM_PID", "CODE"})
 }, indexes = {
-	@Index(name = "IDX_CONCEPT_INDEXSTATUS", columnList = "INDEX_STATUS")
+	@Index(name = "IDX_CONCEPT_INDEXSTATUS", columnList = "INDEX_STATUS"),
+	@Index(name = "IDX_CONCEPT_UPDATED", columnList = "CONCEPT_UPDATED")
 })
 public class TermConcept implements Serializable {
+	public static final int CODE_LENGTH = 500;
 	protected static final int MAX_DESC_LENGTH = 400;
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(TermConcept.class);
 
@@ -56,18 +58,18 @@ public class TermConcept implements Serializable {
 	@OneToMany(fetch = FetchType.LAZY, mappedBy = "myParent", cascade = {})
 	private Collection<TermConceptParentChildLink> myChildren;
 
-	@Column(name = "CODE", length = 100, nullable = false)
+	@Column(name = "CODE", length = CODE_LENGTH, nullable = false)
 	@Fields({@Field(name = "myCode", index = org.hibernate.search.annotations.Index.YES, store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "exactAnalyzer")),})
 	private String myCode;
-
+	@Temporal(TemporalType.TIMESTAMP)
+	@Column(name = "CONCEPT_UPDATED", nullable = true)
+	private Date myUpdated;
 	@ManyToOne()
 	@JoinColumn(name = "CODESYSTEM_PID", referencedColumnName = "PID", foreignKey = @ForeignKey(name = "FK_CONCEPT_PID_CS_PID"))
 	private TermCodeSystemVersion myCodeSystem;
-
 	@Column(name = "CODESYSTEM_PID", insertable = false, updatable = false)
 	@Fields({@Field(name = "myCodeSystemVersionPid")})
 	private long myCodeSystemVersionPid;
-
 	@Column(name = "DISPLAY", length = MAX_DESC_LENGTH, nullable = true)
 	@Fields({
 		@Field(name = "myDisplay", index = org.hibernate.search.annotations.Index.YES, store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "standardAnalyzer")),
@@ -76,15 +78,12 @@ public class TermConcept implements Serializable {
 		@Field(name = "myDisplayPhonetic", index = org.hibernate.search.annotations.Index.YES, store = Store.NO, analyze = Analyze.YES, analyzer = @Analyzer(definition = "autocompletePhoneticAnalyzer"))
 	})
 	private String myDisplay;
-
-	@OneToMany(mappedBy = "myConcept", orphanRemoval = true)
+	@OneToMany(mappedBy = "myConcept", orphanRemoval = false)
 	@Field(name = "PROPmyProperties", analyzer = @Analyzer(definition = "termConceptPropertyAnalyzer"))
 	@FieldBridge(impl = TermConceptPropertyFieldBridge.class)
 	private Collection<TermConceptProperty> myProperties;
-
-	@OneToMany(mappedBy = "myConcept", orphanRemoval = true)
+	@OneToMany(mappedBy = "myConcept", orphanRemoval = false)
 	private Collection<TermConceptDesignation> myDesignations;
-
 	@Id()
 	@SequenceGenerator(name = "SEQ_CONCEPT_PID", sequenceName = "SEQ_CONCEPT_PID")
 	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_CONCEPT_PID")
@@ -92,18 +91,17 @@ public class TermConcept implements Serializable {
 	private Long myId;
 	@Column(name = "INDEX_STATUS", nullable = true)
 	private Long myIndexStatus;
-	@Transient
 	@Field(name = "myParentPids", index = org.hibernate.search.annotations.Index.YES, store = Store.YES, analyze = Analyze.YES, analyzer = @Analyzer(definition = "conceptParentPidsAnalyzer"))
+	@Lob
+	@Column(name="PARENT_PIDS", nullable = true)
 	private String myParentPids;
 	@OneToMany(cascade = {}, fetch = FetchType.LAZY, mappedBy = "myChild")
 	private Collection<TermConceptParentChildLink> myParents;
 	@Column(name = "CODE_SEQUENCE", nullable = true)
 	private Integer mySequence;
-
 	public TermConcept() {
 		super();
 	}
-
 	public TermConcept(TermCodeSystemVersion theCs, String theCode) {
 		setCodeSystemVersion(theCs);
 		setCode(theCode);
@@ -130,6 +128,7 @@ public class TermConcept implements Serializable {
 	public TermConceptDesignation addDesignation() {
 		TermConceptDesignation designation = new TermConceptDesignation();
 		designation.setConcept(this);
+		designation.setCodeSystemVersion(myCodeSystem);
 		getDesignations().add(designation);
 		return designation;
 	}
@@ -139,6 +138,7 @@ public class TermConcept implements Serializable {
 
 		TermConceptProperty property = new TermConceptProperty();
 		property.setConcept(this);
+		property.setCodeSystemVersion(myCodeSystem);
 		property.setType(thePropertyType);
 		property.setKey(thePropertyName);
 		property.setValue(thePropertyValue);
@@ -294,6 +294,14 @@ public class TermConcept implements Serializable {
 		return null;
 	}
 
+	public Date getUpdated() {
+		return myUpdated;
+	}
+
+	public void setUpdated(Date theUpdated) {
+		myUpdated = theUpdated;
+	}
+
 	@Override
 	public int hashCode() {
 		HashCodeBuilder b = new HashCodeBuilder();
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptDesignation.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptDesignation.java
index 0bdaa4ad492..bd99a8c3196 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptDesignation.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptDesignation.java
@@ -48,6 +48,14 @@ public class TermConceptDesignation implements Serializable {
 	private String myUseDisplay;
 	@Column(name = "VAL", length = 500, nullable = false)
 	private String myValue;
+	/**
+	 * TODO: Make this non-null
+	 *
+	 * @since 3.5.0
+	 */
+	@ManyToOne
+	@JoinColumn(name = "CS_VER_PID", nullable = true, referencedColumnName = "PID", foreignKey = @ForeignKey(name = "FK_CONCEPTDESIG_CSV"))
+	private TermCodeSystemVersion myCodeSystemVersion;
 
 	public String getLanguage() {
 		return myLanguage;
@@ -94,6 +102,11 @@ public class TermConceptDesignation implements Serializable {
 		return this;
 	}
 
+	public TermConceptDesignation setCodeSystemVersion(TermCodeSystemVersion theCodeSystemVersion) {
+		myCodeSystemVersion = theCodeSystemVersion;
+		return this;
+	}
+
 	public TermConceptDesignation setConcept(TermConcept theConcept) {
 		myConcept = theConcept;
 		return this;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptMapGroupElement.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptMapGroupElement.java
index a8cbb9ad202..5045f21ddfe 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptMapGroupElement.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptMapGroupElement.java
@@ -45,7 +45,7 @@ public class TermConceptMapGroupElement implements Serializable {
 	@JoinColumn(name = "CONCEPT_MAP_GROUP_PID", nullable = false, referencedColumnName = "PID", foreignKey=@ForeignKey(name="FK_TCMGELEMENT_GROUP"))
 	private TermConceptMapGroup myConceptMapGroup;
 
-	@Column(name = "SOURCE_CODE", nullable = false, length = 100)
+	@Column(name = "SOURCE_CODE", nullable = false, length = TermConcept.CODE_LENGTH)
 	private String myCode;
 
 	@Column(name = "SOURCE_DISPLAY", length = TermConcept.MAX_DESC_LENGTH)
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptMapGroupElementTarget.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptMapGroupElementTarget.java
index cf24249d835..df48504e6e8 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptMapGroupElementTarget.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptMapGroupElementTarget.java
@@ -44,7 +44,7 @@ public class TermConceptMapGroupElementTarget implements Serializable {
 	@JoinColumn(name = "CONCEPT_MAP_GRP_ELM_PID", nullable = false, referencedColumnName = "PID", foreignKey=@ForeignKey(name="FK_TCMGETARGET_ELEMENT"))
 	private TermConceptMapGroupElement myConceptMapGroupElement;
 
-	@Column(name = "TARGET_CODE", nullable = false, length = 50)
+	@Column(name = "TARGET_CODE", nullable = false, length = TermConcept.CODE_LENGTH)
 	private String myCode;
 
 	@Column(name = "TARGET_DISPLAY", length = TermConcept.MAX_DESC_LENGTH)
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptProperty.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptProperty.java
index 71f8c985d9d..e5aabc32a43 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptProperty.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/entity/TermConceptProperty.java
@@ -38,6 +38,14 @@ public class TermConceptProperty implements Serializable {
 	@ManyToOne
 	@JoinColumn(name = "CONCEPT_PID", referencedColumnName = "PID", foreignKey = @ForeignKey(name = "FK_CONCEPTPROP_CONCEPT"))
 	private TermConcept myConcept;
+	/**
+	 * TODO: Make this non-null
+	 *
+	 * @since 3.5.0
+	 */
+	@ManyToOne
+	@JoinColumn(name = "CS_VER_PID", nullable = true, referencedColumnName = "PID", foreignKey = @ForeignKey(name = "FK_CONCEPTPROP_CSV"))
+	private TermCodeSystemVersion myCodeSystemVersion;
 	@Id()
 	@SequenceGenerator(name = "SEQ_CONCEPT_PROP_PID", sequenceName = "SEQ_CONCEPT_PROP_PID")
 	@GeneratedValue(strategy = GenerationType.AUTO, generator = "SEQ_CONCEPT_PROP_PID")
@@ -124,6 +132,11 @@ public class TermConceptProperty implements Serializable {
 		myValue = theValue;
 	}
 
+	public TermConceptProperty setCodeSystemVersion(TermCodeSystemVersion theCodeSystemVersion) {
+		myCodeSystemVersion = theCodeSystemVersion;
+		return this;
+	}
+
 	public void setConcept(TermConcept theConcept) {
 		myConcept = theConcept;
 	}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderCompositionDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderCompositionDstu2.java
new file mode 100644
index 00000000000..f568919ff67
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderCompositionDstu2.java
@@ -0,0 +1,63 @@
+package ca.uhn.fhir.jpa.provider;
+
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoComposition;
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.model.api.annotation.Description;
+
+import ca.uhn.fhir.model.dstu2.resource.Bundle;
+import ca.uhn.fhir.model.dstu2.resource.Composition;
+import ca.uhn.fhir.model.valueset.BundleTypeEnum;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Operation;
+import ca.uhn.fhir.rest.annotation.OperationParam;
+import ca.uhn.fhir.rest.annotation.Sort;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+public class BaseJpaResourceProviderCompositionDstu2 extends JpaResourceProviderDstu2<Composition> {
+
+	/**
+	 * Composition/123/$document
+	 */
+	//@formatter:off
+	@Operation(name = JpaConstants.OPERATION_DOCUMENT, idempotent = true, bundleType=BundleTypeEnum.SEARCHSET)
+	public IBaseBundle getDocumentForComposition(
+
+			javax.servlet.http.HttpServletRequest theServletRequest) {
+		//@formatter:on
+
+		startRequest(theServletRequest);
+		try {
+			((IFhirResourceDaoComposition<Composition>)getDao()).getDocumentForComposition(theServletRequest, null, null, null, null, null);
+			return null;
+		} finally {
+			endRequest(theServletRequest);
+		}
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderMessageHeaderDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderMessageHeaderDstu2.java
new file mode 100644
index 00000000000..c4eaffa40f0
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/BaseJpaResourceProviderMessageHeaderDstu2.java
@@ -0,0 +1,61 @@
+package ca.uhn.fhir.jpa.provider;
+
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoMessageHeader;
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.model.api.annotation.Description;
+import ca.uhn.fhir.model.dstu2.resource.Bundle;
+import ca.uhn.fhir.model.dstu2.resource.MessageHeader;
+import ca.uhn.fhir.rest.annotation.Operation;
+import ca.uhn.fhir.rest.annotation.OperationParam;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+
+import javax.servlet.http.HttpServletRequest;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+public class BaseJpaResourceProviderMessageHeaderDstu2 extends JpaResourceProviderDstu2<MessageHeader> {
+
+
+	/**
+	 * /MessageHeader/$process-message
+	 */
+	@Operation(name = JpaConstants.OPERATION_PROCESS_MESSAGE, idempotent = false)
+	public IBaseBundle processMessage(
+		HttpServletRequest theServletRequest,
+		RequestDetails theRequestDetails,
+
+		@OperationParam(name = "content", min = 1, max = 1)
+		@Description(formalDefinition = "The message to process (or, if using asynchronous messaging, it may be a response message to accept)")
+			Bundle theMessageToProcess
+	) {
+
+		startRequest(theServletRequest);
+		try {
+			return ((IFhirResourceDaoMessageHeader<MessageHeader>) getDao()).messageHeaderProcessMessage(theRequestDetails, theMessageToProcess);
+		} finally {
+			endRequest(theServletRequest);
+		}
+
+	}
+
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/dstu3/BaseJpaResourceProviderCompositionDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/dstu3/BaseJpaResourceProviderCompositionDstu3.java
new file mode 100644
index 00000000000..871d05d7fe6
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/dstu3/BaseJpaResourceProviderCompositionDstu3.java
@@ -0,0 +1,91 @@
+package ca.uhn.fhir.jpa.provider.dstu3;
+
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoComposition;
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.model.api.annotation.Description;
+import ca.uhn.fhir.model.valueset.BundleTypeEnum;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Operation;
+import ca.uhn.fhir.rest.annotation.OperationParam;
+import ca.uhn.fhir.rest.annotation.Sort;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import org.hl7.fhir.dstu3.model.*;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+import javax.print.attribute.standard.Severity;
+import java.util.ArrayList;
+import java.util.List;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+public class BaseJpaResourceProviderCompositionDstu3 extends JpaResourceProviderDstu3<Composition> {
+
+	/**
+	 * Composition/123/$document
+	 *
+	 * @param theRequestDetails
+	 */
+	//@formatter:off
+	@Operation(name = JpaConstants.OPERATION_DOCUMENT, idempotent = true, bundleType=BundleTypeEnum.DOCUMENT)
+	public IBaseBundle getDocumentForComposition(
+
+			javax.servlet.http.HttpServletRequest theServletRequest,
+
+			@IdParam 
+			IdType theId,
+			
+			@Description(formalDefinition="Results from this method are returned across multiple pages. This parameter controls the size of those pages.") 
+			@OperationParam(name = Constants.PARAM_COUNT) 
+			UnsignedIntType theCount,
+			
+			@Description(shortDefinition="Only return resources which were last updated as specified by the given range")
+			@OperationParam(name = Constants.PARAM_LASTUPDATED, min=0, max=1) 
+			DateRangeParam theLastUpdated,
+
+			@Sort
+			SortSpec theSortSpec, 
+			
+			RequestDetails theRequestDetails
+			) {
+		//@formatter:on
+
+		startRequest(theServletRequest);
+		try {
+			IBundleProvider bundleProvider = ((IFhirResourceDaoComposition<Composition>) getDao()).getDocumentForComposition(theServletRequest, theId, theCount, theLastUpdated, theSortSpec, theRequestDetails);
+			List<IBaseResource> resourceList = bundleProvider.getResources(0, bundleProvider.size());
+
+			boolean foundCompositionResource = false;
+			Bundle bundle = new Bundle().setType(Bundle.BundleType.DOCUMENT);
+			for (IBaseResource resource : resourceList) {
+				bundle.addEntry(new Bundle.BundleEntryComponent().setResource((Resource) resource));
+			}
+			return bundle;
+		} finally {
+			endRequest(theServletRequest);
+		}
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/dstu3/BaseJpaResourceProviderMessageHeaderDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/dstu3/BaseJpaResourceProviderMessageHeaderDstu3.java
new file mode 100644
index 00000000000..ee23124e60e
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/dstu3/BaseJpaResourceProviderMessageHeaderDstu3.java
@@ -0,0 +1,61 @@
+package ca.uhn.fhir.jpa.provider.dstu3;
+
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoMessageHeader;
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.model.api.annotation.Description;
+import ca.uhn.fhir.rest.annotation.Operation;
+import ca.uhn.fhir.rest.annotation.OperationParam;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.dstu3.model.Bundle;
+import org.hl7.fhir.dstu3.model.MessageHeader;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+
+import javax.servlet.http.HttpServletRequest;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+public class BaseJpaResourceProviderMessageHeaderDstu3 extends JpaResourceProviderDstu3<MessageHeader> {
+
+
+	/**
+	 * /MessageHeader/$process-message
+	 */
+	@Operation(name = JpaConstants.OPERATION_PROCESS_MESSAGE, idempotent = false)
+	public IBaseBundle processMessage(
+		HttpServletRequest theServletRequest,
+		RequestDetails theRequestDetails,
+
+		@OperationParam(name = "content", min = 1, max = 1)
+		@Description(formalDefinition = "The message to process (or, if using asynchronous messaging, it may be a response message to accept)")
+			Bundle theMessageToProcess
+	) {
+
+		startRequest(theServletRequest);
+		try {
+			return ((IFhirResourceDaoMessageHeader<MessageHeader>) getDao()).messageHeaderProcessMessage(theRequestDetails, theMessageToProcess);
+		} finally {
+			endRequest(theServletRequest);
+		}
+
+	}
+
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/r4/BaseJpaResourceProviderCompositionR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/r4/BaseJpaResourceProviderCompositionR4.java
new file mode 100644
index 00000000000..ca98bb6834d
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/r4/BaseJpaResourceProviderCompositionR4.java
@@ -0,0 +1,89 @@
+package ca.uhn.fhir.jpa.provider.r4;
+
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoComposition;
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.model.api.annotation.Description;
+import ca.uhn.fhir.model.valueset.BundleTypeEnum;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Operation;
+import ca.uhn.fhir.rest.annotation.OperationParam;
+import ca.uhn.fhir.rest.annotation.Sort;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.SortSpec;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.r4.model.*;
+
+import java.util.List;
+
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+public class BaseJpaResourceProviderCompositionR4 extends JpaResourceProviderR4<Composition> {
+
+	/**
+	 * Composition/123/$document
+	 *
+	 * @param theRequestDetails
+	 */
+	//@formatter:off
+	@Operation(name = JpaConstants.OPERATION_DOCUMENT, idempotent = true, bundleType=BundleTypeEnum.DOCUMENT)
+	public IBaseBundle getDocumentForComposition(
+
+			javax.servlet.http.HttpServletRequest theServletRequest,
+
+			@IdParam
+			IdType theId,
+
+			@Description(formalDefinition="Results from this method are returned across multiple pages. This parameter controls the size of those pages.")
+			@OperationParam(name = Constants.PARAM_COUNT)
+			UnsignedIntType theCount,
+
+			@Description(shortDefinition="Only return resources which were last updated as specified by the given range")
+			@OperationParam(name = Constants.PARAM_LASTUPDATED, min=0, max=1)
+			DateRangeParam theLastUpdated,
+
+			@Sort
+			SortSpec theSortSpec,
+
+			RequestDetails theRequestDetails
+			) {
+		//@formatter:on
+
+		startRequest(theServletRequest);
+		try {
+			IBundleProvider bundleProvider = ((IFhirResourceDaoComposition<Composition>) getDao()).getDocumentForComposition(theServletRequest, theId, theCount, theLastUpdated, theSortSpec, theRequestDetails);
+			List<IBaseResource> resourceList = bundleProvider.getResources(0, bundleProvider.size());
+
+			boolean foundCompositionResource = false;
+			Bundle bundle = new Bundle().setType(Bundle.BundleType.DOCUMENT);
+			for (IBaseResource resource : resourceList) {
+				bundle.addEntry(new Bundle.BundleEntryComponent().setResource((Resource) resource));
+			}
+			return bundle;
+		} finally {
+			endRequest(theServletRequest);
+		}
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/r4/BaseJpaResourceProviderMessageHeaderR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/r4/BaseJpaResourceProviderMessageHeaderR4.java
new file mode 100644
index 00000000000..6934d9e033e
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/provider/r4/BaseJpaResourceProviderMessageHeaderR4.java
@@ -0,0 +1,61 @@
+package ca.uhn.fhir.jpa.provider.r4;
+
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoMessageHeader;
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.model.api.annotation.Description;
+import ca.uhn.fhir.rest.annotation.Operation;
+import ca.uhn.fhir.rest.annotation.OperationParam;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+import org.hl7.fhir.r4.model.Bundle;
+import org.hl7.fhir.r4.model.MessageHeader;
+
+import javax.servlet.http.HttpServletRequest;
+
+/*
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+public class BaseJpaResourceProviderMessageHeaderR4 extends JpaResourceProviderR4<MessageHeader> {
+
+
+	/**
+	 * /MessageHeader/$process-message
+	 */
+	@Operation(name = JpaConstants.OPERATION_PROCESS_MESSAGE, idempotent = false)
+	public IBaseBundle processMessage(
+		HttpServletRequest theServletRequest,
+		RequestDetails theRequestDetails,
+
+		@OperationParam(name = "content", min = 1, max = 1)
+		@Description(formalDefinition = "The message to process (or, if using asynchronous messaging, it may be a response message to accept)")
+			Bundle theMessageToProcess
+	) {
+
+		startRequest(theServletRequest);
+		try {
+			return ((IFhirResourceDaoMessageHeader<MessageHeader>) getDao()).messageHeaderProcessMessage(theRequestDetails, theMessageToProcess);
+		} finally {
+			endRequest(theServletRequest);
+		}
+
+	}
+
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/LuceneSearchMappingFactory.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/LuceneSearchMappingFactory.java
index d316902a73c..e94da64629a 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/LuceneSearchMappingFactory.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/LuceneSearchMappingFactory.java
@@ -20,9 +20,7 @@ package ca.uhn.fhir.jpa.search;
  * #L%
  */
 
-import org.apache.lucene.analysis.core.LowerCaseFilterFactory;
-import org.apache.lucene.analysis.core.StopFilterFactory;
-import org.apache.lucene.analysis.core.WhitespaceTokenizerFactory;
+import org.apache.lucene.analysis.core.*;
 import org.apache.lucene.analysis.miscellaneous.WordDelimiterFilterFactory;
 import org.apache.lucene.analysis.ngram.EdgeNGramFilterFactory;
 import org.apache.lucene.analysis.ngram.NGramFilterFactory;
@@ -65,7 +63,7 @@ public class LuceneSearchMappingFactory {
 				.param("maxGramSize", "20")
 			.analyzerDef("standardAnalyzer", StandardTokenizerFactory.class)
 				.filter(LowerCaseFilterFactory.class)
-			.analyzerDef("exactAnalyzer", StandardTokenizerFactory.class)
+			.analyzerDef("exactAnalyzer", KeywordTokenizerFactory.class)
 			.analyzerDef("conceptParentPidsAnalyzer", WhitespaceTokenizerFactory.class)
 			.analyzerDef("termConceptPropertyAnalyzer", WhitespaceTokenizerFactory.class);
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/PersistedJpaBundleProvider.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/PersistedJpaBundleProvider.java
index 4f9a3f388b8..60e491c7144 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/PersistedJpaBundleProvider.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/PersistedJpaBundleProvider.java
@@ -32,6 +32,7 @@ import ca.uhn.fhir.model.primitive.InstantDt;
 import ca.uhn.fhir.rest.api.server.IBundleProvider;
 import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionDefinition;
 import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.support.TransactionCallback;
 import org.springframework.transaction.support.TransactionCallbackWithoutResult;
@@ -134,13 +135,8 @@ public class PersistedJpaBundleProvider implements IBundleProvider {
 		final List<Long> pidsSubList = mySearchCoordinatorSvc.getResources(myUuid, theFromIndex, theToIndex);
 
 		TransactionTemplate template = new TransactionTemplate(myPlatformTransactionManager);
-		template.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRED);
-		return template.execute(new TransactionCallback<List<IBaseResource>>() {
-			@Override
-			public List<IBaseResource> doInTransaction(TransactionStatus theStatus) {
-				return toResourceList(sb, pidsSubList);
-			}
-		});
+		template.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
+		return template.execute(theStatus -> toResourceList(sb, pidsSubList));
 	}
 
 	private void ensureDependenciesInjected() {
@@ -273,8 +269,8 @@ public class PersistedJpaBundleProvider implements IBundleProvider {
 	List<IBaseResource> toResourceList(ISearchBuilder sb, List<Long> pidsSubList) {
 		Set<Long> includedPids = new HashSet<>();
 		if (mySearchEntity.getSearchType() == SearchTypeEnum.SEARCH) {
-			includedPids.addAll(sb.loadReverseIncludes(myDao, myContext, myEntityManager, pidsSubList, mySearchEntity.toRevIncludesList(), true, mySearchEntity.getLastUpdated()));
-			includedPids.addAll(sb.loadReverseIncludes(myDao, myContext, myEntityManager, pidsSubList, mySearchEntity.toIncludesList(), false, mySearchEntity.getLastUpdated()));
+			includedPids.addAll(sb.loadIncludes(myDao, myContext, myEntityManager, pidsSubList, mySearchEntity.toRevIncludesList(), true, mySearchEntity.getLastUpdated()));
+			includedPids.addAll(sb.loadIncludes(myDao, myContext, myEntityManager, pidsSubList, mySearchEntity.toIncludesList(), false, mySearchEntity.getLastUpdated()));
 		}
 
 		// Execute the query and make sure we return distinct results
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/SearchCoordinatorSvcImpl.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/SearchCoordinatorSvcImpl.java
index 30c83c23b4f..4fbd1b179a0 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/SearchCoordinatorSvcImpl.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/search/SearchCoordinatorSvcImpl.java
@@ -61,6 +61,7 @@ import org.springframework.transaction.support.TransactionCallback;
 import org.springframework.transaction.support.TransactionCallbackWithoutResult;
 import org.springframework.transaction.support.TransactionTemplate;
 
+import javax.annotation.Nullable;
 import javax.persistence.EntityManager;
 import java.util.*;
 import java.util.concurrent.*;
@@ -257,8 +258,8 @@ public class SearchCoordinatorSvcImpl implements ISearchCoordinatorSvc {
 					 * individually for pages as we return them to clients
 					 */
 					final Set<Long> includedPids = new HashSet<Long>();
-					includedPids.addAll(sb.loadReverseIncludes(theCallingDao, myContext, myEntityManager, pids, theParams.getRevIncludes(), true, theParams.getLastUpdated()));
-					includedPids.addAll(sb.loadReverseIncludes(theCallingDao, myContext, myEntityManager, pids, theParams.getIncludes(), false, theParams.getLastUpdated()));
+					includedPids.addAll(sb.loadIncludes(theCallingDao, myContext, myEntityManager, pids, theParams.getRevIncludes(), true, theParams.getLastUpdated()));
+					includedPids.addAll(sb.loadIncludes(theCallingDao, myContext, myEntityManager, pids, theParams.getIncludes(), false, theParams.getLastUpdated()));
 
 					List<IBaseResource> resources = new ArrayList<IBaseResource>();
 					sb.loadResourcesByPid(pids, resources, includedPids, false, myEntityManager, myContext, theCallingDao);
@@ -335,10 +336,10 @@ public class SearchCoordinatorSvcImpl implements ISearchCoordinatorSvc {
 		search.setSearchQueryStringHash(queryString.hashCode());
 
 		for (Include next : theParams.getIncludes()) {
-			search.getIncludes().add(new SearchInclude(search, next.getValue(), false, next.isRecurse()));
+			search.addInclude(new SearchInclude(search, next.getValue(), false, next.isRecurse()));
 		}
 		for (Include next : theParams.getRevIncludes()) {
-			search.getIncludes().add(new SearchInclude(search, next.getValue(), true, next.isRecurse()));
+			search.addInclude(new SearchInclude(search, next.getValue(), true, next.isRecurse()));
 		}
 
 		SearchTask task = new SearchTask(search, theCallingDao, theParams, theResourceType, searchUuid);
@@ -408,7 +409,11 @@ public class SearchCoordinatorSvcImpl implements ISearchCoordinatorSvc {
 		myManagedTxManager = theTxManager;
 	}
 
-	static Pageable toPage(final int theFromIndex, int theToIndex) {
+	/**
+	 * Creates a {@link Pageable} using a start and end index
+	 */
+	@SuppressWarnings("WeakerAccess")
+	public static @Nullable	Pageable toPage(final int theFromIndex, int theToIndex) {
 		int pageSize = theToIndex - theFromIndex;
 		if (pageSize < 1) {
 			return null;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/sp/ISearchParamPresenceSvc.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/sp/ISearchParamPresenceSvc.java
index db513303408..551aac0338a 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/sp/ISearchParamPresenceSvc.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/sp/ISearchParamPresenceSvc.java
@@ -20,14 +20,12 @@ package ca.uhn.fhir.jpa.sp;
  * #L%
  */
 
-import java.util.Map;
-
 import ca.uhn.fhir.jpa.entity.ResourceTable;
 
+import java.util.Map;
+
 public interface ISearchParamPresenceSvc {
 
 	void updatePresence(ResourceTable theResource, Map<String, Boolean> theParamNameToPresence);
 
-	void flushCachesForUnitTest();
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/sp/SearchParamPresenceSvcImpl.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/sp/SearchParamPresenceSvcImpl.java
index b1e5c09b53a..7ffeef7fa45 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/sp/SearchParamPresenceSvcImpl.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/sp/SearchParamPresenceSvcImpl.java
@@ -20,29 +20,17 @@ package ca.uhn.fhir.jpa.sp;
  * #L%
  */
 
-import java.util.*;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-
 import ca.uhn.fhir.jpa.dao.DaoConfig;
-import org.apache.commons.lang3.tuple.Pair;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import ca.uhn.fhir.jpa.dao.data.ISearchParamDao;
 import ca.uhn.fhir.jpa.dao.data.ISearchParamPresentDao;
 import ca.uhn.fhir.jpa.entity.ResourceTable;
-import ca.uhn.fhir.jpa.entity.SearchParam;
 import ca.uhn.fhir.jpa.entity.SearchParamPresent;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.*;
+import java.util.Map.Entry;
 
 public class SearchParamPresenceSvcImpl implements ISearchParamPresenceSvc {
 
-	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(SearchParamPresenceSvcImpl.class);
-
-	private Map<Pair<String, String>, SearchParam> myResourceTypeToSearchParamToEntity = new ConcurrentHashMap<Pair<String, String>, SearchParam>();
-
-	@Autowired
-	private ISearchParamDao mySearchParamDao;
-
 	@Autowired
 	private ISearchParamPresentDao mySearchParamPresentDao;
 
@@ -55,62 +43,48 @@ public class SearchParamPresenceSvcImpl implements ISearchParamPresenceSvc {
 			return;
 		}
 
-		Map<String, Boolean> presenceMap = new HashMap<String, Boolean>(theParamNameToPresence);
-		List<SearchParamPresent> entitiesToSave = new ArrayList<SearchParamPresent>();
-		List<SearchParamPresent> entitiesToDelete = new ArrayList<SearchParamPresent>();
+		Map<String, Boolean> presenceMap = new HashMap<>(theParamNameToPresence);
 
+		// Find existing entries
 		Collection<SearchParamPresent> existing;
 		existing = mySearchParamPresentDao.findAllForResource(theResource);
-
+		Map<Long, SearchParamPresent> existingHashToPresence = new HashMap<>();
 		for (SearchParamPresent nextExistingEntity : existing) {
-			String nextSearchParamName = nextExistingEntity.getSearchParam().getParamName();
-			Boolean existingValue = presenceMap.remove(nextSearchParamName);
-			if (existingValue == null) {
-				entitiesToDelete.add(nextExistingEntity);
-			} else if (existingValue.booleanValue() == nextExistingEntity.isPresent()) {
-				ourLog.trace("No change for search param {}", nextSearchParamName);
-			} else {
-				nextExistingEntity.setPresent(existingValue);
-				entitiesToSave.add(nextExistingEntity);
-			}
+			existingHashToPresence.put(nextExistingEntity.getHashPresence(), nextExistingEntity);
 		}
 
+		// Find newly wanted set of entries
+		Map<Long, SearchParamPresent> newHashToPresence = new HashMap<>();
 		for (Entry<String, Boolean> next : presenceMap.entrySet()) {
-			String resourceType = theResource.getResourceType();
 			String paramName = next.getKey();
-			Pair<String, String> key = Pair.of(resourceType, paramName);
-
-			SearchParam searchParam = myResourceTypeToSearchParamToEntity.get(key);
-			if (searchParam == null) {
-				searchParam = mySearchParamDao.findForResource(resourceType, paramName);
-				if (searchParam != null) {
-					myResourceTypeToSearchParamToEntity.put(key, searchParam);
-				} else {
-					searchParam = new SearchParam();
-					searchParam.setResourceName(resourceType);
-					searchParam.setParamName(paramName);
-					searchParam = mySearchParamDao.save(searchParam);
-					ourLog.info("Added search param {} with pid {}", paramName, searchParam.getId());
-					// Don't add the newly saved entity to the map in case the save fails
-				}
-			}
 
 			SearchParamPresent present = new SearchParamPresent();
 			present.setResource(theResource);
-			present.setSearchParam(searchParam);
+			present.setParamName(paramName);
 			present.setPresent(next.getValue());
-			entitiesToSave.add(present);
+			present.calculateHashes();
 
+			newHashToPresence.put(present.getHashPresence(), present);
 		}
 
-		mySearchParamPresentDao.deleteInBatch(entitiesToDelete);
-		mySearchParamPresentDao.saveAll(entitiesToSave);
+		// Delete any that should be deleted
+		List<SearchParamPresent> toDelete = new ArrayList<>();
+		for (Entry<Long, SearchParamPresent> nextEntry : existingHashToPresence.entrySet()) {
+			if (newHashToPresence.containsKey(nextEntry.getKey()) == false) {
+				toDelete.add(nextEntry.getValue());
+			}
+		}
+		mySearchParamPresentDao.deleteInBatch(toDelete);
 
-	}
+		// Add any that should be added
+		List<SearchParamPresent> toAdd = new ArrayList<>();
+		for (Entry<Long, SearchParamPresent> nextEntry : newHashToPresence.entrySet()) {
+			if (existingHashToPresence.containsKey(nextEntry.getKey()) == false) {
+				toAdd.add(nextEntry.getValue());
+			}
+		}
+		mySearchParamPresentDao.saveAll(toAdd);
 
-	@Override
-	public void flushCachesForUnitTest() {
-		myResourceTypeToSearchParamToEntity.clear();
 	}
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionDeliverySubscriber.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionDeliverySubscriber.java
index 800d88b1b48..461cb3a798b 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionDeliverySubscriber.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionDeliverySubscriber.java
@@ -32,7 +32,6 @@ import org.springframework.messaging.MessagingException;
 
 public abstract class BaseSubscriptionDeliverySubscriber extends BaseSubscriptionSubscriber {
 	private static final Logger ourLog = LoggerFactory.getLogger(BaseSubscriptionDeliverySubscriber.class);
-	private boolean myReloadResourceBeforeDelivery = true;
 
 	public BaseSubscriptionDeliverySubscriber(IFhirResourceDao<?> theSubscriptionDao, Subscription.SubscriptionChannelType theChannelType, BaseSubscriptionInterceptor theSubscriptionInterceptor) {
 		super(theSubscriptionDao, theChannelType, theSubscriptionInterceptor);
@@ -51,35 +50,30 @@ public abstract class BaseSubscriptionDeliverySubscriber extends BaseSubscriptio
 			ResourceDeliveryMessage msg = (ResourceDeliveryMessage) theMessage.getPayload();
 			subscriptionId = msg.getSubscription().getIdElement(getContext()).getValue();
 
-			if (!subscriptionTypeApplies(getContext(), msg.getSubscription().getBackingSubscription(getContext()))) {
-				return;
-			}
-
 			CanonicalSubscription updatedSubscription = (CanonicalSubscription) getSubscriptionInterceptor().getIdToSubscription().get(msg.getSubscription().getIdElement(getContext()).getIdPart());
 			if (updatedSubscription != null) {
 				msg.setSubscription(updatedSubscription);
 			}
 
-			if (myReloadResourceBeforeDelivery) {
-				// Reload the payload just in case any interceptors modified
-				// it before it was saved to the database. This is also
-				// useful for resources created in a transaction, since they
-				// can have placeholder IDs in them.
-				IIdType payloadId = msg.getPayloadId(getContext());
-				Class type = getContext().getResourceDefinition(payloadId.getResourceType()).getImplementingClass();
-				IFhirResourceDao dao = getSubscriptionInterceptor().getDao(type);
-				IBaseResource loadedPayload;
-				try {
-					loadedPayload = dao.read(payloadId);
-				} catch (ResourceNotFoundException e) {
-					// This can happen if a last minute failure happens when saving a resource,
-					// eg a constraint causes the transaction to roll back on commit
-					ourLog.warn("Unable to find resource {} - Aborting delivery", payloadId.getValue());
-					return;
-				}
-				msg.setPayload(getContext(), loadedPayload);
+			if (!subscriptionTypeApplies(msg.getSubscription())) {
+				return;
 			}
 
+			// Load the resource
+			IIdType payloadId = msg.getPayloadId(getContext());
+			Class type = getContext().getResourceDefinition(payloadId.getResourceType()).getImplementingClass();
+			IFhirResourceDao dao = getSubscriptionInterceptor().getDao(type);
+			IBaseResource loadedPayload;
+			try {
+				loadedPayload = dao.read(payloadId);
+			} catch (ResourceNotFoundException e) {
+				// This can happen if a last minute failure happens when saving a resource,
+				// eg a constraint causes the transaction to roll back on commit
+				ourLog.warn("Unable to find resource {} - Aborting delivery", payloadId.getValue());
+				return;
+			}
+			msg.setPayload(getContext(), loadedPayload);
+
 			handleMessage(msg);
 		} catch (Exception e) {
 			String msg = "Failure handling subscription payload for subscription: " + subscriptionId;
@@ -90,8 +84,4 @@ public abstract class BaseSubscriptionDeliverySubscriber extends BaseSubscriptio
 
 	public abstract void handleMessage(ResourceDeliveryMessage theMessage) throws Exception;
 
-	public void setReloadResourceBeforeDelivery(boolean theReloadResourceBeforeDelivery) {
-		myReloadResourceBeforeDelivery = theReloadResourceBeforeDelivery;
-	}
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionInterceptor.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionInterceptor.java
index d5b76d15448..c32d53a2979 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionInterceptor.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionInterceptor.java
@@ -38,6 +38,9 @@ import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
 import ca.uhn.fhir.rest.server.interceptor.ServerOperationInterceptorAdapter;
 import ca.uhn.fhir.util.StopWatch;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
 import org.apache.commons.lang3.Validate;
 import org.apache.commons.lang3.concurrent.BasicThreadFactory;
 import org.hl7.fhir.exceptions.FHIRException;
@@ -47,9 +50,11 @@ import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.r4.model.Subscription;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.core.task.AsyncTaskExecutor;
+import org.springframework.messaging.MessageChannel;
 import org.springframework.messaging.MessageHandler;
 import org.springframework.messaging.SubscribableChannel;
 import org.springframework.messaging.support.ExecutorSubscribableChannel;
@@ -70,22 +75,20 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 
 	static final String SUBSCRIPTION_STATUS = "Subscription.status";
 	static final String SUBSCRIPTION_TYPE = "Subscription.channel.type";
-	static final String SUBSCRIPTION_CRITERIA = "Subscription.criteria";
-	static final String SUBSCRIPTION_ENDPOINT = "Subscription.channel.endpoint";
-	static final String SUBSCRIPTION_PAYLOAD = "Subscription.channel.payload";
-	static final String SUBSCRIPTION_HEADER = "Subscription.channel.header";
 	private static final Integer MAX_SUBSCRIPTION_RESULTS = 1000;
+	private final Object myInitSubscriptionsLock = new Object();
 	private SubscribableChannel myProcessingChannel;
-	private SubscribableChannel myDeliveryChannel;
+	private Map<String, SubscribableChannel> myDeliveryChannel;
 	private ExecutorService myProcessingExecutor;
 	private int myExecutorThreadCount;
 	private SubscriptionActivatingSubscriber mySubscriptionActivatingSubscriber;
 	private MessageHandler mySubscriptionCheckingSubscriber;
 	private ConcurrentHashMap<String, CanonicalSubscription> myIdToSubscription = new ConcurrentHashMap<>();
+	private ConcurrentHashMap<String, SubscribableChannel> mySubscribableChannel = new ConcurrentHashMap<>();
+	private Multimap<String, MessageHandler> myIdToDeliveryHandler = Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
 	private Logger ourLog = LoggerFactory.getLogger(BaseSubscriptionInterceptor.class);
 	private ThreadPoolExecutor myDeliveryExecutor;
 	private LinkedBlockingQueue<Runnable> myProcessingExecutorQueue;
-	private LinkedBlockingQueue<Runnable> myDeliveryExecutorQueue;
 	private IFhirResourceDao<?> mySubscriptionDao;
 	@Autowired
 	private List<IFhirResourceDao<?>> myResourceDaos;
@@ -100,6 +103,7 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 	@Qualifier(BaseConfig.TASK_EXECUTOR_NAME)
 	private AsyncTaskExecutor myAsyncTaskExecutor;
 	private Map<Class<? extends IBaseResource>, IFhirResourceDao<?>> myResourceTypeToDao;
+	private Semaphore myInitSubscriptionsSemaphore = new Semaphore(1);
 
 	/**
 	 * Constructor
@@ -128,7 +132,6 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 		CanonicalSubscription retVal = new CanonicalSubscription();
 		try {
 			retVal.setStatus(org.hl7.fhir.r4.model.Subscription.SubscriptionStatus.fromCode(subscription.getStatus()));
-			retVal.setBackingSubscription(myCtx, theSubscription);
 			retVal.setChannelType(org.hl7.fhir.r4.model.Subscription.SubscriptionChannelType.fromCode(subscription.getChannel().getType()));
 			retVal.setCriteriaString(subscription.getCriteria());
 			retVal.setEndpointUrl(subscription.getChannel().getEndpoint());
@@ -147,7 +150,6 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 		CanonicalSubscription retVal = new CanonicalSubscription();
 		try {
 			retVal.setStatus(org.hl7.fhir.r4.model.Subscription.SubscriptionStatus.fromCode(subscription.getStatus().toCode()));
-			retVal.setBackingSubscription(myCtx, theSubscription);
 			retVal.setChannelType(org.hl7.fhir.r4.model.Subscription.SubscriptionChannelType.fromCode(subscription.getChannel().getType().toCode()));
 			retVal.setCriteriaString(subscription.getCriteria());
 			retVal.setEndpointUrl(subscription.getChannel().getEndpoint());
@@ -193,7 +195,6 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 
 		CanonicalSubscription retVal = new CanonicalSubscription();
 		retVal.setStatus(subscription.getStatus());
-		retVal.setBackingSubscription(myCtx, theSubscription);
 		retVal.setChannelType(subscription.getChannel().getType());
 		retVal.setCriteriaString(subscription.getCriteria());
 		retVal.setEndpointUrl(subscription.getChannel().getEndpoint());
@@ -204,7 +205,6 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 		if (retVal.getChannelType() == Subscription.SubscriptionChannelType.EMAIL) {
 			String from;
 			String subjectTemplate;
-			String bodyTemplate;
 			try {
 				from = subscription.getChannel().getExtensionString(JpaConstants.EXT_SUBSCRIPTION_EMAIL_FROM);
 				subjectTemplate = subscription.getChannel().getExtensionString(JpaConstants.EXT_SUBSCRIPTION_SUBJECT_TEMPLATE);
@@ -242,6 +242,46 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 		return retVal;
 	}
 
+	protected SubscribableChannel createDeliveryChannel(CanonicalSubscription theSubscription) {
+		String subscriptionId = theSubscription.getIdElement(myCtx).getIdPart();
+
+		LinkedBlockingQueue<Runnable> executorQueue = new LinkedBlockingQueue<>(1000);
+		BasicThreadFactory threadFactory = new BasicThreadFactory.Builder()
+			.namingPattern("subscription-delivery-" + subscriptionId + "-%d")
+			.daemon(false)
+			.priority(Thread.NORM_PRIORITY)
+			.build();
+		RejectedExecutionHandler rejectedExecutionHandler = new RejectedExecutionHandler() {
+			@Override
+			public void rejectedExecution(Runnable theRunnable, ThreadPoolExecutor theExecutor) {
+				ourLog.info("Note: Executor queue is full ({} elements), waiting for a slot to become available!", executorQueue.size());
+				StopWatch sw = new StopWatch();
+				try {
+					executorQueue.put(theRunnable);
+				} catch (InterruptedException theE) {
+					throw new RejectedExecutionException("Task " + theRunnable.toString() +
+						" rejected from " + theE.toString());
+				}
+				ourLog.info("Slot become available after {}ms", sw.getMillis());
+			}
+		};
+		ThreadPoolExecutor deliveryExecutor = new ThreadPoolExecutor(
+			1,
+			getExecutorThreadCount(),
+			0L,
+			TimeUnit.MILLISECONDS,
+			executorQueue,
+			threadFactory,
+			rejectedExecutionHandler);
+
+		return new ExecutorSubscribableChannel(deliveryExecutor);
+	}
+
+	/**
+	 * Returns an empty handler if the interceptor will manually handle registration and unregistration
+	 */
+	protected abstract Optional<MessageHandler> createDeliveryHandler(CanonicalSubscription theSubscription);
+
 	public abstract Subscription.SubscriptionChannelType getChannelType();
 
 	@SuppressWarnings("unchecked")
@@ -260,20 +300,15 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 			myResourceTypeToDao = theResourceTypeToDao;
 		}
 
-		IFhirResourceDao<R> dao = (IFhirResourceDao<R>) myResourceTypeToDao.get(theType);
-		return dao;
+		return (IFhirResourceDao<R>) myResourceTypeToDao.get(theType);
 	}
 
-	public SubscribableChannel getDeliveryChannel() {
-		return myDeliveryChannel;
-	}
-
-	public void setDeliveryChannel(SubscribableChannel theDeliveryChannel) {
-		myDeliveryChannel = theDeliveryChannel;
+	protected MessageChannel getDeliveryChannel(CanonicalSubscription theSubscription) {
+		return mySubscribableChannel.get(theSubscription.getIdElement(myCtx).getIdPart());
 	}
 
 	public int getExecutorQueueSizeForUnitTests() {
-		return myProcessingExecutorQueue.size() + myDeliveryExecutorQueue.size();
+		return myProcessingExecutorQueue.size();
 	}
 
 	public int getExecutorThreadCount() {
@@ -301,52 +336,67 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 		return mySubscriptionDao;
 	}
 
-	public List<CanonicalSubscription> getSubscriptions() {
+	public List<CanonicalSubscription> getRegisteredSubscriptions() {
 		return new ArrayList<>(myIdToSubscription.values());
 	}
 
-	public boolean hasSubscription(IIdType theId) {
+	public CanonicalSubscription hasSubscription(IIdType theId) {
 		Validate.notNull(theId);
 		Validate.notBlank(theId.getIdPart());
-		return myIdToSubscription.containsKey(theId.getIdPart());
+		return myIdToSubscription.get(theId.getIdPart());
 	}
 
 	/**
 	 * Read the existing subscriptions from the database
 	 */
 	@SuppressWarnings("unused")
-	@Scheduled(fixedDelay = 10000)
+	@Scheduled(fixedDelay = 60000)
 	public void initSubscriptions() {
-		SearchParameterMap map = new SearchParameterMap();
-		map.add(Subscription.SP_TYPE, new TokenParam(null, getChannelType().toCode()));
-		map.add(Subscription.SP_STATUS, new TokenOrListParam()
-			.addOr(new TokenParam(null, Subscription.SubscriptionStatus.REQUESTED.toCode()))
-			.addOr(new TokenParam(null, Subscription.SubscriptionStatus.ACTIVE.toCode())));
-		map.setLoadSynchronousUpTo(MAX_SUBSCRIPTION_RESULTS);
-
-		RequestDetails req = new ServletSubRequestDetails();
-		req.setSubRequest(true);
-
-		IBundleProvider subscriptionBundleList = getSubscriptionDao().search(map, req);
-		if (subscriptionBundleList.size() >= MAX_SUBSCRIPTION_RESULTS) {
-			ourLog.error("Currently over " + MAX_SUBSCRIPTION_RESULTS + " subscriptions.  Some subscriptions have not been loaded.");
+		if (!myInitSubscriptionsSemaphore.tryAcquire()) {
+			return;
 		}
-
-		List<IBaseResource> resourceList = subscriptionBundleList.getResources(0, subscriptionBundleList.size());
-
-		Set<String> allIds = new HashSet<>();
-		for (IBaseResource resource : resourceList) {
-			String nextId = resource.getIdElement().getIdPart();
-			allIds.add(nextId);
-			mySubscriptionActivatingSubscriber.activateAndRegisterSubscriptionIfRequired(resource);
+		try {
+			doInitSubscriptions();
+		} finally {
+			myInitSubscriptionsSemaphore.release();
 		}
+	}
 
-		for (Enumeration<String> keyEnum = myIdToSubscription.keys(); keyEnum.hasMoreElements(); ) {
-			String next = keyEnum.nextElement();
-			if (!allIds.contains(next)) {
-				ourLog.info("Unregistering Subscription/{} as it no longer exists", next);
-				myIdToSubscription.remove(next);
+	public Integer doInitSubscriptions() {
+		synchronized (myInitSubscriptionsLock) {
+			ourLog.debug("Starting init subscriptions");
+			SearchParameterMap map = new SearchParameterMap();
+			map.add(Subscription.SP_TYPE, new TokenParam(null, getChannelType().toCode()));
+			map.add(Subscription.SP_STATUS, new TokenOrListParam()
+				.addOr(new TokenParam(null, Subscription.SubscriptionStatus.REQUESTED.toCode()))
+				.addOr(new TokenParam(null, Subscription.SubscriptionStatus.ACTIVE.toCode())));
+			map.setLoadSynchronousUpTo(MAX_SUBSCRIPTION_RESULTS);
+
+			RequestDetails req = new ServletSubRequestDetails();
+			req.setSubRequest(true);
+
+			IBundleProvider subscriptionBundleList = getSubscriptionDao().search(map, req);
+			if (subscriptionBundleList.size() >= MAX_SUBSCRIPTION_RESULTS) {
+				ourLog.error("Currently over " + MAX_SUBSCRIPTION_RESULTS + " subscriptions.  Some subscriptions have not been loaded.");
 			}
+
+			List<IBaseResource> resourceList = subscriptionBundleList.getResources(0, subscriptionBundleList.size());
+
+			Set<String> allIds = new HashSet<>();
+			int changesCount = 0;
+			for (IBaseResource resource : resourceList) {
+				String nextId = resource.getIdElement().getIdPart();
+				allIds.add(nextId);
+				boolean changed = mySubscriptionActivatingSubscriber.activateOrRegisterSubscriptionIfRequired(resource);
+				if (changed) {
+					changesCount++;
+				}
+			}
+
+			unregisterAllSubscriptionsNotInCollection(allIds);
+			ourLog.trace("Finished init subscriptions - found {}", resourceList.size());
+
+			return changesCount;
 		}
 	}
 
@@ -354,18 +404,31 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 	@PreDestroy
 	public void preDestroy() {
 		getProcessingChannel().unsubscribe(mySubscriptionCheckingSubscriber);
-
-		unregisterDeliverySubscriber();
+		unregisterAllSubscriptionsNotInCollection(Collections.emptyList());
 	}
 
-	protected abstract void registerDeliverySubscriber();
+	public void registerHandler(String theSubscriptionId, MessageHandler theHandler) {
+		mySubscribableChannel.get(theSubscriptionId).subscribe(theHandler);
+		myIdToDeliveryHandler.put(theSubscriptionId, theHandler);
+	}
 
-	public void registerSubscription(IIdType theId, S theSubscription) {
+	@SuppressWarnings("UnusedReturnValue")
+	public CanonicalSubscription registerSubscription(IIdType theId, S theSubscription) {
 		Validate.notNull(theId);
-		Validate.notBlank(theId.getIdPart());
+		String subscriptionId = theId.getIdPart();
+		Validate.notBlank(subscriptionId);
 		Validate.notNull(theSubscription);
 
-		myIdToSubscription.put(theId.getIdPart(), canonicalize(theSubscription));
+		CanonicalSubscription canonicalized = canonicalize(theSubscription);
+		SubscribableChannel deliveryChannel = createDeliveryChannel(canonicalized);
+		Optional<MessageHandler> deliveryHandler = createDeliveryHandler(canonicalized);
+
+		mySubscribableChannel.put(subscriptionId, deliveryChannel);
+		myIdToSubscription.put(subscriptionId, canonicalized);
+
+		deliveryHandler.ifPresent(handler -> registerHandler(subscriptionId, handler));
+
+		return canonicalized;
 	}
 
 	protected void registerSubscriptionCheckingSubscriber() {
@@ -394,6 +457,10 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 
 	@Override
 	public void resourceUpdated(RequestDetails theRequest, IBaseResource theOldResource, IBaseResource theNewResource) {
+		submitResourceModifiedForUpdate(theNewResource);
+	}
+
+	void submitResourceModifiedForUpdate(IBaseResource theNewResource) {
 		ResourceModifiedMessage msg = new ResourceModifiedMessage();
 		msg.setId(theNewResource.getIdElement());
 		msg.setOperationType(RestOperationTypeEnum.UPDATE);
@@ -407,13 +474,18 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 		/*
 		 * We only actually submit this item work working after the
 		 */
-		TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
-			@Override
-			public void afterCommit() {
-				ourLog.trace("Sending resource modified message to processing channel");
-				getProcessingChannel().send(new ResourceModifiedJsonMessage(theMessage));
-			}
-		});
+		if (TransactionSynchronizationManager.isSynchronizationActive()) {
+			TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
+				@Override
+				public void afterCommit() {
+					ourLog.trace("Sending resource modified message to processing channel");
+					getProcessingChannel().send(new ResourceModifiedJsonMessage(theMessage));
+				}
+			});
+		} else {
+			ourLog.trace("Sending resource modified message to processing channel");
+			getProcessingChannel().send(new ResourceModifiedJsonMessage(theMessage));
+		}
 	}
 
 	@VisibleForTesting
@@ -449,19 +521,16 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 
 		if (getProcessingChannel() == null) {
 			myProcessingExecutorQueue = new LinkedBlockingQueue<>(1000);
-			RejectedExecutionHandler rejectedExecutionHandler = new RejectedExecutionHandler() {
-				@Override
-				public void rejectedExecution(Runnable theRunnable, ThreadPoolExecutor theExecutor) {
-					ourLog.info("Note: Executor queue is full ({} elements), waiting for a slot to become available!", myProcessingExecutorQueue.size());
-					StopWatch sw = new StopWatch();
-					try {
-						myProcessingExecutorQueue.put(theRunnable);
-					} catch (InterruptedException theE) {
-						throw new RejectedExecutionException("Task " + theRunnable.toString() +
-							" rejected from " + theE.toString());
-					}
-					ourLog.info("Slot become available after {}ms", sw.getMillis());
+			RejectedExecutionHandler rejectedExecutionHandler = (theRunnable, theExecutor) -> {
+				ourLog.info("Note: Executor queue is full ({} elements), waiting for a slot to become available!", myProcessingExecutorQueue.size());
+				StopWatch sw = new StopWatch();
+				try {
+					myProcessingExecutorQueue.put(theRunnable);
+				} catch (InterruptedException theE) {
+					throw new RejectedExecutionException("Task " + theRunnable.toString() +
+						" rejected from " + theE.toString());
 				}
+				ourLog.info("Slot become available after {}ms", sw.getMillis());
 			};
 			ThreadFactory threadFactory = new BasicThreadFactory.Builder()
 				.namingPattern("subscription-proc-%d")
@@ -479,44 +548,11 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 			setProcessingChannel(new ExecutorSubscribableChannel(myProcessingExecutor));
 		}
 
-		if (getDeliveryChannel() == null) {
-			myDeliveryExecutorQueue = new LinkedBlockingQueue<>(1000);
-			BasicThreadFactory threadFactory = new BasicThreadFactory.Builder()
-				.namingPattern("subscription-delivery-%d")
-				.daemon(false)
-				.priority(Thread.NORM_PRIORITY)
-				.build();
-			RejectedExecutionHandler rejectedExecutionHandler = new RejectedExecutionHandler() {
-				@Override
-				public void rejectedExecution(Runnable theRunnable, ThreadPoolExecutor theExecutor) {
-					ourLog.info("Note: Executor queue is full ({} elements), waiting for a slot to become available!", myDeliveryExecutorQueue.size());
-					StopWatch sw = new StopWatch();
-					try {
-						myDeliveryExecutorQueue.put(theRunnable);
-					} catch (InterruptedException theE) {
-						throw new RejectedExecutionException("Task " + theRunnable.toString() +
-							" rejected from " + theE.toString());
-					}
-					ourLog.info("Slot become available after {}ms", sw.getMillis());
-				}
-			};
-			myDeliveryExecutor = new ThreadPoolExecutor(
-				1,
-				getExecutorThreadCount(),
-				0L,
-				TimeUnit.MILLISECONDS,
-				myDeliveryExecutorQueue,
-				threadFactory,
-				rejectedExecutionHandler);
-			setDeliveryChannel(new ExecutorSubscribableChannel(myDeliveryExecutor));
-		}
-
 		if (mySubscriptionActivatingSubscriber == null) {
 			mySubscriptionActivatingSubscriber = new SubscriptionActivatingSubscriber(getSubscriptionDao(), getChannelType(), this, myTxManager, myAsyncTaskExecutor);
 		}
 
 		registerSubscriptionCheckingSubscriber();
-		registerDeliverySubscriber();
 
 		TransactionTemplate transactionTemplate = new TransactionTemplate(myTxManager);
 		transactionTemplate.execute(new TransactionCallbackWithoutResult() {
@@ -532,13 +568,46 @@ public abstract class BaseSubscriptionInterceptor<S extends IBaseResource> exten
 		sendToProcessingChannel(theMsg);
 	}
 
-	protected abstract void unregisterDeliverySubscriber();
+	private void unregisterAllSubscriptionsNotInCollection(Collection<String> theAllIds) {
+		for (String next : new ArrayList<>(myIdToSubscription.keySet())) {
+			if (!theAllIds.contains(next)) {
+				ourLog.info("Unregistering Subscription/{}", next);
+				CanonicalSubscription subscription = myIdToSubscription.get(next);
+				unregisterSubscription(subscription.getIdElement(myCtx));
+			}
+		}
+	}
 
-	public void unregisterSubscription(IIdType theId) {
+	public void unregisterHandler(String theSubscriptionId, MessageHandler theMessageHandler) {
+		SubscribableChannel channel = mySubscribableChannel.get(theSubscriptionId);
+		if (channel != null) {
+			channel.unsubscribe(theMessageHandler);
+			if (channel instanceof DisposableBean) {
+				try {
+					((DisposableBean) channel).destroy();
+				} catch (Exception e) {
+					ourLog.error("Failed to destroy channel bean", e);
+				}
+			}
+		}
+
+		mySubscribableChannel.remove(theSubscriptionId);
+	}
+
+	@SuppressWarnings("UnusedReturnValue")
+	public CanonicalSubscription unregisterSubscription(IIdType theId) {
 		Validate.notNull(theId);
-		Validate.notBlank(theId.getIdPart());
 
-		myIdToSubscription.remove(theId.getIdPart());
+		String subscriptionId = theId.getIdPart();
+		Validate.notBlank(subscriptionId);
+
+		for (MessageHandler next : new ArrayList<>(myIdToDeliveryHandler.get(subscriptionId))) {
+			unregisterHandler(subscriptionId, next);
+		}
+
+		mySubscribableChannel.remove(subscriptionId);
+
+		return myIdToSubscription.remove(subscriptionId);
 	}
 
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionSubscriber.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionSubscriber.java
index a5c9f5c2b34..bc2e91c4ff1 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionSubscriber.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/BaseSubscriptionSubscriber.java
@@ -22,8 +22,6 @@ package ca.uhn.fhir.jpa.subscription;
 
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.instance.model.api.IPrimitiveType;
 import org.hl7.fhir.r4.model.Subscription;
 import org.springframework.messaging.MessageHandler;
 
@@ -62,19 +60,19 @@ public abstract class BaseSubscriptionSubscriber implements MessageHandler {
 	/**
 	 * Does this subscription type (e.g. rest hook, websocket, etc) apply to this interceptor?
 	 */
-	protected boolean subscriptionTypeApplies(FhirContext theCtx, IBaseResource theSubscription) {
+	protected boolean subscriptionTypeApplies(CanonicalSubscription theSubscription) {
 		Subscription.SubscriptionChannelType channelType = getChannelType();
-		return subscriptionTypeApplies(theCtx, theSubscription, channelType);
+		String subscriptionType = theSubscription.getChannelType().toCode();
+		return subscriptionTypeApplies(subscriptionType, channelType);
 	}
 
 	/**
 	 * Does this subscription type (e.g. rest hook, websocket, etc) apply to this interceptor?
 	 */
-	static boolean subscriptionTypeApplies(FhirContext theCtx, IBaseResource theSubscription, Subscription.SubscriptionChannelType theChannelType) {
-		IPrimitiveType<?> subscriptionType = theCtx.newTerser().getSingleValueOrNull(theSubscription, BaseSubscriptionInterceptor.SUBSCRIPTION_TYPE, IPrimitiveType.class);
+	static boolean subscriptionTypeApplies(String theSubscriptionChannelTypeCode, Subscription.SubscriptionChannelType theChannelType) {
 		boolean subscriptionTypeApplies = false;
- 		if (subscriptionType != null) {
-			if (theChannelType.toCode().equals(subscriptionType.getValueAsString())) {
+ 		if (theSubscriptionChannelTypeCode != null) {
+			if (theChannelType.toCode().equals(theSubscriptionChannelTypeCode)) {
 				subscriptionTypeApplies = true;
 			}
 		}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/CanonicalSubscription.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/CanonicalSubscription.java
index aa75ce9dfb6..75b4126b4b7 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/CanonicalSubscription.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/CanonicalSubscription.java
@@ -22,12 +22,10 @@ package ca.uhn.fhir.jpa.subscription;
 
 import ca.uhn.fhir.context.FhirContext;
 import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.instance.model.api.IPrimitiveType;
 import org.hl7.fhir.r4.model.EventDefinition;
@@ -59,10 +57,6 @@ public class CanonicalSubscription implements Serializable {
 	private Subscription.SubscriptionChannelType myChannelType;
 	@JsonProperty("status")
 	private Subscription.SubscriptionStatus myStatus;
-	@JsonIgnore
-	private transient IBaseResource myBackingSubscription;
-	@JsonProperty("backingSubscription")
-	private String myBackingSubscriptionString;
 	@JsonProperty("triggerDefinition")
 	private CanonicalEventDefinition myTrigger;
 	@JsonProperty("emailDetails")
@@ -78,25 +72,6 @@ public class CanonicalSubscription implements Serializable {
 		myTrigger = theTrigger;
 	}
 
-	@Override
-	public boolean equals(Object theO) {
-		if (this == theO) return true;
-
-		if (theO == null || getClass() != theO.getClass()) return false;
-
-		CanonicalSubscription that = (CanonicalSubscription) theO;
-
-		return new EqualsBuilder()
-			.append(getIdElementString(), that.getIdElementString())
-			.isEquals();
-	}
-
-	public IBaseResource getBackingSubscription(FhirContext theCtx) {
-		if (myBackingSubscription == null && myBackingSubscriptionString != null) {
-			myBackingSubscription = theCtx.newJsonParser().parseResource(myBackingSubscriptionString);
-		}
-		return myBackingSubscription;
-	}
 
 	public Subscription.SubscriptionChannelType getChannelType() {
 		return myChannelType;
@@ -133,6 +108,15 @@ public class CanonicalSubscription implements Serializable {
 		return myHeaders;
 	}
 
+	public void setHeaders(List<? extends IPrimitiveType<String>> theHeader) {
+		myHeaders = new ArrayList<>();
+		for (IPrimitiveType<String> next : theHeader) {
+			if (isNotBlank(next.getValueAsString())) {
+				myHeaders.add(next.getValueAsString());
+			}
+		}
+	}
+
 	public void setHeaders(String theHeaders) {
 		myHeaders = new ArrayList<>();
 		if (isNotBlank(theHeaders)) {
@@ -183,30 +167,44 @@ public class CanonicalSubscription implements Serializable {
 		return myTrigger;
 	}
 
+	@Override
+	public boolean equals(Object theO) {
+		if (this == theO) return true;
+
+		if (theO == null || getClass() != theO.getClass()) return false;
+
+		CanonicalSubscription that = (CanonicalSubscription) theO;
+
+		EqualsBuilder b = new EqualsBuilder();
+		b.append(myIdElement, that.myIdElement);
+		b.append(myCriteriaString, that.myCriteriaString);
+		b.append(myEndpointUrl, that.myEndpointUrl);
+		b.append(myPayloadString, that.myPayloadString);
+		b.append(myHeaders, that.myHeaders);
+		b.append(myChannelType, that.myChannelType);
+		b.append(myStatus, that.myStatus);
+		b.append(myTrigger, that.myTrigger);
+		b.append(myEmailDetails, that.myEmailDetails);
+		b.append(myRestHookDetails, that.myRestHookDetails);
+		return b.isEquals();
+	}
+
 	@Override
 	public int hashCode() {
 		return new HashCodeBuilder(17, 37)
-			.append(getIdElementString())
+			.append(myIdElement)
+			.append(myCriteriaString)
+			.append(myEndpointUrl)
+			.append(myPayloadString)
+			.append(myHeaders)
+			.append(myChannelType)
+			.append(myStatus)
+			.append(myTrigger)
+			.append(myEmailDetails)
+			.append(myRestHookDetails)
 			.toHashCode();
 	}
 
-	public void setBackingSubscription(FhirContext theCtx, IBaseResource theBackingSubscription) {
-		myBackingSubscription = theBackingSubscription;
-		myBackingSubscriptionString = null;
-		if (myBackingSubscription != null) {
-			myBackingSubscriptionString = theCtx.newJsonParser().encodeResourceToString(myBackingSubscription);
-		}
-	}
-
-	public void setHeaders(List<? extends IPrimitiveType<String>> theHeader) {
-		myHeaders = new ArrayList<>();
-		for (IPrimitiveType<String> next : theHeader) {
-			if (isNotBlank(next.getValueAsString())) {
-				myHeaders.add(next.getValueAsString());
-			}
-		}
-	}
-
 	public void setIdElement(IIdType theIdElement) {
 		myIdElement = null;
 		if (theIdElement != null) {
@@ -255,6 +253,28 @@ public class CanonicalSubscription implements Serializable {
 			myDeliverLatestVersion = theDeliverLatestVersion;
 		}
 
+		@Override
+		public boolean equals(Object theO) {
+			if (this == theO) return true;
+
+			if (theO == null || getClass() != theO.getClass()) return false;
+
+			RestHookDetails that = (RestHookDetails) theO;
+
+			return new EqualsBuilder()
+				.append(myStripVersionId, that.myStripVersionId)
+				.append(myDeliverLatestVersion, that.myDeliverLatestVersion)
+				.isEquals();
+		}
+
+		@Override
+		public int hashCode() {
+			return new HashCodeBuilder(17, 37)
+				.append(myStripVersionId)
+				.append(myDeliverLatestVersion)
+				.toHashCode();
+		}
+
 		public boolean isStripVersionId() {
 			return myStripVersionId;
 		}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/ResourceDeliveryMessage.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/ResourceDeliveryMessage.java
index bec9191f5f0..5034c26ed9a 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/ResourceDeliveryMessage.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/ResourceDeliveryMessage.java
@@ -24,6 +24,7 @@ import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
 import com.fasterxml.jackson.annotation.*;
 import com.google.gson.Gson;
+import org.apache.commons.lang3.Validate;
 import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
 
@@ -41,8 +42,6 @@ public class ResourceDeliveryMessage {
 	private String mySubscriptionString;
 	@JsonIgnore
 	private transient IBaseResource myPayload;
-	@JsonProperty("payload")
-	private String myPayoadString;
 	@JsonProperty("payloadId")
 	private String myPayloadId;
 	@JsonProperty("operationType")
@@ -57,9 +56,7 @@ public class ResourceDeliveryMessage {
 	}
 
 	public IBaseResource getPayload(FhirContext theCtx) {
-		if (myPayload == null && myPayoadString != null) {
-			myPayload = theCtx.newJsonParser().parseResource(myPayoadString);
-		}
+		Validate.notNull(myPayload);
 		return myPayload;
 	}
 
@@ -87,7 +84,6 @@ public class ResourceDeliveryMessage {
 
 	public void setPayload(FhirContext theCtx, IBaseResource thePayload) {
 		myPayload = thePayload;
-		myPayoadString = theCtx.newJsonParser().encodeResourceToString(thePayload);
 	}
 
 	public void setPayloadId(IIdType thePayloadId) {
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/SubscriptionActivatingSubscriber.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/SubscriptionActivatingSubscriber.java
index e276b8ccbcc..7e78222f59e 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/SubscriptionActivatingSubscriber.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/SubscriptionActivatingSubscriber.java
@@ -35,7 +35,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.messaging.MessagingException;
-import org.springframework.scheduling.TaskScheduler;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.support.TransactionCallbackWithoutResult;
@@ -43,7 +42,6 @@ import org.springframework.transaction.support.TransactionSynchronizationAdapter
 import org.springframework.transaction.support.TransactionSynchronizationManager;
 import org.springframework.transaction.support.TransactionTemplate;
 
-import java.util.Date;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
@@ -72,10 +70,16 @@ public class SubscriptionActivatingSubscriber {
 		Validate.notNull(theTaskExecutor);
 	}
 
-	public void activateAndRegisterSubscriptionIfRequired(final IBaseResource theSubscription) {
-		boolean subscriptionTypeApplies = BaseSubscriptionSubscriber.subscriptionTypeApplies(myCtx, theSubscription, myChannelType);
+	public synchronized boolean activateOrRegisterSubscriptionIfRequired(final IBaseResource theSubscription) {
+		// Grab the value for "Subscription.channel.type" so we can see if this
+		// subscriber applies..
+		String subscriptionChannelType = myCtx
+			.newTerser()
+			.getSingleValueOrNull(theSubscription, BaseSubscriptionInterceptor.SUBSCRIPTION_TYPE, IPrimitiveType.class)
+			.getValueAsString();
+		boolean subscriptionTypeApplies = BaseSubscriptionSubscriber.subscriptionTypeApplies(subscriptionChannelType, myChannelType);
 		if (subscriptionTypeApplies == false) {
-			return;
+			return false;
 		}
 
 		final IPrimitiveType<?> status = myCtx.newTerser().getSingleValueOrNull(theSubscription, BaseSubscriptionInterceptor.SUBSCRIPTION_STATUS, IPrimitiveType.class);
@@ -117,38 +121,47 @@ public class SubscriptionActivatingSubscriber {
 						}
 					}
 				});
+				return true;
 			} else {
-				activateSubscription(activeStatus, theSubscription, requestedStatus);
+				return activateSubscription(activeStatus, theSubscription, requestedStatus);
 			}
 		} else if (activeStatus.equals(statusString)) {
-			if (!mySubscriptionInterceptor.hasSubscription(theSubscription.getIdElement())) {
-				ourLog.info("Registering active subscription {}", theSubscription.getIdElement().toUnqualified().getValue());
-			}
-			mySubscriptionInterceptor.registerSubscription(theSubscription.getIdElement(), theSubscription);
+			return registerSubscriptionUnlessAlreadyRegistered(theSubscription);
 		} else {
-			if (mySubscriptionInterceptor.hasSubscription(theSubscription.getIdElement())) {
-				ourLog.info("Removing {} subscription {}", statusString, theSubscription.getIdElement().toUnqualified().getValue());
-			}
-			mySubscriptionInterceptor.unregisterSubscription(theSubscription.getIdElement());
+			// Status isn't "active" or "requested"
+			return unregisterSubscriptionIfRegistered(theSubscription, statusString);
 		}
 	}
 
-	private void activateSubscription(String theActiveStatus, final IBaseResource theSubscription, String theRequestedStatus) {
+	protected boolean unregisterSubscriptionIfRegistered(IBaseResource theSubscription, String theStatusString) {
+		if (mySubscriptionInterceptor.hasSubscription(theSubscription.getIdElement()) != null) {
+			ourLog.info("Removing {} subscription {}", theStatusString, theSubscription.getIdElement().toUnqualified().getValue());
+			mySubscriptionInterceptor.unregisterSubscription(theSubscription.getIdElement());
+			return true;
+		}
+		return false;
+	}
+
+	private boolean activateSubscription(String theActiveStatus, final IBaseResource theSubscription, String theRequestedStatus) {
 		IBaseResource subscription = mySubscriptionDao.read(theSubscription.getIdElement());
 
-		ourLog.info("Activating and registering subscription {} from status {} to {}", subscription.getIdElement().toUnqualified().getValue(), theRequestedStatus, theActiveStatus);
+		ourLog.info("Activating subscription {} from status {} to {} for channel {}", subscription.getIdElement().toUnqualified().getValue(), theRequestedStatus, theActiveStatus, myChannelType);
 		try {
 			SubscriptionUtil.setStatus(myCtx, subscription, theActiveStatus);
-			mySubscriptionDao.update(subscription);
-			mySubscriptionInterceptor.registerSubscription(subscription.getIdElement(), subscription);
+			subscription = mySubscriptionDao.update(subscription).getResource();
+			mySubscriptionInterceptor.submitResourceModifiedForUpdate(subscription);
+			return true;
 		} catch (final UnprocessableEntityException e) {
 			ourLog.info("Changing status of {} to ERROR", subscription.getIdElement());
 			SubscriptionUtil.setStatus(myCtx, subscription, "error");
 			SubscriptionUtil.setReason(myCtx, subscription, e.getMessage());
 			mySubscriptionDao.update(subscription);
+			return false;
 		}
+
 	}
 
+	@SuppressWarnings("EnumSwitchStatementWhichMissesCases")
 	public void handleMessage(RestOperationTypeEnum theOperationType, IIdType theId, final IBaseResource theSubscription) throws MessagingException {
 
 		switch (theOperationType) {
@@ -160,13 +173,7 @@ public class SubscriptionActivatingSubscriber {
 				if (!theId.getResourceType().equals("Subscription")) {
 					return;
 				}
-				TransactionTemplate txTemplate = new TransactionTemplate(myTransactionManager);
-				txTemplate.execute(new TransactionCallbackWithoutResult() {
-					@Override
-					protected void doInTransactionWithoutResult(TransactionStatus status) {
-						activateAndRegisterSubscriptionIfRequired(theSubscription);
-					}
-				});
+				activateAndRegisterSubscriptionIfRequiredInTransaction(theSubscription);
 				break;
 			default:
 				break;
@@ -174,6 +181,37 @@ public class SubscriptionActivatingSubscriber {
 
 	}
 
+	private synchronized void activateAndRegisterSubscriptionIfRequiredInTransaction(IBaseResource theSubscription) {
+		TransactionTemplate txTemplate = new TransactionTemplate(myTransactionManager);
+		txTemplate.execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus status) {
+				activateOrRegisterSubscriptionIfRequired(theSubscription);
+			}
+		});
+	}
+
+	protected boolean registerSubscriptionUnlessAlreadyRegistered(IBaseResource theSubscription) {
+		CanonicalSubscription existingSubscription = mySubscriptionInterceptor.hasSubscription(theSubscription.getIdElement());
+		CanonicalSubscription newSubscription = mySubscriptionInterceptor.canonicalize(theSubscription);
+
+		if (existingSubscription != null) {
+			if (newSubscription.equals(existingSubscription)) {
+				// No changes
+				return false;
+			}
+		}
+
+		if (existingSubscription != null) {
+			ourLog.info("Updating already-registered active subscription {}", theSubscription.getIdElement().toUnqualified().getValue());
+			mySubscriptionInterceptor.unregisterSubscription(theSubscription.getIdElement());
+		} else {
+			ourLog.info("Registering active subscription {}", theSubscription.getIdElement().toUnqualified().getValue());
+		}
+		mySubscriptionInterceptor.registerSubscription(theSubscription.getIdElement(), theSubscription);
+		return true;
+	}
+
 	@VisibleForTesting
 	public static void setWaitForSubscriptionActivationSynchronouslyForUnitTest(boolean theWaitForSubscriptionActivationSynchronouslyForUnitTest) {
 		ourWaitForSubscriptionActivationSynchronouslyForUnitTest = theWaitForSubscriptionActivationSynchronouslyForUnitTest;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/SubscriptionCheckingSubscriber.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/SubscriptionCheckingSubscriber.java
index af5678ce1b0..16184c069cb 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/SubscriptionCheckingSubscriber.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/SubscriptionCheckingSubscriber.java
@@ -34,6 +34,7 @@ import org.hl7.fhir.r4.model.Subscription;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.messaging.Message;
+import org.springframework.messaging.MessageChannel;
 import org.springframework.messaging.MessagingException;
 
 import java.util.List;
@@ -69,7 +70,7 @@ public class SubscriptionCheckingSubscriber extends BaseSubscriptionSubscriber {
 		String resourceType = id.getResourceType();
 		String resourceId = id.getIdPart();
 
-		List<CanonicalSubscription> subscriptions = getSubscriptionInterceptor().getSubscriptions();
+		List<CanonicalSubscription> subscriptions = getSubscriptionInterceptor().getRegisteredSubscriptions();
 
 		ourLog.trace("Testing {} subscriptions for applicability");
 
@@ -117,7 +118,12 @@ public class SubscriptionCheckingSubscriber extends BaseSubscriptionSubscriber {
 			deliveryMsg.setPayloadId(msg.getId(getContext()));
 
 			ResourceDeliveryJsonMessage wrappedMsg = new ResourceDeliveryJsonMessage(deliveryMsg);
-			getSubscriptionInterceptor().getDeliveryChannel().send(wrappedMsg);
+			MessageChannel deliveryChannel = getSubscriptionInterceptor().getDeliveryChannel(nextSubscription);
+			if (deliveryChannel != null) {
+				deliveryChannel.send(wrappedMsg);
+			} else {
+				ourLog.warn("Do not have deliovery channel for subscription {}", nextSubscription.getIdElement(getContext()));
+			}
 		}
 
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/email/SubscriptionEmailInterceptor.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/email/SubscriptionEmailInterceptor.java
index 560d4aa2145..270bf3ee9b1 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/email/SubscriptionEmailInterceptor.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/email/SubscriptionEmailInterceptor.java
@@ -21,13 +21,14 @@ package ca.uhn.fhir.jpa.subscription.email;
  */
 
 import ca.uhn.fhir.jpa.subscription.BaseSubscriptionInterceptor;
+import ca.uhn.fhir.jpa.subscription.CanonicalSubscription;
 import org.apache.commons.lang3.Validate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.MessageHandler;
 
-import javax.annotation.PostConstruct;
+import java.util.Optional;
 
 public class SubscriptionEmailInterceptor extends BaseSubscriptionInterceptor {
-	private SubscriptionDeliveringEmailSubscriber mySubscriptionDeliverySubscriber;
 
 	/**
 	 * This is set to autowired=false just so that implementors can supply this
@@ -37,6 +38,11 @@ public class SubscriptionEmailInterceptor extends BaseSubscriptionInterceptor {
 	private IEmailSender myEmailSender;
 	private String myDefaultFromAddress = "noreply@unknown.com";
 
+	@Override
+	protected Optional<MessageHandler> createDeliveryHandler(CanonicalSubscription theSubscription) {
+		return Optional.of(new SubscriptionDeliveringEmailSubscriber(getSubscriptionDao(), getChannelType(), this));
+	}
+
 	@Override
 	public org.hl7.fhir.r4.model.Subscription.SubscriptionChannelType getChannelType() {
 		return org.hl7.fhir.r4.model.Subscription.SubscriptionChannelType.EMAIL;
@@ -69,23 +75,5 @@ public class SubscriptionEmailInterceptor extends BaseSubscriptionInterceptor {
 		myEmailSender = theEmailSender;
 	}
 
-	@Override
-	protected void registerDeliverySubscriber() {
-		if (mySubscriptionDeliverySubscriber == null) {
-			mySubscriptionDeliverySubscriber = new SubscriptionDeliveringEmailSubscriber(getSubscriptionDao(), getChannelType(), this);
-		}
-		getDeliveryChannel().subscribe(mySubscriptionDeliverySubscriber);
-	}
 
-//	@PostConstruct
-//	public void start() {
-//		Validate.notNull(myEmailSender, "emailSender has not been configured");
-//
-//		super.start();
-//	}
-
-	@Override
-	protected void unregisterDeliverySubscriber() {
-		getDeliveryChannel().unsubscribe(mySubscriptionDeliverySubscriber);
-	}
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/resthook/SubscriptionRestHookInterceptor.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/resthook/SubscriptionRestHookInterceptor.java
index 10cb72b981b..83ff6a3257d 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/resthook/SubscriptionRestHookInterceptor.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/resthook/SubscriptionRestHookInterceptor.java
@@ -21,16 +21,16 @@ package ca.uhn.fhir.jpa.subscription.resthook;
  */
 
 import ca.uhn.fhir.jpa.subscription.BaseSubscriptionInterceptor;
+import ca.uhn.fhir.jpa.subscription.CanonicalSubscription;
+import org.springframework.messaging.MessageHandler;
+
+import java.util.Optional;
 
 public class SubscriptionRestHookInterceptor extends BaseSubscriptionInterceptor {
-	private SubscriptionDeliveringRestHookSubscriber mySubscriptionDeliverySubscriber;
 
 	@Override
-	protected void registerDeliverySubscriber() {
-		if (mySubscriptionDeliverySubscriber == null) {
-			mySubscriptionDeliverySubscriber = new SubscriptionDeliveringRestHookSubscriber(getSubscriptionDao(), getChannelType(), this);
-		}
-		getDeliveryChannel().subscribe(mySubscriptionDeliverySubscriber);
+	protected Optional<MessageHandler> createDeliveryHandler(CanonicalSubscription theSubscription) {
+		return Optional.of(new SubscriptionDeliveringRestHookSubscriber(getSubscriptionDao(), getChannelType(), this));
 	}
 
 	@Override
@@ -38,8 +38,4 @@ public class SubscriptionRestHookInterceptor extends BaseSubscriptionInterceptor
 		return org.hl7.fhir.r4.model.Subscription.SubscriptionChannelType.RESTHOOK;
 	}
 
-	@Override
-	protected void unregisterDeliverySubscriber() {
-		getDeliveryChannel().unsubscribe(mySubscriptionDeliverySubscriber);
-	}
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/websocket/SubscriptionWebsocketHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/websocket/SubscriptionWebsocketHandler.java
index 0d2ae3e3659..33c541c780e 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/websocket/SubscriptionWebsocketHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/websocket/SubscriptionWebsocketHandler.java
@@ -109,12 +109,14 @@ public class SubscriptionWebsocketHandler extends TextWebSocketHandler implement
 			mySession = theSession;
 			mySubscription = theSubscription;
 
-			mySubscriptionWebsocketInterceptor.getDeliveryChannel().subscribe(this);
+			String subscriptionId = mySubscription.getIdElement(myCtx).getIdPart();
+			mySubscriptionWebsocketInterceptor.registerHandler(subscriptionId, this);
 		}
 
 		@Override
 		public void closing() {
-			mySubscriptionWebsocketInterceptor.getDeliveryChannel().unsubscribe(this);
+			String subscriptionId = mySubscription.getIdElement(myCtx).getIdPart();
+			mySubscriptionWebsocketInterceptor.unregisterHandler(subscriptionId, this);
 		}
 
 		private void deliver() {
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/websocket/SubscriptionWebsocketInterceptor.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/websocket/SubscriptionWebsocketInterceptor.java
index dbdbbb1efba..9189ddc6cc2 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/websocket/SubscriptionWebsocketInterceptor.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/subscription/websocket/SubscriptionWebsocketInterceptor.java
@@ -23,10 +23,14 @@ package ca.uhn.fhir.jpa.subscription.websocket;
 import ca.uhn.fhir.jpa.dao.data.IResourceTableDao;
 import ca.uhn.fhir.jpa.dao.data.ISubscriptionTableDao;
 import ca.uhn.fhir.jpa.subscription.BaseSubscriptionInterceptor;
+import ca.uhn.fhir.jpa.subscription.CanonicalSubscription;
 import org.hl7.fhir.r4.model.Subscription;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.messaging.MessageHandler;
 import org.springframework.transaction.PlatformTransactionManager;
 
+import java.util.Optional;
+
 public class SubscriptionWebsocketInterceptor extends BaseSubscriptionInterceptor {
 
 	@Autowired
@@ -38,26 +42,15 @@ public class SubscriptionWebsocketInterceptor extends BaseSubscriptionIntercepto
 	@Autowired
 	private IResourceTableDao myResourceTableDao;
 
+	@Override
+	protected Optional<MessageHandler> createDeliveryHandler(CanonicalSubscription theSubscription) {
+		return Optional.empty();
+	}
+
 	@Override
 	public Subscription.SubscriptionChannelType getChannelType() {
 		return Subscription.SubscriptionChannelType.WEBSOCKET;
 	}
 
-	@Override
-	protected void registerDeliverySubscriber() {
-		/*
-		 * nothing, since individual websocket connections
-		 * register themselves
-		 */
-	}
 
-	@Override
-	protected void unregisterDeliverySubscriber() {
-
-		/*
-		 * nothing, since individual websocket connections
-		 * register themselves
-		 */
-
-	}
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/BaseHapiTerminologySvcImpl.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/BaseHapiTerminologySvcImpl.java
index f2bcbc67a8c..2f6e3f11bca 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/BaseHapiTerminologySvcImpl.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/BaseHapiTerminologySvcImpl.java
@@ -9,9 +9,9 @@ package ca.uhn.fhir.jpa.term;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -45,8 +45,7 @@ import org.apache.commons.lang3.Validate;
 import org.apache.commons.lang3.time.DateUtils;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queries.TermsQuery;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.RegexpQuery;
+import org.apache.lucene.search.*;
 import org.hibernate.ScrollMode;
 import org.hibernate.ScrollableResults;
 import org.hibernate.search.jpa.FullTextEntityManager;
@@ -55,16 +54,15 @@ import org.hibernate.search.query.dsl.BooleanJunction;
 import org.hibernate.search.query.dsl.QueryBuilder;
 import org.hl7.fhir.exceptions.FHIRException;
 import org.hl7.fhir.instance.model.api.IIdType;
-import org.hl7.fhir.r4.model.CodeSystem;
-import org.hl7.fhir.r4.model.Coding;
-import org.hl7.fhir.r4.model.ConceptMap;
-import org.hl7.fhir.r4.model.ValueSet;
+import org.hl7.fhir.r4.model.*;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Slice;
+import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.TransactionStatus;
@@ -81,6 +79,8 @@ import javax.persistence.TypedQuery;
 import javax.persistence.criteria.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 import static org.apache.commons.lang3.StringUtils.isBlank;
@@ -136,14 +136,16 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 	private ApplicationContext myApplicationContext;
 
 	/**
-	 * @param theAdd If true, add the code. If false, remove the code.
+	 * @param theAdd         If true, add the code. If false, remove the code.
+	 * @param theCodeCounter
 	 */
-	private void addCodeIfNotAlreadyAdded(String theCodeSystem, ValueSet.ValueSetExpansionComponent theExpansionComponent, Set<String> theAddedCodes, TermConcept theConcept, boolean theAdd) {
+	private void addCodeIfNotAlreadyAdded(ValueSet.ValueSetExpansionComponent theExpansionComponent, Set<String> theAddedCodes, TermConcept theConcept, boolean theAdd, AtomicInteger theCodeCounter) {
 		String code = theConcept.getCode();
 		if (theAdd && theAddedCodes.add(code)) {
+			String codeSystem = theConcept.getCodeSystemVersion().getCodeSystem().getCodeSystemUri();
 			ValueSet.ValueSetExpansionContainsComponent contains = theExpansionComponent.addContains();
 			contains.setCode(code);
-			contains.setSystem(theCodeSystem);
+			contains.setSystem(codeSystem);
 			contains.setDisplay(theConcept.getDisplay());
 			for (TermConceptDesignation nextDesignation : theConcept.getDesignations()) {
 				contains
@@ -154,21 +156,17 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 					.setCode(nextDesignation.getUseCode())
 					.setDisplay(nextDesignation.getUseDisplay());
 			}
+
+			theCodeCounter.incrementAndGet();
 		}
 
 		if (!theAdd && theAddedCodes.remove(code)) {
-			removeCodeFromExpansion(theCodeSystem, code, theExpansionComponent);
+			String codeSystem = theConcept.getCodeSystemVersion().getCodeSystem().getCodeSystemUri();
+			removeCodeFromExpansion(codeSystem, code, theExpansionComponent);
+			theCodeCounter.decrementAndGet();
 		}
 	}
 
-	private void removeCodeFromExpansion(String theCodeSystem, String theCode, ValueSet.ValueSetExpansionComponent theExpansionComponent) {
-		theExpansionComponent
-			.getContains()
-			.removeIf(t ->
-				theCodeSystem.equals(t.getSystem()) &&
-					theCode.equals(t.getCode()));
-	}
-
 	private void addConceptsToList(ValueSet.ValueSetExpansionComponent theExpansionComponent, Set<String> theAddedCodes, String theSystem, List<CodeSystem.ConceptDefinitionComponent> theConcept, boolean theAdd) {
 		for (CodeSystem.ConceptDefinitionComponent next : theConcept) {
 			if (theAdd && theAddedCodes.add(next.getCode())) {
@@ -272,21 +270,7 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 
 		int i = 0;
 		for (TermCodeSystemVersion next : myCodeSystemVersionDao.findByCodeSystemResource(theCodeSystem.getPid())) {
-			myConceptParentChildLinkDao.deleteByCodeSystemVersion(next.getPid());
-			for (TermConcept nextConcept : myConceptDao.findByCodeSystemVersion(next.getPid())) {
-				myConceptPropertyDao.deleteAll(nextConcept.getProperties());
-				myConceptDesignationDao.deleteAll(nextConcept.getDesignations());
-				myConceptDao.delete(nextConcept);
-			}
-			if (next.getCodeSystem().getCurrentVersion() == next) {
-				next.getCodeSystem().setCurrentVersion(null);
-				myCodeSystemDao.save(next.getCodeSystem());
-			}
-			myCodeSystemVersionDao.delete(next);
-
-			if (i++ % 1000 == 0) {
-				myEntityManager.flush();
-			}
+			deleteCodeSystemVersion(next.getPid());
 		}
 		myCodeSystemVersionDao.deleteForCodeSystem(theCodeSystem);
 		myCodeSystemDao.delete(theCodeSystem);
@@ -294,6 +278,119 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 		myEntityManager.flush();
 	}
 
+	public void deleteCodeSystemVersion(final Long theCodeSystemVersionPid) {
+		ourLog.info(" * Deleting code system version {}", theCodeSystemVersionPid);
+
+		PageRequest page1000 = PageRequest.of(0, 1000);
+
+		// Parent/Child links
+		{
+			String descriptor = "parent/child links";
+			Supplier<Slice<TermConceptParentChildLink>> loader = () -> myConceptParentChildLinkDao.findByCodeSystemVersion(page1000, theCodeSystemVersionPid);
+			Supplier<Integer> counter = () -> myConceptParentChildLinkDao.countByCodeSystemVersion(theCodeSystemVersionPid);
+			doDelete(descriptor, loader, counter, myConceptParentChildLinkDao);
+		}
+
+		// Properties
+		{
+			String descriptor = "concept properties";
+			Supplier<Slice<TermConceptProperty>> loader = () -> myConceptPropertyDao.findByCodeSystemVersion(page1000, theCodeSystemVersionPid);
+			Supplier<Integer> counter = () -> myConceptPropertyDao.countByCodeSystemVersion(theCodeSystemVersionPid);
+			doDelete(descriptor, loader, counter, myConceptPropertyDao);
+		}
+
+		// Designations
+		{
+			String descriptor = "concept designations";
+			Supplier<Slice<TermConceptDesignation>> loader = () -> myConceptDesignationDao.findByCodeSystemVersion(page1000, theCodeSystemVersionPid);
+			Supplier<Integer> counter = () -> myConceptDesignationDao.countByCodeSystemVersion(theCodeSystemVersionPid);
+			doDelete(descriptor, loader, counter, myConceptDesignationDao);
+		}
+
+		// Concepts
+		{
+			String descriptor = "concepts";
+			// For some reason, concepts are much slower to delete, so use a smaller batch size
+			PageRequest page100 = PageRequest.of(0, 100);
+			Supplier<Slice<TermConcept>> loader = () -> myConceptDao.findByCodeSystemVersion(page100, theCodeSystemVersionPid);
+			Supplier<Integer> counter = () -> myConceptDao.countByCodeSystemVersion(theCodeSystemVersionPid);
+			doDelete(descriptor, loader, counter, myConceptDao);
+		}
+
+		Optional<TermCodeSystem> codeSystemOpt = myCodeSystemDao.findWithCodeSystemVersionAsCurrentVersion(theCodeSystemVersionPid);
+		if (codeSystemOpt.isPresent()) {
+			TermCodeSystem codeSystem = codeSystemOpt.get();
+			ourLog.info(" * Removing code system version {} as current version of code system {}", theCodeSystemVersionPid, codeSystem.getPid());
+			codeSystem.setCurrentVersion(null);
+			myCodeSystemDao.save(codeSystem);
+		}
+
+		ourLog.info(" * Deleting code system version");
+		myCodeSystemVersionDao.deleteById(theCodeSystemVersionPid);
+
+	}
+
+	public void deleteConceptMap(ResourceTable theResourceTable) {
+		// Get existing entity so it can be deleted.
+		Optional<TermConceptMap> optionalExistingTermConceptMapById = myConceptMapDao.findTermConceptMapByResourcePid(theResourceTable.getId());
+
+		if (optionalExistingTermConceptMapById.isPresent()) {
+			TermConceptMap existingTermConceptMap = optionalExistingTermConceptMapById.get();
+
+			ourLog.info("Deleting existing TermConceptMap {} and its children...", existingTermConceptMap.getId());
+			for (TermConceptMapGroup group : existingTermConceptMap.getConceptMapGroups()) {
+
+				for (TermConceptMapGroupElement element : group.getConceptMapGroupElements()) {
+
+					for (TermConceptMapGroupElementTarget target : element.getConceptMapGroupElementTargets()) {
+
+						myConceptMapGroupElementTargetDao.deleteTermConceptMapGroupElementTargetById(target.getId());
+					}
+
+					myConceptMapGroupElementDao.deleteTermConceptMapGroupElementById(element.getId());
+				}
+
+				myConceptMapGroupDao.deleteTermConceptMapGroupById(group.getId());
+			}
+
+			myConceptMapDao.deleteTermConceptMapById(existingTermConceptMap.getId());
+			ourLog.info("Done deleting existing TermConceptMap {} and its children.", existingTermConceptMap.getId());
+
+			ourLog.info("Flushing...");
+			myConceptMapGroupElementTargetDao.flush();
+			myConceptMapGroupElementDao.flush();
+			myConceptMapGroupDao.flush();
+			myConceptMapDao.flush();
+			ourLog.info("Done flushing.");
+		}
+	}
+
+	@Override
+	@Transactional
+	public void deleteConceptMapAndChildren(ResourceTable theResourceTable) {
+		deleteConceptMap(theResourceTable);
+	}
+
+	private <T> void doDelete(String theDescriptor, Supplier<Slice<T>> theLoader, Supplier<Integer> theCounter, JpaRepository<T, ?> theDao) {
+		int count;
+		ourLog.info(" * Deleting {}", theDescriptor);
+		int totalCount = theCounter.get();
+		StopWatch sw = new StopWatch();
+		count = 0;
+		while (true) {
+			Slice<T> link = theLoader.get();
+			if (link.hasContent() == false) {
+				break;
+			}
+
+			theDao.deleteInBatch(link);
+
+			count += link.getNumberOfElements();
+			ourLog.info(" * {} {} deleted - {}/sec - ETA: {}", count, theDescriptor, sw.formatThroughput(count, TimeUnit.SECONDS), sw.getEstimatedTimeRemaining(count, totalCount));
+		}
+		theDao.flush();
+	}
+
 	private int ensureParentsSaved(Collection<TermConceptParentChildLink> theParents) {
 		ourLog.trace("Checking {} parents", theParents.size());
 		int retVal = 0;
@@ -303,6 +400,7 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 				TermConcept nextParent = nextLink.getParent();
 				retVal += ensureParentsSaved(nextParent.getParents());
 				if (nextParent.getId() == null) {
+					nextParent.setUpdated(new Date());
 					myConceptDao.saveAndFlush(nextParent);
 					retVal++;
 					ourLog.debug("Saved parent code {} and got id {}", nextParent.getCode(), nextParent.getId());
@@ -316,30 +414,57 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 	@Override
 	@Transactional(propagation = Propagation.REQUIRED)
 	public ValueSet expandValueSet(ValueSet theValueSetToExpand) {
+
 		ValueSet.ValueSetExpansionComponent expansionComponent = new ValueSet.ValueSetExpansionComponent();
+		expansionComponent.setIdentifier(UUID.randomUUID().toString());
+		expansionComponent.setTimestamp(new Date());
+
 		Set<String> addedCodes = new HashSet<>();
+		AtomicInteger codeCounter = new AtomicInteger(0);
 
 		// Handle includes
+		ourLog.debug("Handling includes");
 		for (ValueSet.ConceptSetComponent include : theValueSetToExpand.getCompose().getInclude()) {
 			boolean add = true;
-			expandValueSetHandleIncludeOrExclude(expansionComponent, addedCodes, include, add);
+			expandValueSetHandleIncludeOrExclude(expansionComponent, addedCodes, include, add, codeCounter);
 		}
 
 		// Handle excludes
+		ourLog.debug("Handling excludes");
 		for (ValueSet.ConceptSetComponent include : theValueSetToExpand.getCompose().getExclude()) {
 			boolean add = false;
-			expandValueSetHandleIncludeOrExclude(expansionComponent, addedCodes, include, add);
+			expandValueSetHandleIncludeOrExclude(expansionComponent, addedCodes, include, add, codeCounter);
 		}
 
+		expansionComponent.setTotal(codeCounter.get());
+
 		ValueSet valueSet = new ValueSet();
+		valueSet.setStatus(Enumerations.PublicationStatus.ACTIVE);
+		valueSet.setCompose(theValueSetToExpand.getCompose());
 		valueSet.setExpansion(expansionComponent);
 		return valueSet;
 	}
 
-	public void expandValueSetHandleIncludeOrExclude(ValueSet.ValueSetExpansionComponent theExpansionComponent, Set<String> theAddedCodes, ValueSet.ConceptSetComponent include, boolean theAdd) {
-		String system = include.getSystem();
-		if (isNotBlank(system)) {
-			ourLog.info("Starting expansion around code system: {}", system);
+	protected List<VersionIndependentConcept> expandValueSetAndReturnVersionIndependentConcepts(org.hl7.fhir.r4.model.ValueSet theValueSetToExpandR4) {
+		org.hl7.fhir.r4.model.ValueSet.ValueSetExpansionComponent expandedR4 = expandValueSet(theValueSetToExpandR4).getExpansion();
+
+		ArrayList<VersionIndependentConcept> retVal = new ArrayList<>();
+		for (org.hl7.fhir.r4.model.ValueSet.ValueSetExpansionContainsComponent nextContains : expandedR4.getContains()) {
+			retVal.add(
+				new VersionIndependentConcept()
+					.setSystem(nextContains.getSystem())
+					.setCode(nextContains.getCode()));
+		}
+		return retVal;
+	}
+
+	public void expandValueSetHandleIncludeOrExclude(ValueSet.ValueSetExpansionComponent theExpansionComponent, Set<String> theAddedCodes, ValueSet.ConceptSetComponent theInclude, boolean theAdd, AtomicInteger theCodeCounter) {
+		String system = theInclude.getSystem();
+		boolean hasSystem = isNotBlank(system);
+		boolean hasValueSet = theInclude.getValueSet().size() > 0;
+
+		if (hasSystem) {
+			ourLog.info("Starting {} expansion around code system: {}", (theAdd ? "inclusion" : "exclusion"), system);
 
 			TermCodeSystem cs = myCodeSystemDao.findByCodeSystemUri(system);
 			if (cs != null) {
@@ -350,28 +475,13 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 
 				bool.must(qb.keyword().onField("myCodeSystemVersionPid").matching(csv.getPid()).createQuery());
 
-				/*
-				 * Include Concepts
-				 */
-
-				String codes = include
-					.getConcept()
-					.stream()
-					.filter(Objects::nonNull)
-					.map(ValueSet.ConceptReferenceComponent::getCode)
-					.filter(StringUtils::isNotBlank)
-					.collect(Collectors.joining(" "));
-				if (isNotBlank(codes)) {
-					bool.must(qb.keyword().onField("myCode").matching(codes).createQuery());
-				}
-
 				/*
 				 * Filters
 				 */
 
-				if (include.getFilter().size() > 0) {
+				if (theInclude.getFilter().size() > 0) {
 
-					for (ValueSet.ConceptSetFilterComponent nextFilter : include.getFilter()) {
+					for (ValueSet.ConceptSetFilterComponent nextFilter : theInclude.getFilter()) {
 						if (isBlank(nextFilter.getValue()) && nextFilter.getOp() == null && isBlank(nextFilter.getProperty())) {
 							continue;
 						}
@@ -443,20 +553,52 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 				}
 
 				Query luceneQuery = bool.createQuery();
+
+				/*
+				 * Include Concepts
+				 */
+
+				List<Term> codes = theInclude
+					.getConcept()
+					.stream()
+					.filter(Objects::nonNull)
+					.map(ValueSet.ConceptReferenceComponent::getCode)
+					.filter(StringUtils::isNotBlank)
+					.map(t -> new Term("myCode", t))
+					.collect(Collectors.toList());
+				if (codes.size() > 0) {
+					MultiPhraseQuery query = new MultiPhraseQuery();
+					query.add(codes.toArray(new Term[0]));
+					luceneQuery = new BooleanQuery.Builder()
+						.add(luceneQuery, BooleanClause.Occur.MUST)
+						.add(query, BooleanClause.Occur.MUST)
+						.build();
+				}
+
+				/*
+				 * Execute the query
+				 */
+
 				FullTextQuery jpaQuery = em.createFullTextQuery(luceneQuery, TermConcept.class);
-				jpaQuery.setMaxResults(1000);
+				int maxResult = 50000;
+				jpaQuery.setMaxResults(maxResult);
 
 				StopWatch sw = new StopWatch();
+				AtomicInteger count = new AtomicInteger(0);
 
-				@SuppressWarnings("unchecked")
-				List<TermConcept> result = jpaQuery.getResultList();
-
-				ourLog.info("Expansion completed in {}ms", sw.getMillis());
-
-				for (TermConcept nextConcept : result) {
-					addCodeIfNotAlreadyAdded(system, theExpansionComponent, theAddedCodes, nextConcept, theAdd);
+				for (Object next : jpaQuery.getResultList()) {
+					count.incrementAndGet();
+					TermConcept concept = (TermConcept) next;
+					addCodeIfNotAlreadyAdded(theExpansionComponent, theAddedCodes, concept, theAdd, theCodeCounter);
 				}
 
+
+				if (maxResult == count.get()) {
+					throw new InternalErrorException("Expansion fragment produced too many (>= " + maxResult + ") results");
+				}
+
+				ourLog.info("Expansion for {} produced {} results in {}ms", (theAdd ? "inclusion" : "exclusion"), count, sw.getMillis());
+
 			} else {
 				// No codesystem matching the URL found in the database
 
@@ -465,8 +607,8 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 					throw new InvalidRequestException("Unknown code system: " + system);
 				}
 
-				if (include.getConcept().isEmpty() == false) {
-					for (ValueSet.ConceptReferenceComponent next : include.getConcept()) {
+				if (theInclude.getConcept().isEmpty() == false) {
+					for (ValueSet.ConceptReferenceComponent next : theInclude.getConcept()) {
 						String nextCode = next.getCode();
 						if (isNotBlank(nextCode) && !theAddedCodes.contains(nextCode)) {
 							CodeSystem.ConceptDefinitionComponent code = findCode(codeSystemFromContext.getConcept(), nextCode);
@@ -489,20 +631,26 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 				}
 
 			}
-		}
-	}
+		} else if (hasValueSet) {
+			for (CanonicalType nextValueSet : theInclude.getValueSet()) {
+				ourLog.info("Starting {} expansion around ValueSet URI: {}", (theAdd ? "inclusion" : "exclusion"), nextValueSet.getValueAsString());
 
-	protected List<VersionIndependentConcept> expandValueSetAndReturnVersionIndependentConcepts(org.hl7.fhir.r4.model.ValueSet theValueSetToExpandR4) {
-		org.hl7.fhir.r4.model.ValueSet.ValueSetExpansionComponent expandedR4 = expandValueSet(theValueSetToExpandR4).getExpansion();
+				List<VersionIndependentConcept> expanded = expandValueSet(nextValueSet.getValueAsString());
+				for (VersionIndependentConcept nextConcept : expanded) {
+					if (theAdd) {
+						TermCodeSystem codeSystem = myCodeSystemDao.findByCodeSystemUri(nextConcept.getSystem());
+						TermConcept concept = myConceptDao.findByCodeSystemAndCode(codeSystem.getCurrentVersion(), nextConcept.getCode());
+						addCodeIfNotAlreadyAdded(theExpansionComponent, theAddedCodes, concept, theAdd, theCodeCounter);
+					}
+					if (!theAdd && theAddedCodes.remove(nextConcept.getCode())) {
+						removeCodeFromExpansion(nextConcept.getSystem(), nextConcept.getCode(), theExpansionComponent);
+					}
+				}
 
-		ArrayList<VersionIndependentConcept> retVal = new ArrayList<>();
-		for (org.hl7.fhir.r4.model.ValueSet.ValueSetExpansionContainsComponent nextContains : expandedR4.getContains()) {
-			retVal.add(
-				new VersionIndependentConcept()
-					.setSystem(nextContains.getSystem())
-					.setCode(nextContains.getCode()));
+			}
+		} else {
+			throw new InvalidRequestException("ValueSet contains " + (theAdd ? "include" : "exclude") + " criteria with no system defined");
 		}
-		return retVal;
 	}
 
 	private void fetchChildren(TermConcept theConcept, Set<TermConcept> theSetToPopulate) {
@@ -533,7 +681,10 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 			if (theCode.equals(next.getCode())) {
 				return next;
 			}
-			findCode(next.getConcept(), theCode);
+			CodeSystem.ConceptDefinitionComponent val = findCode(next.getConcept(), theCode);
+			if (val != null) {
+				return val;
+			}
 		}
 		return null;
 	}
@@ -793,9 +944,11 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 
 				for (TermConcept nextConcept : concepts) {
 
-					StringBuilder parentsBuilder = new StringBuilder();
-					createParentsString(parentsBuilder, nextConcept.getId());
-					nextConcept.setParentPids(parentsBuilder.toString());
+					if (isBlank(nextConcept.getParentPidsAsString())) {
+						StringBuilder parentsBuilder = new StringBuilder();
+						createParentsString(parentsBuilder, nextConcept.getId());
+						nextConcept.setParentPids(parentsBuilder.toString());
+					}
 
 					saveConcept(nextConcept);
 					count++;
@@ -807,6 +960,14 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 
 	}
 
+	private void removeCodeFromExpansion(String theCodeSystem, String theCode, ValueSet.ValueSetExpansionComponent theExpansionComponent) {
+		theExpansionComponent
+			.getContains()
+			.removeIf(t ->
+				theCodeSystem.equals(t.getSystem()) &&
+					theCode.equals(t.getCode()));
+	}
+
 	private int saveConcept(TermConcept theConcept) {
 		int retVal = 0;
 
@@ -821,6 +982,7 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 		if (theConcept.getId() == null || theConcept.getIndexStatus() == null) {
 			retVal++;
 			theConcept.setIndexStatus(BaseHapiFhirDao.INDEX_STATUS_INDEXED);
+			theConcept.setUpdated(new Date());
 			myConceptDao.save(theConcept);
 
 			for (TermConceptProperty next : theConcept.getProperties()) {
@@ -850,15 +1012,16 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 			return;
 		} else if (myDeferredConcepts.isEmpty() && myConceptLinksToSaveLater.isEmpty()) {
 			processReindexing();
-			return;
 		}
 
 		TransactionTemplate tt = new TransactionTemplate(myTransactionMgr);
 		tt.setPropagationBehavior(TransactionTemplate.PROPAGATION_REQUIRES_NEW);
-		tt.execute(t -> {
-			processDeferredConcepts();
-			return null;
-		});
+		if (!myDeferredConcepts.isEmpty() || !myConceptLinksToSaveLater.isEmpty()) {
+			tt.execute(t -> {
+				processDeferredConcepts();
+				return null;
+			});
+		}
 
 		if (myDeferredValueSets.size() > 0) {
 			tt.execute(t -> {
@@ -909,20 +1072,12 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 
 		ourLog.info("Deleting old code system versions");
 		for (TermCodeSystemVersion next : existing) {
-			ourLog.info(" * Deleting code system version {}", next.getPid());
-			myConceptParentChildLinkDao.deleteByCodeSystemVersion(next.getPid());
-			for (TermConcept nextConcept : myConceptDao.findByCodeSystemVersion(next.getPid())) {
-				myConceptPropertyDao.deleteAll(nextConcept.getProperties());
-				myConceptDao.delete(nextConcept);
-			}
+			Long codeSystemVersionPid = next.getPid();
+			deleteCodeSystemVersion(codeSystemVersionPid);
 		}
 
 		ourLog.info("Flushing...");
-
-		myConceptParentChildLinkDao.flush();
-		myConceptPropertyDao.flush();
 		myConceptDao.flush();
-
 		ourLog.info("Done flushing");
 
 		/*
@@ -1025,42 +1180,10 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 		termConceptMap.setResource(theResourceTable);
 		termConceptMap.setUrl(theConceptMap.getUrl());
 
-		// Get existing entity so it can be deleted.
-		Optional<TermConceptMap> optionalExistingTermConceptMapById = myConceptMapDao.findTermConceptMapByResourcePid(theResourceTable.getId());
-
 		/*
 		 * For now we always delete old versions. At some point, it would be nice to allow configuration to keep old versions.
 		 */
-
-		if (optionalExistingTermConceptMapById.isPresent()) {
-			TermConceptMap existingTermConceptMap = optionalExistingTermConceptMapById.get();
-
-			ourLog.info("Deleting existing TermConceptMap {} and its children...", existingTermConceptMap.getId());
-			for (TermConceptMapGroup group : existingTermConceptMap.getConceptMapGroups()) {
-
-				for (TermConceptMapGroupElement element : group.getConceptMapGroupElements()) {
-
-					for (TermConceptMapGroupElementTarget target : element.getConceptMapGroupElementTargets()) {
-
-						myConceptMapGroupElementTargetDao.deleteTermConceptMapGroupElementTargetById(target.getId());
-					}
-
-					myConceptMapGroupElementDao.deleteTermConceptMapGroupElementById(element.getId());
-				}
-
-				myConceptMapGroupDao.deleteTermConceptMapGroupById(group.getId());
-			}
-
-			myConceptMapDao.deleteTermConceptMapById(existingTermConceptMap.getId());
-			ourLog.info("Done deleting existing TermConceptMap {} and its children.", existingTermConceptMap.getId());
-
-			ourLog.info("Flushing...");
-			myConceptMapGroupElementTargetDao.flush();
-			myConceptMapGroupElementDao.flush();
-			myConceptMapGroupDao.flush();
-			myConceptMapDao.flush();
-			ourLog.info("Done flushing.");
-		}
+		deleteConceptMap(theResourceTable);
 
 		/*
 		 * Do the upload.
@@ -1081,6 +1204,7 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 				throw new InternalErrorException(fe);
 			}
 			myConceptMapDao.save(termConceptMap);
+			int codesSaved = 0;
 
 			if (theConceptMap.hasGroup()) {
 				TermConceptMapGroup termConceptMapGroup;
@@ -1116,7 +1240,12 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 									termConceptMapGroupElementTarget.setCode(target.getCode());
 									termConceptMapGroupElementTarget.setDisplay(target.getDisplay());
 									termConceptMapGroupElementTarget.setEquivalence(target.getEquivalence());
-									myConceptMapGroupElementTargetDao.saveAndFlush(termConceptMapGroupElementTarget);
+									myConceptMapGroupElementTargetDao.save(termConceptMapGroupElementTarget);
+
+									if (codesSaved++ % 250 == 0) {
+										ourLog.info("Have saved {} codes in conceptmap", codesSaved);
+										myConceptMapGroupElementTargetDao.flush();
+									}
 								}
 							}
 						}
@@ -1258,14 +1387,18 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 				predicates = new ArrayList<>();
 
 				coding = translationQuery.getCoding();
+				String targetCode = null;
+				String targetCodeSystem = null;
 				if (coding.hasCode()) {
 					predicates.add(criteriaBuilder.equal(targetJoin.get("myCode"), coding.getCode()));
+					targetCode = coding.getCode();
 				} else {
 					throw new InvalidRequestException("A code must be provided for translation to occur.");
 				}
 
 				if (coding.hasSystem()) {
 					predicates.add(criteriaBuilder.equal(groupJoin.get("myTarget"), coding.getSystem()));
+					targetCodeSystem = coding.getSystem();
 				}
 
 				if (coding.hasVersion()) {
@@ -1299,7 +1432,24 @@ public abstract class BaseHapiTerminologySvcImpl implements IHapiTerminologySvc,
 				Iterator<TermConceptMapGroupElement> scrollableResultsIterator = new ScrollableResultsIterator<>(scrollableResults);
 
 				while (scrollableResultsIterator.hasNext()) {
-					elements.add(scrollableResultsIterator.next());
+					TermConceptMapGroupElement nextElement = scrollableResultsIterator.next();
+					nextElement.getConceptMapGroupElementTargets().size();
+					myEntityManager.detach(nextElement);
+
+					if (isNotBlank(targetCode) && isNotBlank(targetCodeSystem)) {
+						for (Iterator<TermConceptMapGroupElementTarget> iter = nextElement.getConceptMapGroupElementTargets().iterator(); iter.hasNext(); ) {
+							TermConceptMapGroupElementTarget next = iter.next();
+							if (targetCodeSystem.equals(next.getSystem())) {
+								if (targetCode.equals(next.getCode())) {
+									continue;
+								}
+							}
+
+							iter.remove();
+						}
+					}
+
+					elements.add(nextElement);
 				}
 
 				ourLastResultsFromTranslationWithReverseCache = false; // For testing.
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcDstu2.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcDstu2.java
index 8d4a6e056e5..5efbe1bbaf7 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcDstu2.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcDstu2.java
@@ -9,9 +9,9 @@ package ca.uhn.fhir.jpa.term;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -21,6 +21,7 @@ package ca.uhn.fhir.jpa.term;
  */
 
 import org.hl7.fhir.instance.hapi.validation.IValidationSupport;
+import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.r4.model.CodeSystem;
 import org.hl7.fhir.r4.model.ConceptMap;
@@ -80,6 +81,11 @@ public class HapiTerminologySvcDstu2 extends BaseHapiTerminologySvcImpl {
 		return null;
 	}
 
+	@Override
+	public IBaseResource expandValueSet(IBaseResource theValueSetToExpand) {
+		throw new UnsupportedOperationException();
+	}
+
 	@Override
 	public List<VersionIndependentConcept> expandValueSet(String theValueSet) {
 		throw new UnsupportedOperationException();
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcDstu3.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcDstu3.java
index d19a864aa2f..c5e880db83d 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcDstu3.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcDstu3.java
@@ -166,6 +166,20 @@ public class HapiTerminologySvcDstu3 extends BaseHapiTerminologySvcImpl implemen
 		}
 	}
 
+	@Override
+	public IBaseResource expandValueSet(IBaseResource theInput) {
+		ValueSet valueSetToExpand = (ValueSet) theInput;
+
+		try {
+			org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
+			valueSetToExpandR4 = VersionConvertor_30_40.convertValueSet(valueSetToExpand);
+			org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSet(valueSetToExpandR4);
+			return VersionConvertor_30_40.convertValueSet(expandedR4);
+		} catch (FHIRException e) {
+			throw new InternalErrorException(e);
+		}
+	}
+
 	@Override
 	public List<VersionIndependentConcept> expandValueSet(String theValueSet) {
 		ValueSet vs = myValidationSupport.fetchResource(myContext, ValueSet.class, theValueSet);
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcR4.java
index c8602b643da..6130cd179de 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/HapiTerminologySvcR4.java
@@ -39,9 +39,9 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -134,6 +134,13 @@ public class HapiTerminologySvcR4 extends BaseHapiTerminologySvcImpl implements
 		return expandValueSetAndReturnVersionIndependentConcepts(vs);
 	}
 
+	@Override
+	public IBaseResource expandValueSet(IBaseResource theInput) {
+		ValueSet valueSetToExpand = (ValueSet) theInput;
+		return super.expandValueSet(valueSetToExpand);
+	}
+
+
 	@Override
 	public ValueSetExpansionComponent expandValueSet(FhirContext theContext, ConceptSetComponent theInclude) {
 		ValueSet valueSetToExpand = new ValueSet();
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/IHapiTerminologySvc.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/IHapiTerminologySvc.java
index dbe52226f78..f4bca9c6000 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/IHapiTerminologySvc.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/IHapiTerminologySvc.java
@@ -2,6 +2,7 @@ package ca.uhn.fhir.jpa.term;
 
 import ca.uhn.fhir.jpa.entity.*;
 import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.r4.model.ConceptMap;
 import org.hl7.fhir.r4.model.ValueSet;
@@ -35,6 +36,11 @@ public interface IHapiTerminologySvc {
 
 	ValueSet expandValueSet(ValueSet theValueSetToExpand);
 
+	/**
+	 * Version independent
+	 */
+	IBaseResource expandValueSet(IBaseResource theValueSetToExpand);
+
 	List<VersionIndependentConcept> expandValueSet(String theValueSet);
 
 	TermConcept findCode(String theCodeSystem, String theCode);
@@ -68,6 +74,8 @@ public interface IHapiTerminologySvc {
 	 */
 	IIdType storeNewCodeSystemVersion(org.hl7.fhir.r4.model.CodeSystem theCodeSystemResource, TermCodeSystemVersion theCodeSystemVersion, RequestDetails theRequestDetails, List<org.hl7.fhir.r4.model.ValueSet> theValueSets, List<org.hl7.fhir.r4.model.ConceptMap> theConceptMaps);
 
+	void deleteConceptMapAndChildren(ResourceTable theResourceTable);
+
 	void storeTermConceptMapAndChildren(ResourceTable theResourceTable, ConceptMap theConceptMap);
 
 	boolean supportsSystem(String theCodeSystem);
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcImpl.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcImpl.java
index e300bfe382f..0f647f57b4c 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcImpl.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcImpl.java
@@ -11,6 +11,7 @@ import ca.uhn.fhir.jpa.term.snomedct.SctHandlerRelationship;
 import ca.uhn.fhir.jpa.util.Counter;
 import ca.uhn.fhir.rest.api.server.RequestDetails;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Charsets;
@@ -77,8 +78,12 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
 	public static final String LOINC_UNIVERSAL_LAB_ORDER_VALUESET_FILE = "LoincUniversalLabOrdersValueSet.csv";
 	public static final String LOINC_IEEE_MEDICAL_DEVICE_CODE_MAPPING_TABLE_CSV = "LoincIeeeMedicalDeviceCodeMappingTable.csv";
 	public static final String LOINC_IMAGING_DOCUMENT_CODES_FILE = "ImagingDocumentCodes.csv";
-	private static final int LOG_INCREMENT = 100000;
+	public static final String LOINC_GROUP_FILE = "Group.csv";
+	public static final String LOINC_GROUP_TERMS_FILE = "GroupLoincTerms.csv";
+	public static final String LOINC_PARENT_GROUP_FILE = "ParentGroup.csv";
+	private static final int LOG_INCREMENT = 1000;
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(TerminologyLoaderSvcImpl.class);
+
 	@Autowired
 	private IHapiTerminologySvc myTermSvc;
 	@Autowired(required = false)
@@ -119,12 +124,20 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
 
 	}
 
-	private void iterateOverZipFile(LoadedFileDescriptors theDescriptors, String theFileNamePart, IRecordHandler theHandler, char theDelimiter, QuoteMode theQuoteMode) {
+	private void iterateOverZipFile(LoadedFileDescriptors theDescriptors, String theFileNamePart, IRecordHandler theHandler, char theDelimiter, QuoteMode theQuoteMode, boolean theIsPartialFilename) {
 
+		boolean foundMatch = false;
 		for (FileDescriptor nextZipBytes : theDescriptors.getUncompressedFileDescriptors()) {
 			String nextFilename = nextZipBytes.getFilename();
-			if (nextFilename.contains(theFileNamePart)) {
+			boolean matches;
+			if (theIsPartialFilename) {
+				matches = nextFilename.contains(theFileNamePart);
+			} else {
+				matches = nextFilename.endsWith("/" + theFileNamePart) || nextFilename.equals(theFileNamePart);
+			}
+			if (matches) {
 				ourLog.info("Processing file {}", nextFilename);
+				foundMatch = true;
 
 				Reader reader;
 				CSVParser parsed;
@@ -149,6 +162,9 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
 					int nextLoggedCount = 0;
 					while (iter.hasNext()) {
 						CSVRecord nextRecord = iter.next();
+						if (nextRecord.isConsistent()==false) {
+							continue;
+						}
 						theHandler.accept(nextRecord);
 						count++;
 						if (count >= nextLoggedCount) {
@@ -164,6 +180,10 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
 
 		}
 
+		if (!foundMatch) {
+			throw new InvalidRequestException("Did not find file matching " + theFileNamePart);
+		}
+
 	}
 
 	@Override
@@ -171,10 +191,7 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
 		LoadedFileDescriptors descriptors = new LoadedFileDescriptors(theFiles);
 		List<String> mandatoryFilenameFragments = Arrays.asList(
 			LOINC_FILE,
-			LOINC_HIERARCHY_FILE);
-		descriptors.verifyMandatoryFilesExist(mandatoryFilenameFragments);
-
-		List<String> optionalFilenameFragments = Arrays.asList(
+			LOINC_HIERARCHY_FILE,
 			LOINC_UPLOAD_PROPERTIES_FILE,
 			LOINC_ANSWERLIST_FILE,
 			LOINC_ANSWERLIST_LINK_FILE,
@@ -189,6 +206,10 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
 			LOINC_IEEE_MEDICAL_DEVICE_CODE_MAPPING_TABLE_CSV,
 			LOINC_IMAGING_DOCUMENT_CODES_FILE
 		);
+		descriptors.verifyMandatoryFilesExist(mandatoryFilenameFragments);
+
+		List<String> optionalFilenameFragments = Arrays.asList(
+		);
 		descriptors.verifyOptionalFilesExist(optionalFilenameFragments);
 
 		ourLog.info("Beginning LOINC processing");
@@ -251,60 +272,75 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
 
 		// Part file
 		handler = new LoincPartHandler(codeSystemVersion, code2concept);
-		iterateOverZipFile(theDescriptors, LOINC_PART_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_PART_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 		Map<PartTypeAndPartName, String> partTypeAndPartNameToPartNumber = ((LoincPartHandler) handler).getPartTypeAndPartNameToPartNumber();
 
 		// Loinc Codes
 		handler = new LoincHandler(codeSystemVersion, code2concept, propertyNamesToTypes, partTypeAndPartNameToPartNumber);
-		iterateOverZipFile(theDescriptors, LOINC_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Loinc Hierarchy
 		handler = new LoincHierarchyHandler(codeSystemVersion, code2concept);
-		iterateOverZipFile(theDescriptors, LOINC_HIERARCHY_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_HIERARCHY_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Answer lists (ValueSets of potential answers/values for loinc "questions")
 		handler = new LoincAnswerListHandler(codeSystemVersion, code2concept, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_ANSWERLIST_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_ANSWERLIST_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Answer list links (connects loinc observation codes to answerlist codes)
 		handler = new LoincAnswerListLinkHandler(code2concept, valueSets);
-		iterateOverZipFile(theDescriptors, LOINC_ANSWERLIST_LINK_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_ANSWERLIST_LINK_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
+
+		// RSNA Playbook file
+		// Note that this should come before the "Part Related Code Mapping"
+		// file because there are some duplicate mappings between these
+		// two files, and the RSNA Playbook file has more metadata
+		handler = new LoincRsnaPlaybookHandler(code2concept, valueSets, conceptMaps, uploadProperties);
+		iterateOverZipFile(theDescriptors, LOINC_RSNA_PLAYBOOK_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Part link file
 		handler = new LoincPartLinkHandler(codeSystemVersion, code2concept);
-		iterateOverZipFile(theDescriptors, LOINC_PART_LINK_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_PART_LINK_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Part related code mapping
 		handler = new LoincPartRelatedCodeMappingHandler(code2concept, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_PART_RELATED_CODE_MAPPING_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_PART_RELATED_CODE_MAPPING_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Document Ontology File
 		handler = new LoincDocumentOntologyHandler(code2concept, propertyNamesToTypes, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_DOCUMENT_ONTOLOGY_FILE, handler, ',', QuoteMode.NON_NUMERIC);
-
-		// RSNA Playbook file
-		handler = new LoincRsnaPlaybookHandler(code2concept, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_RSNA_PLAYBOOK_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_DOCUMENT_ONTOLOGY_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Top 2000 Codes - US
 		handler = new LoincTop2000LabResultsUsHandler(code2concept, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_TOP2000_COMMON_LAB_RESULTS_US_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_TOP2000_COMMON_LAB_RESULTS_US_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Top 2000 Codes - SI
 		handler = new LoincTop2000LabResultsSiHandler(code2concept, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_TOP2000_COMMON_LAB_RESULTS_SI_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_TOP2000_COMMON_LAB_RESULTS_SI_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Universal Lab Order ValueSet
 		handler = new LoincUniversalOrderSetHandler(code2concept, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_UNIVERSAL_LAB_ORDER_VALUESET_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_UNIVERSAL_LAB_ORDER_VALUESET_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// IEEE Medical Device Codes
 		handler = new LoincIeeeMedicalDeviceCodeHandler(code2concept, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_IEEE_MEDICAL_DEVICE_CODE_MAPPING_TABLE_CSV, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_IEEE_MEDICAL_DEVICE_CODE_MAPPING_TABLE_CSV, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		// Imaging Document Codes
 		handler = new LoincImagingDocumentCodeHandler(code2concept, valueSets, conceptMaps, uploadProperties);
-		iterateOverZipFile(theDescriptors, LOINC_IMAGING_DOCUMENT_CODES_FILE, handler, ',', QuoteMode.NON_NUMERIC);
+		iterateOverZipFile(theDescriptors, LOINC_IMAGING_DOCUMENT_CODES_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
+
+		// Group File
+		handler = new LoincGroupFileHandler(code2concept, valueSets, conceptMaps, uploadProperties);
+		iterateOverZipFile(theDescriptors, LOINC_GROUP_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
+
+		// Group Terms File
+		handler = new LoincGroupTermsFileHandler(code2concept, valueSets, conceptMaps, uploadProperties);
+		iterateOverZipFile(theDescriptors, LOINC_GROUP_TERMS_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
+
+		// Parent Group File
+		handler = new LoincParentGroupFileHandler(code2concept, valueSets, conceptMaps, uploadProperties);
+		iterateOverZipFile(theDescriptors, LOINC_PARENT_GROUP_FILE, handler, ',', QuoteMode.NON_NUMERIC, false);
 
 		IOUtils.closeQuietly(theDescriptors);
 
@@ -332,18 +368,18 @@ public class TerminologyLoaderSvcImpl implements IHapiTerminologyLoaderSvc {
 		final Set<String> validConceptIds = new HashSet<>();
 
 		IRecordHandler handler = new SctHandlerConcept(validConceptIds);
-		iterateOverZipFile(theDescriptors, SCT_FILE_CONCEPT, handler, '\t', null);
+		iterateOverZipFile(theDescriptors, SCT_FILE_CONCEPT, handler, '\t', null, true);
 
 		ourLog.info("Have {} valid concept IDs", validConceptIds.size());
 
 		handler = new SctHandlerDescription(validConceptIds, code2concept, id2concept, codeSystemVersion);
-		iterateOverZipFile(theDescriptors, SCT_FILE_DESCRIPTION, handler, '\t', null);
+		iterateOverZipFile(theDescriptors, SCT_FILE_DESCRIPTION, handler, '\t', null, true);
 
 		ourLog.info("Got {} concepts, cloning map", code2concept.size());
 		final HashMap<String, TermConcept> rootConcepts = new HashMap<>(code2concept);
 
 		handler = new SctHandlerRelationship(codeSystemVersion, rootConcepts, code2concept);
-		iterateOverZipFile(theDescriptors, SCT_FILE_RELATIONSHIP, handler, '\t', null);
+		iterateOverZipFile(theDescriptors, SCT_FILE_RELATIONSHIP, handler, '\t', null, true);
 
 		IOUtils.closeQuietly(theDescriptors);
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/BaseLoincHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/BaseLoincHandler.java
index 49ae11ce88f..35a405031ca 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/BaseLoincHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/BaseLoincHandler.java
@@ -26,6 +26,8 @@ import org.hl7.fhir.r4.model.ConceptMap;
 import org.hl7.fhir.r4.model.ContactPoint;
 import org.hl7.fhir.r4.model.Enumerations;
 import org.hl7.fhir.r4.model.ValueSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.HashMap;
 import java.util.List;
@@ -35,8 +37,9 @@ import java.util.Properties;
 import static org.apache.commons.lang3.StringUtils.*;
 
 public abstract class BaseLoincHandler implements IRecordHandler {
-
+	private static final Logger ourLog = LoggerFactory.getLogger(BaseLoincHandler.class);
 	public static final String LOINC_COPYRIGHT_STATEMENT = "This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at https://loinc.org/license/";
+
 	/**
 	 * This is <b>NOT</b> the LOINC CodeSystem URI! It is just
 	 * the website URL to LOINC.
@@ -52,8 +55,10 @@ public abstract class BaseLoincHandler implements IRecordHandler {
 
 	BaseLoincHandler(Map<String, TermConcept> theCode2Concept, List<ValueSet> theValueSets, List<ConceptMap> theConceptMaps, Properties theUploadProperties) {
 		myValueSets = theValueSets;
+		myValueSets.forEach(t -> myIdToValueSet.put(t.getId(), t));
 		myCode2Concept = theCode2Concept;
 		myConceptMaps = theConceptMaps;
+		myConceptMaps.forEach(t -> myIdToConceptMaps.put(t.getId(), t));
 		myUploadProperties = theUploadProperties;
 	}
 
@@ -80,10 +85,9 @@ public abstract class BaseLoincHandler implements IRecordHandler {
 
 			String displayName = theDisplayName;
 			if (isBlank(displayName)) {
-				for (TermConcept next : myCode2Concept.values()) {
-					if (next.getCode().equals(theCode)) {
-						displayName = next.getDisplay();
-					}
+				TermConcept concept = myCode2Concept.get(theCode);
+				if (concept != null) {
+					displayName = concept.getDisplay();
 				}
 			}
 
@@ -176,6 +180,8 @@ public abstract class BaseLoincHandler implements IRecordHandler {
 				.setCode(theMapping.getTargetCode())
 				.setDisplay(theMapping.getTargetDisplay())
 				.setEquivalence(theMapping.getEquivalence());
+		} else {
+			ourLog.info("Not going to add a mapping from [{}/{}] to [{}/{}] because one already exists", theMapping.getSourceCodeSystem(), theMapping.getSourceCode(), theMapping.getTargetCodeSystem(), theMapping.getTargetCode());
 		}
 	}
 
@@ -192,7 +198,6 @@ public abstract class BaseLoincHandler implements IRecordHandler {
 			vs.setUrl(theValueSetUri);
 			vs.setId(theValueSetId);
 			vs.setVersion(version);
-			vs.setName(theValueSetName);
 			vs.setStatus(Enumerations.PublicationStatus.ACTIVE);
 			vs.setPublisher(REGENSTRIEF_INSTITUTE_INC);
 			vs.addContact()
@@ -206,6 +211,11 @@ public abstract class BaseLoincHandler implements IRecordHandler {
 		} else {
 			vs = myIdToValueSet.get(theValueSetId);
 		}
+
+		if (isBlank(vs.getName()) && isNotBlank(theValueSetName)) {
+			vs.setName(theValueSetName);
+		}
+
 		return vs;
 	}
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincAnswerListHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincAnswerListHandler.java
index 55605dc66e6..118f4ee98f7 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincAnswerListHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincAnswerListHandler.java
@@ -63,9 +63,6 @@ public class LoincAnswerListHandler extends BaseLoincHandler {
 		String extCodeSystem = trim(theRecord.get("ExtCodeSystem"));
 		String extCodeSystemVersion = trim(theRecord.get("ExtCodeSystemVersion"));
 
-		if (isBlank(answerString)) {
-			return;
-		}
 
 		// Answer list code
 		if (!myCode2Concept.containsKey(answerListId)) {
@@ -74,16 +71,6 @@ public class LoincAnswerListHandler extends BaseLoincHandler {
 			myCode2Concept.put(answerListId, concept);
 		}
 
-		// Answer code
-		if (!myCode2Concept.containsKey(answerString)) {
-			TermConcept concept = new TermConcept(myCodeSystemVersion, answerString);
-			concept.setDisplay(displayText);
-			if (isNotBlank(sequenceNumber) && sequenceNumber.matches("^[0-9]$")) {
-				concept.setSequence(Integer.parseInt(sequenceNumber));
-			}
-			myCode2Concept.put(answerString, concept);
-		}
-
 		// Answer list ValueSet
 		ValueSet vs = getValueSet(answerListId, "http://loinc.org/vs/" + answerListId, answerListName, "answerlist.version");
 		if (vs.getIdentifier().isEmpty()) {
@@ -92,13 +79,28 @@ public class LoincAnswerListHandler extends BaseLoincHandler {
 				.setValue("urn:oid:" + answerListOid);
 		}
 
-		vs
-			.getCompose()
-			.getIncludeFirstRep()
-			.setSystem(IHapiTerminologyLoaderSvc.LOINC_URI)
-			.addConcept()
-			.setCode(answerString)
-			.setDisplay(displayText);
+		if (isNotBlank(answerString)) {
+
+			// Answer code
+			if (!myCode2Concept.containsKey(answerString)) {
+				TermConcept concept = new TermConcept(myCodeSystemVersion, answerString);
+				concept.setDisplay(displayText);
+				if (isNotBlank(sequenceNumber) && sequenceNumber.matches("^[0-9]$")) {
+					concept.setSequence(Integer.parseInt(sequenceNumber));
+				}
+				myCode2Concept.put(answerString, concept);
+			}
+
+			vs
+				.getCompose()
+				.getIncludeFirstRep()
+				.setSystem(IHapiTerminologyLoaderSvc.LOINC_URI)
+				.addConcept()
+				.setCode(answerString)
+				.setDisplay(displayText);
+
+		}
+
 	}
 
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincGroupFileHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincGroupFileHandler.java
new file mode 100644
index 00000000000..775bdf59348
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincGroupFileHandler.java
@@ -0,0 +1,62 @@
+package ca.uhn.fhir.jpa.term.loinc;
+
+/*-
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.entity.TermConcept;
+import ca.uhn.fhir.jpa.term.IRecordHandler;
+import org.apache.commons.csv.CSVRecord;
+import org.hl7.fhir.r4.model.ConceptMap;
+import org.hl7.fhir.r4.model.ValueSet;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.apache.commons.lang3.StringUtils.trim;
+
+public class LoincGroupFileHandler extends BaseLoincHandler implements IRecordHandler {
+
+	public static final String VS_URI_PREFIX = "http://loinc.org/vs/";
+
+	public LoincGroupFileHandler(Map<String, TermConcept> theCode2concept, List<ValueSet> theValueSets, List<ConceptMap> theConceptMaps, Properties theUploadProperties) {
+		super(theCode2concept, theValueSets, theConceptMaps, theUploadProperties);
+	}
+
+	@Override
+	public void accept(CSVRecord theRecord) {
+		//"ParentGroupId","GroupId","Group","Archetype","Status","VersionFirstReleased"
+		String parentGroupId = trim(theRecord.get("ParentGroupId"));
+		String groupId = trim(theRecord.get("GroupId"));
+		String groupName = trim(theRecord.get("Group"));
+
+		ValueSet parentValueSet = getValueSet(parentGroupId, VS_URI_PREFIX + parentGroupId, null, null);
+		parentValueSet
+			.getCompose()
+			.getIncludeFirstRep()
+			.addValueSet(VS_URI_PREFIX + groupId);
+
+		// Create group to set its name (terms are added in a different
+		// handler)
+		getValueSet(groupId, VS_URI_PREFIX + groupId, groupName, null);
+	}
+
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincGroupTermsFileHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincGroupTermsFileHandler.java
new file mode 100644
index 00000000000..d4d9512dd4d
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincGroupTermsFileHandler.java
@@ -0,0 +1,53 @@
+package ca.uhn.fhir.jpa.term.loinc;
+
+/*-
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.entity.TermConcept;
+import ca.uhn.fhir.jpa.term.IHapiTerminologyLoaderSvc;
+import ca.uhn.fhir.jpa.term.IRecordHandler;
+import org.apache.commons.csv.CSVRecord;
+import org.hl7.fhir.r4.model.ConceptMap;
+import org.hl7.fhir.r4.model.ValueSet;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.apache.commons.lang3.StringUtils.trim;
+
+public class LoincGroupTermsFileHandler extends BaseLoincHandler implements IRecordHandler {
+
+	public LoincGroupTermsFileHandler(Map<String, TermConcept> theCode2concept, List<ValueSet> theValueSets, List<ConceptMap> theConceptMaps, Properties theUploadProperties) {
+		super(theCode2concept, theValueSets, theConceptMaps, theUploadProperties);
+	}
+
+	@Override
+	public void accept(CSVRecord theRecord) {
+		//"Category","GroupId","Archetype","LoincNumber","LongCommonName"
+		String groupId = trim(theRecord.get("GroupId"));
+		String loincNumber = trim(theRecord.get("LoincNumber"));
+
+		ValueSet valueSet = getValueSet(groupId, LoincGroupFileHandler.VS_URI_PREFIX + groupId, null, null);
+		addCodeAsIncludeToValueSet(valueSet, IHapiTerminologyLoaderSvc.LOINC_URI, loincNumber, null);
+	}
+
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincHandler.java
index 97fd4da07b6..aef6a45e4bc 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincHandler.java
@@ -39,6 +39,7 @@ import static org.apache.commons.lang3.StringUtils.trim;
 
 public class LoincHandler implements IRecordHandler {
 
+	private static final Logger ourLog = LoggerFactory.getLogger(LoincHandler.class);
 	private final Map<String, TermConcept> myCode2Concept;
 	private final TermCodeSystemVersion myCodeSystemVersion;
 	private final Map<String, CodeSystem.PropertyType> myPropertyNames;
@@ -86,7 +87,17 @@ public class LoincHandler implements IRecordHandler {
 							concept.addPropertyString(nextPropertyName, nextPropertyValue);
 							break;
 						case CODING:
-							PartTypeAndPartName key = new PartTypeAndPartName(nextPropertyName, nextPropertyValue);
+							// FIXME: handle "Ser/Plas^Donor"
+							String propertyValue = nextPropertyValue;
+							if (nextPropertyName.equals("COMPONENT")) {
+								if (propertyValue.contains("^")) {
+									propertyValue = propertyValue.substring(0, propertyValue.indexOf("^"));
+								} else if (propertyValue.contains("/")) {
+									propertyValue = propertyValue.substring(0, propertyValue.indexOf("/"));
+								}
+							}
+
+							PartTypeAndPartName key = new PartTypeAndPartName(nextPropertyName, propertyValue);
 							String partNumber = myPartTypeAndPartNameToPartNumber.get(key);
 
 							if (partNumber == null && nextPropertyName.equals("TIME_ASPCT")) {
@@ -106,11 +117,12 @@ public class LoincHandler implements IRecordHandler {
 								continue;
 							}
 
-//							Validate.notBlank(partNumber, "Unknown part: " + key);
 							if (isNotBlank(partNumber)) {
 								concept.addPropertyCoding(nextPropertyName, IHapiTerminologyLoaderSvc.LOINC_URI, partNumber, nextPropertyValue);
 							} else {
-								ourLog.warn("Unable to find part code with TYPE[{}] and NAME[{}]", key.getPartType(), key.getPartName());
+								String msg = "Unable to find part code with TYPE[" + key.getPartType() + "] and NAME[" + nextPropertyValue + "] (using name " + propertyValue + ")";
+								ourLog.warn(msg);
+//								throw new InternalErrorException(msg);
 							}
 							break;
 						case DECIMAL:
@@ -129,5 +141,4 @@ public class LoincHandler implements IRecordHandler {
 			myCode2Concept.put(code, concept);
 		}
 	}
-private static final Logger ourLog = LoggerFactory.getLogger(LoincHandler.class);
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincIeeeMedicalDeviceCodeHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincIeeeMedicalDeviceCodeHandler.java
index 204497bc5ce..dad747ba772 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincIeeeMedicalDeviceCodeHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincIeeeMedicalDeviceCodeHandler.java
@@ -37,7 +37,7 @@ import static org.apache.commons.lang3.StringUtils.trim;
 public class LoincIeeeMedicalDeviceCodeHandler extends BaseLoincHandler implements IRecordHandler {
 
 	public static final String LOINC_IEEE_CM_ID = "LOINC-IEEE-MEDICAL-DEVICE-CM";
-	public static final String LOINC_IEEE_CM_URI = "http://loinc.org/fhir/loinc-ieee-device-code-mappings";
+	public static final String LOINC_IEEE_CM_URI = "http://loinc.org/cm/loinc-to-ieee-device-codes";
 	public static final String LOINC_IEEE_CM_NAME = "LOINC/IEEE Device Code Mappings";
 	private static final String CM_COPYRIGHT = "This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at https://loinc.org/license/. The LOINC/IEEE Medical Device Code Mapping Table contains content from IEEE (http://ieee.org), copyright © 2017 IEEE.";
 
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincImagingDocumentCodeHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincImagingDocumentCodeHandler.java
index e61f33f402d..13de5d3862b 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincImagingDocumentCodeHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincImagingDocumentCodeHandler.java
@@ -36,7 +36,7 @@ import static org.apache.commons.lang3.StringUtils.trim;
 public class LoincImagingDocumentCodeHandler extends BaseLoincHandler implements IRecordHandler {
 
 	public static final String VS_ID = "loinc-imaging-document-codes";
-	public static final String VS_URI = "http://loinc.org/fhir/loinc-imaging-document-codes";
+	public static final String VS_URI = "http://loinc.org/vs/loinc-imaging-document-codes";
 	public static final String VS_NAME = "LOINC Imaging Document Codes";
 
 	public LoincImagingDocumentCodeHandler(Map<String, TermConcept> theCode2concept, List<ValueSet> theValueSets, List<ConceptMap> theConceptMaps, Properties theUploadProperties) {
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincParentGroupFileHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincParentGroupFileHandler.java
new file mode 100644
index 00000000000..37d0fe5fa06
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincParentGroupFileHandler.java
@@ -0,0 +1,51 @@
+package ca.uhn.fhir.jpa.term.loinc;
+
+/*-
+ * #%L
+ * HAPI FHIR JPA Server
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.jpa.entity.TermConcept;
+import ca.uhn.fhir.jpa.term.IRecordHandler;
+import org.apache.commons.csv.CSVRecord;
+import org.hl7.fhir.r4.model.ConceptMap;
+import org.hl7.fhir.r4.model.ValueSet;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import static org.apache.commons.lang3.StringUtils.trim;
+
+public class LoincParentGroupFileHandler extends BaseLoincHandler implements IRecordHandler {
+
+	public LoincParentGroupFileHandler(Map<String, TermConcept> theCode2concept, List<ValueSet> theValueSets, List<ConceptMap> theConceptMaps, Properties theUploadProperties) {
+		super(theCode2concept, theValueSets, theConceptMaps, theUploadProperties);
+	}
+
+	@Override
+	public void accept(CSVRecord theRecord) {
+		// "ParentGroupId","ParentGroup","Status"
+		String parentGroupId = trim(theRecord.get("ParentGroupId"));
+		String parentGroupName = trim(theRecord.get("ParentGroup"));
+
+		getValueSet(parentGroupId, LoincGroupFileHandler.VS_URI_PREFIX + parentGroupId, parentGroupName, null);
+	}
+
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincPartRelatedCodeMappingHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincPartRelatedCodeMappingHandler.java
index cbc92de6680..daa122c4164 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincPartRelatedCodeMappingHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincPartRelatedCodeMappingHandler.java
@@ -40,15 +40,18 @@ public class LoincPartRelatedCodeMappingHandler extends BaseLoincHandler impleme
 
 	public static final String LOINC_SCT_PART_MAP_ID = "loinc-parts-to-snomed-ct";
 	public static final String LOINC_SCT_PART_MAP_URI = "http://loinc.org/cm/loinc-parts-to-snomed-ct";
+	public static final String LOINC_TERM_TO_RPID_PART_MAP_ID = "loinc-term-to-rpids";
+	public static final String LOINC_TERM_TO_RPID_PART_MAP_URI = "http://loinc.org/cm/loinc-to-rpids";
+	public static final String LOINC_TERM_TO_RPID_PART_MAP_NAME = "LOINC Terms to RadLex RPIDs";
+	public static final String LOINC_PART_TO_RID_PART_MAP_ID = "loinc-part-to-rids";
+	public static final String LOINC_PART_TO_RID_PART_MAP_URI = "http://loinc.org/cm/loinc-to-rids";
+	public static final String LOINC_PART_TO_RID_PART_MAP_NAME = "LOINC Parts to RadLex RIDs";
 	private static final String LOINC_SCT_PART_MAP_NAME = "LOINC Part Map to SNOMED CT";
 	private static final String LOINC_RXNORM_PART_MAP_ID = "loinc-parts-to-rxnorm";
 	private static final String LOINC_RXNORM_PART_MAP_URI = "http://loinc.org/cm/loinc-parts-to-rxnorm";
 	private static final String LOINC_RXNORM_PART_MAP_NAME = "LOINC Part Map to RxNORM";
-	private static final String LOINC_RADLEX_PART_MAP_ID = "loinc-parts-to-radlex";
-	private static final String LOINC_RADLEX_PART_MAP_URI = "http://loinc.org/cm/loinc-parts-to-radlex";
-	private static final String LOINC_RADLEX_PART_MAP_NAME = "LOINC Part Map to RADLEX";
 	private static final String CM_COPYRIGHT = "This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at https://loinc.org/license/. The LOINC Part File, LOINC/SNOMED CT Expression Association and Map Sets File, RELMA database and associated search index files include SNOMED Clinical Terms (SNOMED CT®) which is used by permission of the International Health Terminology Standards Development Organisation (IHTSDO) under license. All rights are reserved. SNOMED CT® was originally created by The College of American Pathologists. “SNOMED” and “SNOMED CT” are registered trademarks of the IHTSDO. Use of SNOMED CT content is subject to the terms and conditions set forth in the SNOMED CT Affiliate License Agreement.  It is the responsibility of those implementing this product to ensure they are appropriately licensed and for more information on the license, including how to register as an Affiliate Licensee, please refer to http://www.snomed.org/snomed-ct/get-snomed-ct or info@snomed.org. Under the terms of the Affiliate License, use of SNOMED CT in countries that are not IHTSDO Members is subject to reporting and fee payment obligations. However, IHTSDO agrees to waive the requirements to report and pay fees for use of SNOMED CT content included in the LOINC Part Mapping and LOINC Term Associations for purposes that support or enable more effective use of LOINC. This material includes content from the US Edition to SNOMED CT, which is developed and maintained by the U.S. National Library of Medicine and is available to authorized UMLS Metathesaurus Licensees from the UTS Downloads site at https://uts.nlm.nih.gov.";
-	private static final String LOINC_PUBCHEM_PART_MAP_URI = "http://pubchem.ncbi.nlm.nih.gov";
+	private static final String LOINC_PUBCHEM_PART_MAP_URI = "http://loinc.org/cm/loinc-parts-to-pubchem";
 	private static final String LOINC_PUBCHEM_PART_MAP_ID = "loinc-parts-to-pubchem";
 	private static final String LOINC_PUBCHEM_PART_MAP_NAME = "LOINC Part Map to PubChem";
 
@@ -104,9 +107,9 @@ public class LoincPartRelatedCodeMappingHandler extends BaseLoincHandler impleme
 				loincPartMapName = LOINC_RXNORM_PART_MAP_NAME;
 				break;
 			case "http://www.radlex.org":
-				loincPartMapId = LOINC_RADLEX_PART_MAP_ID;
-				loincPartMapUri = LOINC_RADLEX_PART_MAP_URI;
-				loincPartMapName = LOINC_RADLEX_PART_MAP_NAME;
+				loincPartMapId = LOINC_PART_TO_RID_PART_MAP_ID;
+				loincPartMapUri = LOINC_PART_TO_RID_PART_MAP_URI;
+				loincPartMapName = LOINC_PART_TO_RID_PART_MAP_NAME;
 				break;
 			case "http://pubchem.ncbi.nlm.nih.gov":
 				loincPartMapId = LOINC_PUBCHEM_PART_MAP_ID;
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincRsnaPlaybookHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincRsnaPlaybookHandler.java
index 2bc0e4e8015..5e404a2f6aa 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincRsnaPlaybookHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincRsnaPlaybookHandler.java
@@ -39,21 +39,16 @@ public class LoincRsnaPlaybookHandler extends BaseLoincHandler implements IRecor
 	public static final String RSNA_CODES_VS_ID = "loinc-rsna-radiology-playbook";
 	public static final String RSNA_CODES_VS_URI = "http://loinc.org/vs/loinc-rsna-radiology-playbook";
 	public static final String RSNA_CODES_VS_NAME = "LOINC/RSNA Radiology Playbook";
-	public static final String RID_MAPPING_CM_ID = "LOINC-TO-RID-CODES-CM";
-	public static final String RID_MAPPING_CM_URI = "http://loinc.org/rid-codes";
-	public static final String RID_MAPPING_CM_NAME = "RSNA Playbook RID Codes Mapping";
 	public static final String RID_CS_URI = "http://www.radlex.org";
-	public static final String RPID_MAPPING_CM_ID = "LOINC-TO-RPID-CODES-CM";
-	public static final String RPID_MAPPING_CM_URI = "http://loinc.org/rpid-codes";
-	public static final String RPID_MAPPING_CM_NAME = "RSNA Playbook RPID Codes Mapping";
 	/*
-	 * About these being the same - Per Dan:
+	 * About these being the same - Per Dan Vreeman:
 	 * We had some discussion about this, and both
-	 * RIDs (RadLex clinical terms) and RPIDs  (Radlex Playbook Ids)
+	 * RIDs (RadLex clinical terms) and RPIDs (Radlex Playbook Ids)
 	 * belong to the same "code system" since they will never collide.
 	 * The codesystem uri is "http://www.radlex.org". FYI, that's
 	 * now listed on the FHIR page:
 	 * https://www.hl7.org/fhir/terminologies-systems.html
+	 * -ja
 	 */
 	public static final String RPID_CS_URI = RID_CS_URI;
 	private static final String CM_COPYRIGHT = "This content from LOINC® is copyright © 1995 Regenstrief Institute, Inc. and the LOINC Committee, and available at no cost under the license at https://loinc.org/license/. The LOINC/RSNA Radiology Playbook and the LOINC Part File contain content from RadLex® (http://rsna.org/RadLex.aspx), copyright © 2005-2017, The Radiological Society of North America, Inc., available at no cost under the license at http://www.rsna.org/uploadedFiles/RSNA/Content/Informatics/RadLex_License_Agreement_and_Terms_of_Use_V2_Final.pdf.";
@@ -179,9 +174,9 @@ public class LoincRsnaPlaybookHandler extends BaseLoincHandler implements IRecor
 		if (isNotBlank(rid)) {
 			addConceptMapEntry(
 				new ConceptMapping()
-					.setConceptMapId(RID_MAPPING_CM_ID)
-					.setConceptMapUri(RID_MAPPING_CM_URI)
-					.setConceptMapName(RID_MAPPING_CM_NAME)
+					.setConceptMapId(LoincPartRelatedCodeMappingHandler.LOINC_PART_TO_RID_PART_MAP_ID)
+					.setConceptMapUri(LoincPartRelatedCodeMappingHandler.LOINC_PART_TO_RID_PART_MAP_URI)
+					.setConceptMapName(LoincPartRelatedCodeMappingHandler.LOINC_PART_TO_RID_PART_MAP_NAME)
 					.setSourceCodeSystem(IHapiTerminologyLoaderSvc.LOINC_URI)
 					.setSourceCode(partNumber)
 					.setSourceDisplay(partName)
@@ -196,9 +191,9 @@ public class LoincRsnaPlaybookHandler extends BaseLoincHandler implements IRecor
 		if (isNotBlank(rpid)) {
 			addConceptMapEntry(
 				new ConceptMapping()
-					.setConceptMapId(RPID_MAPPING_CM_ID)
-					.setConceptMapUri(RPID_MAPPING_CM_URI)
-					.setConceptMapName(RPID_MAPPING_CM_NAME)
+					.setConceptMapId(LoincPartRelatedCodeMappingHandler.LOINC_TERM_TO_RPID_PART_MAP_ID)
+					.setConceptMapUri(LoincPartRelatedCodeMappingHandler.LOINC_TERM_TO_RPID_PART_MAP_URI)
+					.setConceptMapName(LoincPartRelatedCodeMappingHandler.LOINC_TERM_TO_RPID_PART_MAP_NAME)
 					.setSourceCodeSystem(IHapiTerminologyLoaderSvc.LOINC_URI)
 					.setSourceCode(loincNumber)
 					.setSourceDisplay(longCommonName)
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincUniversalOrderSetHandler.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincUniversalOrderSetHandler.java
index c8d0ffb7179..099cd8cb7e4 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincUniversalOrderSetHandler.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/term/loinc/LoincUniversalOrderSetHandler.java
@@ -34,7 +34,7 @@ import static org.apache.commons.lang3.StringUtils.trim;
 public class LoincUniversalOrderSetHandler extends BaseLoincHandler implements IRecordHandler {
 
 	public static final String VS_ID = "loinc-universal-order-set-vs";
-	public static final String VS_URI = "http://loinc.org/fhir/loinc-universal-order-set";
+	public static final String VS_URI = "http://loinc.org/vs/loinc-universal-order-set";
 	public static final String VS_NAME = "LOINC Universal Order Set";
 
 	public LoincUniversalOrderSetHandler(Map<String, TermConcept> theCode2concept, List<ValueSet> theValueSets, List<ConceptMap> theConceptMaps, Properties theUploadProperties) {
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/JpaConstants.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/JpaConstants.java
index e5567524b05..420e318ea65 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/JpaConstants.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/JpaConstants.java
@@ -150,6 +150,11 @@ public class JpaConstants {
 	 */
 	public static final String OPERATION_EVERYTHING = "$everything";
 
+	/**
+	 * Operation name for the $process-message operation
+	 */
+	public static final String OPERATION_PROCESS_MESSAGE = "$process-message";
+
 	/**
 	 * Operation name for the $meta-delete operation
 	 */
@@ -164,4 +169,9 @@ public class JpaConstants {
 	 * Operation name for the $translate operation
 	 */
 	public static final String OPERATION_TRANSLATE = "$translate";
+
+	/**
+	 * Operation name for the $document operation
+	 */
+	public static final String OPERATION_DOCUMENT = "$document";
 }
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/ReindexController.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/ReindexController.java
index b46d0137e75..bef6609d604 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/ReindexController.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/ReindexController.java
@@ -9,9 +9,9 @@ package ca.uhn.fhir.jpa.util;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -57,7 +57,7 @@ public class ReindexController implements IReindexController {
 	@Transactional(propagation = Propagation.NEVER)
 	@Override
 	public void performReindexingPass() {
-		if (myDaoConfig.isSchedulingDisabled()) {
+		if (myDaoConfig.isSchedulingDisabled() || myDaoConfig.isStatusBasedReindexingDisabled()) {
 			return;
 		}
 
@@ -83,14 +83,22 @@ public class ReindexController implements IReindexController {
 					break;
 				}
 			}
+		} catch (Exception e) {
+			ourLog.error("Failure during reindex", e);
+			count = -1;
 		} finally {
 			myReindexingLock.release();
 		}
 
 		synchronized (this) {
 			if (count == null) {
+				ourLog.info("Reindex pass complete, no remaining resource to index");
+				myDontReindexUntil = System.currentTimeMillis() + DateUtils.MILLIS_PER_HOUR;
+			} else if (count == -1) {
+				// Reindexing failed
 				myDontReindexUntil = System.currentTimeMillis() + DateUtils.MILLIS_PER_HOUR;
 			} else {
+				ourLog.info("Reindex pass complete, {} remaining resource to index", count);
 				myDontReindexUntil = null;
 			}
 		}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/RestUtilities.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/RestUtilities.java
deleted file mode 100644
index 94acf15c4e4..00000000000
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/util/RestUtilities.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package ca.uhn.fhir.jpa.util;
-
-/*-
- * #%L
- * HAPI FHIR JPA Server
- * %%
- * Copyright (C) 2014 - 2018 University Health Network
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpDelete;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.client.methods.HttpPut;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.util.EntityUtils;
-
-import javax.xml.ws.http.HTTPException;
-import java.io.IOException;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Rest service utilities. Generally used in the tests
- */
-public class RestUtilities {
-
-	public static final String CONTEXT_PATH = "";
-	public static final String APPLICATION_JSON = "application/json";
-
-	/**
-	 * Get the response for a CXF REST service without an object parameter
-	 * 
-	 * @param url
-	 * @param typeRequest
-	 * @return
-	 * @throws IOException
-	 */
-	public static String getResponse(String url, MethodRequest typeRequest) throws IOException {
-		return getResponse(url, (StringEntity) null, typeRequest);
-	}
-
-	/**
-	 * Get the response for a CXF REST service with an object parameter
-	 * 
-	 * @param url
-	 * @param parameterEntity
-	 * @param typeRequest
-	 * @return
-	 * @throws IOException
-	 */
-	public static String getResponse(String url, StringEntity parameterEntity, MethodRequest typeRequest) throws IOException {
-		HttpClient httpclient = new DefaultHttpClient();
-		HttpResponse response;
-
-		switch (typeRequest) {
-		case POST:
-			HttpPost httppost = new HttpPost(url);
-			httppost.setHeader("Content-type", APPLICATION_JSON);
-			if (parameterEntity != null) {
-				httppost.setEntity(parameterEntity);
-			}
-			response = httpclient.execute(httppost);
-			break;
-		case PUT:
-			HttpPut httpPut = new HttpPut(url);
-			httpPut.setHeader("Content-type", APPLICATION_JSON);
-			if (parameterEntity != null) {
-				httpPut.setEntity(parameterEntity);
-			}
-			response = httpclient.execute(httpPut);
-			break;
-		case DELETE:
-			HttpDelete httpDelete = new HttpDelete(url);
-			httpDelete.setHeader("Content-type", APPLICATION_JSON);
-			response = httpclient.execute(httpDelete);
-			break;
-		case GET:
-			HttpGet httpGet = new HttpGet(url);
-			httpGet.setHeader("Content-type", APPLICATION_JSON);
-			response = httpclient.execute(httpGet);
-			break;
-		default:
-			throw new IllegalArgumentException("Cannot handle type request " + typeRequest);
-		}
-
-		if (response.getStatusLine().getStatusCode() < 200 || response.getStatusLine().getStatusCode() >= 300) {
-			throw new HTTPException(response.getStatusLine().getStatusCode());
-		}
-
-		if (response.getStatusLine().getStatusCode() == 204) {
-			return "";
-		}
-
-        //Closes connections that have already been closed by the server
-        //org.apache.http.NoHttpResponseException: The target server failed to respond
-        httpclient.getConnectionManager().closeIdleConnections(1, TimeUnit.SECONDS);
-
-		return EntityUtils.toString(response.getEntity());
-	}
-}
diff --git a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/validation/JpaValidationSupportChainR4.java b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/validation/JpaValidationSupportChainR4.java
index 1385e89dde6..6df063b1455 100644
--- a/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/validation/JpaValidationSupportChainR4.java
+++ b/hapi-fhir-jpaserver-base/src/main/java/ca/uhn/fhir/jpa/validation/JpaValidationSupportChainR4.java
@@ -24,7 +24,7 @@ import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
 
 import org.hl7.fhir.r4.hapi.ctx.DefaultProfileValidationSupport;
-import org.hl7.fhir.r4.hapi.ctx.ValidationSupportChain;
+import org.hl7.fhir.r4.hapi.validation.ValidationSupportChain;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu2Config.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu2Config.java
index 3de0c6202fe..21edfb9c3d5 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu2Config.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu2Config.java
@@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.core.env.Environment;
 import org.springframework.orm.jpa.JpaTransactionManager;
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -43,11 +44,6 @@ public class TestDstu2Config extends BaseJavaConfigDstu2 {
 	private Exception myLastStackTrace;
 	private String myLastStackTraceThreadName;
 
-	@Bean(name="maxDatabaseThreadsForTest")
-	public Integer getMaxThread(){
-		return ourMaxThreads;
-	}
-
 	@Bean()
 	public DaoConfig daoConfig() {
 		return new DaoConfig();
@@ -131,6 +127,11 @@ public class TestDstu2Config extends BaseJavaConfigDstu2 {
 		return retVal;
 	}
 
+	@Bean(name = "maxDatabaseThreadsForTest")
+	public Integer getMaxThread() {
+		return ourMaxThreads;
+	}
+
 	private Properties jpaProperties() {
 		Properties extraProperties = new Properties();
 		extraProperties.put("hibernate.format_sql", "true");
@@ -165,4 +166,9 @@ public class TestDstu2Config extends BaseJavaConfigDstu2 {
 		return retVal;
 	}
 
+	@Bean
+	public UnregisterScheduledProcessor unregisterScheduledProcessor(Environment theEnv) {
+		return new UnregisterScheduledProcessor(theEnv);
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu3Config.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu3Config.java
index a7d9cccfe12..eb692759bcd 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu3Config.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestDstu3Config.java
@@ -6,14 +6,9 @@ import ca.uhn.fhir.jpa.subscription.email.IEmailSender;
 import ca.uhn.fhir.jpa.subscription.email.JavaMailEmailSender;
 import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
 import ca.uhn.fhir.validation.ResultSeverityEnum;
-import net.ttddyy.dsproxy.listener.logging.SLF4JLogLevel;
 import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder;
 import org.apache.commons.dbcp2.BasicDataSource;
 import org.hibernate.jpa.HibernatePersistenceProvider;
-import org.springframework.beans.BeansException;
-import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
-import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
@@ -22,13 +17,11 @@ import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
 import org.springframework.core.env.Environment;
 import org.springframework.orm.jpa.JpaTransactionManager;
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import javax.persistence.EntityManagerFactory;
 import javax.sql.DataSource;
 import java.sql.Connection;
-import java.sql.SQLException;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
 
@@ -194,23 +187,4 @@ public class TestDstu3Config extends BaseJavaConfigDstu3 {
 	}
 
 
-	public class UnregisterScheduledProcessor implements BeanFactoryPostProcessor {
-
-		private final Environment myEnvironment;
-
-		public UnregisterScheduledProcessor(Environment theEnv) {
-			myEnvironment = theEnv;
-		}
-
-		@Override
-		public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) throws BeansException {
-			String schedulingDisabled = myEnvironment.getProperty("scheduling_disabled");
-			if ("true".equals(schedulingDisabled)) {
-				for (String beanName : beanFactory.getBeanNamesForType(ScheduledAnnotationBeanPostProcessor.class)) {
-					((DefaultListableBeanFactory) beanFactory).removeBeanDefinition(beanName);
-				}
-			}
-		}
-	}
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestR4Config.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestR4Config.java
index 0a8df9f8bc5..943fc6b0451 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestR4Config.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/TestR4Config.java
@@ -7,15 +7,13 @@ import net.ttddyy.dsproxy.listener.ThreadQueryCountHolder;
 import net.ttddyy.dsproxy.listener.logging.SLF4JLogLevel;
 import net.ttddyy.dsproxy.support.ProxyDataSourceBuilder;
 import org.apache.commons.dbcp2.BasicDataSource;
-import org.hibernate.jpa.HibernatePersistenceProvider;
 import org.hibernate.query.criteria.LiteralHandlingMode;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Lazy;
-import org.springframework.orm.hibernate5.HibernateExceptionTranslator;
+import org.springframework.core.env.Environment;
 import org.springframework.orm.jpa.JpaTransactionManager;
 import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.orm.jpa.vendor.HibernateJpaDialect;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 import javax.persistence.EntityManagerFactory;
@@ -163,6 +161,11 @@ public class TestR4Config extends BaseJavaConfigR4 {
 		return retVal;
 	}
 
+	@Bean
+	public UnregisterScheduledProcessor unregisterScheduledProcessor(Environment theEnv) {
+		return new UnregisterScheduledProcessor(theEnv);
+	}
+
 	public static int getMaxThreads() {
 		return ourMaxThreads;
 	}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/UnregisterScheduledProcessor.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/UnregisterScheduledProcessor.java
new file mode 100644
index 00000000000..cf5943b37d3
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/config/UnregisterScheduledProcessor.java
@@ -0,0 +1,39 @@
+package ca.uhn.fhir.jpa.config;
+
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
+import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.core.env.Environment;
+import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;
+import org.springframework.scheduling.concurrent.ExecutorConfigurationSupport;
+
+/**
+ * This bean postprocessor disables all scheduled tasks. It is intended
+ * only to be used in unit tests in circumstances where scheduled
+ * tasks cause issues.
+ */
+public class UnregisterScheduledProcessor implements BeanFactoryPostProcessor {
+
+	private final Environment myEnvironment;
+
+	public UnregisterScheduledProcessor(Environment theEnv) {
+		myEnvironment = theEnv;
+	}
+
+	@Override
+	public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) throws BeansException {
+		String schedulingDisabled = myEnvironment.getProperty("scheduling_disabled");
+		if ("true".equals(schedulingDisabled)) {
+			for (String beanName : beanFactory.getBeanNamesForType(ScheduledAnnotationBeanPostProcessor.class)) {
+				((DefaultListableBeanFactory) beanFactory).removeBeanDefinition(beanName);
+			}
+
+			for (String beanName : beanFactory.getBeanNamesForType(ExecutorConfigurationSupport.class)) {
+				ExecutorConfigurationSupport executorConfigSupport = ((DefaultListableBeanFactory) beanFactory).getBean(beanName, ExecutorConfigurationSupport.class);
+				executorConfigSupport.shutdown();
+			}
+		}
+
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/BaseJpaTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/BaseJpaTest.java
index 0528c8d806e..16e4368aceb 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/BaseJpaTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/BaseJpaTest.java
@@ -12,6 +12,7 @@ import ca.uhn.fhir.jpa.util.JpaConstants;
 import ca.uhn.fhir.jpa.util.LoggingRule;
 import ca.uhn.fhir.model.dstu2.resource.Bundle;
 import ca.uhn.fhir.model.dstu2.resource.Bundle.Entry;
+import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.api.server.IBundleProvider;
 import ca.uhn.fhir.rest.api.server.IRequestOperationCallback;
 import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
@@ -34,7 +35,6 @@ import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Rule;
 import org.mockito.Mockito;
-import org.springframework.orm.hibernate5.HibernateTransactionManager;
 import org.springframework.orm.jpa.JpaTransactionManager;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.TransactionDefinition;
@@ -49,6 +49,7 @@ import java.sql.SQLException;
 import java.util.*;
 import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 import static ca.uhn.fhir.util.TestUtil.randomizeLocale;
 import static org.junit.Assert.*;
@@ -58,6 +59,10 @@ import static org.mockito.Mockito.when;
 
 public abstract class BaseJpaTest {
 
+	static {
+		System.setProperty(Constants.TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS, "1000");
+	}
+
 	protected static final String CM_URL = "http://example.com/my_concept_map";
 	protected static final String CS_URL = "http://example.com/my_code_system";
 	protected static final String CS_URL_2 = "http://example.com/my_code_system2";
@@ -77,16 +82,6 @@ public abstract class BaseJpaTest {
 		BaseHapiFhirResourceDao.setDisableIncrementOnUpdateForUnitTest(false);
 	}
 
-	@Before
-	public void beforeCreateSrd() {
-		mySrd = mock(ServletRequestDetails.class, Mockito.RETURNS_DEEP_STUBS);
-		when(mySrd.getRequestOperationCallback()).thenReturn(myRequestOperationCallback);
-		myServerInterceptorList = new ArrayList<>();
-		when(mySrd.getServer().getInterceptors()).thenReturn(myServerInterceptorList);
-		when(mySrd.getUserData()).thenReturn(new HashMap<>());
-		when(mySrd.getHeaders(eq(JpaConstants.HEADER_META_SNAPSHOT_MODE))).thenReturn(new ArrayList<>());
-	}
-
 	@After
 	public void afterValidateNoTransaction() {
 		PlatformTransactionManager txManager = getTxManager();
@@ -103,6 +98,7 @@ public abstract class BaseJpaTest {
 			if (currentSession != null) {
 				currentSession.doWork(new Work() {
 
+					@Override
 					public void execute(Connection connection) throws SQLException {
 						isReadOnly.set(connection.isReadOnly());
 					}
@@ -113,6 +109,16 @@ public abstract class BaseJpaTest {
 		}
 	}
 
+	@Before
+	public void beforeCreateSrd() {
+		mySrd = mock(ServletRequestDetails.class, Mockito.RETURNS_DEEP_STUBS);
+		when(mySrd.getRequestOperationCallback()).thenReturn(myRequestOperationCallback);
+		myServerInterceptorList = new ArrayList<>();
+		when(mySrd.getServer().getInterceptors()).thenReturn(myServerInterceptorList);
+		when(mySrd.getUserData()).thenReturn(new HashMap<>());
+		when(mySrd.getHeaders(eq(JpaConstants.HEADER_META_SNAPSHOT_MODE))).thenReturn(new ArrayList<>());
+	}
+
 	@Before
 	public void beforeRandomizeLocale() {
 		randomizeLocale();
@@ -299,6 +305,7 @@ public abstract class BaseJpaTest {
 		return retVal.toArray(new String[retVal.size()]);
 	}
 
+	@SuppressWarnings("RedundantThrows")
 	@AfterClass
 	public static void afterClassClearContext() throws Exception {
 		TestUtil.clearAllStaticFieldsForUnitTest();
@@ -331,7 +338,6 @@ public abstract class BaseJpaTest {
 		theSystemDao.expunge(new ExpungeOptions().setExpungeEverything(true));
 		theDaoConfig.setExpungeEnabled(expungeEnabled);
 
-		theSearchParamPresenceSvc.flushCachesForUnitTest();
 		theSearchParamRegistry.forceRefresh();
 	}
 
@@ -361,7 +367,19 @@ public abstract class BaseJpaTest {
 			}
 		}
 		if (sw.getMillis() >= 15000) {
-			fail("Size " + theList.size() + " is != target " + theTarget + " - Got: " + theList.toString());
+			String describeResults = theList
+				.stream()
+				.map(t -> {
+					if (t == null) {
+						return "null";
+					}
+					if (t instanceof IBaseResource) {
+						return ((IBaseResource)t).getIdElement().getValue();
+					}
+					return t.toString();
+				})
+				.collect(Collectors.joining(", "));
+			fail("Size " + theList.size() + " is != target " + theTarget + " - Got: " + describeResults);
 		}
 	}
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/DaoConfigTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/DaoConfigTest.java
index 277f06668e6..2c4b6e3b58c 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/DaoConfigTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/DaoConfigTest.java
@@ -1,11 +1,12 @@
 package ca.uhn.fhir.jpa.dao;
 
-import static org.junit.Assert.*;
+import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.HashSet;
 
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
 
 public class DaoConfigTest {
 
@@ -31,4 +32,12 @@ public class DaoConfigTest {
 		}
 	}
 
+	@Test
+	public void testDisableStatusBasedReindexUsingSystemProperty() {
+		assertEquals(false, new DaoConfig().isStatusBasedReindexingDisabled());
+		System.setProperty(DaoConfig.DISABLE_STATUS_BASED_REINDEX, "true");
+		assertEquals(true, new DaoConfig().isStatusBasedReindexingDisabled());
+		System.clearProperty(DaoConfig.DISABLE_STATUS_BASED_REINDEX);
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu2/BaseJpaDstu2Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu2/BaseJpaDstu2Test.java
index 079856d31df..fccf834173b 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu2/BaseJpaDstu2Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu2/BaseJpaDstu2Test.java
@@ -62,6 +62,9 @@ public abstract class BaseJpaDstu2Test extends BaseJpaTest {
 	@Qualifier("mySearchParameterDaoDstu2")
 	protected IFhirResourceDao<SearchParameter> mySearchParameterDao;
 	@Autowired
+	@Qualifier("myCommunicationDaoDstu2")
+	protected IFhirResourceDao<Communication> myCommunicationDao;
+	@Autowired
 	@Qualifier("myBundleDaoDstu2")
 	protected IFhirResourceDao<Bundle> myBundleDao;
 	@Autowired
@@ -232,6 +235,7 @@ public abstract class BaseJpaDstu2Test extends BaseJpaTest {
 		return retVal;
 	}
 
+	@SuppressWarnings("RedundantThrows")
 	@AfterClass
 	public static void afterClassClearContext() throws Exception {
 		TestUtil.clearAllStaticFieldsForUnitTest();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu2/FhirResourceDaoDstu2SearchCustomSearchParamTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu2/FhirResourceDaoDstu2SearchCustomSearchParamTest.java
index d6381fafe88..152c8edd74a 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu2/FhirResourceDaoDstu2SearchCustomSearchParamTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu2/FhirResourceDaoDstu2SearchCustomSearchParamTest.java
@@ -13,14 +13,12 @@ import ca.uhn.fhir.model.dstu2.valueset.*;
 import ca.uhn.fhir.model.primitive.*;
 import ca.uhn.fhir.rest.api.server.IBundleProvider;
 import ca.uhn.fhir.rest.param.*;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
 import ca.uhn.fhir.util.TestUtil;
 import org.hl7.fhir.instance.model.api.IIdType;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.Ignore;
-import org.junit.Test;
+import org.junit.*;
 import org.mockito.internal.util.collections.ListUtil;
 
 import java.util.List;
@@ -37,6 +35,12 @@ public class FhirResourceDaoDstu2SearchCustomSearchParamTest extends BaseJpaDstu
 		myDaoConfig.setDefaultSearchParamsCanBeOverridden(new DaoConfig().isDefaultSearchParamsCanBeOverridden());
 	}
 
+	@After
+	public void after() {
+		myDaoConfig.setValidateSearchParameterExpressionsOnSave(new DaoConfig().isValidateSearchParameterExpressionsOnSave());
+	}
+
+
 	@Test
 	public void testCreateInvalidNoBase() {
 		SearchParameter fooSp = new SearchParameter();
@@ -53,6 +57,31 @@ public class FhirResourceDaoDstu2SearchCustomSearchParamTest extends BaseJpaDstu
 		}
 	}
 
+	@Test
+	public void testIndexFailsIfInvalidSearchParameterExists() {
+		myDaoConfig.setValidateSearchParameterExpressionsOnSave(false);
+
+		SearchParameter threadIdSp = new SearchParameter();
+		threadIdSp.setBase(ResourceTypeEnum.COMMUNICATION);
+		threadIdSp.setCode("has-attachments");
+		threadIdSp.setType(SearchParamTypeEnum.REFERENCE);
+		threadIdSp.setXpath("Communication.payload[1].contentAttachment is not null");
+		threadIdSp.setXpathUsage(XPathUsageTypeEnum.NORMAL);
+		threadIdSp.setStatus(ConformanceResourceStatusEnum.ACTIVE);
+		mySearchParameterDao.create(threadIdSp, mySrd);
+		mySearchParamRegsitry.forceRefresh();
+
+		Communication com = new Communication();
+		com.setStatus(CommunicationStatusEnum.IN_PROGRESS);
+		try {
+			myCommunicationDao.create(com, mySrd);
+			fail();
+		} catch (InternalErrorException e) {
+			assertThat(e.getMessage(), startsWith("Failed to extract values from resource using FHIRPath \"Communication.payload[1].contentAttachment is not null\": ca.uhn"));
+		}
+	}
+
+
 	@Test
 	public void testCreateInvalidParamInvalidResourceName() {
 		SearchParameter fooSp = new SearchParameter();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java
index 971b6342282..254dd0cdec8 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/BaseJpaDstu3Test.java
@@ -168,6 +168,12 @@ public abstract class BaseJpaDstu3Test extends BaseJpaTest {
 	@Qualifier("myPatientDaoDstu3")
 	protected IFhirResourceDaoPatient<Patient> myPatientDao;
 	@Autowired
+	@Qualifier("myCompositionDaoDstu3")
+	protected IFhirResourceDao<Composition> myCompositionDao;
+	@Autowired
+	@Qualifier("myCommunicationDaoDstu3")
+	protected IFhirResourceDao<Communication> myCommunicationDao;
+	@Autowired
 	@Qualifier("myPractitionerDaoDstu3")
 	protected IFhirResourceDao<Practitioner> myPractitionerDao;
 	@Autowired
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDocumentDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDocumentDstu3Test.java
index a9370b6e83a..ea21dc3fe45 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDocumentDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDocumentDstu3Test.java
@@ -26,6 +26,4 @@ public class FhirResourceDaoDocumentDstu3Test extends BaseJpaDstu3Test {
 		Bundle inputBundle = myFhirCtx.newXmlParser().parseResource(Bundle.class, input);
 		DaoMethodOutcome responseBundle = myBundleDao.create(inputBundle, mySrd);
 	}
-	
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3ConceptMapTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3ConceptMapTest.java
index 62a41cde417..62311c3a6d0 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3ConceptMapTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3ConceptMapTest.java
@@ -24,17 +24,33 @@ public class FhirResourceDaoDstu3ConceptMapTest extends BaseJpaDstu3Test {
 
 	private IIdType myConceptMapId;
 
-	@AfterClass
-	public static void afterClassClearContext() {
-		TestUtil.clearAllStaticFieldsForUnitTest();
-	}
-
 	@Before
 	@Transactional
 	public void before02() {
 		myConceptMapId = myConceptMapDao.create(createConceptMap(), mySrd).getId().toUnqualifiedVersionless();
 	}
 
+	@Test
+	public void testDeleteConceptMap() {
+		myConceptMapDao.delete(myConceptMapId);
+
+		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
+				TranslationRequest translationRequest = new TranslationRequest();
+				translationRequest.getCodeableConcept().addCoding()
+					.setSystem(CS_URL)
+					.setCode("12345");
+				translationRequest.setTargetSystem(new UriType(CS_URL_3));
+
+				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
+
+				assertFalse(translationResult.getResult().booleanValue());
+			}
+		});
+
+	}
+
 	@Test
 	public void testTranslateByCodeSystemsAndSourceCodeOneToMany() {
 		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
@@ -81,4 +97,9 @@ public class FhirResourceDaoDstu3ConceptMapTest extends BaseJpaDstu3Test {
 			}
 		});
 	}
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3SearchCustomSearchParamTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3SearchCustomSearchParamTest.java
index 8f4649dd853..7eb293d9418 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3SearchCustomSearchParamTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3SearchCustomSearchParamTest.java
@@ -1,9 +1,11 @@
 package ca.uhn.fhir.jpa.dao.dstu3;
 
+import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.jpa.dao.SearchParameterMap;
 import ca.uhn.fhir.model.api.Include;
 import ca.uhn.fhir.rest.api.server.IBundleProvider;
 import ca.uhn.fhir.rest.param.*;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
 import ca.uhn.fhir.util.TestUtil;
@@ -12,6 +14,7 @@ import org.hl7.fhir.dstu3.model.Appointment.AppointmentStatus;
 import org.hl7.fhir.dstu3.model.Enumerations.AdministrativeGender;
 import org.hl7.fhir.exceptions.FHIRException;
 import org.hl7.fhir.instance.model.api.IIdType;
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
@@ -29,6 +32,11 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
 		myDaoConfig.setReuseCachedSearchResultsForMillis(null);
 	}
 
+	@After
+	public void after() {
+		myDaoConfig.setValidateSearchParameterExpressionsOnSave(new DaoConfig().isValidateSearchParameterExpressionsOnSave());
+	}
+
 	@Test
 	public void testCreateInvalidNoBase() {
 		SearchParameter fooSp = new SearchParameter();
@@ -211,6 +219,47 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
 
 	}
 
+	@Test
+	public void testIndexFailsIfInvalidSearchParameterExists() {
+		myDaoConfig.setValidateSearchParameterExpressionsOnSave(false);
+
+		SearchParameter threadIdSp = new SearchParameter();
+		threadIdSp.addBase("Communication");
+		threadIdSp.setCode("has-attachments");
+		threadIdSp.setType(Enumerations.SearchParamType.REFERENCE);
+		threadIdSp.setExpression("Communication.payload[1].contentAttachment is not null");
+		threadIdSp.setXpathUsage(SearchParameter.XPathUsageType.NORMAL);
+		threadIdSp.setStatus(Enumerations.PublicationStatus.ACTIVE);
+		mySearchParameterDao.create(threadIdSp, mySrd);
+		mySearchParamRegsitry.forceRefresh();
+
+		Communication com = new Communication();
+		com.setStatus(Communication.CommunicationStatus.INPROGRESS);
+		try {
+			myCommunicationDao.create(com, mySrd);
+			fail();
+		} catch (InternalErrorException e) {
+			assertThat(e.getMessage(), startsWith("Failed to extract values from resource using FHIRPath \"Communication.payload[1].contentAttachment is not null\": org.hl7.fhir"));
+		}
+	}
+
+	@Test
+	public void testRejectSearchParamWithInvalidExpression() {
+		SearchParameter threadIdSp = new SearchParameter();
+		threadIdSp.addBase("Communication");
+		threadIdSp.setCode("has-attachments");
+		threadIdSp.setType(Enumerations.SearchParamType.REFERENCE);
+		threadIdSp.setExpression("Communication.payload[1].contentAttachment is not null");
+		threadIdSp.setXpathUsage(SearchParameter.XPathUsageType.NORMAL);
+		threadIdSp.setStatus(Enumerations.PublicationStatus.ACTIVE);
+		try {
+			mySearchParameterDao.create(threadIdSp, mySrd);
+			fail();
+		} catch (UnprocessableEntityException e) {
+			assertThat(e.getMessage(), startsWith("The expression \"Communication.payload[1].contentAttachment is not null\" can not be evaluated and may be invalid: "));
+		}
+	}
+
 	/**
 	 * See #863
 	 */
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3ValidateTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3ValidateTest.java
index fa2e085d3e0..014b67a992a 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3ValidateTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirResourceDaoDstu3ValidateTest.java
@@ -1,9 +1,12 @@
 package ca.uhn.fhir.jpa.dao.dstu3;
 
+<<<<<<< master
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.assertThat;
 import static org.junit.Assert.fail;
 
+=======
+>>>>>>> master
 import ca.uhn.fhir.rest.api.EncodingEnum;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.api.ValidationModeEnum;
@@ -31,21 +34,69 @@ import org.junit.Test;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+<<<<<<< master
+=======
+
+import static ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast;
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+>>>>>>> master
 
 public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoDstu3ValidateTest.class);
 
-	@AfterClass
-	public static void afterClassClearContext() {
-		TestUtil.clearAllStaticFieldsForUnitTest();
+	@Test
+	public void testValidateChangedQuestionnaire() {
+		Questionnaire q = new Questionnaire();
+		q.setId("QUEST");
+		q.addItem().setLinkId("A").setType(Questionnaire.QuestionnaireItemType.STRING).setRequired(true);
+		myQuestionnaireDao.update(q);
+
+		try {
+			QuestionnaireResponse qr = new QuestionnaireResponse();
+			qr.setStatus(QuestionnaireResponse.QuestionnaireResponseStatus.COMPLETED);
+			qr.getQuestionnaire().setReference("Questionnaire/QUEST");
+			qr.addItem().setLinkId("A").addAnswer().setValue(new StringType("AAA"));
+
+			MethodOutcome results = myQuestionnaireResponseDao.validate(qr, null, null, null, null, null, null);
+			ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(results.getOperationOutcome()));
+		} catch (PreconditionFailedException e) {
+			ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome()));
+			fail(e.toString());
+		}
+
+
+		q = new Questionnaire();
+		q.setId("QUEST");
+		q.addItem().setLinkId("B").setType(Questionnaire.QuestionnaireItemType.STRING).setRequired(true);
+		myQuestionnaireDao.update(q);
+
+		QuestionnaireResponse qr = new QuestionnaireResponse();
+		qr.setStatus(QuestionnaireResponse.QuestionnaireResponseStatus.COMPLETED);
+		qr.getQuestionnaire().setReference("Questionnaire/QUEST");
+		qr.addItem().setLinkId("A").addAnswer().setValue(new StringType("AAA"));
+
+		MethodOutcome results = myQuestionnaireResponseDao.validate(qr, null, null, null, null, null, null);
+		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(results.getOperationOutcome()));
+
+		sleepAtLeast(2500);
+		try {
+			myQuestionnaireResponseDao.validate(qr, null, null, null, null, null, null);
+			fail();
+		} catch (PreconditionFailedException e) {
+			ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome()));
+			// good
+		}
+
 	}
 
 	@Test
 	public void testValidateStructureDefinition() throws Exception {
 		String input = IOUtils.toString(getClass().getResourceAsStream("/sd-david-dhtest7.json"), StandardCharsets.UTF_8);
 		StructureDefinition sd = myFhirCtx.newJsonParser().parseResource(StructureDefinition.class, input);
-		
-		
+
+
 		ourLog.info("Starting validation");
 		try {
 			myStructureDefinitionDao.validate(sd, null, null, null, ValidationModeEnum.UPDATE, null, mySrd);
@@ -53,7 +104,7 @@ public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
 			ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome()));
 		}
 		ourLog.info("Done validation");
-		
+
 		StopWatch sw = new StopWatch();
 		ourLog.info("Starting validation");
 		try {
@@ -64,13 +115,13 @@ public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
 		ourLog.info("Done validation in {}ms", sw.getMillis());
 
 	}
-	
+
 	@Test
 	public void testValidateDocument() throws Exception {
 		String input = IOUtils.toString(getClass().getResourceAsStream("/document-bundle-dstu3.json"), StandardCharsets.UTF_8);
 		Bundle document = myFhirCtx.newJsonParser().parseResource(Bundle.class, input);
-		
-		
+
+
 		ourLog.info("Starting validation");
 		try {
 			MethodOutcome outcome = myBundleDao.validate(document, null, null, null, ValidationModeEnum.CREATE, null, mySrd);
@@ -78,7 +129,7 @@ public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
 			ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome()));
 		}
 		ourLog.info("Done validation");
-		
+
 //		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(outcome.getOperationOutcome()));
 	}
 
@@ -137,24 +188,24 @@ public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
 		MethodOutcome outcome = null;
 		ValidationModeEnum mode = ValidationModeEnum.CREATE;
 		switch (enc) {
-		case JSON:
-			encoded = myFhirCtx.newJsonParser().encodeResourceToString(input);
-			try {
-				myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
-				fail();
-			} catch (PreconditionFailedException e) {
-				return (OperationOutcome) e.getOperationOutcome();
-			}
-			break;
-		case XML:
-			encoded = myFhirCtx.newXmlParser().encodeResourceToString(input);
-			try {
-				myObservationDao.validate(input, null, encoded, EncodingEnum.XML, mode, null, mySrd);
-				fail();
-			} catch (PreconditionFailedException e) {
-				return (OperationOutcome) e.getOperationOutcome();
-			}
-			break;
+			case JSON:
+				encoded = myFhirCtx.newJsonParser().encodeResourceToString(input);
+				try {
+					myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
+					fail();
+				} catch (PreconditionFailedException e) {
+					return (OperationOutcome) e.getOperationOutcome();
+				}
+				break;
+			case XML:
+				encoded = myFhirCtx.newXmlParser().encodeResourceToString(input);
+				try {
+					myObservationDao.validate(input, null, encoded, EncodingEnum.XML, mode, null, mySrd);
+					fail();
+				} catch (PreconditionFailedException e) {
+					return (OperationOutcome) e.getOperationOutcome();
+				}
+				break;
 		}
 
 		throw new IllegalStateException(); // shouldn't get here
@@ -295,18 +346,18 @@ public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
 		}
 		return retVal;
 	}
-	
+
 	/**
 	 * Format has changed, this is out of date
 	 */
 	@Test
 	@Ignore
 	public void testValidateNewQuestionnaireFormat() throws Exception {
-		String input =IOUtils.toString(FhirResourceDaoDstu3ValidateTest.class.getResourceAsStream("/questionnaire_dstu3.xml"));
+		String input = IOUtils.toString(FhirResourceDaoDstu3ValidateTest.class.getResourceAsStream("/questionnaire_dstu3.xml"));
 		try {
-		MethodOutcome results = myQuestionnaireDao.validate(null, null, input, EncodingEnum.XML, ValidationModeEnum.UPDATE, null, mySrd);
-		OperationOutcome oo = (OperationOutcome) results.getOperationOutcome();
-		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(oo));
+			MethodOutcome results = myQuestionnaireDao.validate(null, null, input, EncodingEnum.XML, ValidationModeEnum.UPDATE, null, mySrd);
+			OperationOutcome oo = (OperationOutcome) results.getOperationOutcome();
+			ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(oo));
 		} catch (PreconditionFailedException e) {
 			// this is a failure of the test
 			ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome()));
@@ -314,4 +365,9 @@ public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
 		}
 	}
 
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirSystemDaoDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirSystemDaoDstu3Test.java
index a5897f40de2..effc8d746bd 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirSystemDaoDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/FhirSystemDaoDstu3Test.java
@@ -16,6 +16,7 @@ import ca.uhn.fhir.rest.param.TokenParam;
 import ca.uhn.fhir.rest.server.exceptions.*;
 import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor.ActionRequestDetails;
 import ca.uhn.fhir.util.TestUtil;
+import com.google.common.base.Charsets;
 import org.apache.commons.io.IOUtils;
 import org.hl7.fhir.dstu3.model.*;
 import org.hl7.fhir.dstu3.model.Bundle.*;
@@ -152,36 +153,6 @@ public class FhirSystemDaoDstu3Test extends BaseJpaDstu3SystemTest {
 		return input;
 	}
 
-	@Test
-	public void testTransactionUpdateTwoResourcesWithSameId() {
-		Bundle request = new Bundle();
-
-		Patient p = new Patient();
-		p.addIdentifier().setSystem("urn:system").setValue("DDD");
-		p.setId("Patient/ABC");
-		request.addEntry()
-			.setResource(p)
-			.getRequest()
-			.setMethod(HTTPVerb.PUT)
-			.setUrl("Patient/ABC");
-
-		p = new Patient();
-		p.addIdentifier().setSystem("urn:system").setValue("DDD");
-		p.setId("Patient/ABC");
-		request.addEntry()
-			.setResource(p)
-			.getRequest()
-			.setMethod(HTTPVerb.PUT)
-			.setUrl("Patient/ABC");
-
-		try {
-			mySystemDao.transaction(mySrd, request);
-			fail();
-		} catch (InvalidRequestException e) {
-			assertThat(e.getMessage(), containsString("Transaction bundle contains multiple resources with ID: Patient/ABC"));
-		}
-	}
-
 	@SuppressWarnings("unchecked")
 	private <T extends org.hl7.fhir.dstu3.model.Resource> T find(Bundle theBundle, Class<T> theType, int theIndex) {
 		int count = 0;
@@ -470,6 +441,17 @@ public class FhirSystemDaoDstu3Test extends BaseJpaDstu3SystemTest {
 		}
 	}
 
+	/**
+	 * See #1044
+	 */
+	@Test
+	public void testStructureDefinitionInBundle() throws IOException {
+		String input = IOUtils.toString(FhirSystemDaoDstu3Test.class.getResourceAsStream("/bug1044-bundle.xml"), Charsets.UTF_8);
+		Bundle inputBundle = myFhirCtx.newXmlParser().parseResource(Bundle.class, input);
+
+		mySystemDao.transaction(mySrd, inputBundle);
+	}
+
 	@Test
 	public void testSystemMetaOperation() {
 
@@ -1427,26 +1409,6 @@ public class FhirSystemDaoDstu3Test extends BaseJpaDstu3SystemTest {
 		}
 	}
 
-	@Test
-	public void testTransactionDoesNotAllowDanglingTemporaryIds() throws Exception {
-		String input = IOUtils.toString(getClass().getResourceAsStream("/cdr-bundle.json"), StandardCharsets.UTF_8);
-		Bundle bundle = myFhirCtx.newJsonParser().parseResource(Bundle.class, input);
-
-		BundleEntryComponent entry = bundle.addEntry();
-		Patient p = new Patient();
-		p.getManagingOrganization().setReference("urn:uuid:30ce60cf-f7cb-4196-961f-cadafa8b7ff5");
-		entry.setResource(p);
-		entry.getRequest().setMethod(HTTPVerb.POST);
-		entry.getRequest().setUrl("Patient");
-
-		try {
-			mySystemDao.transaction(mySrd, bundle);
-			fail();
-		} catch (InvalidRequestException e) {
-			assertEquals("Unable to satisfy placeholder ID: urn:uuid:30ce60cf-f7cb-4196-961f-cadafa8b7ff5", e.getMessage());
-		}
-	}
-
 	@Test
 	public void testTransactionDoesNotLeavePlaceholderIds() throws Exception {
 		String input;
@@ -2256,6 +2218,36 @@ public class FhirSystemDaoDstu3Test extends BaseJpaDstu3SystemTest {
 
 	}
 
+	@Test
+	public void testTransactionUpdateTwoResourcesWithSameId() {
+		Bundle request = new Bundle();
+
+		Patient p = new Patient();
+		p.addIdentifier().setSystem("urn:system").setValue("DDD");
+		p.setId("Patient/ABC");
+		request.addEntry()
+			.setResource(p)
+			.getRequest()
+			.setMethod(HTTPVerb.PUT)
+			.setUrl("Patient/ABC");
+
+		p = new Patient();
+		p.addIdentifier().setSystem("urn:system").setValue("DDD");
+		p.setId("Patient/ABC");
+		request.addEntry()
+			.setResource(p)
+			.getRequest()
+			.setMethod(HTTPVerb.PUT)
+			.setUrl("Patient/ABC");
+
+		try {
+			mySystemDao.transaction(mySrd, request);
+			fail();
+		} catch (InvalidRequestException e) {
+			assertThat(e.getMessage(), containsString("Transaction bundle contains multiple resources with ID: Patient/ABC"));
+		}
+	}
+
 	@Test
 	public void testTransactionWIthInvalidPlaceholder() throws Exception {
 		Bundle res = new Bundle();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/SearchParamExtractorDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/SearchParamExtractorDstu3Test.java
index 8ebb3497ea4..068acbd9de4 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/SearchParamExtractorDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/dstu3/SearchParamExtractorDstu3Test.java
@@ -7,6 +7,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.jpa.search.JpaRuntimeSearchParam;
 import org.hl7.fhir.dstu3.hapi.validation.DefaultProfileValidationSupport;
 import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
@@ -81,7 +82,8 @@ public class SearchParamExtractorDstu3Test {
 			}
 		};
 
-		SearchParamExtractorDstu3 extractor = new SearchParamExtractorDstu3(ourCtx, ourValidationSupport, searchParamRegistry);
+		SearchParamExtractorDstu3 extractor = new SearchParamExtractorDstu3(new DaoConfig(), ourCtx, ourValidationSupport, searchParamRegistry);
+		extractor.start();
 		Set<BaseResourceIndexedSearchParam> tokens = extractor.extractSearchParamTokens(new ResourceTable(), obs);
 		assertEquals(1, tokens.size());
 		ResourceIndexedSearchParamToken token = (ResourceIndexedSearchParamToken) tokens.iterator().next();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/BaseJpaR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/BaseJpaR4Test.java
index 5c48b74c639..be4e5aabc1e 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/BaseJpaR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/BaseJpaR4Test.java
@@ -66,8 +66,6 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 	@Autowired
 	protected IResourceLinkDao myResourceLinkDao;
 	@Autowired
-	protected ISearchParamDao mySearchParamDao;
-	@Autowired
 	protected ISearchParamPresentDao mySearchParamPresentDao;
 	@Autowired
 	protected IResourceIndexedSearchParamStringDao myResourceIndexedSearchParamStringDao;
@@ -94,6 +92,9 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 	@Qualifier("myBundleDaoR4")
 	protected IFhirResourceDao<Bundle> myBundleDao;
 	@Autowired
+	@Qualifier("myCommunicationDaoR4")
+	protected IFhirResourceDao<Communication> myCommunicationDao;
+	@Autowired
 	@Qualifier("myCarePlanDaoR4")
 	protected IFhirResourceDao<CarePlan> myCarePlanDao;
 	@Autowired
@@ -106,6 +107,8 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 	@Qualifier("myConceptMapDaoR4")
 	protected IFhirResourceDaoConceptMap<ConceptMap> myConceptMapDao;
 	@Autowired
+	protected ITermConceptDao myTermConceptDao;
+	@Autowired
 	@Qualifier("myConditionDaoR4")
 	protected IFhirResourceDao<Condition> myConditionDao;
 	@Autowired
@@ -170,6 +173,12 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 	@Qualifier("myPatientDaoR4")
 	protected IFhirResourceDaoPatient<Patient> myPatientDao;
 	@Autowired
+	protected IResourceTableDao myResourceTableDao;
+	@Autowired
+	protected IResourceHistoryTableDao myResourceHistoryTableDao;
+	@Autowired
+	protected IForcedIdDao myForcedIdDao;
+	@Autowired
 	@Qualifier("myCoverageDaoR4")
 	protected IFhirResourceDao<Coverage> myCoverageDao;
 	@Autowired
@@ -188,10 +197,6 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 	@Qualifier("myResourceProvidersR4")
 	protected Object myResourceProviders;
 	@Autowired
-	protected IResourceTableDao myResourceTableDao;
-	@Autowired
-	protected IResourceHistoryTableDao myResourceHistoryTableDao;
-	@Autowired
 	protected IResourceTagDao myResourceTagDao;
 	@Autowired
 	protected ISearchCoordinatorSvc mySearchCoordinatorSvc;
@@ -257,6 +262,7 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 		myDaoConfig.setExpireSearchResultsAfterMillis(new DaoConfig().getExpireSearchResultsAfterMillis());
 		myDaoConfig.setReuseCachedSearchResultsForMillis(new DaoConfig().getReuseCachedSearchResultsForMillis());
 		myDaoConfig.setSuppressUpdatesWithNoChange(new DaoConfig().isSuppressUpdatesWithNoChange());
+		myDaoConfig.setAllowContainsSearches(new DaoConfig().isAllowContainsSearches());
 	}
 
 	@After
@@ -283,7 +289,7 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 
 	@Before
 	public void beforeFlushFT() {
-		runInTransaction(()->{
+		runInTransaction(() -> {
 			FullTextEntityManager ftem = Search.getFullTextEntityManager(myEntityManager);
 			ftem.purgeAll(ResourceTable.class);
 			ftem.purgeAll(ResourceIndexedSearchParamString.class);
@@ -314,6 +320,11 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 		return myFhirCtx;
 	}
 
+	@Override
+	protected PlatformTransactionManager getTxManager() {
+		return myTxManager;
+	}
+
 	protected <T extends IBaseResource> T loadResourceFromClasspath(Class<T> type, String resourceName) throws IOException {
 		InputStream stream = FhirResourceDaoDstu2SearchNoFtTest.class.getResourceAsStream(resourceName);
 		if (stream == null) {
@@ -324,11 +335,6 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 		return newJsonParser.parseResource(type, string);
 	}
 
-	@Override
-	protected PlatformTransactionManager getTxManager() {
-		return myTxManager;
-	}
-
 	@AfterClass
 	public static void afterClassClearContextBaseJpaR4Test() throws Exception {
 		ourValueSetDao.purgeCaches();
@@ -389,6 +395,12 @@ public abstract class BaseJpaR4Test extends BaseJpaTest {
 		target.setDisplay("Target Code 45678");
 		target.setEquivalence(ConceptMapEquivalence.WIDER);
 
+		// Add a duplicate
+		target = element.addTarget();
+		target.setCode("45678");
+		target.setDisplay("Target Code 45678");
+		target.setEquivalence(ConceptMapEquivalence.WIDER);
+
 		group = conceptMap.addGroup();
 		group.setSource(CS_URL);
 		group.setSourceVersion("Version 3");
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ConceptMapTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ConceptMapTest.java
index 3a0cd357688..dbbdd237dbd 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ConceptMapTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4ConceptMapTest.java
@@ -26,17 +26,33 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 
 	private IIdType myConceptMapId;
 
-	@AfterClass
-	public static void afterClassClearContext() {
-		TestUtil.clearAllStaticFieldsForUnitTest();
-	}
-
 	@Before
 	@Transactional
 	public void before02() {
 		myConceptMapId = myConceptMapDao.create(createConceptMap(), mySrd).getId().toUnqualifiedVersionless();
 	}
 
+	@Test
+	public void testDeleteConceptMap() {
+		myConceptMapDao.delete(myConceptMapId);
+
+		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
+				TranslationRequest translationRequest = new TranslationRequest();
+				translationRequest.getCodeableConcept().addCoding()
+					.setSystem(CS_URL)
+					.setCode("12345");
+				translationRequest.setTargetSystem(new UriType(CS_URL_3));
+
+				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
+
+				assertFalse(translationResult.getResult().booleanValue());
+			}
+		});
+
+	}
+
 	@Test
 	public void testTranslateByCodeSystemsAndSourceCodeOneToMany() {
 		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
@@ -205,6 +221,98 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 		});
 	}
 
+	@Test
+	public void testTranslateUsingPredicatesWithSourceAndTargetSystem2() {
+		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
+
+		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
+
+		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
+				/*
+				 * Provided:
+				 *   source code
+				 *   source code system
+				 *   target code system #2
+				 */
+				TranslationRequest translationRequest = new TranslationRequest();
+				translationRequest.getCodeableConcept().addCoding()
+					.setSystem(CS_URL)
+					.setCode("12345");
+				translationRequest.setTargetSystem(new UriType(CS_URL_2));
+
+				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
+
+				assertTrue(translationResult.getResult().booleanValue());
+				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
+
+				assertEquals(1, translationResult.getMatches().size());
+
+				TranslationMatch translationMatch = translationResult.getMatches().get(0);
+				assertEquals(ConceptMapEquivalence.EQUAL.toCode(), translationMatch.getEquivalence().getCode());
+				Coding concept = translationMatch.getConcept();
+				assertEquals("34567", concept.getCode());
+				assertEquals("Target Code 34567", concept.getDisplay());
+				assertEquals(CS_URL_2, concept.getSystem());
+				assertEquals("Version 2", concept.getVersion());
+				assertFalse(concept.getUserSelected());
+				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
+			}
+		});
+	}
+
+	@Test
+	public void testTranslateUsingPredicatesWithSourceAndTargetSystem3() {
+		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
+
+		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
+
+		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
+				/*
+				 * Provided:
+				 *   source code
+				 *   source code system
+				 *   target code system #3
+				 */
+				TranslationRequest translationRequest = new TranslationRequest();
+				translationRequest.getCodeableConcept().addCoding()
+					.setSystem(CS_URL)
+					.setCode("12345");
+				translationRequest.setTargetSystem(new UriType(CS_URL_3));
+
+				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
+
+				assertTrue(translationResult.getResult().booleanValue());
+				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
+
+				assertEquals(2, translationResult.getMatches().size());
+
+				TranslationMatch translationMatch = translationResult.getMatches().get(0);
+				assertEquals(ConceptMapEquivalence.EQUAL.toCode(), translationMatch.getEquivalence().getCode());
+				Coding concept = translationMatch.getConcept();
+				assertEquals("56789", concept.getCode());
+				assertEquals("Target Code 56789", concept.getDisplay());
+				assertEquals(CS_URL_3, concept.getSystem());
+				assertEquals("Version 4", concept.getVersion());
+				assertFalse(concept.getUserSelected());
+				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
+
+				translationMatch = translationResult.getMatches().get(1);
+				assertEquals(ConceptMapEquivalence.WIDER.toCode(), translationMatch.getEquivalence().getCode());
+				concept = translationMatch.getConcept();
+				assertEquals("67890", concept.getCode());
+				assertEquals("Target Code 67890", concept.getDisplay());
+				assertEquals(CS_URL_3, concept.getSystem());
+				assertEquals("Version 4", concept.getVersion());
+				assertFalse(concept.getUserSelected());
+				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
+			}
+		});
+	}
+
 	@Test
 	public void testTranslateUsingPredicatesWithSourceSystem() {
 		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
@@ -356,98 +464,6 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 		});
 	}
 
-	@Test
-	public void testTranslateUsingPredicatesWithSourceAndTargetSystem2() {
-		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
-
-		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
-
-		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
-			@Override
-			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
-				/*
-				 * Provided:
-				 *   source code
-				 *   source code system
-				 *   target code system #2
-				 */
-				TranslationRequest translationRequest = new TranslationRequest();
-				translationRequest.getCodeableConcept().addCoding()
-					.setSystem(CS_URL)
-					.setCode("12345");
-				translationRequest.setTargetSystem(new UriType(CS_URL_2));
-
-				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
-
-				assertTrue(translationResult.getResult().booleanValue());
-				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
-
-				assertEquals(1, translationResult.getMatches().size());
-
-				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertEquals(ConceptMapEquivalence.EQUAL.toCode(), translationMatch.getEquivalence().getCode());
-				Coding concept = translationMatch.getConcept();
-				assertEquals("34567", concept.getCode());
-				assertEquals("Target Code 34567", concept.getDisplay());
-				assertEquals(CS_URL_2, concept.getSystem());
-				assertEquals("Version 2", concept.getVersion());
-				assertFalse(concept.getUserSelected());
-				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
-			}
-		});
-	}
-
-	@Test
-	public void testTranslateUsingPredicatesWithSourceAndTargetSystem3() {
-		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
-
-		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
-
-		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
-			@Override
-			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
-				/*
-				 * Provided:
-				 *   source code
-				 *   source code system
-				 *   target code system #3
-				 */
-				TranslationRequest translationRequest = new TranslationRequest();
-				translationRequest.getCodeableConcept().addCoding()
-					.setSystem(CS_URL)
-					.setCode("12345");
-				translationRequest.setTargetSystem(new UriType(CS_URL_3));
-
-				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
-
-				assertTrue(translationResult.getResult().booleanValue());
-				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
-
-				assertEquals(2, translationResult.getMatches().size());
-
-				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertEquals(ConceptMapEquivalence.EQUAL.toCode(), translationMatch.getEquivalence().getCode());
-				Coding concept = translationMatch.getConcept();
-				assertEquals("56789", concept.getCode());
-				assertEquals("Target Code 56789", concept.getDisplay());
-				assertEquals(CS_URL_3, concept.getSystem());
-				assertEquals("Version 4", concept.getVersion());
-				assertFalse(concept.getUserSelected());
-				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
-
-				translationMatch = translationResult.getMatches().get(1);
-				assertEquals(ConceptMapEquivalence.WIDER.toCode(), translationMatch.getEquivalence().getCode());
-				concept = translationMatch.getConcept();
-				assertEquals("67890", concept.getCode());
-				assertEquals("Target Code 67890", concept.getDisplay());
-				assertEquals(CS_URL_3, concept.getSystem());
-				assertEquals("Version 4", concept.getVersion());
-				assertFalse(concept.getUserSelected());
-				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
-			}
-		});
-	}
-
 	@Test
 	public void testTranslateUsingPredicatesWithSourceValueSet() {
 		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
@@ -597,7 +613,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(1, translationResult.getMatches().size());
 
 				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("narrower", translationMatch.getEquivalence().getCode());
 				Coding concept = translationMatch.getConcept();
 				assertEquals("78901", concept.getCode());
 				assertEquals("Source Code 78901", concept.getDisplay());
@@ -609,6 +625,49 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 		});
 	}
 
+	@Test
+	public void testTranslateWithReverseHavingEquivalence() {
+		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
+
+		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
+
+		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
+				/*
+				 * Provided:
+				 *   source code
+				 *   source code system
+				 *   target code system
+				 *   reverse = true
+				 */
+				TranslationRequest translationRequest = new TranslationRequest();
+				translationRequest.getCodeableConcept().addCoding()
+					.setSystem(CS_URL_3)
+					.setCode("67890");
+				translationRequest.setTargetSystem(new UriType(CS_URL));
+				translationRequest.setReverse(true);
+
+				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
+
+				assertTrue(translationResult.getResult().booleanValue());
+				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
+
+				assertEquals(1, translationResult.getMatches().size());
+
+				TranslationMatch translationMatch = translationResult.getMatches().get(0);
+				Coding concept = translationMatch.getConcept();
+				assertEquals("12345", concept.getCode());
+				assertEquals("Source Code 12345", concept.getDisplay());
+				assertEquals(CS_URL, concept.getSystem());
+				assertEquals("Version 3", concept.getVersion());
+				assertFalse(concept.getUserSelected());
+				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
+				assertEquals("wider", translationMatch.getEquivalence().getCode());
+			}
+		});
+	}
+
 	@Test
 	public void testTranslateWithReverseByCodeSystemsAndSourceCodeUnmapped() {
 		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
@@ -664,7 +723,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(2, translationResult.getMatches().size());
 
 				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("equal", translationMatch.getEquivalence().getCode());
 				Coding concept = translationMatch.getConcept();
 				assertEquals("12345", concept.getCode());
 				assertEquals("Source Code 12345", concept.getDisplay());
@@ -674,111 +733,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
 
 				translationMatch = translationResult.getMatches().get(1);
-				assertNull(translationMatch.getEquivalence());
-				concept = translationMatch.getConcept();
-				assertEquals("78901", concept.getCode());
-				assertEquals("Source Code 78901", concept.getDisplay());
-				assertEquals(CS_URL_4, concept.getSystem());
-				assertEquals("Version 5", concept.getVersion());
-				assertFalse(concept.getUserSelected());
-				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
-			}
-		});
-	}
-
-	@Test
-	public void testTranslateWithReverseUsingPredicatesWithSourceSystem() {
-		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
-
-		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
-
-		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
-			@Override
-			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
-				/*
-				 * Provided:
-				 *   source code
-				 *   source code system
-				 *   reverse = true
-				 */
-				TranslationRequest translationRequest = new TranslationRequest();
-				translationRequest.getCodeableConcept().addCoding()
-					.setSystem(CS_URL_2)
-					.setCode("34567");
-				translationRequest.setReverse(true);
-
-				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
-
-				assertTrue(translationResult.getResult().booleanValue());
-				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
-
-				assertEquals(2, translationResult.getMatches().size());
-
-				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertNull(translationMatch.getEquivalence());
-				Coding concept = translationMatch.getConcept();
-				assertEquals("12345", concept.getCode());
-				assertEquals("Source Code 12345", concept.getDisplay());
-				assertEquals(CS_URL, concept.getSystem());
-				assertEquals("Version 1", concept.getVersion());
-				assertFalse(concept.getUserSelected());
-				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
-
-				translationMatch = translationResult.getMatches().get(1);
-				assertNull(translationMatch.getEquivalence());
-				concept = translationMatch.getConcept();
-				assertEquals("78901", concept.getCode());
-				assertEquals("Source Code 78901", concept.getDisplay());
-				assertEquals(CS_URL_4, concept.getSystem());
-				assertEquals("Version 5", concept.getVersion());
-				assertFalse(concept.getUserSelected());
-				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
-			}
-		});
-	}
-
-	@Test
-	public void testTranslateWithReverseUsingPredicatesWithSourceSystemAndVersion() {
-		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
-
-		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
-
-		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
-			@Override
-			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
-				/*
-				 * Provided:
-				 *   source code
-				 *   source code system
-				 *   source code system version
-				 *   reverse = true
-				 */
-				TranslationRequest translationRequest = new TranslationRequest();
-				translationRequest.getCodeableConcept().addCoding()
-					.setSystem(CS_URL_2)
-					.setCode("34567")
-					.setVersion("Version 2");
-				translationRequest.setReverse(true);
-
-				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
-
-				assertTrue(translationResult.getResult().booleanValue());
-				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
-
-				assertEquals(2, translationResult.getMatches().size());
-
-				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertNull(translationMatch.getEquivalence());
-				Coding concept = translationMatch.getConcept();
-				assertEquals("12345", concept.getCode());
-				assertEquals("Source Code 12345", concept.getDisplay());
-				assertEquals(CS_URL, concept.getSystem());
-				assertEquals("Version 1", concept.getVersion());
-				assertFalse(concept.getUserSelected());
-				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
-
-				translationMatch = translationResult.getMatches().get(1);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("narrower", translationMatch.getEquivalence().getCode());
 				concept = translationMatch.getConcept();
 				assertEquals("78901", concept.getCode());
 				assertEquals("Source Code 78901", concept.getDisplay());
@@ -821,7 +776,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(1, translationResult.getMatches().size());
 
 				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("equal", translationMatch.getEquivalence().getCode());
 				Coding concept = translationMatch.getConcept();
 				assertEquals("12345", concept.getCode());
 				assertEquals("Source Code 12345", concept.getDisplay());
@@ -864,7 +819,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(1, translationResult.getMatches().size());
 
 				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("narrower", translationMatch.getEquivalence().getCode());
 				Coding concept = translationMatch.getConcept();
 				assertEquals("78901", concept.getCode());
 				assertEquals("Source Code 78901", concept.getDisplay());
@@ -876,6 +831,110 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 		});
 	}
 
+	@Test
+	public void testTranslateWithReverseUsingPredicatesWithSourceSystem() {
+		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
+
+		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
+
+		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
+				/*
+				 * Provided:
+				 *   source code
+				 *   source code system
+				 *   reverse = true
+				 */
+				TranslationRequest translationRequest = new TranslationRequest();
+				translationRequest.getCodeableConcept().addCoding()
+					.setSystem(CS_URL_2)
+					.setCode("34567");
+				translationRequest.setReverse(true);
+
+				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
+
+				assertTrue(translationResult.getResult().booleanValue());
+				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
+
+				assertEquals(2, translationResult.getMatches().size());
+
+				TranslationMatch translationMatch = translationResult.getMatches().get(0);
+				assertEquals("equal", translationMatch.getEquivalence().getCode());
+				Coding concept = translationMatch.getConcept();
+				assertEquals("12345", concept.getCode());
+				assertEquals("Source Code 12345", concept.getDisplay());
+				assertEquals(CS_URL, concept.getSystem());
+				assertEquals("Version 1", concept.getVersion());
+				assertFalse(concept.getUserSelected());
+				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
+
+				translationMatch = translationResult.getMatches().get(1);
+				assertEquals("narrower", translationMatch.getEquivalence().getCode());
+				concept = translationMatch.getConcept();
+				assertEquals("78901", concept.getCode());
+				assertEquals("Source Code 78901", concept.getDisplay());
+				assertEquals(CS_URL_4, concept.getSystem());
+				assertEquals("Version 5", concept.getVersion());
+				assertFalse(concept.getUserSelected());
+				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
+			}
+		});
+	}
+
+	@Test
+	public void testTranslateWithReverseUsingPredicatesWithSourceSystemAndVersion() {
+		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
+
+		ourLog.info("ConceptMap:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
+
+		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus theStatus) {
+				/*
+				 * Provided:
+				 *   source code
+				 *   source code system
+				 *   source code system version
+				 *   reverse = true
+				 */
+				TranslationRequest translationRequest = new TranslationRequest();
+				translationRequest.getCodeableConcept().addCoding()
+					.setSystem(CS_URL_2)
+					.setCode("34567")
+					.setVersion("Version 2");
+				translationRequest.setReverse(true);
+
+				TranslationResult translationResult = myConceptMapDao.translate(translationRequest, null);
+
+				assertTrue(translationResult.getResult().booleanValue());
+				assertEquals("Matches found!", translationResult.getMessage().getValueAsString());
+
+				assertEquals(2, translationResult.getMatches().size());
+
+				TranslationMatch translationMatch = translationResult.getMatches().get(0);
+				assertEquals("equal", translationMatch.getEquivalence().getCode());
+				Coding concept = translationMatch.getConcept();
+				assertEquals("12345", concept.getCode());
+				assertEquals("Source Code 12345", concept.getDisplay());
+				assertEquals(CS_URL, concept.getSystem());
+				assertEquals("Version 1", concept.getVersion());
+				assertFalse(concept.getUserSelected());
+				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
+
+				translationMatch = translationResult.getMatches().get(1);
+				assertEquals("narrower", translationMatch.getEquivalence().getCode());
+				concept = translationMatch.getConcept();
+				assertEquals("78901", concept.getCode());
+				assertEquals("Source Code 78901", concept.getDisplay());
+				assertEquals(CS_URL_4, concept.getSystem());
+				assertEquals("Version 5", concept.getVersion());
+				assertFalse(concept.getUserSelected());
+				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
+			}
+		});
+	}
+
 	@Test
 	public void testTranslateWithReverseUsingPredicatesWithSourceValueSet() {
 		ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
@@ -905,7 +964,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(2, translationResult.getMatches().size());
 
 				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("equal", translationMatch.getEquivalence().getCode());
 				Coding concept = translationMatch.getConcept();
 				assertEquals("12345", concept.getCode());
 				assertEquals("Source Code 12345", concept.getDisplay());
@@ -915,7 +974,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
 
 				translationMatch = translationResult.getMatches().get(1);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("narrower", translationMatch.getEquivalence().getCode());
 				concept = translationMatch.getConcept();
 				assertEquals("78901", concept.getCode());
 				assertEquals("Source Code 78901", concept.getDisplay());
@@ -956,7 +1015,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(2, translationResult.getMatches().size());
 
 				TranslationMatch translationMatch = translationResult.getMatches().get(0);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("equal", translationMatch.getEquivalence().getCode());
 				Coding concept = translationMatch.getConcept();
 				assertEquals("12345", concept.getCode());
 				assertEquals("Source Code 12345", concept.getDisplay());
@@ -966,7 +1025,7 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 				assertEquals(CM_URL, translationMatch.getSource().getValueAsString());
 
 				translationMatch = translationResult.getMatches().get(1);
-				assertNull(translationMatch.getEquivalence());
+				assertEquals("narrower", translationMatch.getEquivalence().getCode());
 				concept = translationMatch.getConcept();
 				assertEquals("78901", concept.getCode());
 				assertEquals("Source Code 78901", concept.getDisplay());
@@ -977,4 +1036,9 @@ public class FhirResourceDaoR4ConceptMapTest extends BaseJpaR4Test {
 			}
 		});
 	}
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4QueryCountTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4QueryCountTest.java
new file mode 100644
index 00000000000..0d6aebf7375
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4QueryCountTest.java
@@ -0,0 +1,109 @@
+package ca.uhn.fhir.jpa.dao.r4;
+
+import ca.uhn.fhir.jpa.dao.DaoConfig;
+import ca.uhn.fhir.util.TestUtil;
+import net.ttddyy.dsproxy.QueryCountHolder;
+import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.r4.model.DateTimeType;
+import org.hl7.fhir.r4.model.Patient;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Test;
+import org.springframework.test.context.TestPropertySource;
+
+import static org.junit.Assert.*;
+
+@TestPropertySource(properties = {
+	"scheduling_disabled=true"
+})
+public class FhirResourceDaoR4QueryCountTest extends BaseJpaR4Test {
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoR4QueryCountTest.class);
+
+	@After
+	public void afterResetDao() {
+		myDaoConfig.setResourceMetaCountHardLimit(new DaoConfig().getResourceMetaCountHardLimit());
+		myDaoConfig.setIndexMissingFields(new DaoConfig().getIndexMissingFields());
+	}
+
+	@Test
+	public void testCreateClientAssignedId() {
+		myDaoConfig.setIndexMissingFields(DaoConfig.IndexEnabledEnum.DISABLED);
+
+		QueryCountHolder.clear();
+		ourLog.info("** Starting Update Non-Existing resource with client assigned ID");
+		Patient p = new Patient();
+		p.setId("A");
+		p.getPhotoFirstRep().setCreationElement(new DateTimeType("2011")); // non-indexed field
+		myPatientDao.update(p).getId().toUnqualifiedVersionless();
+
+		assertEquals(1, QueryCountHolder.getGrandTotal().getSelect());
+		assertEquals(4, QueryCountHolder.getGrandTotal().getInsert());
+		assertEquals(0, QueryCountHolder.getGrandTotal().getDelete());
+		// Because of the forced ID's bidirectional link HFJ_RESOURCE <-> HFJ_FORCED_ID
+		assertEquals(1, QueryCountHolder.getGrandTotal().getUpdate());
+		runInTransaction(() -> {
+			assertEquals(1, myResourceTableDao.count());
+			assertEquals(1, myResourceHistoryTableDao.count());
+			assertEquals(1, myForcedIdDao.count());
+			assertEquals(1, myResourceIndexedSearchParamTokenDao.count());
+		});
+
+		// Ok how about an update
+
+		QueryCountHolder.clear();
+		ourLog.info("** Starting Update Existing resource with client assigned ID");
+		p = new Patient();
+		p.setId("A");
+		p.getPhotoFirstRep().setCreationElement(new DateTimeType("2012")); // non-indexed field
+		myPatientDao.update(p).getId().toUnqualifiedVersionless();
+
+		assertEquals(5, QueryCountHolder.getGrandTotal().getSelect());
+		assertEquals(1, QueryCountHolder.getGrandTotal().getInsert());
+		assertEquals(0, QueryCountHolder.getGrandTotal().getDelete());
+		assertEquals(1, QueryCountHolder.getGrandTotal().getUpdate());
+		runInTransaction(() -> {
+			assertEquals(1, myResourceTableDao.count());
+			assertEquals(2, myResourceHistoryTableDao.count());
+			assertEquals(1, myForcedIdDao.count());
+			assertEquals(1, myResourceIndexedSearchParamTokenDao.count());
+		});
+
+	}
+
+
+		@Test
+	public void testOneRowPerUpdate() {
+		myDaoConfig.setIndexMissingFields(DaoConfig.IndexEnabledEnum.DISABLED);
+
+		QueryCountHolder.clear();
+		Patient p = new Patient();
+		p.getPhotoFirstRep().setCreationElement(new DateTimeType("2011")); // non-indexed field
+		IIdType id = myPatientDao.create(p).getId().toUnqualifiedVersionless();
+
+		assertEquals(3, QueryCountHolder.getGrandTotal().getInsert());
+		runInTransaction(() -> {
+			assertEquals(1, myResourceTableDao.count());
+			assertEquals(1, myResourceHistoryTableDao.count());
+		});
+
+		QueryCountHolder.clear();
+		p = new Patient();
+		p.setId(id);
+		p.getPhotoFirstRep().setCreationElement(new DateTimeType("2012")); // non-indexed field
+		myPatientDao.update(p).getId().toUnqualifiedVersionless();
+
+		assertEquals(1, QueryCountHolder.getGrandTotal().getInsert());
+		runInTransaction(() -> {
+			assertEquals(1, myResourceTableDao.count());
+			assertEquals(2, myResourceHistoryTableDao.count());
+		});
+
+	}
+
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchCustomSearchParamTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchCustomSearchParamTest.java
index 12cf0b369de..d35b52fa49f 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchCustomSearchParamTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchCustomSearchParamTest.java
@@ -6,6 +6,7 @@ import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamToken;
 import ca.uhn.fhir.model.api.Include;
 import ca.uhn.fhir.rest.api.server.IBundleProvider;
 import ca.uhn.fhir.rest.param.*;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
 import ca.uhn.fhir.util.TestUtil;
@@ -13,6 +14,7 @@ import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.r4.model.*;
 import org.hl7.fhir.r4.model.Appointment.AppointmentStatus;
 import org.hl7.fhir.r4.model.Enumerations.AdministrativeGender;
+import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
@@ -30,6 +32,11 @@ import static org.junit.Assert.*;
 public class FhirResourceDaoR4SearchCustomSearchParamTest extends BaseJpaR4Test {
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoR4SearchCustomSearchParamTest.class);
 
+	@After
+	public void after() {
+		myDaoConfig.setValidateSearchParameterExpressionsOnSave(new DaoConfig().isValidateSearchParameterExpressionsOnSave());
+	}
+
 	@Before
 	public void beforeDisableResultReuse() {
 		myDaoConfig.setReuseCachedSearchResultsForMillis(null);
@@ -71,7 +78,6 @@ public class FhirResourceDaoR4SearchCustomSearchParamTest extends BaseJpaR4Test
 		}
 	}
 
-
 	@Test
 	public void testCreateInvalidParamNoPath() {
 		SearchParameter fooSp = new SearchParameter();
@@ -175,48 +181,6 @@ public class FhirResourceDaoR4SearchCustomSearchParamTest extends BaseJpaR4Test
 		assertThat(ids, contains(pid.getValue()));
 	}
 
-	@Test
-	public void testSearchParameterDescendsIntoContainedResource() {
-		SearchParameter sp = new SearchParameter();
-		sp.addBase("Observation");
-		sp.setCode("specimencollectedtime");
-		sp.setType(Enumerations.SearchParamType.DATE);
-		sp.setTitle("Observation Specimen Collected Time");
-		sp.setExpression("Observation.specimen.resolve().receivedTime");
-		sp.setXpathUsage(org.hl7.fhir.r4.model.SearchParameter.XPathUsageType.NORMAL);
-		sp.setStatus(org.hl7.fhir.r4.model.Enumerations.PublicationStatus.ACTIVE);
-		mySearchParameterDao.create(sp);
-
-		mySearchParamRegsitry.forceRefresh();
-
-		Specimen specimen = new Specimen();
-		specimen.setId("#FOO");
-		specimen.setReceivedTimeElement(new DateTimeType("2011-01-01"));
-		Observation o = new Observation();
-		o.setId("O1");
-		o.getContained().add(specimen);
-		o.setStatus(Observation.ObservationStatus.FINAL);
-		o.setSpecimen(new Reference("#FOO"));
-		myObservationDao.update(o);
-
-		specimen = new Specimen();
-		specimen.setId("#FOO");
-		specimen.setReceivedTimeElement(new DateTimeType("2011-01-03"));
-		o = new Observation();
-		o.setId("O2");
-		o.getContained().add(specimen);
-		o.setStatus(Observation.ObservationStatus.FINAL);
-		o.setSpecimen(new Reference("#FOO"));
-		myObservationDao.update(o);
-
-		SearchParameterMap params = new SearchParameterMap();
-		params.add("specimencollectedtime", new DateParam("2011-01-01"));
-		IBundleProvider outcome = myObservationDao.search(params);
-		List<String> ids = toUnqualifiedVersionlessIdValues(outcome);
-		ourLog.info("IDS: " + ids);
-		assertThat(ids, contains("Observation/O1"));
-	}
-
 	@Test
 	public void testExtensionWithNoValueIndexesWithoutFailure() {
 		SearchParameter eyeColourSp = new SearchParameter();
@@ -279,6 +243,30 @@ public class FhirResourceDaoR4SearchCustomSearchParamTest extends BaseJpaR4Test
 
 	}
 
+	@Test
+	public void testIndexFailsIfInvalidSearchParameterExists() {
+		myDaoConfig.setValidateSearchParameterExpressionsOnSave(false);
+
+		SearchParameter threadIdSp = new SearchParameter();
+		threadIdSp.addBase("Communication");
+		threadIdSp.setCode("has-attachments");
+		threadIdSp.setType(Enumerations.SearchParamType.REFERENCE);
+		threadIdSp.setExpression("Communication.payload[1].contentAttachment is not null");
+		threadIdSp.setXpathUsage(SearchParameter.XPathUsageType.NORMAL);
+		threadIdSp.setStatus(Enumerations.PublicationStatus.ACTIVE);
+		mySearchParameterDao.create(threadIdSp, mySrd);
+		mySearchParamRegsitry.forceRefresh();
+
+		Communication com = new Communication();
+		com.setStatus(Communication.CommunicationStatus.INPROGRESS);
+		try {
+			myCommunicationDao.create(com, mySrd);
+			fail();
+		} catch (InternalErrorException e) {
+			assertThat(e.getMessage(), startsWith("Failed to extract values from resource using FHIRPath \"Communication.payload[1].contentAttachment is not null\": org.hl7.fhir"));
+		}
+	}
+
 	@Test
 	public void testOverrideAndDisableBuiltInSearchParametersWithOverridingDisabled() {
 		myDaoConfig.setDefaultSearchParamsCanBeOverridden(false);
@@ -397,7 +385,6 @@ public class FhirResourceDaoR4SearchCustomSearchParamTest extends BaseJpaR4Test
 		assertThat(results, contains(mrId));
 	}
 
-
 	/**
 	 * See #863
 	 */
@@ -430,6 +417,23 @@ public class FhirResourceDaoR4SearchCustomSearchParamTest extends BaseJpaR4Test
 		assertThat(results, contains(mrId));
 	}
 
+	@Test
+	public void testRejectSearchParamWithInvalidExpression() {
+		SearchParameter threadIdSp = new SearchParameter();
+		threadIdSp.addBase("Communication");
+		threadIdSp.setCode("has-attachments");
+		threadIdSp.setType(Enumerations.SearchParamType.REFERENCE);
+		threadIdSp.setExpression("Communication.payload[1].contentAttachment is not null");
+		threadIdSp.setXpathUsage(SearchParameter.XPathUsageType.NORMAL);
+		threadIdSp.setStatus(Enumerations.PublicationStatus.ACTIVE);
+		try {
+			mySearchParameterDao.create(threadIdSp, mySrd);
+			fail();
+		} catch (UnprocessableEntityException e) {
+			assertThat(e.getMessage(), startsWith("The expression \"Communication.payload[1].contentAttachment is not null\" can not be evaluated and may be invalid: "));
+		}
+	}
+
 	@Test
 	public void testSearchForExtensionReferenceWithNonMatchingTarget() {
 		SearchParameter siblingSp = new SearchParameter();
@@ -751,6 +755,12 @@ public class FhirResourceDaoR4SearchCustomSearchParamTest extends BaseJpaR4Test
 			@Override
 			protected void doInTransactionWithoutResult(TransactionStatus theArg0) {
 				mySearchParameterDao.create(siblingSp, mySrd);
+			}
+		});
+
+		txTemplate.execute(new TransactionCallbackWithoutResult() {
+			@Override
+			protected void doInTransactionWithoutResult(TransactionStatus theArg0) {
 				mySearchParamRegsitry.forceRefresh();
 			}
 		});
@@ -1074,6 +1084,48 @@ public class FhirResourceDaoR4SearchCustomSearchParamTest extends BaseJpaR4Test
 
 	}
 
+	@Test
+	public void testSearchParameterDescendsIntoContainedResource() {
+		SearchParameter sp = new SearchParameter();
+		sp.addBase("Observation");
+		sp.setCode("specimencollectedtime");
+		sp.setType(Enumerations.SearchParamType.DATE);
+		sp.setTitle("Observation Specimen Collected Time");
+		sp.setExpression("Observation.specimen.resolve().receivedTime");
+		sp.setXpathUsage(org.hl7.fhir.r4.model.SearchParameter.XPathUsageType.NORMAL);
+		sp.setStatus(org.hl7.fhir.r4.model.Enumerations.PublicationStatus.ACTIVE);
+		mySearchParameterDao.create(sp);
+
+		mySearchParamRegsitry.forceRefresh();
+
+		Specimen specimen = new Specimen();
+		specimen.setId("#FOO");
+		specimen.setReceivedTimeElement(new DateTimeType("2011-01-01"));
+		Observation o = new Observation();
+		o.setId("O1");
+		o.getContained().add(specimen);
+		o.setStatus(Observation.ObservationStatus.FINAL);
+		o.setSpecimen(new Reference("#FOO"));
+		myObservationDao.update(o);
+
+		specimen = new Specimen();
+		specimen.setId("#FOO");
+		specimen.setReceivedTimeElement(new DateTimeType("2011-01-03"));
+		o = new Observation();
+		o.setId("O2");
+		o.getContained().add(specimen);
+		o.setStatus(Observation.ObservationStatus.FINAL);
+		o.setSpecimen(new Reference("#FOO"));
+		myObservationDao.update(o);
+
+		SearchParameterMap params = new SearchParameterMap();
+		params.add("specimencollectedtime", new DateParam("2011-01-01"));
+		IBundleProvider outcome = myObservationDao.search(params);
+		List<String> ids = toUnqualifiedVersionlessIdValues(outcome);
+		ourLog.info("IDS: " + ids);
+		assertThat(ids, contains("Observation/O1"));
+	}
+
 	@Test
 	public void testSearchWithCustomParam() {
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchMissingTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchMissingTest.java
index 43cc2eae363..ea95aa93052 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchMissingTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchMissingTest.java
@@ -46,7 +46,6 @@ public class FhirResourceDaoR4SearchMissingTest extends BaseJpaR4Test {
 		org.setActive(true);
 		myOrganizationDao.create(org, mySrd).getId().toUnqualifiedVersionless();
 
-		assertThat(mySearchParamDao.findAll(), empty());
 		assertThat(mySearchParamPresentDao.findAll(), empty());
 		assertThat(myResourceIndexedSearchParamStringDao.findAll(), empty());
 		assertThat(myResourceIndexedSearchParamDateDao.findAll(), empty());
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchNoFtTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchNoFtTest.java
index e340b51166f..ceb77c900bb 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchNoFtTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchNoFtTest.java
@@ -47,7 +47,7 @@ import static org.hamcrest.Matchers.*;
 import static org.junit.Assert.*;
 import static org.mockito.Mockito.mock;
 
-@SuppressWarnings("unchecked")
+@SuppressWarnings({"unchecked", "Duplicates"})
 public class FhirResourceDaoR4SearchNoFtTest extends BaseJpaR4Test {
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoR4SearchNoFtTest.class);
 
@@ -145,6 +145,124 @@ public class FhirResourceDaoR4SearchNoFtTest extends BaseJpaR4Test {
 		assertThat(ids, empty());
 	}
 
+	/**
+	 * See #1053
+	 */
+	@Test
+	public void testLastUpdateShouldntApplyToIncludes() {
+		SearchParameterMap map;
+		List<String> ids;
+
+		Date beforeAll = new Date();
+		ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast(100);
+
+		Organization org = new Organization();
+		org.setName("O1");
+		org.setId("O1");
+		myOrganizationDao.update(org);
+		ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast(100);
+
+		Date beforePatient = new Date();
+		ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast(100);
+
+		Patient p = new Patient();
+		p.setId("P1");
+		p.setActive(true);
+		p.setManagingOrganization(new Reference("Organization/O1"));
+		myPatientDao.update(p);
+
+		ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast(100);
+		Date afterAll = new Date();
+
+		// Search with between date (should still return Organization even though
+		// it was created before that date, since it's an include)
+		map = new SearchParameterMap();
+		map.setLastUpdated(new DateRangeParam().setLowerBoundInclusive(beforePatient));
+		map.addInclude(Patient.INCLUDE_ORGANIZATION);
+		ids = toUnqualifiedVersionlessIdValues(myPatientDao.search(map));
+		assertThat(ids, contains("Patient/P1", "Organization/O1"));
+
+		// Search before everything
+		map = new SearchParameterMap();
+		map.setLastUpdated(new DateRangeParam().setLowerBoundInclusive(beforeAll));
+		map.addInclude(Patient.INCLUDE_ORGANIZATION);
+		ids = toUnqualifiedVersionlessIdValues(myPatientDao.search(map));
+		assertThat(ids, contains("Patient/P1", "Organization/O1"));
+
+		// Search after everything
+		map = new SearchParameterMap();
+		map.setLastUpdated(new DateRangeParam().setLowerBoundInclusive(afterAll));
+		map.addInclude(Patient.INCLUDE_ORGANIZATION);
+		ids = toUnqualifiedVersionlessIdValues(myPatientDao.search(map));
+		assertThat(ids, empty());
+
+	}
+
+	/**
+	 * See #1053
+	 *
+	 * Note that I don't know that _lastUpdate actually should apply to reverse includes. The
+	 * spec doesn't say one way or ther other, but it seems like sensible behaviour to me.
+	 *
+	 * Definitely the $everything operation depends on this behaviour, so if we change it
+	 * we need to account for the everything operation...
+	 */
+	@Test
+	public void testLastUpdateShouldApplyToReverseIncludes() {
+		SearchParameterMap map;
+		List<String> ids;
+
+		// This gets updated in a sec..
+		Organization org = new Organization();
+		org.setActive(false);
+		org.setId("O1");
+		myOrganizationDao.update(org);
+
+		Date beforeAll = new Date();
+		ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast(100);
+
+		Patient p = new Patient();
+		p.setId("P1");
+		p.setActive(true);
+		p.setManagingOrganization(new Reference("Organization/O1"));
+		myPatientDao.update(p);
+
+		ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast(100);
+
+		Date beforeOrg = new Date();
+		ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast(100);
+
+		org = new Organization();
+		org.setActive(true);
+		org.setId("O1");
+		myOrganizationDao.update(org);
+
+		ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast(100);
+		Date afterAll = new Date();
+
+		// Everything should come back
+		map = new SearchParameterMap();
+		map.setLastUpdated(new DateRangeParam().setLowerBoundInclusive(beforeAll));
+		map.addRevInclude(Patient.INCLUDE_ORGANIZATION);
+		ids = toUnqualifiedVersionlessIdValues(myOrganizationDao.search(map));
+		assertThat(ids, contains("Organization/O1", "Patient/P1"));
+
+		// Search before everything
+		map = new SearchParameterMap();
+		map.setLastUpdated(new DateRangeParam().setLowerBoundInclusive(beforeOrg));
+		map.addInclude(Patient.INCLUDE_ORGANIZATION);
+		ids = toUnqualifiedVersionlessIdValues(myOrganizationDao.search(map));
+		assertThat(ids, contains("Organization/O1"));
+
+		// Search after everything
+		map = new SearchParameterMap();
+		map.setLastUpdated(new DateRangeParam().setLowerBoundInclusive(afterAll));
+		map.addInclude(Patient.INCLUDE_ORGANIZATION);
+		ids = toUnqualifiedVersionlessIdValues(myOrganizationDao.search(map));
+		assertThat(ids, empty());
+
+	}
+
 	@Test
 	public void testEverythingTimings() {
 		String methodName = "testEverythingTimings";
@@ -485,11 +603,18 @@ public class FhirResourceDaoR4SearchNoFtTest extends BaseJpaR4Test {
 				Class<ResourceIndexedSearchParamNumber> type = ResourceIndexedSearchParamNumber.class;
 				List<ResourceIndexedSearchParamNumber> results = myEntityManager.createQuery("SELECT i FROM " + type.getSimpleName() + " i", type).getResultList();
 				ourLog.info(toStringMultiline(results));
-				assertThat(results, containsInAnyOrder(
-					((ResourceIndexedSearchParamNumber) (new ResourceIndexedSearchParamNumber(ImmunizationRecommendation.SP_DOSE_SEQUENCE, null).setResource(resource).setMissing(true))),
-					((ResourceIndexedSearchParamNumber) (new ResourceIndexedSearchParamNumber(ImmunizationRecommendation.SP_DOSE_NUMBER, new BigDecimal("1.00")).setResource(resource))),
-					((ResourceIndexedSearchParamNumber) (new ResourceIndexedSearchParamNumber(ImmunizationRecommendation.SP_DOSE_NUMBER, new BigDecimal("2.00")).setResource(resource)))
-				));
+
+				ResourceIndexedSearchParamNumber expect0 = new ResourceIndexedSearchParamNumber(ImmunizationRecommendation.SP_DOSE_NUMBER, new BigDecimal("2.00"));
+				expect0.setResource(resource);
+				expect0.calculateHashes();
+				ResourceIndexedSearchParamNumber expect1 = new ResourceIndexedSearchParamNumber(ImmunizationRecommendation.SP_DOSE_SEQUENCE, null);
+				expect1.setResource(resource).setMissing(true);
+				expect1.calculateHashes();
+				ResourceIndexedSearchParamNumber expect2 = new ResourceIndexedSearchParamNumber(ImmunizationRecommendation.SP_DOSE_NUMBER, new BigDecimal("1.00"));
+				expect2.setResource(resource);
+				expect2.calculateHashes();
+
+				assertThat(results, containsInAnyOrder(expect0, expect1, expect2));
 			}
 		});
 	}
@@ -504,10 +629,12 @@ public class FhirResourceDaoR4SearchNoFtTest extends BaseJpaR4Test {
 
 		IIdType id = mySubstanceDao.create(res, mySrd).getId().toUnqualifiedVersionless();
 
-		Class<ResourceIndexedSearchParamQuantity> type = ResourceIndexedSearchParamQuantity.class;
-		List<?> results = myEntityManager.createQuery("SELECT i FROM " + type.getSimpleName() + " i", type).getResultList();
-		ourLog.info(toStringMultiline(results));
-		assertEquals(2, results.size());
+		runInTransaction(()->{
+			Class<ResourceIndexedSearchParamQuantity> type = ResourceIndexedSearchParamQuantity.class;
+			List<?> results = myEntityManager.createQuery("SELECT i FROM " + type.getSimpleName() + " i", type).getResultList();
+			ourLog.info(toStringMultiline(results));
+			assertEquals(2, results.size());
+		});
 
 		List<IIdType> actual = toUnqualifiedVersionlessIds(
 			mySubstanceDao.search(new SearchParameterMap().setLoadSynchronous(true).add(Substance.SP_QUANTITY, new QuantityParam(null, 123, "http://foo", "UNIT"))));
@@ -2261,6 +2388,7 @@ public class FhirResourceDaoR4SearchNoFtTest extends BaseJpaR4Test {
 
 	@Test
 	public void testSearchWithContains() {
+		myDaoConfig.setAllowContainsSearches(true);
 
 		Patient pt1 = new Patient();
 		pt1.addName().setFamily("ABCDEFGHIJK");
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchPageExpiryTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchPageExpiryTest.java
index 9b0ae526bd2..9b22d036883 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchPageExpiryTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4SearchPageExpiryTest.java
@@ -4,6 +4,7 @@ import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.jpa.dao.SearchParameterMap;
 import ca.uhn.fhir.jpa.dao.data.ISearchDao;
 import ca.uhn.fhir.jpa.entity.Search;
+import ca.uhn.fhir.jpa.entity.SearchStatusEnum;
 import ca.uhn.fhir.jpa.search.StaleSearchDeletingSvcImpl;
 import ca.uhn.fhir.util.StopWatch;
 import ca.uhn.fhir.rest.api.server.IBundleProvider;
@@ -32,6 +33,7 @@ import static ca.uhn.fhir.jpa.util.TestUtil.sleepAtLeast;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.junit.Assert.*;
 
+@SuppressWarnings("Duplicates")
 public class FhirResourceDaoR4SearchPageExpiryTest extends BaseJpaR4Test {
 	private static final Logger ourLog = LoggerFactory.getLogger(FhirResourceDaoR4SearchPageExpiryTest.class);
 
@@ -404,7 +406,7 @@ public class FhirResourceDaoR4SearchPageExpiryTest extends BaseJpaR4Test {
 				Search search = null;
 				for (int i = 0; i < 20 && search == null; i++) {
 					search = theSearchEntityDao.findByUuid(theUuid);
-					if (search == null) {
+					if (search == null || search.getStatus() == SearchStatusEnum.LOADING) {
 						sleepAtLeast(100);
 					}
 				}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4TerminologyTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4TerminologyTest.java
index f43abf9f44c..44903bdf921 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4TerminologyTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4TerminologyTest.java
@@ -1,30 +1,13 @@
 package ca.uhn.fhir.jpa.dao.r4;
 
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.containsStringIgnoringCase;
-import static org.hamcrest.Matchers.empty;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-
-import java.util.*;
-
-import ca.uhn.fhir.jpa.term.BaseHapiTerminologySvcImpl;
-import org.hl7.fhir.r4.model.*;
-import org.hl7.fhir.r4.model.AllergyIntolerance.AllergyIntoleranceCategory;
-import org.hl7.fhir.r4.model.AllergyIntolerance.AllergyIntoleranceClinicalStatus;
-import org.hl7.fhir.r4.model.CodeSystem.CodeSystemContentMode;
-import org.hl7.fhir.r4.model.CodeSystem.ConceptDefinitionComponent;
-import org.hl7.fhir.r4.model.ValueSet.*;
-import org.hl7.fhir.instance.model.api.IIdType;
-import org.junit.*;
-import org.springframework.beans.factory.annotation.Autowired;
-
 import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.jpa.dao.IFhirResourceDaoCodeSystem.LookupCodeResult;
 import ca.uhn.fhir.jpa.dao.SearchParameterMap;
-import ca.uhn.fhir.jpa.entity.*;
+import ca.uhn.fhir.jpa.entity.ResourceTable;
+import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
+import ca.uhn.fhir.jpa.entity.TermConcept;
 import ca.uhn.fhir.jpa.entity.TermConceptParentChildLink.RelationshipTypeEnum;
+import ca.uhn.fhir.jpa.term.BaseHapiTerminologySvcImpl;
 import ca.uhn.fhir.jpa.term.IHapiTerminologySvc;
 import ca.uhn.fhir.parser.IParser;
 import ca.uhn.fhir.rest.param.TokenParam;
@@ -34,20 +17,36 @@ import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
 import ca.uhn.fhir.util.TestUtil;
 import ca.uhn.fhir.validation.FhirValidator;
 import ca.uhn.fhir.validation.ValidationResult;
+import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.r4.model.*;
+import org.hl7.fhir.r4.model.AllergyIntolerance.AllergyIntoleranceCategory;
+import org.hl7.fhir.r4.model.AllergyIntolerance.AllergyIntoleranceClinicalStatus;
+import org.hl7.fhir.r4.model.CodeSystem.CodeSystemContentMode;
+import org.hl7.fhir.r4.model.CodeSystem.ConceptDefinitionComponent;
+import org.hl7.fhir.r4.model.ValueSet.*;
+import org.junit.*;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
 
 public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
-	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoR4TerminologyTest.class);
 	public static final String URL_MY_CODE_SYSTEM = "http://example.com/my_code_system";
 	public static final String URL_MY_VALUE_SET = "http://example.com/my_value_set";
-
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoR4TerminologyTest.class);
 	@Autowired
 	private IHapiTerminologySvc myHapiTerminologySvc;
 
 	@After
 	public void after() {
 		myDaoConfig.setDeferIndexingForCodesystemsOfSize(new DaoConfig().getDeferIndexingForCodesystemsOfSize());
-		
+
 		BaseHapiTerminologySvcImpl.setForceSaveDeferredAlwaysForUnitTest(false);
 	}
 
@@ -96,38 +95,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		TermConcept childCA = new TermConcept(cs, "childCA").setDisplay("Child CA");
 		parentC.addChild(childCA, RelationshipTypeEnum.ISA);
 
-		myTermSvc.storeNewCodeSystemVersion(table.getId(), URL_MY_CODE_SYSTEM,"SYSTEM NAME" , cs);
-		return codeSystem;
-	}
-
-	private CodeSystem createExternalCsLarge() {
-		CodeSystem codeSystem = new CodeSystem();
-		codeSystem.setUrl(URL_MY_CODE_SYSTEM);
-		codeSystem.setContent(CodeSystemContentMode.NOTPRESENT);
-		IIdType id = myCodeSystemDao.create(codeSystem, mySrd).getId().toUnqualified();
-
-		ResourceTable table = myResourceTableDao.findById(id.getIdPartAsLong()).orElseThrow(IllegalStateException::new);
-
-		TermCodeSystemVersion cs = new TermCodeSystemVersion();
-		cs.setResource(table);
-
-		TermConcept parentA = new TermConcept(cs, "codeA").setDisplay("CodeA");
-		cs.getConcepts().add(parentA);
-
-		for (int i = 0; i < 450; i++) {
-			TermConcept childI = new TermConcept(cs, "subCodeA"+i).setDisplay("Sub-code A"+i);
-			parentA.addChild(childI, RelationshipTypeEnum.ISA);
-		}
-
-		TermConcept parentB = new TermConcept(cs, "codeB").setDisplay("CodeB");
-		cs.getConcepts().add(parentB);
-
-		for (int i = 0; i < 450; i++) {
-			TermConcept childI = new TermConcept(cs, "subCodeB"+i).setDisplay("Sub-code B"+i);
-			parentB.addChild(childI, RelationshipTypeEnum.ISA);
-		}
-
-		myTermSvc.storeNewCodeSystemVersion(table.getId(), URL_MY_CODE_SYSTEM,"SYSTEM NAME" , cs);
+		myTermSvc.storeNewCodeSystemVersion(table.getId(), URL_MY_CODE_SYSTEM, "SYSTEM NAME", cs);
 		return codeSystem;
 	}
 
@@ -153,17 +121,48 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
 		TermConcept goodbye = new TermConcept(cs, "goodbye").setDisplay("Goodbye");
 		cs.getConcepts().add(goodbye);
-		
+
 		TermConcept dogs = new TermConcept(cs, "dogs").setDisplay("Dogs");
 		cs.getConcepts().add(dogs);
-		
+
 		TermConcept labrador = new TermConcept(cs, "labrador").setDisplay("Labrador");
 		dogs.addChild(labrador, RelationshipTypeEnum.ISA);
 
 		TermConcept beagle = new TermConcept(cs, "beagle").setDisplay("Beagle");
 		dogs.addChild(beagle, RelationshipTypeEnum.ISA);
 
-		myTermSvc.storeNewCodeSystemVersion(table.getId(), URL_MY_CODE_SYSTEM,"SYSTEM NAME" , cs);
+		myTermSvc.storeNewCodeSystemVersion(table.getId(), URL_MY_CODE_SYSTEM, "SYSTEM NAME", cs);
+		return codeSystem;
+	}
+
+	private CodeSystem createExternalCsLarge() {
+		CodeSystem codeSystem = new CodeSystem();
+		codeSystem.setUrl(URL_MY_CODE_SYSTEM);
+		codeSystem.setContent(CodeSystemContentMode.NOTPRESENT);
+		IIdType id = myCodeSystemDao.create(codeSystem, mySrd).getId().toUnqualified();
+
+		ResourceTable table = myResourceTableDao.findById(id.getIdPartAsLong()).orElseThrow(IllegalStateException::new);
+
+		TermCodeSystemVersion cs = new TermCodeSystemVersion();
+		cs.setResource(table);
+
+		TermConcept parentA = new TermConcept(cs, "codeA").setDisplay("CodeA");
+		cs.getConcepts().add(parentA);
+
+		for (int i = 0; i < 450; i++) {
+			TermConcept childI = new TermConcept(cs, "subCodeA" + i).setDisplay("Sub-code A" + i);
+			parentA.addChild(childI, RelationshipTypeEnum.ISA);
+		}
+
+		TermConcept parentB = new TermConcept(cs, "codeB").setDisplay("CodeB");
+		cs.getConcepts().add(parentB);
+
+		for (int i = 0; i < 450; i++) {
+			TermConcept childI = new TermConcept(cs, "subCodeB" + i).setDisplay("Sub-code B" + i);
+			parentB.addChild(childI, RelationshipTypeEnum.ISA);
+		}
+
+		myTermSvc.storeNewCodeSystemVersion(table.getId(), URL_MY_CODE_SYSTEM, "SYSTEM NAME", cs);
 		return codeSystem;
 	}
 
@@ -171,17 +170,17 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		//@formatter:off
 		CodeSystem codeSystem = new CodeSystem();
 		codeSystem.setUrl(URL_MY_CODE_SYSTEM);
-		codeSystem.setContent(CodeSystemContentMode.COMPLETE);		
+		codeSystem.setContent(CodeSystemContentMode.COMPLETE);
 		codeSystem
 			.addConcept().setCode("A").setDisplay("Code A")
-				.addConcept(new ConceptDefinitionComponent().setCode("AA").setDisplay("Code AA")
-					.addConcept(new ConceptDefinitionComponent().setCode("AAA").setDisplay("Code AAA"))
-				)
-				.addConcept(new ConceptDefinitionComponent().setCode("AB").setDisplay("Code AB"));
+			.addConcept(new ConceptDefinitionComponent().setCode("AA").setDisplay("Code AA")
+				.addConcept(new ConceptDefinitionComponent().setCode("AAA").setDisplay("Code AAA"))
+			)
+			.addConcept(new ConceptDefinitionComponent().setCode("AB").setDisplay("Code AB"));
 		codeSystem
 			.addConcept().setCode("B").setDisplay("Code B")
-				.addConcept(new ConceptDefinitionComponent().setCode("BA").setDisplay("Code BA"))
-				.addConcept(new ConceptDefinitionComponent().setCode("BB").setDisplay("Code BB"));
+			.addConcept(new ConceptDefinitionComponent().setCode("BA").setDisplay("Code BA"))
+			.addConcept(new ConceptDefinitionComponent().setCode("BB").setDisplay("Code BB"));
 		//@formatter:on
 		myCodeSystemDao.create(codeSystem, mySrd);
 
@@ -234,15 +233,15 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		//@formatter:off
 		CodeSystem codeSystem = new CodeSystem();
 		codeSystem.setUrl(URL_MY_CODE_SYSTEM);
-		codeSystem.setContent(CodeSystemContentMode.COMPLETE);		
+		codeSystem.setContent(CodeSystemContentMode.COMPLETE);
 		codeSystem
 			.addConcept().setCode("A").setDisplay("Code A")
-				.addConcept(new ConceptDefinitionComponent().setCode("AA").setDisplay("Code AA"))
-				.addConcept(new ConceptDefinitionComponent().setCode("AB").setDisplay("Code AB"));
+			.addConcept(new ConceptDefinitionComponent().setCode("AA").setDisplay("Code AA"))
+			.addConcept(new ConceptDefinitionComponent().setCode("AB").setDisplay("Code AB"));
 		codeSystem
 			.addConcept().setCode("B").setDisplay("Code A")
-				.addConcept(new ConceptDefinitionComponent().setCode("BA").setDisplay("Code AA"))
-				.addConcept(new ConceptDefinitionComponent().setCode("BB").setDisplay("Code AB"));
+			.addConcept(new ConceptDefinitionComponent().setCode("BA").setDisplay("Code AA"))
+			.addConcept(new ConceptDefinitionComponent().setCode("BB").setDisplay("Code AB"));
 		//@formatter:on
 
 		IIdType id = myCodeSystemDao.create(codeSystem, mySrd).getId().toUnqualified();
@@ -252,6 +251,20 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
 	}
 
+	@Test
+	public void testConceptTimestamps() {
+		long start = System.currentTimeMillis() - 10;
+
+		createExternalCsDogs();
+
+		runInTransaction(() -> {
+			List<TermConcept> concepts = myTermConceptDao.findAll();
+			for (TermConcept next : concepts) {
+				assertTrue(next.getUpdated().getTime() > start);
+			}
+		});
+	}
+
 	@Test
 	public void testExpandInvalid() {
 		createExternalCsAndLocalVs();
@@ -278,17 +291,17 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		valueSet.setUrl(URL_MY_VALUE_SET);
 		valueSet.getCompose()
 			.addInclude()
-				.setSystem(codeSystem.getUrl())
-				.addConcept(new ConceptReferenceComponent().setCode("hello"))
-				.addConcept(new ConceptReferenceComponent().setCode("goodbye"));
+			.setSystem(codeSystem.getUrl())
+			.addConcept(new ConceptReferenceComponent().setCode("hello"))
+			.addConcept(new ConceptReferenceComponent().setCode("goodbye"));
 		valueSet.getCompose()
 			.addInclude()
-				.setSystem(codeSystem.getUrl())
-				.addFilter()
-					.setProperty("concept")
-					.setOp(FilterOperator.ISA)
-					.setValue("dogs");
-				
+			.setSystem(codeSystem.getUrl())
+			.addFilter()
+			.setProperty("concept")
+			.setOp(FilterOperator.ISA)
+			.setValue("dogs");
+
 		myValueSetDao.create(valueSet, mySrd);
 
 		ValueSet result = myValueSetDao.expand(valueSet, "");
@@ -300,47 +313,6 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
 	}
 
-	// TODO: get this working
-	@Ignore
-	@Test
-	public void testExpandWithOpEquals() {
-		
-		
-		ValueSet result = myValueSetDao.expandByIdentifier("http://hl7.org/fhir/ValueSet/doc-typecodes", "");
-		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(result));
-	}
-	
-	
-	@Test
-	public void testExpandWithCodesAndDisplayFilterPartialOnFilter() {
-		CodeSystem codeSystem = createExternalCsDogs();
-
-		ValueSet valueSet = new ValueSet();
-		valueSet.setUrl(URL_MY_VALUE_SET);
-		valueSet.getCompose()
-			.addInclude()
-				.setSystem(codeSystem.getUrl())
-				.addConcept(new ConceptReferenceComponent().setCode("hello"))
-				.addConcept(new ConceptReferenceComponent().setCode("goodbye"));
-		valueSet.getCompose()
-			.addInclude()
-				.setSystem(codeSystem.getUrl())
-				.addFilter()
-					.setProperty("concept")
-					.setOp(FilterOperator.ISA)
-					.setValue("dogs");
-				
-		myValueSetDao.create(valueSet, mySrd);
-
-		ValueSet result = myValueSetDao.expand(valueSet, "lab");
-		logAndValidateValueSet(result);
-
-		assertEquals(1, result.getExpansion().getTotal());
-		ArrayList<String> codes = toCodesContains(result.getExpansion().getContains());
-		assertThat(codes, containsInAnyOrder("labrador"));
-
-	}
-
 	@Test
 	public void testExpandWithCodesAndDisplayFilterPartialOnCodes() {
 		CodeSystem codeSystem = createExternalCsDogs();
@@ -349,17 +321,17 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		valueSet.setUrl(URL_MY_VALUE_SET);
 		valueSet.getCompose()
 			.addInclude()
-				.setSystem(codeSystem.getUrl())
-				.addConcept(new ConceptReferenceComponent().setCode("hello"))
-				.addConcept(new ConceptReferenceComponent().setCode("goodbye"));
+			.setSystem(codeSystem.getUrl())
+			.addConcept(new ConceptReferenceComponent().setCode("hello"))
+			.addConcept(new ConceptReferenceComponent().setCode("goodbye"));
 		valueSet.getCompose()
 			.addInclude()
-				.setSystem(codeSystem.getUrl())
-				.addFilter()
-					.setProperty("concept")
-					.setOp(FilterOperator.ISA)
-					.setValue("dogs");
-				
+			.setSystem(codeSystem.getUrl())
+			.addFilter()
+			.setProperty("concept")
+			.setOp(FilterOperator.ISA)
+			.setValue("dogs");
+
 		myValueSetDao.create(valueSet, mySrd);
 
 		ValueSet result = myValueSetDao.expand(valueSet, "hel");
@@ -389,6 +361,36 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
 	}
 
+	@Test
+	public void testExpandWithCodesAndDisplayFilterPartialOnFilter() {
+		CodeSystem codeSystem = createExternalCsDogs();
+
+		ValueSet valueSet = new ValueSet();
+		valueSet.setUrl(URL_MY_VALUE_SET);
+		valueSet.getCompose()
+			.addInclude()
+			.setSystem(codeSystem.getUrl())
+			.addConcept(new ConceptReferenceComponent().setCode("hello"))
+			.addConcept(new ConceptReferenceComponent().setCode("goodbye"));
+		valueSet.getCompose()
+			.addInclude()
+			.setSystem(codeSystem.getUrl())
+			.addFilter()
+			.setProperty("concept")
+			.setOp(FilterOperator.ISA)
+			.setValue("dogs");
+
+		myValueSetDao.create(valueSet, mySrd);
+
+		ValueSet result = myValueSetDao.expand(valueSet, "lab");
+		logAndValidateValueSet(result);
+
+		assertEquals(1, result.getExpansion().getTotal());
+		ArrayList<String> codes = toCodesContains(result.getExpansion().getContains());
+		assertThat(codes, containsInAnyOrder("labrador"));
+
+	}
+
 	@Test
 	public void testExpandWithDisplayInExternalValueSetFuzzyMatching() {
 		createExternalCsAndLocalVs();
@@ -442,6 +444,56 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		assertThat(codes, containsInAnyOrder("ParentA", "ParentB", "childAB", "childAAB", "ParentC", "childBA", "childCA"));
 	}
 
+	@Test
+	public void testExpandWithIncludeContainingDashesInInclude() {
+		CodeSystem codeSystem = new CodeSystem();
+		codeSystem.setUrl(URL_MY_CODE_SYSTEM);
+		codeSystem.setContent(CodeSystemContentMode.NOTPRESENT);
+		IIdType id = myCodeSystemDao.create(codeSystem, mySrd).getId().toUnqualified();
+
+		ResourceTable table = myResourceTableDao.findById(id.getIdPartAsLong()).orElseThrow(IllegalStateException::new);
+
+		TermCodeSystemVersion cs = new TermCodeSystemVersion();
+		cs.setResource(table);
+
+		TermConcept concept;
+		concept = new TermConcept(cs, "LA1111-2");
+		cs.getConcepts().add(concept);
+		concept = new TermConcept(cs, "LA2222-2");
+		cs.getConcepts().add(concept);
+		concept = new TermConcept(cs, "LA3333-2");
+		cs.getConcepts().add(concept);
+		concept = new TermConcept(cs, "LA1122-2");
+		cs.getConcepts().add(concept);
+		concept = new TermConcept(cs, "LA1133-2");
+		cs.getConcepts().add(concept);
+		concept = new TermConcept(cs, "LA4444-2");
+		cs.getConcepts().add(concept);
+		concept = new TermConcept(cs, "LA9999-7");
+		cs.getConcepts().add(concept);
+
+		myTermSvc.storeNewCodeSystemVersion(table.getId(), URL_MY_CODE_SYSTEM, "SYSTEM NAME", cs);
+
+		ValueSet valueSet = new ValueSet();
+		valueSet.setUrl(URL_MY_VALUE_SET);
+		valueSet.getCompose()
+			.addInclude()
+			.setSystem(codeSystem.getUrl())
+			.addConcept(new ConceptReferenceComponent().setCode("LA2222-2"))
+			.addConcept(new ConceptReferenceComponent().setCode("LA1122-2"));
+		IIdType vsid = myValueSetDao.create(valueSet, mySrd).getId().toUnqualifiedVersionless();
+
+		ValueSet expansion = myValueSetDao.expand(vsid, null, null);
+		Set<String> codes = expansion
+			.getExpansion()
+			.getContains()
+			.stream()
+			.map(t -> t.getCode())
+			.collect(Collectors.toSet());
+		ourLog.info("Codes: {}", codes);
+		assertThat(codes, containsInAnyOrder("LA2222-2", "LA1122-2"));
+	}
+
 	@Test
 	public void testExpandWithInvalidExclude() {
 		createExternalCsAndLocalVs();
@@ -484,7 +536,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 	@Test
 	public void testExpandWithIsAInExternalValueSetReindex() {
 		BaseHapiTerminologySvcImpl.setForceSaveDeferredAlwaysForUnitTest(true);
-		
+
 		createExternalCsAndLocalVs();
 
 		mySystemDao.markAllResourcesForReindexing();
@@ -494,7 +546,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		myHapiTerminologySvc.saveDeferred();
 		myHapiTerminologySvc.saveDeferred();
 		myHapiTerminologySvc.saveDeferred();
-		
+
 		ValueSet vs = new ValueSet();
 		ConceptSetComponent include = vs.getCompose().addInclude();
 		include.setSystem(URL_MY_CODE_SYSTEM);
@@ -509,6 +561,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 	}
 
 	@Test
+	@Ignore
 	public void testExpandWithNoResultsInLocalValueSet1() {
 		createLocalCsAndVs();
 
@@ -542,35 +595,69 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 			assertEquals("unable to find code system http://example.com/my_code_systemAA", e.getMessage());
 		}
 	}
-	
+
+	// TODO: get this working
+	@Ignore
+	@Test
+	public void testExpandWithOpEquals() {
+
+
+		ValueSet result = myValueSetDao.expandByIdentifier("http://hl7.org/fhir/ValueSet/doc-typecodes", "");
+		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(result));
+	}
+
 	@Test
 	public void testExpandWithSystemAndCodesAndFilterKeywordInLocalValueSet() {
 		createLocalCsAndVs();
 
-		ValueSet vs = new ValueSet();
-		ConceptSetComponent include = vs.getCompose().addInclude();
-		include.setSystem(URL_MY_CODE_SYSTEM);
-		include.addConcept().setCode("A");
+		{
+			ValueSet vs = new ValueSet();
+			ConceptSetComponent include = vs.getCompose().addInclude();
+			include.setSystem(URL_MY_CODE_SYSTEM);
+			include.addConcept().setCode("AAA");
 
-		include.addFilter().setProperty("display").setOp(FilterOperator.EQUAL).setValue("AAA");
+			include.addFilter().setProperty("display").setOp(FilterOperator.EQUAL).setValue("AAA");
 
-		ValueSet result = myValueSetDao.expand(vs, null);
-		
-		// Technically it's not valid to expand a ValueSet with both includes and filters so the
-		// result fails validation because of the input.. we're being permissive by allowing both
-		// though, so we won't validate the input
-		result.setCompose(new ValueSetComposeComponent());
-		
-		logAndValidateValueSet(result);
+			ValueSet result = myValueSetDao.expand(vs, null);
 
-		ArrayList<String> codes = toCodesContains(result.getExpansion().getContains());
-		assertThat(codes, containsInAnyOrder("A", "AAA"));
+			// Technically it's not valid to expand a ValueSet with both includes and filters so the
+			// result fails validation because of the input.. we're being permissive by allowing both
+			// though, so we won't validate the input
+			result.setCompose(new ValueSetComposeComponent());
 
-		int idx = codes.indexOf("AAA");
-		assertEquals("AAA", result.getExpansion().getContains().get(idx).getCode());
-		assertEquals("Code AAA", result.getExpansion().getContains().get(idx).getDisplay());
-		assertEquals(URL_MY_CODE_SYSTEM, result.getExpansion().getContains().get(idx).getSystem());
-		//
+			logAndValidateValueSet(result);
+
+			ArrayList<String> codes = toCodesContains(result.getExpansion().getContains());
+			assertThat(codes, containsInAnyOrder("AAA"));
+
+			int idx = codes.indexOf("AAA");
+			assertEquals("AAA", result.getExpansion().getContains().get(idx).getCode());
+			assertEquals("Code AAA", result.getExpansion().getContains().get(idx).getDisplay());
+			assertEquals(URL_MY_CODE_SYSTEM, result.getExpansion().getContains().get(idx).getSystem());
+		}
+
+		// Now with a disjunction
+		{
+			ValueSet vs = new ValueSet();
+			ConceptSetComponent include = vs.getCompose().addInclude();
+			include.setSystem(URL_MY_CODE_SYSTEM);
+			include.addConcept().setCode("A");
+
+			include.addFilter().setProperty("display").setOp(FilterOperator.EQUAL).setValue("AAA");
+
+			ValueSet result = myValueSetDao.expand(vs, null);
+
+			// Technically it's not valid to expand a ValueSet with both includes and filters so the
+			// result fails validation because of the input.. we're being permissive by allowing both
+			// though, so we won't validate the input
+			result.setCompose(new ValueSetComposeComponent());
+
+			logAndValidateValueSet(result);
+
+			ArrayList<String> codes = toCodesContains(result.getExpansion().getContains());
+			assertThat(codes, empty());
+
+		}
 	}
 
 	@Test
@@ -631,7 +718,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		valueSet.setUrl(URL_MY_VALUE_SET);
 		valueSet.getCompose()
 			.addInclude()
-				.setSystem(codeSystem.getUrl());
+			.setSystem(codeSystem.getUrl());
 
 		ValueSet result = myValueSetDao.expand(valueSet, "");
 		logAndValidateValueSet(result);
@@ -713,7 +800,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		cs.setResource(table);
 		TermConcept parentA = new TermConcept(cs, "ParentA").setDisplay("Parent A");
 		cs.getConcepts().add(parentA);
-		myTermSvc.storeNewCodeSystemVersion(table.getId(), "http://snomed.info/sct","Snomed CT" , cs);
+		myTermSvc.storeNewCodeSystemVersion(table.getId(), "http://snomed.info/sct", "Snomed CT", cs);
 
 		StringType code = new StringType("ParentA");
 		StringType system = new StringType("http://snomed.info/sct");
@@ -769,7 +856,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		myTermSvc.saveDeferred();
 		mySystemDao.performReindexingPass(null);
 		myTermSvc.saveDeferred();
-		
+
 		// Again
 		mySystemDao.markAllResourcesForReindexing();
 		mySystemDao.performReindexingPass(null);
@@ -818,19 +905,6 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
 	}
 
-	@Test
-	public void testSearchCodeInUnknownCodeSystem() {
-
-		SearchParameterMap params = new SearchParameterMap();
-
-		try {
-			params.add(Observation.SP_CODE, new TokenParam(null, URL_MY_VALUE_SET).setModifier(TokenParamModifier.IN));
-			assertThat(toUnqualifiedVersionlessIdValues(myObservationDao.search(params)), empty());
-		} catch (InvalidRequestException e) {
-			assertEquals("Unable to find imported value set http://example.com/my_value_set", e.getMessage());
-		}
-	}
-
 	@Test
 	public void testSearchCodeBelowBuiltInCodesystem() {
 		AllergyIntolerance ai1 = new AllergyIntolerance();
@@ -918,33 +992,6 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
 	}
 
-	
-	@Test
-	public void testSearchCodeBelowLocalCodesystem() {
-		createLocalCsAndVs();
-
-		Observation obsAA = new Observation();
-		obsAA.getCode().addCoding().setSystem(URL_MY_CODE_SYSTEM).setCode("AA");
-		IIdType idAA = myObservationDao.create(obsAA, mySrd).getId().toUnqualifiedVersionless();
-
-		Observation obsBA = new Observation();
-		obsBA.getCode().addCoding().setSystem(URL_MY_CODE_SYSTEM).setCode("BA");
-		IIdType idBA = myObservationDao.create(obsBA, mySrd).getId().toUnqualifiedVersionless();
-
-		Observation obsCA = new Observation();
-		obsCA.getCode().addCoding().setSystem(URL_MY_CODE_SYSTEM).setCode("CA");
-		IIdType idCA = myObservationDao.create(obsCA, mySrd).getId().toUnqualifiedVersionless();
-
-		SearchParameterMap params = new SearchParameterMap();
-		params.add(Observation.SP_CODE, new TokenParam(URL_MY_CODE_SYSTEM, "A").setModifier(TokenParamModifier.BELOW));
-		assertThat(toUnqualifiedVersionlessIdValues(myObservationDao.search(params)), containsInAnyOrder(idAA.getValue()));
-
-		params = new SearchParameterMap();
-		params.add(Observation.SP_CODE, new TokenParam(URL_MY_CODE_SYSTEM, "AAA").setModifier(TokenParamModifier.BELOW));
-		assertThat(toUnqualifiedVersionlessIdValues(myObservationDao.search(params)), empty());
-
-	}
-
 	@Test
 	public void testSearchCodeBelowExternalCodesystemLarge() {
 		createExternalCsLarge();
@@ -975,6 +1022,32 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
 	}
 
+	@Test
+	public void testSearchCodeBelowLocalCodesystem() {
+		createLocalCsAndVs();
+
+		Observation obsAA = new Observation();
+		obsAA.getCode().addCoding().setSystem(URL_MY_CODE_SYSTEM).setCode("AA");
+		IIdType idAA = myObservationDao.create(obsAA, mySrd).getId().toUnqualifiedVersionless();
+
+		Observation obsBA = new Observation();
+		obsBA.getCode().addCoding().setSystem(URL_MY_CODE_SYSTEM).setCode("BA");
+		IIdType idBA = myObservationDao.create(obsBA, mySrd).getId().toUnqualifiedVersionless();
+
+		Observation obsCA = new Observation();
+		obsCA.getCode().addCoding().setSystem(URL_MY_CODE_SYSTEM).setCode("CA");
+		IIdType idCA = myObservationDao.create(obsCA, mySrd).getId().toUnqualifiedVersionless();
+
+		SearchParameterMap params = new SearchParameterMap();
+		params.add(Observation.SP_CODE, new TokenParam(URL_MY_CODE_SYSTEM, "A").setModifier(TokenParamModifier.BELOW));
+		assertThat(toUnqualifiedVersionlessIdValues(myObservationDao.search(params)), containsInAnyOrder(idAA.getValue()));
+
+		params = new SearchParameterMap();
+		params.add(Observation.SP_CODE, new TokenParam(URL_MY_CODE_SYSTEM, "AAA").setModifier(TokenParamModifier.BELOW));
+		assertThat(toUnqualifiedVersionlessIdValues(myObservationDao.search(params)), empty());
+
+	}
+
 	@Test
 	public void testSearchCodeInBuiltInValueSet() {
 		AllergyIntolerance ai1 = new AllergyIntolerance();
@@ -1019,7 +1092,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		SearchParameterMap params;
 
 		ourLog.info("testSearchCodeInEmptyValueSet without status");
-		
+
 		params = new SearchParameterMap();
 		params.add(Observation.SP_CODE, new TokenParam(null, URL_MY_VALUE_SET).setModifier(TokenParamModifier.IN));
 		assertThat(toUnqualifiedVersionlessIdValues(myObservationDao.search(params)), empty());
@@ -1030,7 +1103,7 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		params.add(Observation.SP_CODE, new TokenParam(null, URL_MY_VALUE_SET).setModifier(TokenParamModifier.IN));
 		params.add(Observation.SP_STATUS, new TokenParam(null, "final"));
 		assertThat(toUnqualifiedVersionlessIdValues(myObservationDao.search(params)), empty());
-		
+
 		ourLog.info("testSearchCodeInEmptyValueSet done");
 	}
 
@@ -1093,7 +1166,6 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		assertThat(toUnqualifiedVersionlessIdValues(myAuditEventDao.search(params)), empty());
 	}
 
-
 	@Test
 	public void testSearchCodeInLocalCodesystem() {
 		createLocalCsAndVs();
@@ -1116,6 +1188,19 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 
 	}
 
+	@Test
+	public void testSearchCodeInUnknownCodeSystem() {
+
+		SearchParameterMap params = new SearchParameterMap();
+
+		try {
+			params.add(Observation.SP_CODE, new TokenParam(null, URL_MY_VALUE_SET).setModifier(TokenParamModifier.IN));
+			assertThat(toUnqualifiedVersionlessIdValues(myObservationDao.search(params)), empty());
+		} catch (InvalidRequestException e) {
+			assertEquals("Unable to find imported value set http://example.com/my_value_set", e.getMessage());
+		}
+	}
+
 	@Test
 	public void testSearchCodeInValueSetThatImportsInvalidCodeSystem() {
 		ValueSet valueSet = new ValueSet();
@@ -1126,12 +1211,12 @@ public class FhirResourceDaoR4TerminologyTest extends BaseJpaR4Test {
 		SearchParameterMap params;
 
 		ourLog.info("testSearchCodeInEmptyValueSet without status");
-		
+
 		params = new SearchParameterMap();
 		params.add(Observation.SP_CODE, new TokenParam(null, URL_MY_VALUE_SET).setModifier(TokenParamModifier.IN));
 		try {
 			myObservationDao.search(params);
-		} catch(InvalidRequestException e) {
+		} catch (InvalidRequestException e) {
 			assertEquals("Unable to expand imported value set: Unable to find imported value set http://non_existant_VS", e.getMessage());
 		}
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4Test.java
index 5144f0fcfa7..20e3dfc0f09 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4Test.java
@@ -1,10 +1,7 @@
 package ca.uhn.fhir.jpa.dao.r4;
 
 import ca.uhn.fhir.jpa.dao.*;
-import ca.uhn.fhir.jpa.entity.ResourceEncodingEnum;
-import ca.uhn.fhir.jpa.entity.ResourceHistoryTable;
-import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamString;
-import ca.uhn.fhir.jpa.entity.TagTypeEnum;
+import ca.uhn.fhir.jpa.entity.*;
 import ca.uhn.fhir.model.api.Include;
 import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
 import ca.uhn.fhir.model.valueset.BundleEntrySearchModeEnum;
@@ -152,6 +149,42 @@ public class FhirResourceDaoR4Test extends BaseJpaR4Test {
 		return retVal;
 	}
 
+
+	@Test
+	public void testDeletedResourcesAreReindexed() {
+		myDaoConfig.setSchedulingDisabled(true);
+
+		Patient pt1 = new Patient();
+		pt1.setActive(true);
+		pt1.addName().setFamily("FAM");
+		IIdType id1 = myPatientDao.create(pt1).getId().toUnqualifiedVersionless();
+
+		runInTransaction(()->{
+			assertThat(myResourceIndexedSearchParamTokenDao.countForResourceId(id1.getIdPartAsLong()), greaterThan(0));
+		});
+
+		runInTransaction(()->{
+			Optional<ResourceTable> tableOpt = myResourceTableDao.findById(id1.getIdPartAsLong());
+			assertTrue(tableOpt.isPresent());
+			ResourceTable table = tableOpt.get();
+			table.setIndexStatus(null);
+			table.setDeleted(new Date());
+		});
+
+		mySystemDao.performReindexingPass(1000);
+		mySystemDao.performReindexingPass(1000);
+
+		runInTransaction(()->{
+			Optional<ResourceTable> tableOpt = myResourceTableDao.findById(id1.getIdPartAsLong());
+			assertTrue(tableOpt.isPresent());
+			assertEquals(BaseHapiFhirDao.INDEX_STATUS_INDEXED, tableOpt.get().getIndexStatus().longValue());
+			assertThat(myResourceIndexedSearchParamTokenDao.countForResourceId(id1.getIdPartAsLong()), not(greaterThan(0)));
+		});
+
+
+	}
+
+
 	@Test
 	public void testCantSearchForDeletedResourceByLanguageOrTag() {
 		String methodName = "testCantSearchForDeletedResourceByLanguageOrTag";
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UniqueSearchParamTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UniqueSearchParamTest.java
index 89442af5487..093fb4a5328 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UniqueSearchParamTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UniqueSearchParamTest.java
@@ -53,6 +53,7 @@ public class FhirResourceDaoR4UniqueSearchParamTest extends BaseJpaR4Test {
 	public void before() {
 		myDaoConfig.setDefaultSearchParamsCanBeOverridden(true);
 		myDaoConfig.setSchedulingDisabled(true);
+		SearchBuilder.resetLastHandlerMechanismForUnitTest();
 	}
 
 	private void createUniqueBirthdateAndGenderSps() {
@@ -91,6 +92,8 @@ public class FhirResourceDaoR4UniqueSearchParamTest extends BaseJpaR4Test {
 		mySearchParameterDao.update(sp);
 
 		mySearchParamRegsitry.forceRefresh();
+
+		SearchBuilder.resetLastHandlerMechanismForUnitTest();
 	}
 
 
@@ -752,7 +755,7 @@ public class FhirResourceDaoR4UniqueSearchParamTest extends BaseJpaR4Test {
 		params.add("birthdate", new DateParam("2011-01-01"));
 		IBundleProvider results = myPatientDao.search(params);
 		assertThat(toUnqualifiedVersionlessIdValues(results), containsInAnyOrder(id1.getValue()));
-		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest().toString(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
+		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
 	}
 
 
@@ -777,7 +780,7 @@ public class FhirResourceDaoR4UniqueSearchParamTest extends BaseJpaR4Test {
 		IBundleProvider results = myPatientDao.search(params);
 		String searchId = results.getUuid();
 		assertThat(toUnqualifiedVersionlessIdValues(results), containsInAnyOrder(id1));
-		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest().toString(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
+		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
 
 		// Other order
 		SearchBuilder.resetLastHandlerMechanismForUnitTest();
@@ -796,14 +799,14 @@ public class FhirResourceDaoR4UniqueSearchParamTest extends BaseJpaR4Test {
 		params.add("birthdate", new DateParam("2011-01-03"));
 		results = myPatientDao.search(params);
 		assertThat(toUnqualifiedVersionlessIdValues(results), empty());
-		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest().toString(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
+		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
 
 		SearchBuilder.resetLastHandlerMechanismForUnitTest();
 		params = new SearchParameterMap();
 		params.add("birthdate", new DateParam("2011-01-03"));
 		results = myPatientDao.search(params);
 		assertThat(toUnqualifiedVersionlessIdValues(results), empty());
-		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest().toString(), SearchBuilder.HandlerTypeEnum.STANDARD_QUERY, SearchBuilder.getLastHandlerMechanismForUnitTest());
+		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest(), SearchBuilder.HandlerTypeEnum.STANDARD_QUERY, SearchBuilder.getLastHandlerMechanismForUnitTest());
 
 	}
 
@@ -869,7 +872,7 @@ public class FhirResourceDaoR4UniqueSearchParamTest extends BaseJpaR4Test {
 
 		SearchBuilder.resetLastHandlerMechanismForUnitTest();
 		IIdType id1 = myPatientDao.update(pt1, "Patient?name=FAMILY1&organization:Organization=ORG").getId().toUnqualifiedVersionless();
-		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest().toString(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
+		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
 		uniques = myResourceIndexedCompositeStringUniqueDao.findAll();
 		assertEquals(1, uniques.size());
 		assertEquals("Patient/" + id1.getIdPart(), uniques.get(0).getResource().getIdDt().toUnqualifiedVersionless().getValue());
@@ -883,7 +886,7 @@ public class FhirResourceDaoR4UniqueSearchParamTest extends BaseJpaR4Test {
 
 		SearchBuilder.resetLastHandlerMechanismForUnitTest();
 		id1 = myPatientDao.update(pt1, "Patient?name=FAMILY1&organization:Organization=ORG").getId().toUnqualifiedVersionless();
-		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest().toString(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
+		assertEquals(SearchBuilder.getLastHandlerParamsForUnitTest(), SearchBuilder.HandlerTypeEnum.UNIQUE_INDEX, SearchBuilder.getLastHandlerMechanismForUnitTest());
 		uniques = myResourceIndexedCompositeStringUniqueDao.findAll();
 		assertEquals(1, uniques.size());
 		assertEquals("Patient/" + id1.getIdPart(), uniques.get(0).getResource().getIdDt().toUnqualifiedVersionless().getValue());
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UpdateTagSnapshotTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UpdateTagSnapshotTest.java
index 632dd8bfa86..9f727ea1aa4 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UpdateTagSnapshotTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UpdateTagSnapshotTest.java
@@ -39,9 +39,7 @@ public class FhirResourceDaoR4UpdateTagSnapshotTest extends BaseJpaR4Test {
 		myPatientDao.update(p, mySrd);
 
 		p = myPatientDao.read(new IdType("A"), mySrd);
-		// It would be nice if this didn't trigger a version update but
-		// i guess it's not so bad that it does
-		assertEquals("2", p.getIdElement().getVersionIdPart());
+		assertEquals("1", p.getIdElement().getVersionIdPart());
 		assertEquals(true, p.getActive());
 		assertEquals(1, p.getMeta().getTag().size());
 	}
@@ -86,9 +84,7 @@ public class FhirResourceDaoR4UpdateTagSnapshotTest extends BaseJpaR4Test {
 		myPatientDao.update(p, mySrd);
 
 		p = myPatientDao.read(new IdType("A"), mySrd);
-		// It would be nice if this didn't trigger a version update but
-		// i guess it's not so bad that it does
-		assertEquals("2", p.getIdElement().getVersionIdPart());
+		assertEquals("1", p.getIdElement().getVersionIdPart());
 		assertEquals(true, p.getActive());
 		assertEquals(1, p.getMeta().getTag().size());
 		assertEquals("urn:foo", p.getMeta().getTag().get(0).getSystem());
@@ -136,9 +132,7 @@ public class FhirResourceDaoR4UpdateTagSnapshotTest extends BaseJpaR4Test {
 		p = myPatientDao.read(new IdType("A"), mySrd);
 		assertEquals(true, p.getActive());
 		assertEquals(0, p.getMeta().getTag().size());
-		// It would be nice if this didn't trigger a version update but
-		// i guess it's not so bad that it does
-		assertEquals("2", p.getIdElement().getVersionIdPart());
+		assertEquals("1", p.getIdElement().getVersionIdPart());
 	}
 
 	@AfterClass
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UpdateTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UpdateTest.java
index c3e60059bd8..64664d9e64d 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UpdateTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirResourceDaoR4UpdateTest.java
@@ -25,7 +25,11 @@ import ca.uhn.fhir.rest.param.StringParam;
 import ca.uhn.fhir.rest.server.exceptions.*;
 import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor.ActionRequestDetails;
 import ca.uhn.fhir.util.TestUtil;
+import org.springframework.test.context.TestPropertySource;
 
+@TestPropertySource(properties = {
+	"scheduling_disabled=true"
+})
 public class FhirResourceDaoR4UpdateTest extends BaseJpaR4Test {
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoR4UpdateTest.class);
 
@@ -679,6 +683,8 @@ public class FhirResourceDaoR4UpdateTest extends BaseJpaR4Test {
 		ourLog.info("Now have {} inserts", QueryCountHolder.getGrandTotal().getInsert());
 		QueryCountHolder.clear();
 
+		ourLog.info("** About to update");
+
 		pt.setId(id);
 		pt.getNameFirstRep().addGiven("GIVEN1C");
 		myPatientDao.update(pt);
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirSystemDaoR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirSystemDaoR4Test.java
index 24af953ad46..fee9fdb8591 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirSystemDaoR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/FhirSystemDaoR4Test.java
@@ -16,6 +16,7 @@ import ca.uhn.fhir.rest.server.exceptions.*;
 import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor.ActionRequestDetails;
 import ca.uhn.fhir.util.TestUtil;
 import org.apache.commons.io.IOUtils;
+import org.hamcrest.Matchers;
 import org.hl7.fhir.instance.model.api.IAnyResource;
 import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.r4.model.*;
@@ -50,6 +51,11 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirSystemDaoR4Test.class);
 
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
 	@After
 	public void after() {
 		myDaoConfig.setAllowInlineMatchUrlReferences(false);
@@ -187,7 +193,6 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 
 	}
 
-
 	@Test
 	public void testBatchCreateWithBadRead() {
 		Bundle request = new Bundle();
@@ -1520,26 +1525,6 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		}
 	}
 
-	@Test
-	public void testTransactionDoesNotAllowDanglingTemporaryIds() throws Exception {
-		String input = IOUtils.toString(getClass().getResourceAsStream("/cdr-bundle.json"), StandardCharsets.UTF_8);
-		Bundle bundle = myFhirCtx.newJsonParser().parseResource(Bundle.class, input);
-
-		BundleEntryComponent entry = bundle.addEntry();
-		Patient p = new Patient();
-		p.getManagingOrganization().setReference("urn:uuid:30ce60cf-f7cb-4196-961f-cadafa8b7ff5");
-		entry.setResource(p);
-		entry.getRequest().setMethod(HTTPVerb.POST);
-		entry.getRequest().setUrl("Patient");
-
-		try {
-			mySystemDao.transaction(mySrd, bundle);
-			fail();
-		} catch (InvalidRequestException e) {
-			assertEquals("Unable to satisfy placeholder ID: urn:uuid:30ce60cf-f7cb-4196-961f-cadafa8b7ff5", e.getMessage());
-		}
-	}
-
 	@Test
 	public void testTransactionDoesNotLeavePlaceholderIds() {
 		String input;
@@ -1624,7 +1609,7 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		map.add(Patient.SP_IDENTIFIER, new TokenParam("foo", "bar"));
 		search = myPatientDao.search(map);
 		assertThat(toUnqualifiedVersionlessIdValues(search), contains(createdPatientId.toUnqualifiedVersionless().getValue()));
-		pat = (Patient) search.getResources(0,1).get(0);
+		pat = (Patient) search.getResources(0, 1).get(0);
 		assertEquals("foo", pat.getIdentifierFirstRep().getSystem());
 		// Observation
 		map = new SearchParameterMap();
@@ -1632,7 +1617,7 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		map.add(Observation.SP_IDENTIFIER, new TokenParam("foo", "dog"));
 		search = myObservationDao.search(map);
 		assertThat(toUnqualifiedVersionlessIdValues(search), contains(createdObservationId.toUnqualifiedVersionless().getValue()));
-		obs = (Observation) search.getResources(0,1).get(0);
+		obs = (Observation) search.getResources(0, 1).get(0);
 		assertEquals("foo", obs.getIdentifierFirstRep().getSystem());
 		assertEquals(createdPatientId.toUnqualifiedVersionless().getValue(), obs.getSubject().getReference());
 
@@ -1689,7 +1674,7 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		map.add(Patient.SP_IDENTIFIER, new TokenParam("foo", "bar"));
 		search = myPatientDao.search(map);
 		assertThat(toUnqualifiedVersionlessIdValues(search), contains(createdPatientId.toUnqualifiedVersionless().getValue()));
-		pat = (Patient) search.getResources(0,1).get(0);
+		pat = (Patient) search.getResources(0, 1).get(0);
 		assertEquals("foo", pat.getIdentifierFirstRep().getSystem());
 		// Observation
 		map = new SearchParameterMap();
@@ -1697,7 +1682,7 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		map.add(Observation.SP_IDENTIFIER, new TokenParam("foo", "dog"));
 		search = myObservationDao.search(map);
 		assertThat(toUnqualifiedVersionlessIdValues(search), contains(createdObservationId.toUnqualifiedVersionless().getValue()));
-		obs = (Observation) search.getResources(0,1).get(0);
+		obs = (Observation) search.getResources(0, 1).get(0);
 		assertEquals("foo", obs.getIdentifierFirstRep().getSystem());
 		assertEquals(createdPatientId.toUnqualifiedVersionless().getValue(), obs.getSubject().getReference());
 
@@ -1755,7 +1740,7 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		map.add(Patient.SP_IDENTIFIER, new TokenParam("foo", "bar"));
 		search = myPatientDao.search(map);
 		assertThat(toUnqualifiedVersionlessIdValues(search), contains(createdPatientId.toUnqualifiedVersionless().getValue()));
-		pat = (Patient) search.getResources(0,1).get(0);
+		pat = (Patient) search.getResources(0, 1).get(0);
 		assertEquals("foo", pat.getIdentifierFirstRep().getSystem());
 		// Observation
 		map = new SearchParameterMap();
@@ -1763,7 +1748,7 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		map.add(Observation.SP_IDENTIFIER, new TokenParam("foo", "dog"));
 		search = myObservationDao.search(map);
 		assertThat(toUnqualifiedVersionlessIdValues(search), contains(createdObservationId.toUnqualifiedVersionless().getValue()));
-		obs = (Observation) search.getResources(0,1).get(0);
+		obs = (Observation) search.getResources(0, 1).get(0);
 		assertEquals("foo", obs.getIdentifierFirstRep().getSystem());
 		assertEquals(createdPatientId.toUnqualifiedVersionless().getValue(), obs.getSubject().getReference());
 		assertEquals(ObservationStatus.FINAL, obs.getStatus());
@@ -2132,6 +2117,29 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		assertNull(nextEntry.getResource());
 	}
 
+	@Test
+	public void testTransactionWithUnknownTemnporaryIdReference() {
+		String methodName = "testTransactionWithUnknownTemnporaryIdReference";
+
+		Bundle request = new Bundle();
+
+		Patient p = new Patient();
+		p.addIdentifier().setSystem("urn:system").setValue(methodName);
+		request.addEntry().setResource(p).getRequest().setMethod(HTTPVerb.POST).setUrl("Patient");
+
+		p = new Patient();
+		p.addIdentifier().setSystem("urn:system").setValue(methodName);
+		p.getManagingOrganization().setReference(IdType.newRandomUuid().getValue());
+		request.addEntry().setResource(p).getRequest().setMethod(HTTPVerb.POST).setUrl("Patient");
+
+		try {
+			mySystemDao.transaction(mySrd, request);
+			fail();
+		} catch (InvalidRequestException e) {
+			assertThat(e.getMessage(), Matchers.matchesPattern("Unable to satisfy placeholder ID urn:uuid:[0-9a-z-]+ found in element named 'managingOrganization' within resource of type: Patient"));
+		}
+	}
+
 	@Test
 	public void testTransactionSearchWithCount() {
 		String methodName = "testTransactionSearchWithCount";
@@ -3047,44 +3055,6 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 		assertEquals(1, found.size().intValue());
 	}
 
-	@Test
-	public void testTransactionWithRelativeOidIds() {
-		Bundle res = new Bundle();
-		res.setType(BundleType.TRANSACTION);
-
-		Patient p1 = new Patient();
-		p1.setId("urn:oid:0.1.2.3");
-		p1.addIdentifier().setSystem("system").setValue("testTransactionWithRelativeOidIds01");
-		res.addEntry().setResource(p1).getRequest().setMethod(HTTPVerb.POST).setUrl("Patient");
-
-		Observation o1 = new Observation();
-		o1.addIdentifier().setSystem("system").setValue("testTransactionWithRelativeOidIds02");
-		o1.setSubject(new Reference("urn:oid:0.1.2.3"));
-		res.addEntry().setResource(o1).getRequest().setMethod(HTTPVerb.POST).setUrl("Observation");
-
-		Observation o2 = new Observation();
-		o2.addIdentifier().setSystem("system").setValue("testTransactionWithRelativeOidIds03");
-		o2.setSubject(new Reference("urn:oid:0.1.2.3"));
-		res.addEntry().setResource(o2).getRequest().setMethod(HTTPVerb.POST).setUrl("Observation");
-
-		Bundle resp = mySystemDao.transaction(mySrd, res);
-
-		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(resp));
-
-		assertEquals(BundleType.TRANSACTIONRESPONSE, resp.getTypeElement().getValue());
-		assertEquals(3, resp.getEntry().size());
-
-		assertTrue(resp.getEntry().get(0).getResponse().getLocation(), new IdType(resp.getEntry().get(0).getResponse().getLocation()).getIdPart().matches("^[0-9]+$"));
-		assertTrue(resp.getEntry().get(1).getResponse().getLocation(), new IdType(resp.getEntry().get(1).getResponse().getLocation()).getIdPart().matches("^[0-9]+$"));
-		assertTrue(resp.getEntry().get(2).getResponse().getLocation(), new IdType(resp.getEntry().get(2).getResponse().getLocation()).getIdPart().matches("^[0-9]+$"));
-
-		o1 = myObservationDao.read(new IdType(resp.getEntry().get(1).getResponse().getLocation()), mySrd);
-		o2 = myObservationDao.read(new IdType(resp.getEntry().get(2).getResponse().getLocation()), mySrd);
-		assertThat(o1.getSubject().getReferenceElement().getValue(), endsWith("Patient/" + p1.getIdElement().getIdPart()));
-		assertThat(o2.getSubject().getReferenceElement().getValue(), endsWith("Patient/" + p1.getIdElement().getIdPart()));
-
-	}
-
 	//
 	//
 	// /**
@@ -3187,6 +3157,44 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 	//
 	// }
 
+	@Test
+	public void testTransactionWithRelativeOidIds() {
+		Bundle res = new Bundle();
+		res.setType(BundleType.TRANSACTION);
+
+		Patient p1 = new Patient();
+		p1.setId("urn:oid:0.1.2.3");
+		p1.addIdentifier().setSystem("system").setValue("testTransactionWithRelativeOidIds01");
+		res.addEntry().setResource(p1).getRequest().setMethod(HTTPVerb.POST).setUrl("Patient");
+
+		Observation o1 = new Observation();
+		o1.addIdentifier().setSystem("system").setValue("testTransactionWithRelativeOidIds02");
+		o1.setSubject(new Reference("urn:oid:0.1.2.3"));
+		res.addEntry().setResource(o1).getRequest().setMethod(HTTPVerb.POST).setUrl("Observation");
+
+		Observation o2 = new Observation();
+		o2.addIdentifier().setSystem("system").setValue("testTransactionWithRelativeOidIds03");
+		o2.setSubject(new Reference("urn:oid:0.1.2.3"));
+		res.addEntry().setResource(o2).getRequest().setMethod(HTTPVerb.POST).setUrl("Observation");
+
+		Bundle resp = mySystemDao.transaction(mySrd, res);
+
+		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(resp));
+
+		assertEquals(BundleType.TRANSACTIONRESPONSE, resp.getTypeElement().getValue());
+		assertEquals(3, resp.getEntry().size());
+
+		assertTrue(resp.getEntry().get(0).getResponse().getLocation(), new IdType(resp.getEntry().get(0).getResponse().getLocation()).getIdPart().matches("^[0-9]+$"));
+		assertTrue(resp.getEntry().get(1).getResponse().getLocation(), new IdType(resp.getEntry().get(1).getResponse().getLocation()).getIdPart().matches("^[0-9]+$"));
+		assertTrue(resp.getEntry().get(2).getResponse().getLocation(), new IdType(resp.getEntry().get(2).getResponse().getLocation()).getIdPart().matches("^[0-9]+$"));
+
+		o1 = myObservationDao.read(new IdType(resp.getEntry().get(1).getResponse().getLocation()), mySrd);
+		o2 = myObservationDao.read(new IdType(resp.getEntry().get(2).getResponse().getLocation()), mySrd);
+		assertThat(o1.getSubject().getReferenceElement().getValue(), endsWith("Patient/" + p1.getIdElement().getIdPart()));
+		assertThat(o2.getSubject().getReferenceElement().getValue(), endsWith("Patient/" + p1.getIdElement().getIdPart()));
+
+	}
+
 	/**
 	 * This is not the correct way to do it, but we'll allow it to be lenient
 	 */
@@ -3230,7 +3238,7 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 
 	@Test
 	public void testTransactionWithReplacement() {
-		byte[] bytes = new byte[] {0, 1, 2, 3, 4};
+		byte[] bytes = new byte[]{0, 1, 2, 3, 4};
 
 		Binary binary = new Binary();
 		binary.setId(IdType.newRandomUuid());
@@ -3399,9 +3407,4 @@ public class FhirSystemDaoR4Test extends BaseJpaR4SystemTest {
 
 	}
 
-	@AfterClass
-	public static void afterClassClearContext() {
-		TestUtil.clearAllStaticFieldsForUnitTest();
-	}
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4Test.java
index fdd027d28fc..3d43fd835c6 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/dao/r4/SearchParamExtractorR4Test.java
@@ -3,6 +3,7 @@ package ca.uhn.fhir.jpa.dao.r4;
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.context.RuntimeResourceDefinition;
 import ca.uhn.fhir.context.RuntimeSearchParam;
+import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.jpa.dao.ISearchParamRegistry;
 import ca.uhn.fhir.jpa.entity.BaseResourceIndexedSearchParam;
 import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamToken;
@@ -80,7 +81,7 @@ public class SearchParamExtractorR4Test {
 			}
 		};
 
-		SearchParamExtractorR4 extractor = new SearchParamExtractorR4(ourCtx, ourValidationSupport, searchParamRegistry);
+		SearchParamExtractorR4 extractor = new SearchParamExtractorR4(new DaoConfig(), ourCtx, ourValidationSupport, searchParamRegistry);
 		Set<BaseResourceIndexedSearchParam> tokens = extractor.extractSearchParamTokens(new ResourceTable(), obs);
 		assertEquals(1, tokens.size());
 		ResourceIndexedSearchParamToken token = (ResourceIndexedSearchParamToken) tokens.iterator().next();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamQuantityTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamQuantityTest.java
index bb6a3cb8383..642820ee03d 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamQuantityTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamQuantityTest.java
@@ -19,19 +19,8 @@ public class ResourceIndexedSearchParamQuantityTest {
 		ResourceIndexedSearchParamQuantity token = createParam("NAME", "123.001", "value", "VALUE");
 
 		// Make sure our hashing function gives consistent results
-		assertEquals(945335027461836896L, token.getHashUnitsAndValPrefix().longValue());
-		assertEquals(5549105497508660145L, token.getHashValPrefix().longValue());
-	}
-
-	@Test
-	public void testValueTrimming() {
-		assertEquals(7265149425397186226L, createParam("NAME", "401.001", "value", "VALUE").getHashUnitsAndValPrefix().longValue());
-		assertEquals(7265149425397186226L, createParam("NAME", "401.99999", "value", "VALUE").getHashUnitsAndValPrefix().longValue());
-		assertEquals(7265149425397186226L, createParam("NAME", "401", "value", "VALUE").getHashUnitsAndValPrefix().longValue());
-		// Should be different
-		assertEquals(-8387917096585386046L, createParam("NAME", "400.9999999", "value", "VALUE").getHashUnitsAndValPrefix().longValue());
-		// Should be different
-		assertEquals(8819656626732693650L, createParam("NAME", "402.000000", "value", "VALUE").getHashUnitsAndValPrefix().longValue());
+		assertEquals(834432764963581074L, token.getHashIdentity().longValue());
+		assertEquals(-1970227166134682431L, token.getHashIdentityAndUnits().longValue());
 	}
 
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamStringTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamStringTest.java
index 15cc5527ef2..403cf937850 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamStringTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/entity/ResourceIndexedSearchParamStringTest.java
@@ -1,14 +1,16 @@
 package ca.uhn.fhir.jpa.entity;
 
+import ca.uhn.fhir.jpa.dao.DaoConfig;
 import org.junit.Test;
 
 import static org.junit.Assert.*;
 
+@SuppressWarnings("SpellCheckingInspection")
 public class ResourceIndexedSearchParamStringTest {
 
 	@Test
 	public void testHashFunctions() {
-		ResourceIndexedSearchParamString token = new ResourceIndexedSearchParamString("NAME", "value", "VALUE");
+		ResourceIndexedSearchParamString token = new ResourceIndexedSearchParamString(new DaoConfig(), "NAME", "value", "VALUE");
 		token.setResource(new ResourceTable().setResourceType("Patient"));
 
 		// Make sure our hashing function gives consistent results
@@ -18,7 +20,7 @@ public class ResourceIndexedSearchParamStringTest {
 
 	@Test
 	public void testHashFunctionsPrefixOnly() {
-		ResourceIndexedSearchParamString token = new ResourceIndexedSearchParamString("NAME", "vZZZZZZZZZZZZZZZZ", "VZZZZZZzzzZzzzZ");
+		ResourceIndexedSearchParamString token = new ResourceIndexedSearchParamString(new DaoConfig(), "NAME", "vZZZZZZZZZZZZZZZZ", "VZZZZZZzzzZzzzZ");
 		token.setResource(new ResourceTable().setResourceType("Patient"));
 
 		// Should be the same as in testHashFunctions()
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/ResourceProviderDstu2Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/ResourceProviderDstu2Test.java
index 289f63e8f3e..0267056c553 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/ResourceProviderDstu2Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/ResourceProviderDstu2Test.java
@@ -1,46 +1,24 @@
 package ca.uhn.fhir.jpa.provider;
 
-import ca.uhn.fhir.jpa.dao.DaoConfig;
-import ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl;
-import ca.uhn.fhir.model.api.ExtensionDt;
-import ca.uhn.fhir.model.api.IResource;
-import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
-import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
-import ca.uhn.fhir.model.dstu2.composite.CodingDt;
-import ca.uhn.fhir.model.dstu2.composite.MetaDt;
-import ca.uhn.fhir.model.dstu2.composite.PeriodDt;
-import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt;
-import ca.uhn.fhir.model.dstu2.resource.*;
-import ca.uhn.fhir.model.dstu2.resource.Bundle.Entry;
-import ca.uhn.fhir.model.dstu2.valueset.*;
-import ca.uhn.fhir.model.primitive.*;
-import ca.uhn.fhir.parser.IParser;
-import ca.uhn.fhir.rest.api.Constants;
-import ca.uhn.fhir.rest.api.MethodOutcome;
-import ca.uhn.fhir.rest.api.SummaryEnum;
-import ca.uhn.fhir.rest.client.api.IGenericClient;
-import ca.uhn.fhir.rest.param.*;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
-import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
-import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
-import ca.uhn.fhir.util.BundleUtil;
-import ca.uhn.fhir.util.StopWatch;
-import ca.uhn.fhir.util.TestUtil;
-import ca.uhn.fhir.util.UrlUtil;
-import com.google.common.base.Charsets;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.methods.*;
-import org.apache.http.entity.ByteArrayEntity;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.StringEntity;
-import org.hl7.fhir.instance.model.api.IBaseBundle;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.instance.model.api.IIdType;
-import org.junit.*;
-import org.springframework.test.util.AopTestUtils;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.containsInRelativeOrder;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.emptyString;
+import static org.hamcrest.Matchers.endsWith;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.hasItems;
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.Matchers.startsWith;
+import static org.hamcrest.Matchers.stringContainsInOrder;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -49,10 +27,110 @@ import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.SocketTimeoutException;
 import java.nio.charset.StandardCharsets;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.hl7.fhir.instance.model.api.IBaseBundle;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IIdType;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.springframework.test.util.AopTestUtils;
+
+import com.google.common.base.Charsets;
+
+import ca.uhn.fhir.jpa.dao.DaoConfig;
+import ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl;
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.model.api.ExtensionDt;
+import ca.uhn.fhir.model.api.IResource;
+import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
+import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
+import ca.uhn.fhir.model.dstu2.composite.CodingDt;
+import ca.uhn.fhir.model.dstu2.composite.MetaDt;
+import ca.uhn.fhir.model.dstu2.composite.PeriodDt;
+import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt;
+import ca.uhn.fhir.model.dstu2.resource.BaseResource;
+import ca.uhn.fhir.model.dstu2.resource.Basic;
+import ca.uhn.fhir.model.dstu2.resource.Binary;
+import ca.uhn.fhir.model.dstu2.resource.Bundle;
+import ca.uhn.fhir.model.dstu2.resource.Bundle.Entry;
+import ca.uhn.fhir.model.dstu2.resource.CarePlan;
+import ca.uhn.fhir.model.dstu2.resource.Condition;
+import ca.uhn.fhir.model.dstu2.resource.Device;
+import ca.uhn.fhir.model.dstu2.resource.DiagnosticOrder;
+import ca.uhn.fhir.model.dstu2.resource.DocumentManifest;
+import ca.uhn.fhir.model.dstu2.resource.DocumentReference;
+import ca.uhn.fhir.model.dstu2.resource.Encounter;
+import ca.uhn.fhir.model.dstu2.resource.ImagingStudy;
+import ca.uhn.fhir.model.dstu2.resource.Location;
+import ca.uhn.fhir.model.dstu2.resource.Medication;
+import ca.uhn.fhir.model.dstu2.resource.MedicationAdministration;
+import ca.uhn.fhir.model.dstu2.resource.MedicationOrder;
+import ca.uhn.fhir.model.dstu2.resource.MessageHeader;
+import ca.uhn.fhir.model.dstu2.resource.Observation;
+import ca.uhn.fhir.model.dstu2.resource.OperationOutcome;
+import ca.uhn.fhir.model.dstu2.resource.Organization;
+import ca.uhn.fhir.model.dstu2.resource.Parameters;
+import ca.uhn.fhir.model.dstu2.resource.Patient;
+import ca.uhn.fhir.model.dstu2.resource.Practitioner;
+import ca.uhn.fhir.model.dstu2.resource.Questionnaire;
+import ca.uhn.fhir.model.dstu2.resource.QuestionnaireResponse;
+import ca.uhn.fhir.model.dstu2.resource.Subscription;
+import ca.uhn.fhir.model.dstu2.resource.ValueSet;
+import ca.uhn.fhir.model.dstu2.valueset.AnswerFormatEnum;
+import ca.uhn.fhir.model.dstu2.valueset.BundleTypeEnum;
+import ca.uhn.fhir.model.dstu2.valueset.EncounterClassEnum;
+import ca.uhn.fhir.model.dstu2.valueset.EncounterStateEnum;
+import ca.uhn.fhir.model.dstu2.valueset.HTTPVerbEnum;
+import ca.uhn.fhir.model.dstu2.valueset.SearchEntryModeEnum;
+import ca.uhn.fhir.model.dstu2.valueset.SubscriptionChannelTypeEnum;
+import ca.uhn.fhir.model.dstu2.valueset.SubscriptionStatusEnum;
+import ca.uhn.fhir.model.primitive.DateDt;
+import ca.uhn.fhir.model.primitive.DateTimeDt;
+import ca.uhn.fhir.model.primitive.IdDt;
+import ca.uhn.fhir.model.primitive.InstantDt;
+import ca.uhn.fhir.model.primitive.StringDt;
+import ca.uhn.fhir.model.primitive.UnsignedIntDt;
+import ca.uhn.fhir.model.primitive.UriDt;
+import ca.uhn.fhir.parser.IParser;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.MethodOutcome;
+import ca.uhn.fhir.rest.api.SummaryEnum;
+import ca.uhn.fhir.rest.client.api.IGenericClient;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import ca.uhn.fhir.rest.param.NumberParam;
+import ca.uhn.fhir.rest.param.StringAndListParam;
+import ca.uhn.fhir.rest.param.StringOrListParam;
+import ca.uhn.fhir.rest.param.StringParam;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.rest.server.exceptions.NotImplementedOperationException;
+import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
+import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
+import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
+import ca.uhn.fhir.util.BundleUtil;
+import ca.uhn.fhir.util.StopWatch;
+import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.UrlUtil;
 
 public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 
@@ -87,11 +165,11 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 		mySearchCoordinatorSvcRaw = AopTestUtils.getTargetObject(mySearchCoordinatorSvc);
 	}
 
-	private void checkParamMissing(String paramName) throws IOException, ClientProtocolException {
+	private void checkParamMissing(String paramName) throws IOException {
 		HttpGet get = new HttpGet(ourServerBase + "/Observation?" + paramName + ":missing=false");
-		CloseableHttpResponse resp = ourHttpClient.execute(get);
-		IOUtils.closeQuietly(resp.getEntity().getContent());
-		assertEquals(200, resp.getStatusLine().getStatusCode());
+		try (CloseableHttpResponse resp = ourHttpClient.execute(get)) {
+			assertEquals(200, resp.getStatusLine().getStatusCode());
+		}
 	}
 
 	/**
@@ -186,7 +264,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testCountParam() throws Exception {
+	public void testCountParam() {
 		// NB this does not get used- The paging provider has its own limits built in
 		myDaoConfig.setHardSearchLimit(100);
 
@@ -224,7 +302,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	 * See #438
 	 */
 	@Test
-	public void testCreateAndUpdateBinary() throws ClientProtocolException, Exception {
+	public void testCreateAndUpdateBinary() throws Exception {
 		byte[] arr = {1, 21, 74, 123, -44};
 		Binary binary = new Binary();
 		binary.setContent(arr);
@@ -289,7 +367,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testCreateQuestionnaireResponseWithValidation() throws IOException {
+	public void testCreateQuestionnaireResponseWithValidation() {
 		ValueSet options = new ValueSet();
 		options.getCodeSystem().setSystem("urn:system").addConcept().setCode("code0");
 		IIdType optId = ourClient.create().resource(options).execute().getId();
@@ -400,12 +478,35 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testCreateResourceReturnsOperationOutcomeByDefault() throws IOException {
+	public void testCreateResourceReturnsRepresentationByDefault() throws IOException {
 		String resource = "<Patient xmlns=\"http://hl7.org/fhir\"></Patient>";
 
 		HttpPost post = new HttpPost(ourServerBase + "/Patient");
 		post.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
 
+		CloseableHttpResponse response = ourHttpClient.execute(post);
+		try {
+			assertEquals(201, response.getStatusLine().getStatusCode());
+			String respString = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
+			ourLog.info(response.toString());
+			ourLog.info(respString);
+			assertThat(respString, startsWith("<Patient xmlns=\"http://hl7.org/fhir\">"));
+			assertThat(respString, endsWith("</Patient>"));
+			//assertThat(respString, containsString("<OperationOutcome xmlns=\"http://hl7.org/fhir\">"));
+		} finally {
+			response.getEntity().getContent().close();
+			response.close();
+		}
+	}
+	
+	@Test
+	public void testCreateResourceReturnsOperationOutcome() throws IOException {
+		String resource = "<Patient xmlns=\"http://hl7.org/fhir\"></Patient>";
+
+		HttpPost post = new HttpPost(ourServerBase + "/Patient");
+		post.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
+		post.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
+
 		CloseableHttpResponse response = ourHttpClient.execute(post);
 		try {
 			assertEquals(201, response.getStatusLine().getStatusCode());
@@ -419,6 +520,27 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 		}
 	}
 
+	@Test
+	public void testCreateResourceWithNumericId() throws IOException {
+		String resource = "<Patient xmlns=\"http://hl7.org/fhir\"></Patient>";
+
+		HttpPost post = new HttpPost(ourServerBase + "/Patient/2");
+		post.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
+
+		CloseableHttpResponse response = ourHttpClient.execute(post);
+		try {
+			String responseString = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
+			ourLog.info(responseString);
+			assertEquals(400, response.getStatusLine().getStatusCode());
+			OperationOutcome oo = myFhirCtx.newXmlParser().parseResource(OperationOutcome.class, responseString);
+			assertEquals("Can not create resource with ID \"2\", ID must not be supplied on a create (POST) operation (use an HTTP PUT / update operation if you wish to supply an ID)",
+				oo.getIssue().get(0).getDiagnostics());
+		} finally {
+			response.getEntity().getContent().close();
+			response.close();
+		}
+	}
+
 	// private void delete(String theResourceType, String theParamName, String theParamValue) {
 	// Bundle resources;
 	// do {
@@ -445,28 +567,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	// }
 
 	@Test
-	public void testCreateResourceWithNumericId() throws IOException {
-		String resource = "<Patient xmlns=\"http://hl7.org/fhir\"></Patient>";
-
-		HttpPost post = new HttpPost(ourServerBase + "/Patient/2");
-		post.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
-
-		CloseableHttpResponse response = ourHttpClient.execute(post);
-		try {
-			String responseString = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
-			ourLog.info(responseString);
-			assertEquals(400, response.getStatusLine().getStatusCode());
-			OperationOutcome oo = myFhirCtx.newXmlParser().parseResource(OperationOutcome.class, responseString);
-			assertEquals("Can not create resource with ID \"2\", ID must not be supplied on a create (POST) operation (use an HTTP PUT / update operation if you wish to supply an ID)",
-				oo.getIssue().get(0).getDiagnostics());
-		} finally {
-			response.getEntity().getContent().close();
-			response.close();
-		}
-	}
-
-	@Test
-	public void testCreateWithForcedId() throws IOException {
+	public void testCreateWithForcedId() {
 		String methodName = "testCreateWithForcedId";
 
 		Patient p = new Patient();
@@ -628,7 +729,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	 * Based on email from Rene Spronk
 	 */
 	@Test
-	public void testDeleteResourceConditional2() throws IOException, Exception {
+	public void testDeleteResourceConditional2() throws Exception {
 		String methodName = "testDeleteResourceConditional2";
 
 		Patient pt = new Patient();
@@ -695,7 +796,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	 * See issue #52
 	 */
 	@Test
-	public void testDiagnosticOrderResources() throws Exception {
+	public void testDiagnosticOrderResources() {
 		IGenericClient client = ourClient;
 
 		int initialSize = client
@@ -787,7 +888,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testEverythingEncounterInstance() throws Exception {
+	public void testEverythingEncounterInstance() {
 		String methodName = "testEverythingEncounterInstance";
 
 		Organization org1parent = new Organization();
@@ -851,7 +952,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testEverythingEncounterType() throws Exception {
+	public void testEverythingEncounterType() {
 		String methodName = "testEverythingEncounterInstance";
 
 		Organization org1parent = new Organization();
@@ -951,7 +1052,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 		List<IIdType> actual;
 		StringAndListParam param;
 
-		ourLog.info("Pt1:{} Pt2:{} Obs1:{} Obs2:{} Obs3:{}", new Object[] {ptId1.getIdPart(), ptId2.getIdPart(), obsId1.getIdPart(), obsId2.getIdPart(), obsId3.getIdPart()});
+		ourLog.info("Pt1:{} Pt2:{} Obs1:{} Obs2:{} Obs3:{}", ptId1.getIdPart(), ptId2.getIdPart(), obsId1.getIdPart(), obsId2.getIdPart(), obsId3.getIdPart());
 
 		param = new StringAndListParam();
 		param.addAnd(new StringOrListParam().addOr(new StringParam("obsvalue1")));
@@ -974,7 +1075,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	 * See #147
 	 */
 	@Test
-	public void testEverythingPatientDoesntRepeatPatient() throws Exception {
+	public void testEverythingPatientDoesntRepeatPatient() {
 		ca.uhn.fhir.model.dstu2.resource.Bundle b;
 		b = myFhirCtx.newJsonParser().parseResource(ca.uhn.fhir.model.dstu2.resource.Bundle.class, new InputStreamReader(ResourceProviderDstu2Test.class.getResourceAsStream("/bug147-bundle.json")));
 
@@ -1033,7 +1134,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	 * Test for #226
 	 */
 	@Test
-	public void testEverythingPatientIncludesBackReferences() throws Exception {
+	public void testEverythingPatientIncludesBackReferences() {
 		String methodName = "testEverythingIncludesBackReferences";
 
 		Medication med = new Medication();
@@ -1060,7 +1161,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	 * See #148
 	 */
 	@Test
-	public void testEverythingPatientIncludesCondition() throws Exception {
+	public void testEverythingPatientIncludesCondition() {
 		ca.uhn.fhir.model.dstu2.resource.Bundle b = new ca.uhn.fhir.model.dstu2.resource.Bundle();
 		Patient p = new Patient();
 		p.setId("1");
@@ -1092,7 +1193,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testEverythingPatientOperation() throws Exception {
+	public void testEverythingPatientOperation() {
 		String methodName = "testEverythingOperation";
 
 		Organization org1parent = new Organization();
@@ -1137,7 +1238,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testEverythingPatientType() throws Exception {
+	public void testEverythingPatientType() {
 		String methodName = "testEverythingPatientType";
 
 		Organization o1 = new Organization();
@@ -1214,7 +1315,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 			ourLog.info(output);
 			List<IdDt> ids = toIdListUnqualifiedVersionless(myFhirCtx.newXmlParser().parseResource(Bundle.class, output));
 			ourLog.info(ids.toString());
-			assertThat(ids, containsInAnyOrder(pId, cId));
+			assertThat(ids, containsInAnyOrder(pId, cId, oId));
 		} finally {
 			response.close();
 		}
@@ -1229,7 +1330,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 			ourLog.info(output);
 			List<IdDt> ids = toIdListUnqualifiedVersionless(myFhirCtx.newXmlParser().parseResource(Bundle.class, output));
 			ourLog.info(ids.toString());
-			assertThat(ids, containsInAnyOrder(pId, cId));
+			assertThat(ids, containsInAnyOrder(pId, cId, oId));
 		} finally {
 			response.close();
 		}
@@ -1451,7 +1552,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testMetaOperations() throws Exception {
+	public void testMetaOperations() {
 		String methodName = "testMetaOperations";
 
 		Patient pt = new Patient();
@@ -1488,7 +1589,6 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 		}
 	}
 
-
 	@Test
 	public void testPagingOverEverythingSet() throws InterruptedException {
 		Patient p = new Patient();
@@ -1543,7 +1643,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testPagingOverEverythingSetWithNoPagingProvider() throws InterruptedException {
+	public void testPagingOverEverythingSetWithNoPagingProvider() {
 		ourRestServer.setPagingProvider(null);
 
 		Patient p = new Patient();
@@ -1576,11 +1676,30 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 
 	}
 
+	@Test
+	public void testProcessMessage() {
+
+		Bundle bundle = new Bundle();
+		bundle.setType(BundleTypeEnum.MESSAGE);
+
+		Parameters parameters = new Parameters();
+		parameters.addParameter()
+			.setName("content")
+			.setResource(bundle);
+		try {
+			ourClient.operation().onType(MessageHeader.class).named(JpaConstants.OPERATION_PROCESS_MESSAGE).withParameters(parameters).execute();
+			fail();
+		} catch (NotImplementedOperationException e) {
+			assertThat(e.getMessage(), containsString("This operation is not yet implemented on this server"));
+		}
+
+	}
+
 	/**
 	 * Test for issue #60
 	 */
 	@Test
-	public void testReadAllInstancesOfType() throws Exception {
+	public void testReadAllInstancesOfType() {
 		Patient pat;
 
 		pat = new Patient();
@@ -1960,7 +2079,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 
 	}
 
-	private void testSearchReturnsResults(String search) throws IOException, ClientProtocolException {
+	private void testSearchReturnsResults(String search) throws IOException {
 		int matches;
 		HttpGet get = new HttpGet(ourServerBase + search);
 		CloseableHttpResponse response = ourHttpClient.execute(get);
@@ -2001,7 +2120,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testSearchWithInclude() throws Exception {
+	public void testSearchWithInclude() {
 		Organization org = new Organization();
 		org.addIdentifier().setSystem("urn:system:rpdstu2").setValue("testSearchWithInclude01");
 		IdDt orgId = (IdDt) ourClient.create().resource(org).prettyPrint().encodedXml().execute().getId();
@@ -2029,7 +2148,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test(expected = InvalidRequestException.class)
-	public void testSearchWithInvalidSort() throws Exception {
+	public void testSearchWithInvalidSort() {
 		Observation o = new Observation();
 		o.getCode().setText("testSearchWithInvalidSort");
 		myObservationDao.create(o, mySrd);
@@ -2042,7 +2161,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testSearchWithMissing() throws Exception {
+	public void testSearchWithMissing() {
 		ourLog.info("Starting testSearchWithMissing");
 
 		String methodName = "testSearchWithMissing";
@@ -2286,7 +2405,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	 * Test for issue #60
 	 */
 	@Test
-	public void testStoreUtf8Characters() throws Exception {
+	public void testStoreUtf8Characters() {
 		Organization org = new Organization();
 		org.setName("測試醫院");
 		org.addIdentifier().setSystem("urn:system").setValue("testStoreUtf8Characters_01");
@@ -2340,7 +2459,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testUpdateInvalidUrl() throws IOException, Exception {
+	public void testUpdateInvalidUrl() throws Exception {
 		String methodName = "testUpdateInvalidReference";
 
 		Patient pt = new Patient();
@@ -2362,7 +2481,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testUpdateRejectsInvalidTypes() throws InterruptedException {
+	public void testUpdateRejectsInvalidTypes() {
 
 		Patient p1 = new Patient();
 		p1.addIdentifier().setSystem("urn:system").setValue("testUpdateRejectsInvalidTypes");
@@ -2467,7 +2586,7 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 	}
 
 	@Test
-	public void testUpdateResourceWithPrefer() throws IOException, Exception {
+	public void testUpdateResourceWithPrefer() throws Exception {
 		String methodName = "testUpdateResourceWithPrefer";
 
 		Patient pt = new Patient();
@@ -2680,7 +2799,6 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
 
 		Patient patient = new Patient();
 		patient.addName().addGiven("James" + StringUtils.leftPad("James", 1000000, 'A'));
-		;
 		patient.setBirthDate(new DateDt("2011-02-02"));
 
 		Parameters input = new Parameters();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/BaseResourceProviderDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/BaseResourceProviderDstu3Test.java
index a66c7d9afda..607b8ddbfe2 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/BaseResourceProviderDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/BaseResourceProviderDstu3Test.java
@@ -132,13 +132,15 @@ public abstract class BaseResourceProviderDstu3Test extends BaseJpaDstu3Test {
 			// Register a CORS filter
 			CorsConfiguration config = new CorsConfiguration();
 			CorsInterceptor corsInterceptor = new CorsInterceptor(config);
-			config.addAllowedHeader("x-fhir-starter");
-			config.addAllowedHeader("Origin");
 			config.addAllowedHeader("Accept");
-			config.addAllowedHeader("X-Requested-With");
-			config.addAllowedHeader("Content-Type");
-			config.addAllowedHeader("Access-Control-Request-Method");
 			config.addAllowedHeader("Access-Control-Request-Headers");
+			config.addAllowedHeader("Access-Control-Request-Method");
+			config.addAllowedHeader("Cache-Control");
+			config.addAllowedHeader("Content-Type");
+			config.addAllowedHeader("Origin");
+			config.addAllowedHeader("Prefer");
+			config.addAllowedHeader("x-fhir-starter");
+			config.addAllowedHeader("X-Requested-With");
 			config.addAllowedOrigin("*");
 			config.addExposedHeader("Location");
 			config.addExposedHeader("Content-Location");
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/CompositionDocumentDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/CompositionDocumentDstu3Test.java
new file mode 100644
index 00000000000..5d0269999b1
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/CompositionDocumentDstu3Test.java
@@ -0,0 +1,134 @@
+package ca.uhn.fhir.jpa.provider.dstu3;
+
+import ca.uhn.fhir.jpa.dao.DaoConfig;
+import ca.uhn.fhir.parser.StrictErrorHandler;
+import ca.uhn.fhir.rest.api.EncodingEnum;
+import ca.uhn.fhir.util.TestUtil;
+import com.google.common.base.Charsets;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.hl7.fhir.dstu3.model.*;
+import org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
+import org.hl7.fhir.dstu3.model.Encounter.EncounterStatus;
+import org.hl7.fhir.dstu3.model.Observation.ObservationStatus;
+import org.junit.*;
+
+import java.io.IOException;
+import java.util.*;
+
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
+
+public class CompositionDocumentDstu3Test extends BaseResourceProviderDstu3Test {
+
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(CompositionDocumentDstu3Test.class);
+	private String orgId;
+	private String patId;
+	private List<String> myObsIds;
+	private String encId;
+	private String listId;
+	private String compId;
+
+	@Before
+	public void beforeDisableResultReuse() {
+		myDaoConfig.setReuseCachedSearchResultsForMillis(null);
+	}
+
+	@Override
+	@After
+	public void after() throws Exception {
+		super.after();
+
+		myDaoConfig.setReuseCachedSearchResultsForMillis(new DaoConfig().getReuseCachedSearchResultsForMillis());
+	}
+
+	@Override
+	public void before() throws Exception {
+		super.before();
+		myFhirCtx.setParserErrorHandler(new StrictErrorHandler());
+
+		myDaoConfig.setAllowMultipleDelete(true);
+
+		Organization org = new Organization();
+		org.setName("an org");
+		orgId = ourClient.create().resource(org).execute().getId().toUnqualifiedVersionless().getValue();
+		ourLog.info("OrgId: {}", orgId);
+
+		Patient patient = new Patient();
+		patient.getManagingOrganization().setReference(orgId);
+		patId = ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless().getValue();
+
+		Encounter enc = new Encounter();
+		enc.setStatus(EncounterStatus.ARRIVED);
+		enc.getSubject().setReference(patId);
+		enc.getServiceProvider().setReference(orgId);
+		encId = ourClient.create().resource(enc).execute().getId().toUnqualifiedVersionless().getValue();
+
+		ListResource listResource = new ListResource();
+
+		ArrayList<Observation> myObs = new ArrayList<>();
+		myObsIds = new ArrayList<String>();
+		for (int i = 0; i < 5; i++) {
+			Observation obs = new Observation();
+			obs.getSubject().setReference(patId);
+			obs.setStatus(ObservationStatus.FINAL);
+			String obsId = ourClient.create().resource(obs).execute().getId().toUnqualifiedVersionless().getValue();
+			listResource.addEntry(new ListResource.ListEntryComponent().setItem(new Reference(obs)));
+			myObs.add(obs);
+			myObsIds.add(obsId);
+		}
+
+		listId = ourClient.create().resource(listResource).execute().getId().toUnqualifiedVersionless().getValue();
+
+		Composition composition = new Composition();
+		composition.setSubject(new Reference(patId));
+		composition.addSection().addEntry(new Reference(patId));
+		composition.addSection().addEntry(new Reference(orgId));
+		composition.addSection().addEntry(new Reference(encId));
+		composition.addSection().addEntry(new Reference(listId));
+
+		for (String obsId : myObsIds) {
+			composition.addSection().addEntry(new Reference(obsId));
+		}
+		compId = ourClient.create().resource(composition).execute().getId().toUnqualifiedVersionless().getValue();
+	}
+
+	@Test
+	public void testDocumentBundleReturnedCorrect() throws IOException {
+
+		String theUrl = ourServerBase + "/" + compId + "/$document?_format=json";
+		Bundle bundle = fetchBundle(theUrl, EncodingEnum.JSON);
+
+		assertNull(bundle.getLink("next"));
+
+		Set<String> actual = new HashSet<>();
+		for (BundleEntryComponent nextEntry : bundle.getEntry()) {
+			actual.add(nextEntry.getResource().getIdElement().toUnqualifiedVersionless().getValue());
+		}
+
+		ourLog.info("Found IDs: {}", actual);
+		assertThat(actual, hasItem(patId));
+		assertThat(actual, hasItem(orgId));
+		assertThat(actual, hasItem(encId));
+		assertThat(actual, hasItem(listId));
+		assertThat(actual, hasItems(myObsIds.toArray(new String[0])));
+	}
+
+	private Bundle fetchBundle(String theUrl, EncodingEnum theEncoding) throws IOException, ClientProtocolException {
+		Bundle bundle;
+		HttpGet get = new HttpGet(theUrl);
+
+		try (CloseableHttpResponse resp = ourHttpClient.execute(get)) {
+			String resourceString = IOUtils.toString(resp.getEntity().getContent(), Charsets.UTF_8);
+			bundle = theEncoding.newParser(myFhirCtx).parseResource(Bundle.class, resourceString);
+		} 
+		return bundle;
+	}
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3BundleTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3BundleTest.java
index a7280d1094f..1f6eca2bf6d 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3BundleTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3BundleTest.java
@@ -1,46 +1,68 @@
 package ca.uhn.fhir.jpa.provider.dstu3;
 
-import static org.junit.Assert.*;
-
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.rest.server.exceptions.NotImplementedOperationException;
+import ca.uhn.fhir.util.TestUtil;
 import org.hl7.fhir.dstu3.model.Bundle;
 import org.hl7.fhir.dstu3.model.Bundle.BundleType;
 import org.hl7.fhir.dstu3.model.Composition;
+import org.hl7.fhir.dstu3.model.MessageHeader;
+import org.hl7.fhir.dstu3.model.Parameters;
 import org.hl7.fhir.instance.model.api.IIdType;
 import org.junit.AfterClass;
 import org.junit.Test;
 
-import ca.uhn.fhir.util.TestUtil;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.Assert.*;
 
 public class ResourceProviderDstu3BundleTest extends BaseResourceProviderDstu3Test {
 
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderDstu3BundleTest.class);
 
+	/**
+	 * See #401
+	 */
+	@Test
+	public void testBundlePreservesFullUrl() {
+
+		Bundle bundle = new Bundle();
+		bundle.setType(BundleType.DOCUMENT);
+
+		Composition composition = new Composition();
+		composition.setTitle("Visit Summary");
+		bundle.addEntry().setFullUrl("http://foo").setResource(composition);
+
+		IIdType id = ourClient.create().resource(bundle).execute().getId();
+
+		Bundle retBundle = ourClient.read().resource(Bundle.class).withId(id).execute();
+		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(retBundle));
+
+		assertEquals("http://foo", bundle.getEntry().get(0).getFullUrl());
+	}
+
+	@Test
+	public void testProcessMessage() {
+
+		Bundle bundle = new Bundle();
+		bundle.setType(Bundle.BundleType.MESSAGE);
+
+		Parameters parameters = new Parameters();
+		parameters.addParameter()
+			.setName("content")
+			.setResource(bundle);
+		try {
+			ourClient.operation().onType(MessageHeader.class).named(JpaConstants.OPERATION_PROCESS_MESSAGE).withParameters(parameters).execute();
+			fail();
+		} catch (NotImplementedOperationException e) {
+			assertThat(e.getMessage(), containsString("This operation is not yet implemented on this server"));
+		}
+
+	}
+
 	@AfterClass
 	public static void afterClassClearContext() {
 		TestUtil.clearAllStaticFieldsForUnitTest();
 	}
 
 
-	/**
-	 * See #401
-	 */
-	@Test
-	public void testBundlePreservesFullUrl() throws Exception {
-		
-		Bundle bundle = new Bundle();
-		bundle.setType(BundleType.DOCUMENT);
-		
-		Composition composition = new Composition();
-		composition.setTitle("Visit Summary");
-		bundle.addEntry().setFullUrl("http://foo").setResource(composition);
-		
-		IIdType id = ourClient.create().resource(bundle).execute().getId();
-		
-		Bundle retBundle = ourClient.read().resource(Bundle.class).withId(id).execute();
-		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(retBundle));
-		
-		assertEquals("http://foo", bundle.getEntry().get(0).getFullUrl());
-	}
-
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3Test.java
index d34d31b3a7a..142a4963378 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3Test.java
@@ -1,32 +1,41 @@
 package ca.uhn.fhir.jpa.provider.dstu3;
 
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.*;
-import java.math.BigDecimal;
-import java.net.*;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
-
+import ca.uhn.fhir.jpa.dao.DaoConfig;
+import ca.uhn.fhir.jpa.entity.Search;
 import ca.uhn.fhir.jpa.provider.r4.ResourceProviderR4Test;
+import ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl;
+import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
+import ca.uhn.fhir.model.primitive.InstantDt;
+import ca.uhn.fhir.model.primitive.UriDt;
+import ca.uhn.fhir.parser.IParser;
+import ca.uhn.fhir.parser.StrictErrorHandler;
 import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.MethodOutcome;
+import ca.uhn.fhir.rest.api.SummaryEnum;
+import ca.uhn.fhir.rest.client.api.IClientInterceptor;
+import ca.uhn.fhir.rest.client.api.IGenericClient;
+import ca.uhn.fhir.rest.client.api.IHttpRequest;
+import ca.uhn.fhir.rest.client.api.IHttpResponse;
+import ca.uhn.fhir.rest.gclient.StringClientParam;
+import ca.uhn.fhir.rest.param.*;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
+import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
+import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
+import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
+import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.UrlUtil;
 import com.google.common.base.Charsets;
+import com.google.common.collect.Lists;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.http.NameValuePair;
-import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.*;
-import org.apache.http.entity.*;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
 import org.apache.http.message.BasicNameValuePair;
 import org.hl7.fhir.dstu3.hapi.validation.FhirInstanceValidator;
 import org.hl7.fhir.dstu3.model.*;
@@ -39,37 +48,38 @@ import org.hl7.fhir.dstu3.model.Observation.ObservationStatus;
 import org.hl7.fhir.dstu3.model.Questionnaire.QuestionnaireItemType;
 import org.hl7.fhir.dstu3.model.Subscription.SubscriptionChannelType;
 import org.hl7.fhir.dstu3.model.Subscription.SubscriptionStatus;
-import org.hl7.fhir.instance.model.api.*;
+import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IIdType;
 import org.junit.*;
 import org.springframework.test.util.AopTestUtils;
 import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.support.TransactionCallback;
 
-import com.google.common.collect.Lists;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
 
-import ca.uhn.fhir.jpa.dao.DaoConfig;
-import ca.uhn.fhir.jpa.entity.Search;
-import ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl;
-import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
-import ca.uhn.fhir.model.primitive.InstantDt;
-import ca.uhn.fhir.model.primitive.UriDt;
-import ca.uhn.fhir.parser.IParser;
-import ca.uhn.fhir.parser.StrictErrorHandler;
-import ca.uhn.fhir.rest.api.MethodOutcome;
-import ca.uhn.fhir.rest.api.SummaryEnum;
-import ca.uhn.fhir.rest.client.api.IGenericClient;
-import ca.uhn.fhir.rest.gclient.StringClientParam;
-import ca.uhn.fhir.rest.param.*;
-import ca.uhn.fhir.rest.server.exceptions.*;
-import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
-import ca.uhn.fhir.util.TestUtil;
-import ca.uhn.fhir.util.UrlUtil;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
 
 public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderDstu3Test.class);
 	private SearchCoordinatorSvcImpl mySearchCoordinatorSvcRaw;
 
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
 	@Override
 	@After
 	public void after() throws Exception {
@@ -78,14 +88,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		myDaoConfig.setAllowMultipleDelete(new DaoConfig().isAllowMultipleDelete());
 		myDaoConfig.setAllowExternalReferences(new DaoConfig().isAllowExternalReferences());
 		myDaoConfig.setReuseCachedSearchResultsForMillis(new DaoConfig().getReuseCachedSearchResultsForMillis());
-		
+
 		mySearchCoordinatorSvcRaw.setLoadingThrottleForUnitTests(null);
 		mySearchCoordinatorSvcRaw.setSyncSizeForUnitTests(SearchCoordinatorSvcImpl.DEFAULT_SYNC_SIZE);
 		mySearchCoordinatorSvcRaw.setNeverUseLocalSearchForUnitTests(false);
 
 	}
 
-
 	/**
 	 * See #872
 	 */
@@ -120,7 +129,6 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		}
 	}
 
-
 	@Override
 	public void before() throws Exception {
 		super.before();
@@ -141,8 +149,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		IOUtils.closeQuietly(resp.getEntity().getContent());
 		assertEquals(200, resp.getStatusLine().getStatusCode());
 	}
-	
-	
+
 	private ArrayList<IBaseResource> genResourcesOfType(Bundle theRes, Class<? extends IBaseResource> theClass) {
 		ArrayList<IBaseResource> retVal = new ArrayList<IBaseResource>();
 		for (BundleEntryComponent next : theRes.getEntry()) {
@@ -252,7 +259,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		//@formatter:off
 
 		assertThat(toUnqualifiedVersionlessIds(resp), contains(id));
-		
+
 		//@formatter:off
 		resp = ourClient
 			.search()
@@ -304,7 +311,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 	 */
 	@Test
 	public void testCreateAndUpdateBinary() throws Exception {
-		byte[] arr = { 1, 21, 74, 123, -44 };
+		byte[] arr = {1, 21, 74, 123, -44};
 		Binary binary = new Binary();
 		binary.setContent(arr);
 		binary.setContentType("dansk");
@@ -397,6 +404,17 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		interceptor.setFailOnSeverity(null);
 
 		ourRestServer.registerInterceptor(interceptor);
+		ourClient.registerInterceptor(new IClientInterceptor() {
+			@Override
+			public void interceptRequest(IHttpRequest theRequest) {
+				theRequest.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
+			}
+
+			@Override
+			public void interceptResponse(IHttpResponse theResponse) throws IOException {               // TODO Auto-generated method stu
+			}
+
+		});
 		try {
 			// Missing status, which is mandatory
 			Observation obs = new Observation();
@@ -494,8 +512,6 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 	}
 
-
-	
 	@Test
 	public void testCreateResourceConditionalComplex() throws IOException {
 		Patient pt = new Patient();
@@ -540,12 +556,34 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 	}
 
 	@Test
-	public void testCreateResourceReturnsOperationOutcomeByDefault() throws IOException {
+	public void testCreateResourceReturnsRepresentationByDefault() throws IOException {
 		String resource = "<Patient xmlns=\"http://hl7.org/fhir\"></Patient>";
 
 		HttpPost post = new HttpPost(ourServerBase + "/Patient");
 		post.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
 
+		CloseableHttpResponse response = ourHttpClient.execute(post);
+		try {
+			assertEquals(201, response.getStatusLine().getStatusCode());
+			String respString = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
+			ourLog.info(response.toString());
+			ourLog.info(respString);
+			assertThat(respString, startsWith("<Patient xmlns=\"http://hl7.org/fhir\">"));
+			assertThat(respString, endsWith("</Patient>"));
+		} finally {
+			response.getEntity().getContent().close();
+			response.close();
+		}
+	}
+
+	@Test
+	public void testCreateResourceReturnsOperationOutcome() throws IOException {
+		String resource = "<Patient xmlns=\"http://hl7.org/fhir\"></Patient>";
+
+		HttpPost post = new HttpPost(ourServerBase + "/Patient");
+		post.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
+		post.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
+
 		CloseableHttpResponse response = ourHttpClient.execute(post);
 		try {
 			assertEquals(201, response.getStatusLine().getStatusCode());
@@ -558,7 +596,6 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			response.close();
 		}
 	}
-	
 
 	@Test
 	public void testCreateResourceWithNumericId() throws IOException {
@@ -574,7 +611,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertEquals(400, response.getStatusLine().getStatusCode());
 			OperationOutcome oo = myFhirCtx.newXmlParser().parseResource(OperationOutcome.class, responseString);
 			assertEquals("Can not create resource with ID \"2\", ID must not be supplied on a create (POST) operation (use an HTTP PUT / update operation if you wish to supply an ID)",
-					oo.getIssue().get(0).getDiagnostics());
+				oo.getIssue().get(0).getDiagnostics());
 
 		} finally {
 			response.getEntity().getContent().close();
@@ -657,7 +694,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			fail();
 		} catch (PreconditionFailedException e) {
 			assertEquals("HTTP 412 Precondition Failed: Failed to DELETE resource with match URL \"Patient?identifier=testDeleteConditionalMultiple\" because this search matched 2 resources",
-					e.getMessage());
+				e.getMessage());
 		}
 
 		// Not deleted yet..
@@ -677,7 +714,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		String encoded = myFhirCtx.newXmlParser().encodeResourceToString(response);
 		ourLog.info(encoded);
 		assertThat(encoded, containsString(
-				"<issue><severity value=\"information\"/><code value=\"informational\"/><diagnostics value=\"Successfully deleted 2 resource(s) in "));
+			"<issue><severity value=\"information\"/><code value=\"informational\"/><diagnostics value=\"Successfully deleted 2 resource(s) in "));
 		try {
 			ourClient.read().resource("Patient").withId(id1).execute();
 			fail();
@@ -704,7 +741,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			ourLog.info(response);
 			assertEquals(200, resp.getStatusLine().getStatusCode());
 			assertThat(response, containsString(
-					"<issue><severity value=\"warning\"/><code value=\"not-found\"/><diagnostics value=\"Unable to find resource matching URL &quot;Patient?identifier=testDeleteConditionalNoMatches&quot;. Deletion failed.\"/></issue>"));
+				"<issue><severity value=\"warning\"/><code value=\"not-found\"/><diagnostics value=\"Unable to find resource matching URL &quot;Patient?identifier=testDeleteConditionalNoMatches&quot;. Deletion failed.\"/></issue>"));
 		} finally {
 			IOUtils.closeQuietly(resp);
 		}
@@ -1331,7 +1368,6 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		assertThat(ids, not(containsInRelativeOrder(c3Id)));
 	}
 
-	// retest
 	@Test
 	public void testEverythingPatientWithLastUpdatedAndSort() throws Exception {
 		String methodName = "testEverythingWithLastUpdatedAndSort";
@@ -1370,13 +1406,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			ourLog.info(output);
 			List<IIdType> ids = toUnqualifiedVersionlessIds(myFhirCtx.newXmlParser().parseResource(Bundle.class, output));
 			ourLog.info(ids.toString());
-			assertThat(ids, containsInAnyOrder(pId, cId));
+			assertThat(ids, containsInAnyOrder(pId, cId, oId));
 		} finally {
 			response.close();
 		}
 
 		get = new HttpGet(ourServerBase + "/Patient/" + pId.getIdPart() + "/$everything?_lastUpdated=%3E" + new InstantType(new Date(time2)).getValueAsString() + "&_lastUpdated=%3C"
-				+ new InstantType(new Date(time3)).getValueAsString());
+			+ new InstantType(new Date(time3)).getValueAsString());
 		response = ourHttpClient.execute(get);
 		try {
 			assertEquals(200, response.getStatusLine().getStatusCode());
@@ -1385,7 +1421,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			ourLog.info(output);
 			List<IIdType> ids = toUnqualifiedVersionlessIds(myFhirCtx.newXmlParser().parseResource(Bundle.class, output));
 			ourLog.info(ids.toString());
-			assertThat(ids, containsInAnyOrder(pId, cId));
+			assertThat(ids, containsInAnyOrder(pId, cId, oId));
 		} finally {
 			response.close();
 		}
@@ -1449,13 +1485,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		mySystemDao.transaction(mySrd, inputBundle);
 
 		Bundle responseBundle = ourClient
-				.operation()
-				.onInstance(new IdType("Patient/A161443"))
-				.named("everything")
-				.withParameter(Parameters.class, "_count", new IntegerType(20))
-				.useHttpGet()
-				.returnResourceType(Bundle.class)
-				.execute();
+			.operation()
+			.onInstance(new IdType("Patient/A161443"))
+			.named("everything")
+			.withParameter(Parameters.class, "_count", new IntegerType(20))
+			.useHttpGet()
+			.returnResourceType(Bundle.class)
+			.execute();
 
 		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(responseBundle));
 
@@ -1465,7 +1501,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		}
 		Collections.sort(ids);
 		ourLog.info("{} ids: {}", ids.size(), ids);
-		
+
 		assertThat(responseBundle.getEntry().size(), lessThanOrEqualTo(25));
 
 		TreeSet<String> idsSet = new TreeSet<String>();
@@ -1520,7 +1556,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		}
 
 		Bundle responseBundle = ourClient.operation().onInstance(id).named("everything").withParameter(Parameters.class, "_count", new IntegerType(50)).useHttpGet().returnResourceType(Bundle.class)
-				.execute();
+			.execute();
 
 		TreeSet<String> ids = new TreeSet<String>();
 		for (int i = 0; i < responseBundle.getEntry().size(); i++) {
@@ -1552,25 +1588,6 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		assertEquals(77, ids.size());
 	}
 
-	@Test
-	public void testEverythingWithOnlyPatient() {
-		Patient p = new Patient();
-		p.setActive(true);
-		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
-
-		myFhirCtx.getRestfulClientFactory().setSocketTimeout(300 * 1000);
-
-		Bundle response = ourClient
-				.operation()
-				.onInstance(id)
-				.named("everything")
-				.withNoParameters(Parameters.class)
-				.returnResourceType(Bundle.class)
-				.execute();
-
-		assertEquals(1, response.getEntry().size());
-	}
-
 	// private void delete(String theResourceType, String theParamName, String theParamValue) {
 	// Bundle resources;
 	// do {
@@ -1596,6 +1613,25 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 	// }
 	// }
 
+	@Test
+	public void testEverythingWithOnlyPatient() {
+		Patient p = new Patient();
+		p.setActive(true);
+		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+
+		myFhirCtx.getRestfulClientFactory().setSocketTimeout(300 * 1000);
+
+		Bundle response = ourClient
+			.operation()
+			.onInstance(id)
+			.named("everything")
+			.withNoParameters(Parameters.class)
+			.returnResourceType(Bundle.class)
+			.execute();
+
+		assertEquals(1, response.getEntry().size());
+	}
+
 	@SuppressWarnings("unused")
 	@Test
 	public void testFullTextSearch() throws Exception {
@@ -1647,8 +1683,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			response.close();
 		}
 	}
-	
-	
+
 	@Test
 	public void testHasParameter() throws Exception {
 		IIdType pid0;
@@ -1856,9 +1891,9 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertEquals(400, response.getStatusLine().getStatusCode());
 			OperationOutcome oo = myFhirCtx.newXmlParser().parseResource(OperationOutcome.class, respString);
 			assertEquals(
-					"Can not update resource, resource body must contain an ID element which matches the request URL for update (PUT) operation - Resource body ID of \"AAA\" does not match URL ID of \""
-							+ id.getIdPart() + "\"",
-					oo.getIssue().get(0).getDiagnostics());
+				"Can not update resource, resource body must contain an ID element which matches the request URL for update (PUT) operation - Resource body ID of \"AAA\" does not match URL ID of \""
+					+ id.getIdPart() + "\"",
+				oo.getIssue().get(0).getDiagnostics());
 		} finally {
 			response.close();
 		}
@@ -1919,11 +1954,11 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		Bundle resp = ourClient
-				.search()
-				.forResource(StructureDefinition.class)
-				.where(StructureDefinition.URL.matches().value("http://example.com/foo"))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(StructureDefinition.class)
+			.where(StructureDefinition.URL.matches().value("http://example.com/foo"))
+			.returnBundle(Bundle.class)
+			.execute();
 
 		assertEquals(1, resp.getTotal());
 	}
@@ -1958,15 +1993,15 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		//@formatter:off
-		String input = "<Parameters>\n" + 
-				"  <meta>\n" + 
-				"    <tag>\n" + 
-				"      <system value=\"http://example.org/codes/tags\"/>\n" + 
-				"      <code value=\"record-lost\"/>\n" + 
-				"      <display value=\"Patient File Lost\"/>\n" + 
-				"    </tag>\n" + 
-				"  </meta>\n" + 
-				"</Parameters>";
+		String input = "<Parameters>\n" +
+			"  <meta>\n" +
+			"    <tag>\n" +
+			"      <system value=\"http://example.org/codes/tags\"/>\n" +
+			"      <code value=\"record-lost\"/>\n" +
+			"      <display value=\"Patient File Lost\"/>\n" +
+			"    </tag>\n" +
+			"  </meta>\n" +
+			"</Parameters>";
 		//@formatter:on
 
 		HttpPost post = new HttpPost(ourServerBase + "/Patient/" + id.getIdPart() + "/$meta-add");
@@ -2000,14 +2035,14 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		Patient p = new Patient();
 		p.setActive(true);
 		String pid = myPatientDao.create(p).getId().toUnqualifiedVersionless().getValue();
-		
+
 		for (int i = 0; i < 20; i++) {
 			Observation o = new Observation();
 			o.getSubject().setReference(pid);
 			o.addIdentifier().setSystem("foo").setValue(Integer.toString(i));
 			myObservationDao.create(o);
 		}
-		
+
 		mySearchCoordinatorSvcRaw.setLoadingThrottleForUnitTests(50);
 		mySearchCoordinatorSvcRaw.setSyncSizeForUnitTests(10);
 		mySearchCoordinatorSvcRaw.setNeverUseLocalSearchForUnitTests(true);
@@ -2020,7 +2055,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			.returnResourceType(Bundle.class)
 			.useHttpGet()
 			.execute();
-		
+
 		assertEquals(10, response.getEntry().size());
 		if (response.getTotalElement().getValueAsString() != null) {
 			assertEquals("21", response.getTotalElement().getValueAsString());
@@ -2040,7 +2075,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		// Load page 3
 		Thread.sleep(2000);
-		
+
 		nextUrl = response.getLink("next").getUrl();
 		response = ourClient.fetchResourceFromUrl(Bundle.class, nextUrl);
 
@@ -2053,18 +2088,18 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 	@Test
 	public void testPagingOverEverythingSetWithNoPagingProvider() {
 		ourRestServer.setPagingProvider(null);
-		
+
 		Patient p = new Patient();
 		p.setActive(true);
 		String pid = myPatientDao.create(p).getId().toUnqualifiedVersionless().getValue();
-		
+
 		for (int i = 0; i < 20; i++) {
 			Observation o = new Observation();
 			o.getSubject().setReference(pid);
 			o.addIdentifier().setSystem("foo").setValue(Integer.toString(i));
 			myObservationDao.create(o);
 		}
-		
+
 		mySearchCoordinatorSvcRaw.setLoadingThrottleForUnitTests(50);
 		mySearchCoordinatorSvcRaw.setSyncSizeForUnitTests(10);
 		mySearchCoordinatorSvcRaw.setNeverUseLocalSearchForUnitTests(true);
@@ -2077,7 +2112,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			.returnResourceType(Bundle.class)
 			.useHttpGet()
 			.execute();
-		
+
 		assertEquals(21, response.getEntry().size());
 		assertEquals(21, response.getTotalElement().getValue().intValue());
 		assertEquals(null, response.getLink("next"));
@@ -2098,6 +2133,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		HttpPatch patch = new HttpPatch(ourServerBase + "/Patient/" + pid1.getIdPart());
 		patch.setEntity(new StringEntity("[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]", ContentType.parse(Constants.CT_JSON_PATCH + Constants.CHARSET_UTF8_CTSUFFIX)));
+		patch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 
 		CloseableHttpResponse response = ourHttpClient.execute(patch);
 		try {
@@ -2160,6 +2196,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		HttpPatch patch = new HttpPatch(ourServerBase + "/Patient/" + pid1.getIdPart());
 		patch.setEntity(new StringEntity("[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]", ContentType.parse(Constants.CT_JSON_PATCH + Constants.CHARSET_UTF8_CTSUFFIX)));
 		patch.addHeader("If-Match", "W/\"1\"");
+		patch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 
 		CloseableHttpResponse response = ourHttpClient.execute(patch);
 		try {
@@ -2190,6 +2227,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		HttpPatch patch = new HttpPatch(ourServerBase + "/Patient/" + pid1.getIdPart());
 		String patchString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><diff xmlns:fhir=\"http://hl7.org/fhir\"><replace sel=\"fhir:Patient/fhir:active/@value\">false</replace></diff>";
+		patch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		patch.setEntity(new StringEntity(patchString, ContentType.parse(Constants.CT_XML_PATCH + Constants.CHARSET_UTF8_CTSUFFIX)));
 
 		CloseableHttpResponse response = ourHttpClient.execute(patch);
@@ -2312,9 +2350,9 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		Patient nextPatient = new Patient();
 		nextPatient.setId("Patient/B");
 		nextPatient
-				.addExtension()
-				.setUrl("http://foo")
-				.setValue(new Reference("Practitioner/A"));
+			.addExtension()
+			.setUrl("http://foo")
+			.setValue(new Reference("Practitioner/A"));
 
 		ourClient.update().resource(nextPatient).execute();
 
@@ -2343,12 +2381,12 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle b = ourClient
-				.search()
-				.forResource("Patient")
-				.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system:rpdstu2", "testSaveAndRetrieveWithContained01"))
-				.prettyPrint()
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system:rpdstu2", "testSaveAndRetrieveWithContained01"))
+			.prettyPrint()
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 		assertEquals(1, b.getEntry().size());
 
@@ -2425,13 +2463,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle actual = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", "testSearchByIdentifier01"))
-				.encodedJson()
-				.prettyPrint()
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", "testSearchByIdentifier01"))
+			.encodedJson()
+			.prettyPrint()
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 
 		assertEquals(1, actual.getEntry().size());
@@ -2449,13 +2487,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle actual = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(Patient.IDENTIFIER.exactly().systemAndCode(null, "testSearchByIdentifierWithoutSystem01"))
-				.encodedJson()
-				.prettyPrint()
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(Patient.IDENTIFIER.exactly().systemAndCode(null, "testSearchByIdentifierWithoutSystem01"))
+			.encodedJson()
+			.prettyPrint()
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 		assertEquals(1, actual.getEntry().size());
 		assertEquals(p1Id.getIdPart(), actual.getEntry().get(0).getResource().getIdElement().getIdPart());
@@ -2480,67 +2518,67 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		Bundle found;
 
 		found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(BaseResource.RES_ID.exactly().systemAndValues(null, id1.getIdPart(), id2.getIdPart()))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(BaseResource.RES_ID.exactly().systemAndValues(null, id1.getIdPart(), id2.getIdPart()))
+			.returnBundle(Bundle.class)
+			.execute();
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1, id2));
 
 		found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(BaseResource.RES_ID.exactly().systemAndValues(null, Arrays.asList(id1.getIdPart(), id2.getIdPart(), "FOOOOO")))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(BaseResource.RES_ID.exactly().systemAndValues(null, Arrays.asList(id1.getIdPart(), id2.getIdPart(), "FOOOOO")))
+			.returnBundle(Bundle.class)
+			.execute();
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1, id2));
 
 		found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(BaseResource.RES_ID.exactly().systemAndCode(null, id1.getIdPart()))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(BaseResource.RES_ID.exactly().systemAndCode(null, id1.getIdPart()))
+			.returnBundle(Bundle.class)
+			.execute();
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1));
 
 		found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(BaseResource.RES_ID.exactly().codes(id1.getIdPart(), id2.getIdPart()))
-				.and(BaseResource.RES_ID.exactly().code(id1.getIdPart()))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(BaseResource.RES_ID.exactly().codes(id1.getIdPart(), id2.getIdPart()))
+			.and(BaseResource.RES_ID.exactly().code(id1.getIdPart()))
+			.returnBundle(Bundle.class)
+			.execute();
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1));
 
 		found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(BaseResource.RES_ID.exactly().codes(Arrays.asList(id1.getIdPart(), id2.getIdPart(), "FOOOOO")))
-				.and(BaseResource.RES_ID.exactly().code(id1.getIdPart()))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(BaseResource.RES_ID.exactly().codes(Arrays.asList(id1.getIdPart(), id2.getIdPart(), "FOOOOO")))
+			.and(BaseResource.RES_ID.exactly().code(id1.getIdPart()))
+			.returnBundle(Bundle.class)
+			.execute();
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1));
 
 		found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(BaseResource.RES_ID.exactly().codes(id1.getIdPart(), id2.getIdPart(), "FOOO"))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(BaseResource.RES_ID.exactly().codes(id1.getIdPart(), id2.getIdPart(), "FOOO"))
+			.returnBundle(Bundle.class)
+			.execute();
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1, id2));
 
 		found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(BaseResource.RES_ID.exactly().codes("FOOO"))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(BaseResource.RES_ID.exactly().codes("FOOO"))
+			.returnBundle(Bundle.class)
+			.execute();
 
 		assertThat(toUnqualifiedVersionlessIds(found), empty());
 
@@ -2551,7 +2589,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		String methodName = "testSearchByLastUpdated";
 
 		Patient p = new Patient();
-		p.addName().setFamily(methodName+"1");
+		p.addName().setFamily(methodName + "1");
 		IIdType pid1 = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		Thread.sleep(10);
@@ -2559,7 +2597,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		Thread.sleep(10);
 
 		Patient p2 = new Patient();
-		p2.addName().setFamily(methodName+"2");
+		p2.addName().setFamily(methodName + "2");
 		IIdType pid2 = ourClient.create().resource(p2).execute().getId().toUnqualifiedVersionless();
 
 		HttpGet get = new HttpGet(ourServerBase + "/Patient?_lastUpdated=lt" + new InstantType(new Date(time1)).getValueAsString());
@@ -2615,9 +2653,9 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle actual = ourClient.search()
-				.forResource(Patient.class)
-				.where(Patient.ORGANIZATION.hasAnyOfIds(Arrays.asList(o1id.getIdPart(), o2id.getIdPart())))
-				.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
+			.forResource(Patient.class)
+			.where(Patient.ORGANIZATION.hasAnyOfIds(Arrays.asList(o1id.getIdPart(), o2id.getIdPart())))
+			.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
 		//@formatter:on
 		Set<String> expectedIds = new HashSet<String>();
 		expectedIds.add(p1Id.getIdPart());
@@ -2644,18 +2682,18 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle actual = ourClient.search()
-				.forResource(Patient.class)
-				.where(Patient.ORGANIZATION.hasId(o1id.getIdPart()))
-				.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
+			.forResource(Patient.class)
+			.where(Patient.ORGANIZATION.hasId(o1id.getIdPart()))
+			.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
 		//@formatter:on
 		assertEquals(1, actual.getEntry().size());
 		assertEquals(p1Id.getIdPart(), actual.getEntry().get(0).getResource().getIdElement().getIdPart());
 
 		//@formatter:off
 		actual = ourClient.search()
-				.forResource(Patient.class)
-				.where(Patient.ORGANIZATION.hasId(o1id.getValue()))
-				.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
+			.forResource(Patient.class)
+			.where(Patient.ORGANIZATION.hasId(o1id.getValue()))
+			.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
 		//@formatter:on
 		assertEquals(1, actual.getEntry().size());
 		assertEquals(p1Id.getIdPart(), actual.getEntry().get(0).getResource().getIdElement().getIdPart());
@@ -2722,10 +2760,10 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		{
 			//@formatter:off
 			Bundle found = ourClient.search()
-					.forResource(Patient.class)
-					.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
-					.returnBundle(Bundle.class)
-					.execute();
+				.forResource(Patient.class)
+				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
+				.returnBundle(Bundle.class)
+				.execute();
 			//@formatter:on
 			List<IIdType> patients = toUnqualifiedVersionlessIds(found);
 			assertThat(patients, hasItems(id1a, id1b, id2));
@@ -2733,11 +2771,11 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		{
 			//@formatter:off
 			Bundle found = ourClient.search()
-					.forResource(Patient.class)
-					.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
-					.lastUpdated(new DateRangeParam(beforeAny, null))
-					.returnBundle(Bundle.class)
-					.execute();
+				.forResource(Patient.class)
+				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
+				.lastUpdated(new DateRangeParam(beforeAny, null))
+				.returnBundle(Bundle.class)
+				.execute();
 			//@formatter:on
 			List<IIdType> patients = toUnqualifiedVersionlessIds(found);
 			assertThat(patients, hasItems(id1a, id1b, id2));
@@ -2745,11 +2783,11 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		{
 			//@formatter:off
 			Bundle found = ourClient.search()
-					.forResource(Patient.class)
-					.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
-					.lastUpdated(new DateRangeParam(beforeR2, null))
-					.returnBundle(Bundle.class)
-					.execute();
+				.forResource(Patient.class)
+				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
+				.lastUpdated(new DateRangeParam(beforeR2, null))
+				.returnBundle(Bundle.class)
+				.execute();
 			//@formatter:on
 			List<IIdType> patients = toUnqualifiedVersionlessIds(found);
 			assertThat(patients, hasItems(id2));
@@ -2758,11 +2796,11 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		{
 			//@formatter:off
 			Bundle found = ourClient.search()
-					.forResource(Patient.class)
-					.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
-					.lastUpdated(new DateRangeParam(beforeAny, beforeR2))
-					.returnBundle(Bundle.class)
-					.execute();
+				.forResource(Patient.class)
+				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
+				.lastUpdated(new DateRangeParam(beforeAny, beforeR2))
+				.returnBundle(Bundle.class)
+				.execute();
 			//@formatter:on
 			List<IIdType> patients = toUnqualifiedVersionlessIds(found);
 			assertThat(patients.toString(), patients, not(hasItems(id2)));
@@ -2771,11 +2809,11 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		{
 			//@formatter:off
 			Bundle found = ourClient.search()
-					.forResource(Patient.class)
-					.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
-					.lastUpdated(new DateRangeParam(null, beforeR2))
-					.returnBundle(Bundle.class)
-					.execute();
+				.forResource(Patient.class)
+				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
+				.lastUpdated(new DateRangeParam(null, beforeR2))
+				.returnBundle(Bundle.class)
+				.execute();
 			//@formatter:on
 			List<IIdType> patients = toUnqualifiedVersionlessIds(found);
 			assertThat(patients, (hasItems(id1a, id1b)));
@@ -2864,11 +2902,11 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.prettyPrint()
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.prettyPrint()
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 
 		Thread.sleep(1);
@@ -2897,18 +2935,18 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		myDaoConfig.setReuseCachedSearchResultsForMillis(1000L);
 
 		Bundle result1 = ourClient
-				.search()
-				.forResource("Organization")
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.returnBundle(Bundle.class)
+			.execute();
 
 		final String uuid1 = toSearchUuidFromLinkNext(result1);
 
 		Bundle result2 = ourClient
-				.search()
-				.forResource("Organization")
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.returnBundle(Bundle.class)
+			.execute();
 
 		final String uuid2 = toSearchUuidFromLinkNext(result2);
 
@@ -2928,32 +2966,32 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		myDaoConfig.setReuseCachedSearchResultsForMillis(null);
 
 		Bundle result1 = ourClient
-				.search()
-				.forResource("Organization")
-				.where(Organization.NAME.matches().value("HELLO"))
-				.count(5)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.where(Organization.NAME.matches().value("HELLO"))
+			.count(5)
+			.returnBundle(Bundle.class)
+			.execute();
 
 		final String uuid1 = toSearchUuidFromLinkNext(result1);
 
 		Bundle result2 = ourClient
-				.search()
-				.forResource("Organization")
-				.where(Organization.NAME.matches().value("HELLO"))
-				.count(5)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.where(Organization.NAME.matches().value("HELLO"))
+			.count(5)
+			.returnBundle(Bundle.class)
+			.execute();
 
 		final String uuid2 = toSearchUuidFromLinkNext(result2);
 
 		Bundle result3 = ourClient
-				.search()
-				.forResource("Organization")
-				.where(Organization.NAME.matches().value("HELLO"))
-				.count(5)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.where(Organization.NAME.matches().value("HELLO"))
+			.count(5)
+			.returnBundle(Bundle.class)
+			.execute();
 
 		String uuid3 = toSearchUuidFromLinkNext(result3);
 
@@ -2974,12 +3012,12 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		myDaoConfig.setReuseCachedSearchResultsForMillis(1000L);
 
 		Bundle result1 = ourClient
-				.search()
-				.forResource("Organization")
-				.where(Organization.NAME.matches().value("HELLO"))
-				.count(5)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.where(Organization.NAME.matches().value("HELLO"))
+			.count(5)
+			.returnBundle(Bundle.class)
+			.execute();
 
 		final String uuid1 = toSearchUuidFromLinkNext(result1);
 		Search search1 = newTxTemplate().execute(new TransactionCallback<Search>() {
@@ -2991,12 +3029,12 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		Date lastReturned1 = search1.getSearchLastReturned();
 
 		Bundle result2 = ourClient
-				.search()
-				.forResource("Organization")
-				.where(Organization.NAME.matches().value("HELLO"))
-				.count(5)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.where(Organization.NAME.matches().value("HELLO"))
+			.count(5)
+			.returnBundle(Bundle.class)
+			.execute();
 
 		final String uuid2 = toSearchUuidFromLinkNext(result2);
 		Search search2 = newTxTemplate().execute(new TransactionCallback<Search>() {
@@ -3012,12 +3050,12 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		Thread.sleep(1500);
 
 		Bundle result3 = ourClient
-				.search()
-				.forResource("Organization")
-				.where(Organization.NAME.matches().value("HELLO"))
-				.count(5)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.where(Organization.NAME.matches().value("HELLO"))
+			.count(5)
+			.returnBundle(Bundle.class)
+			.execute();
 
 		String uuid3 = toSearchUuidFromLinkNext(result3);
 
@@ -3038,10 +3076,10 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		myDaoConfig.setReuseCachedSearchResultsForMillis(100000L);
 
 		Bundle result1 = ourClient
-				.search()
-				.forResource("Organization")
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.returnBundle(Bundle.class)
+			.execute();
 
 		final String uuid1 = toSearchUuidFromLinkNext(result1);
 		Search search1 = newTxTemplate().execute(new TransactionCallback<Search>() {
@@ -3053,10 +3091,10 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		Date lastReturned1 = search1.getSearchLastReturned();
 
 		Bundle result2 = ourClient
-				.search()
-				.forResource("Organization")
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource("Organization")
+			.returnBundle(Bundle.class)
+			.execute();
 
 		final String uuid2 = toSearchUuidFromLinkNext(result2);
 		Search search2 = newTxTemplate().execute(new TransactionCallback<Search>() {
@@ -3084,10 +3122,10 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle response = ourClient
-				.search()
-				.forResource(Patient.class)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 
 		patient = (Patient) response.getEntry().get(0).getResource();
@@ -3103,10 +3141,10 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		response = ourClient
-				.search()
-				.forResource(Patient.class)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 
 		patient = (Patient) response.getEntry().get(0).getResource();
@@ -3119,7 +3157,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		patient.addIdentifier().setSystem("urn:system").setValue("testSearchTokenParam001");
 		patient.addName().setFamily("Tester").addGiven("testSearchTokenParam1");
 		patient.addCommunication().getLanguage().setText("testSearchTokenParamComText").addCoding().setCode("testSearchTokenParamCode").setSystem("testSearchTokenParamSystem")
-				.setDisplay("testSearchTokenParamDisplay");
+			.setDisplay("testSearchTokenParamDisplay");
 		myPatientDao.create(patient, mySrd);
 
 		patient = new Patient();
@@ -3134,11 +3172,11 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle response = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(Patient.IDENTIFIER.hasSystemWithAnyCode("urn:system"))
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(Patient.IDENTIFIER.hasSystemWithAnyCode("urn:system"))
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 
 		assertEquals(2, response.getEntry().size());
@@ -3146,11 +3184,11 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 	@Test
 	public void testSearchWithEmptyParameter() throws Exception {
-		Observation obs= new Observation();
+		Observation obs = new Observation();
 		obs.setStatus(ObservationStatus.FINAL);
 		obs.getCode().addCoding().setSystem("foo").setCode("bar");
 		ourClient.create().resource(obs).execute();
-		
+
 		testSearchWithEmptyParameter("/Observation?value-quantity=");
 		testSearchWithEmptyParameter("/Observation?code=bar&value-quantity=");
 		testSearchWithEmptyParameter("/Observation?value-date=");
@@ -3159,16 +3197,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		testSearchWithEmptyParameter("/Observation?code=bar&value-concept=");
 	}
 
-	private void testSearchWithEmptyParameter(String url) throws IOException {
-		HttpGet get = new HttpGet(ourServerBase + url);
-		CloseableHttpResponse resp = ourHttpClient.execute(get);
-		try {
+	private void testSearchWithEmptyParameter(String theUrl) throws IOException {
+		HttpGet get = new HttpGet(ourServerBase + theUrl);
+		try (CloseableHttpResponse resp = ourHttpClient.execute(get)) {
 			assertEquals(200, resp.getStatusLine().getStatusCode());
 			String respString = IOUtils.toString(resp.getEntity().getContent(), Constants.CHARSET_UTF8);
 			Bundle bundle = myFhirCtx.newXmlParser().parseResource(Bundle.class, respString);
 			assertEquals(1, bundle.getEntry().size());
-		} finally {
-			IOUtils.closeQuietly(resp.getEntity().getContent());
 		}
 	}
 
@@ -3185,13 +3220,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle found = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(Patient.IDENTIFIER.exactly().systemAndIdentifier("urn:system:rpdstu2","testSearchWithInclude02"))
-				.include(Patient.INCLUDE_ORGANIZATION)
-				.prettyPrint()
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(Patient.IDENTIFIER.exactly().systemAndIdentifier("urn:system:rpdstu2", "testSearchWithInclude02"))
+			.include(Patient.INCLUDE_ORGANIZATION)
+			.prettyPrint()
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 
 		assertEquals(2, found.getEntry().size());
@@ -3206,12 +3241,12 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		try {
 			//@formatter:off
 			ourClient
-					.search()
-					.forResource(Encounter.class)
-					.where(Encounter.LENGTH.withPrefix(ParamPrefixEnum.ENDS_BEFORE).number(100))
-					.prettyPrint()
-					.returnBundle(Bundle.class)
-					.execute();
+				.search()
+				.forResource(Encounter.class)
+				.where(Encounter.LENGTH.withPrefix(ParamPrefixEnum.ENDS_BEFORE).number(100))
+				.prettyPrint()
+				.returnBundle(Bundle.class)
+				.execute();
 			//@formatter:on
 			fail();
 		} catch (InvalidRequestException e) {
@@ -3227,12 +3262,12 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		try {
 			//@formatter:off
 			ourClient
-					.search()
-					.forResource(Observation.class)
-					.where(Observation.VALUE_QUANTITY.withPrefix(ParamPrefixEnum.ENDS_BEFORE).number(100).andNoUnits())
-					.prettyPrint()
-					.returnBundle(Bundle.class)
-					.execute();
+				.search()
+				.forResource(Observation.class)
+				.where(Observation.VALUE_QUANTITY.withPrefix(ParamPrefixEnum.ENDS_BEFORE).number(100).andNoUnits())
+				.prettyPrint()
+				.returnBundle(Bundle.class)
+				.execute();
 			//@formatter:on
 			fail();
 		} catch (InvalidRequestException e) {
@@ -3245,7 +3280,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		Observation o = new Observation();
 		o.setValue(new Quantity().setValue(new BigDecimal("-10")));
 		String oid1 = myObservationDao.create(o, mySrd).getId().toUnqualifiedVersionless().getValue();
-		
+
 		Observation o2 = new Observation();
 		o2.setValue(new Quantity().setValue(new BigDecimal("-20")));
 		String oid2 = myObservationDao.create(o2, mySrd).getId().toUnqualifiedVersionless().getValue();
@@ -3272,12 +3307,12 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		myObservationDao.create(o, mySrd);
 		//@formatter:off
 		ourClient
-				.search()
-				.forResource(Observation.class)
-				.sort().ascending(Observation.CODE_VALUE_QUANTITY) // composite sort not supported yet
-				.prettyPrint()
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Observation.class)
+			.sort().ascending(Observation.CODE_VALUE_QUANTITY) // composite sort not supported yet
+			.prettyPrint()
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 	}
 
@@ -3316,13 +3351,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		{
 			//@formatter:off
 			Bundle found = ourClient
-					.search()
-					.forResource(Organization.class)
-					.where(Organization.NAME.isMissing(false))
-					.count(100)
-					.prettyPrint()
-					.returnBundle(Bundle.class)
-					.execute();
+				.search()
+				.forResource(Organization.class)
+				.where(Organization.NAME.isMissing(false))
+				.count(100)
+				.prettyPrint()
+				.returnBundle(Bundle.class)
+				.execute();
 			//@formatter:on
 
 			List<IIdType> list = toUnqualifiedVersionlessIds(found);
@@ -3334,15 +3369,15 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		}
 
 		//@formatter:off
-			Bundle found = ourClient
-					.search()
-					.forResource(Organization.class)
-					.where(Organization.NAME.isMissing(true))
-					.count(100)
-					.prettyPrint()
-					.returnBundle(Bundle.class)
-					.execute();
-			//@formatter:on
+		Bundle found = ourClient
+			.search()
+			.forResource(Organization.class)
+			.where(Organization.NAME.isMissing(true))
+			.count(100)
+			.prettyPrint()
+			.returnBundle(Bundle.class)
+			.execute();
+		//@formatter:on
 
 		List<IIdType> list = toUnqualifiedVersionlessIds(found);
 		ourLog.info(methodName + " found: " + list.toString() + " - Wanted " + orgMissing + " but not " + orgNotMissing);
@@ -3388,7 +3423,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 	/**
 	 * See #411
-	 * 
+	 * <p>
 	 * Let's see if we can reproduce this issue in JPA
 	 */
 	@Test
@@ -3524,36 +3559,36 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		ourClient.create().resource(p).execute();
 
 		Bundle resp = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", methodName))
-				.sort().ascending(Patient.FAMILY)
-				.sort().ascending(Patient.GIVEN)
-				.count(100)
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", methodName))
+			.sort().ascending(Patient.FAMILY)
+			.sort().ascending(Patient.GIVEN)
+			.count(100)
+			.returnBundle(Bundle.class)
+			.execute();
 
 		List<String> names = toNameList(resp);
 
 		ourLog.info(StringUtils.join(names, '\n'));
 
 		assertThat(names, contains( // this matches in order only
-				"Daniel Adams",
-				"Aaron Alexis",
-				"Carol Allen",
-				"Ruth Black",
-				"Brian Brooks",
-				"Amy Clark",
-				"Susan Clark",
-				"Anthony Coleman",
-				"Lisa Coleman",
-				"Steven Coleman",
-				"Ruth Cook",
-				"Betty Davis",
-				"Joshua Diaz",
-				"Brian Gracia",
-				"Sarah Graham",
-				"Stephan Graham"));
+			"Daniel Adams",
+			"Aaron Alexis",
+			"Carol Allen",
+			"Ruth Black",
+			"Brian Brooks",
+			"Amy Clark",
+			"Susan Clark",
+			"Anthony Coleman",
+			"Lisa Coleman",
+			"Steven Coleman",
+			"Ruth Cook",
+			"Betty Davis",
+			"Joshua Diaz",
+			"Brian Gracia",
+			"Sarah Graham",
+			"Stephan Graham"));
 
 	}
 
@@ -3631,7 +3666,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertEquals(400, response.getStatusLine().getStatusCode());
 			OperationOutcome oo = myFhirCtx.newXmlParser().parseResource(OperationOutcome.class, responseString);
 			assertThat(oo.getIssue().get(0).getDiagnostics(),
-					containsString("Can not update resource, request URL must contain an ID element for update (PUT) operation (it must be of the form [base]/[resource type]/[id])"));
+				containsString("Can not update resource, request URL must contain an ID element for update (PUT) operation (it must be of the form [base]/[resource type]/[id])"));
 		} finally {
 			response.close();
 		}
@@ -3709,9 +3744,9 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertEquals(400, response.getStatusLine().getStatusCode());
 			OperationOutcome oo = myFhirCtx.newJsonParser().parseResource(OperationOutcome.class, new InputStreamReader(response.getEntity().getContent()));
 			assertEquals(
-					"Can not update resource, resource body must contain an ID element which matches the request URL for update (PUT) operation - Resource body ID of \"FOO\" does not match URL ID of \""
-							+ p1id.getIdPart() + "\"",
-					oo.getIssue().get(0).getDiagnostics());
+				"Can not update resource, resource body must contain an ID element which matches the request URL for update (PUT) operation - Resource body ID of \"FOO\" does not match URL ID of \""
+					+ p1id.getIdPart() + "\"",
+				oo.getIssue().get(0).getDiagnostics());
 		} finally {
 			response.close();
 		}
@@ -3915,13 +3950,13 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 		//@formatter:off
 		Bundle actual = ourClient
-				.search()
-				.forResource(Patient.class)
-				.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2"))
-				.encodedJson()
-				.prettyPrint()
-				.returnBundle(Bundle.class)
-				.execute();
+			.search()
+			.forResource(Patient.class)
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2"))
+			.encodedJson()
+			.prettyPrint()
+			.returnBundle(Bundle.class)
+			.execute();
 		//@formatter:on
 
 		assertEquals(1, actual.getEntry().size());
@@ -3988,8 +4023,8 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertEquals(400, response.getStatusLine().getStatusCode());
 			OperationOutcome oo = myFhirCtx.newXmlParser().parseResource(OperationOutcome.class, responseString);
 			assertEquals(
-					"Can not update resource, resource body must contain an ID element which matches the request URL for update (PUT) operation - Resource body ID of \"333\" does not match URL ID of \"A2\"",
-					oo.getIssue().get(0).getDiagnostics());
+				"Can not update resource, resource body must contain an ID element which matches the request URL for update (PUT) operation - Resource body ID of \"333\" does not match URL ID of \"A2\"",
+				oo.getIssue().get(0).getDiagnostics());
 		} finally {
 			response.close();
 		}
@@ -4054,7 +4089,7 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertEquals(412, response.getStatusLine().getStatusCode());
 			assertThat(resp, not(containsString("Resource has no id")));
 			assertThat(resp,
-					stringContainsInOrder(">ERROR<", "[Patient.contact]", "<pre>SHALL at least contain a contact's details or a reference to an organization", "<issue><severity value=\"error\"/>"));
+				stringContainsInOrder(">ERROR<", "[Patient.contact]", "<pre>SHALL at least contain a contact's details or a reference to an organization", "<issue><severity value=\"error\"/>"));
 		} finally {
 			IOUtils.closeQuietly(response.getEntity().getContent());
 			response.close();
@@ -4165,8 +4200,8 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertThat(resp, not(containsString("Resource has no id")));
 			assertThat(resp, containsString("<pre>No issues detected during validation</pre>"));
 			assertThat(resp,
-					stringContainsInOrder("<issue>", "<severity value=\"information\"/>", "<code value=\"informational\"/>", "<diagnostics value=\"No issues detected during validation\"/>",
-							"</issue>"));
+				stringContainsInOrder("<issue>", "<severity value=\"information\"/>", "<code value=\"informational\"/>", "<diagnostics value=\"No issues detected during validation\"/>",
+					"</issue>"));
 		} finally {
 			IOUtils.closeQuietly(response.getEntity().getContent());
 			response.close();
@@ -4192,8 +4227,8 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertThat(resp, not(containsString("Resource has no id")));
 			assertThat(resp, containsString("<pre>No issues detected during validation</pre>"));
 			assertThat(resp,
-					stringContainsInOrder("<issue>", "<severity value=\"information\"/>", "<code value=\"informational\"/>", "<diagnostics value=\"No issues detected during validation\"/>",
-							"</issue>"));
+				stringContainsInOrder("<issue>", "<severity value=\"information\"/>", "<code value=\"informational\"/>", "<diagnostics value=\"No issues detected during validation\"/>",
+					"</issue>"));
 		} finally {
 			IOUtils.closeQuietly(response.getEntity().getContent());
 			response.close();
@@ -4244,8 +4279,8 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 			assertEquals(200, response.getStatusLine().getStatusCode());
 			//@formatter:off
 			assertThat(resp, stringContainsInOrder(
-					"<code value=\"11378-7\"/>", 
-					"<display value=\"Systolic blood pressure at First encounter\"/>"));
+				"<code value=\"11378-7\"/>",
+				"<display value=\"Systolic blood pressure at First encounter\"/>"));
 			//@formatter:on
 		} finally {
 			IOUtils.closeQuietly(response.getEntity().getContent());
@@ -4258,9 +4293,4 @@ public class ResourceProviderDstu3Test extends BaseResourceProviderDstu3Test {
 		return new InstantDt(theDate).getValueAsString();
 	}
 
-	@AfterClass
-	public static void afterClassClearContext() {
-		TestUtil.clearAllStaticFieldsForUnitTest();
-	}
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3ValueSetTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3ValueSetTest.java
index 34daa680a1d..0214b47221a 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3ValueSetTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/ResourceProviderDstu3ValueSetTest.java
@@ -2,6 +2,7 @@ package ca.uhn.fhir.jpa.provider.dstu3;
 
 import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
 import ca.uhn.fhir.jpa.dao.data.IResourceTableDao;
+import ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoR4TerminologyTest;
 import ca.uhn.fhir.jpa.entity.ResourceTable;
 import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
 import ca.uhn.fhir.jpa.entity.TermConcept;
@@ -10,8 +11,11 @@ import ca.uhn.fhir.jpa.term.IHapiTerminologySvc;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
 import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.UrlUtil;
+import com.google.common.base.Charsets;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
@@ -28,6 +32,8 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
 
 import static ca.uhn.fhir.jpa.dao.dstu3.FhirResourceDaoDstu3TerminologyTest.URL_MY_CODE_SYSTEM;
 import static ca.uhn.fhir.jpa.dao.dstu3.FhirResourceDaoDstu3TerminologyTest.URL_MY_VALUE_SET;
@@ -92,6 +98,39 @@ public class ResourceProviderDstu3ValueSetTest extends BaseResourceProviderDstu3
 		createLocalVs(codeSystem);
 	}
 
+
+	public void createLoincSystemWithSomeCodes() {
+		runInTransaction(() -> {
+			CodeSystem codeSystem = new CodeSystem();
+			codeSystem.setUrl(CS_URL);
+			codeSystem.setContent(CodeSystemContentMode.NOTPRESENT);
+			IIdType id = myCodeSystemDao.create(codeSystem, mySrd).getId().toUnqualified();
+
+			ResourceTable table = myResourceTableDao.findById(id.getIdPartAsLong()).orElseThrow(IllegalArgumentException::new);
+
+			TermCodeSystemVersion cs = new TermCodeSystemVersion();
+			cs.setResource(table);
+
+			TermConcept code;
+			code = new TermConcept(cs, "50015-7");
+			code.addPropertyString("SYSTEM", "Bld/Bone mar^Donor");
+			cs.getConcepts().add(code);
+
+			code = new TermConcept(cs, "43343-3");
+			code.addPropertyString("SYSTEM", "Ser");
+			code.addPropertyString("HELLO", "12345-1");
+			cs.getConcepts().add(code);
+
+			code = new TermConcept(cs, "43343-4");
+			code.addPropertyString("SYSTEM", "Ser");
+			code.addPropertyString("HELLO", "12345-2");
+			cs.getConcepts().add(code);
+
+			myTermSvc.storeNewCodeSystemVersion(table.getId(), CS_URL, "SYSTEM NAME", cs);
+		});
+	}
+
+
 	private void createLocalVs(CodeSystem codeSystem) {
 		myLocalVs = new ValueSet();
 		myLocalVs.setUrl(URL_MY_VALUE_SET);
@@ -109,6 +148,16 @@ public class ResourceProviderDstu3ValueSetTest extends BaseResourceProviderDstu3
 		myLocalValueSetId = myValueSetDao.create(myLocalVs, mySrd).getId().toUnqualifiedVersionless();
 	}
 
+	private void createLocalVsWithIncludeConcept() {
+		myLocalVs = new ValueSet();
+		myLocalVs.setUrl(URL_MY_VALUE_SET);
+		ConceptSetComponent include = myLocalVs.getCompose().addInclude();
+		include.setSystem(URL_MY_CODE_SYSTEM);
+		include.addConcept().setCode("A");
+		include.addConcept().setCode("AA");
+		myLocalValueSetId = myValueSetDao.create(myLocalVs, mySrd).getId().toUnqualifiedVersionless();
+	}
+
 	private void createLocalVsWithUnknownCode(CodeSystem codeSystem) {
 		myLocalVs = new ValueSet();
 		myLocalVs.setUrl(URL_MY_VALUE_SET);
@@ -118,6 +167,71 @@ public class ResourceProviderDstu3ValueSetTest extends BaseResourceProviderDstu3
 		myLocalValueSetId = myValueSetDao.create(myLocalVs, mySrd).getId().toUnqualifiedVersionless();
 	}
 
+
+	@Test
+	public void testExpandValueSetPropertySearchWithRegexExcludeUsingOr() {
+		createLoincSystemWithSomeCodes();
+
+		List<String> codes;
+		ValueSet vs;
+		ValueSet outcome;
+		ValueSet.ConceptSetComponent exclude;
+
+		// Include
+		vs = new ValueSet();
+		vs.getCompose()
+			.addInclude()
+			.setSystem(CS_URL);
+
+
+		exclude = vs.getCompose().addExclude();
+		exclude.setSystem(CS_URL);
+		exclude
+			.addFilter()
+			.setProperty("HELLO")
+			.setOp(ValueSet.FilterOperator.REGEX)
+			.setValue("12345-1|12345-2");
+
+		IIdType vsId = ourClient.create().resource(vs).execute().getId();
+		outcome = (ValueSet) ourClient.operation().onInstance(vsId).named("expand").withNoParameters(Parameters.class).execute().getParameter().get(0).getResource();
+		codes = toCodesContains(outcome.getExpansion().getContains());
+		ourLog.info("** Got codes: {}", codes);
+		assertThat(codes, containsInAnyOrder("50015-7"));
+
+
+		assertEquals(1, outcome.getCompose().getInclude().size());
+		assertEquals(1, outcome.getCompose().getExclude().size());
+		assertEquals(1, outcome.getExpansion().getTotal());
+
+	}
+
+
+	@Test
+	public void testExpandValueSetPropertySearchWithRegexExcludeNoFilter() {
+		createLoincSystemWithSomeCodes();
+
+		List<String> codes;
+		ValueSet vs;
+		ValueSet outcome;
+		ValueSet.ConceptSetComponent exclude;
+
+		// Include
+		vs = new ValueSet();
+		vs.getCompose()
+			.addInclude()
+			.setSystem(CS_URL);
+
+
+		exclude = vs.getCompose().addExclude();
+		exclude.setSystem(CS_URL);
+
+		IIdType vsId = ourClient.create().resource(vs).execute().getId();
+		outcome = (ValueSet) ourClient.operation().onInstance(vsId).named("expand").withNoParameters(Parameters.class).execute().getParameter().get(0).getResource();
+		codes = toCodesContains(outcome.getExpansion().getContains());
+		assertThat(codes, empty());
+	}
+
+
 	@Test
 	public void testExpandById() throws IOException {
 		//@formatter:off
@@ -172,7 +286,7 @@ public class ResourceProviderDstu3ValueSetTest extends BaseResourceProviderDstu3
 	 * $expand?identifier=foo is legacy.. It's actually not valid in FHIR as of STU3
 	 * but we supported it for longer than we should have so I don't want to delete
 	 * it right now.
-	 *
+	 * <p>
 	 * https://groups.google.com/d/msgid/hapi-fhir/CAN2Cfy8kW%2BAOkgC6VjPsU3gRCpExCNZBmJdi-k5R_TWeyWH4tA%40mail.gmail.com?utm_medium=email&utm_source=footer
 	 */
 	@Test
@@ -462,6 +576,29 @@ public class ResourceProviderDstu3ValueSetTest extends BaseResourceProviderDstu3
 		assertEquals(true, ((BooleanType) respParam.getParameter().get(0).getValue()).booleanValue());
 	}
 
+	@Test
+	public void testValidateCodeOperationByCodeAndSystemInstanceOnInstance() throws IOException {
+		createLocalCsAndVs();
+		createLocalVsWithIncludeConcept();
+
+		String url = ourServerBase +
+			"/ValueSet/" + myLocalValueSetId.getIdPart() + "/$validate-code?system=" +
+			UrlUtil.escapeUrlParam(FhirResourceDaoR4TerminologyTest.URL_MY_CODE_SYSTEM) +
+			"&code=AA";
+
+		ourLog.info("* Requesting: {}", url);
+
+		HttpGet request = new HttpGet(url);
+		request.addHeader("Accept", "application/fhir+json");
+		try (CloseableHttpResponse response = ourHttpClient.execute(request)) {
+			String respString = IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(respString);
+
+			Parameters respParam = myFhirCtx.newJsonParser().parseResource(Parameters.class, respString);
+			assertTrue(((BooleanType) respParam.getParameter().get(0).getValue()).booleanValue());
+		}
+	}
+
 	@Test
 	public void testValidateCodeOperationByCodeAndSystemType() {
 		//@formatter:off
@@ -574,4 +711,15 @@ public class ResourceProviderDstu3ValueSetTest extends BaseResourceProviderDstu3
 		return codeSystem;
 	}
 
+
+	public static List<String> toCodesContains(List<ValueSet.ValueSetExpansionContainsComponent> theContains) {
+		List<String> retVal = new ArrayList<>();
+
+		for (ValueSet.ValueSetExpansionContainsComponent next : theContains) {
+			retVal.add(next.getCode());
+		}
+
+		return retVal;
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/TerminologyUploaderProviderDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/TerminologyUploaderProviderDstu3Test.java
index 052af9d5d9b..90bb75cc09f 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/TerminologyUploaderProviderDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/dstu3/TerminologyUploaderProviderDstu3Test.java
@@ -1,10 +1,15 @@
 package ca.uhn.fhir.jpa.provider.dstu3;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.Matchers.greaterThan;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
+import ca.uhn.fhir.jpa.term.IHapiTerminologyLoaderSvc;
+import ca.uhn.fhir.jpa.term.TerminologyLoaderSvcImpl;
+import ca.uhn.fhir.jpa.term.ZipCollectionBuilder;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
+import ca.uhn.fhir.util.TestUtil;
+import org.apache.commons.io.IOUtils;
+import org.hl7.fhir.dstu3.model.*;
+import org.junit.AfterClass;
+import org.junit.Test;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -15,34 +20,45 @@ import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
-import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
-import org.apache.commons.io.IOUtils;
-import org.hl7.fhir.dstu3.model.Attachment;
-import org.hl7.fhir.dstu3.model.IntegerType;
-import org.hl7.fhir.dstu3.model.Parameters;
-import org.hl7.fhir.dstu3.model.StringType;
-import org.hl7.fhir.dstu3.model.UriType;
-import org.junit.AfterClass;
-import org.junit.Test;
-
-import ca.uhn.fhir.jpa.term.IHapiTerminologyLoaderSvc;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-import ca.uhn.fhir.util.TestUtil;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.junit.Assert.*;
 
 public class TerminologyUploaderProviderDstu3Test extends BaseResourceProviderDstu3Test {
 
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(TerminologyUploaderProviderDstu3Test.class);
 
-	private byte[] createLoincZip() throws IOException {
+	private static void addFile(ZipOutputStream theZos, String theFileName) throws IOException {
+		theZos.putNextEntry(new ZipEntry(theFileName));
+		theZos.write(IOUtils.toByteArray(TerminologyUploaderProviderDstu3Test.class.getResourceAsStream("/loinc/" + theFileName)));
+	}
+
+	public static byte[] createLoincZip() throws IOException {
 		ByteArrayOutputStream bos = new ByteArrayOutputStream();
 		ZipOutputStream zos = new ZipOutputStream(bos);
 
-		zos.putNextEntry(new ZipEntry("Loinc.csv"));
-		zos.write(IOUtils.toByteArray(getClass().getResourceAsStream("/loinc/Loinc.csv")));
-		zos.putNextEntry(new ZipEntry("MultiAxialHierarchy.csv"));
-		zos.write(IOUtils.toByteArray(getClass().getResourceAsStream("/loinc/MultiAxialHierarchy.csv")));
+		addFile(zos, "loincupload.properties");
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_PART_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_HIERARCHY_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_ANSWERLIST_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_ANSWERLIST_LINK_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_GROUP_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_GROUP_TERMS_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_PARENT_GROUP_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_PART_LINK_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_PART_RELATED_CODE_MAPPING_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_DOCUMENT_ONTOLOGY_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_RSNA_PLAYBOOK_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_UNIVERSAL_LAB_ORDER_VALUESET_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_IEEE_MEDICAL_DEVICE_CODE_MAPPING_TABLE_CSV);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_IMAGING_DOCUMENT_CODES_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_TOP2000_COMMON_LAB_RESULTS_SI_FILE);
+		addFile(zos, TerminologyLoaderSvcImpl.LOINC_TOP2000_COMMON_LAB_RESULTS_US_FILE);
+
 		zos.close();
 
+
 		byte[] packageBytes = bos.toByteArray();
 		return packageBytes;
 	}
@@ -51,7 +67,7 @@ public class TerminologyUploaderProviderDstu3Test extends BaseResourceProviderDs
 		ByteArrayOutputStream bos = new ByteArrayOutputStream();
 		ZipOutputStream zos = new ZipOutputStream(bos);
 
-		List<String> inputNames = Arrays.asList("sct2_Concept_Full_INT_20160131.txt","sct2_Concept_Full-en_INT_20160131.txt","sct2_Description_Full-en_INT_20160131.txt","sct2_Identifier_Full_INT_20160131.txt","sct2_Relationship_Full_INT_20160131.txt","sct2_StatedRelationship_Full_INT_20160131.txt","sct2_TextDefinition_Full-en_INT_20160131.txt");
+		List<String> inputNames = Arrays.asList("sct2_Concept_Full_INT_20160131.txt", "sct2_Concept_Full-en_INT_20160131.txt", "sct2_Description_Full-en_INT_20160131.txt", "sct2_Identifier_Full_INT_20160131.txt", "sct2_Relationship_Full_INT_20160131.txt", "sct2_StatedRelationship_Full_INT_20160131.txt", "sct2_TextDefinition_Full-en_INT_20160131.txt");
 		for (String nextName : inputNames) {
 			zos.putNextEntry(new ZipEntry("SnomedCT_Release_INT_20160131_Full/Terminology/" + nextName));
 			byte[] b = IOUtils.toByteArray(getClass().getResourceAsStream("/sct/" + nextName));
@@ -95,7 +111,7 @@ public class TerminologyUploaderProviderDstu3Test extends BaseResourceProviderDs
 		String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
 		ourLog.info(resp);
 
-		assertThat(((IntegerType)respParam.getParameter().get(0).getValue()).getValue(), greaterThan(1));
+		assertThat(((IntegerType) respParam.getParameter().get(0).getValue()).getValue(), greaterThan(1));
 
 		/*
 		 * Try uploading a second time
@@ -150,7 +166,7 @@ public class TerminologyUploaderProviderDstu3Test extends BaseResourceProviderDs
 	}
 
 	@Test
-	public void testUploadPackageMissingUrl() throws Exception {
+	public void testUploadPackageMissingUrl() {
 		try {
 			ourClient
 				.operation()
@@ -179,7 +195,7 @@ public class TerminologyUploaderProviderDstu3Test extends BaseResourceProviderDs
 		String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
 		ourLog.info(resp);
 
-		assertThat(((IntegerType)respParam.getParameter().get(0).getValue()).getValue(), greaterThan(1));
+		assertThat(((IntegerType) respParam.getParameter().get(0).getValue()).getValue(), greaterThan(1));
 	}
 
 	@Test
@@ -205,7 +221,7 @@ public class TerminologyUploaderProviderDstu3Test extends BaseResourceProviderDs
 		String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
 		ourLog.info(resp);
 
-		assertThat(((IntegerType)respParam.getParameter().get(0).getValue()).getValue(), greaterThan(1));
+		assertThat(((IntegerType) respParam.getParameter().get(0).getValue()).getValue(), greaterThan(1));
 	}
 
 	@AfterClass
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/AuthorizationInterceptorResourceProviderR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/AuthorizationInterceptorResourceProviderR4Test.java
index 62231f1bc5b..7b3830cd9d2 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/AuthorizationInterceptorResourceProviderR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/AuthorizationInterceptorResourceProviderR4Test.java
@@ -40,64 +40,6 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		unregisterInterceptors();
 	}
 
-	/**
-	 * See #778
-	 */
-	@Test
-	public void testReadingObservationAccessRight() {
-		Practitioner practitioner1 = new Practitioner();
-		final IIdType practitionerId1 = myClient.create().resource(practitioner1).execute().getId().toUnqualifiedVersionless();
-
-		Practitioner practitioner2 = new Practitioner();
-		final IIdType practitionerId2 = myClient.create().resource(practitioner2).execute().getId().toUnqualifiedVersionless();
-
-		Patient patient = new Patient();
-		patient.setActive(true);
-		final IIdType patientId = myClient.create().resource(patient).execute().getId().toUnqualifiedVersionless();
-
-		ourRestServer.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
-			@Override
-			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
-				// allow write all Observation resource
-				// allow read only Observation resource in which it has a practitioner1 or practitioner2 compartment
-				return new RuleBuilder().allow()
-					.write()
-					.resourcesOfType(Observation.class)
-					.withAnyId()
-					.andThen()
-					.allow()
-					.read()
-					.resourcesOfType(Observation.class)
-					.inCompartment("Practitioner", Arrays.asList(practitionerId1, practitionerId2))
-					.andThen()
-					.denyAll()
-					.build();
-			}
-		});
-
-		Observation obs1 = new Observation();
-		obs1.setStatus(ObservationStatus.FINAL);
-		obs1.setPerformer(
-			Arrays.asList(new Reference(practitionerId1), new Reference(practitionerId2)));
-		IIdType oid1 = myClient.create().resource(obs1).execute().getId().toUnqualified();
-
-		// Observation with practitioner1 and practitioner1 as the Performer -> should have the read access
-		myClient.read().resource(Observation.class).withId(oid1).execute();
-
-		Observation obs2 = new Observation();
-		obs2.setStatus(ObservationStatus.FINAL);
-		obs2.setSubject(new Reference(patientId));
-		IIdType oid2 = myClient.create().resource(obs2).execute().getId().toUnqualified();
-
-		// Observation with patient as the subject -> read access should be blocked
-		try {
-			myClient.read().resource(Observation.class).withId(oid2).execute();
-			fail();
-		} catch (ForbiddenOperationException e) {
-			// good
-		}
-	}
-
 	/**
 	 * See #667
 	 */
@@ -105,11 +47,11 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 	public void testBlockUpdatingPatientUserDoesnNotHaveAccessTo() {
 		Patient pt1 = new Patient();
 		pt1.setActive(true);
-		final IIdType pid1 = myClient.create().resource(pt1).execute().getId().toUnqualifiedVersionless();
+		final IIdType pid1 = ourClient.create().resource(pt1).execute().getId().toUnqualifiedVersionless();
 
 		Patient pt2 = new Patient();
 		pt2.setActive(false);
-		final IIdType pid2 = myClient.create().resource(pt2).execute().getId().toUnqualifiedVersionless();
+		final IIdType pid2 = ourClient.create().resource(pt2).execute().getId().toUnqualifiedVersionless();
 
 		ourRestServer.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
 			@Override
@@ -123,7 +65,7 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		Observation obs = new Observation();
 		obs.setStatus(ObservationStatus.FINAL);
 		obs.setSubject(new Reference(pid1));
-		IIdType oid = myClient.create().resource(obs).execute().getId().toUnqualified();
+		IIdType oid = ourClient.create().resource(obs).execute().getId().toUnqualified();
 
 
 		unregisterInterceptors();
@@ -147,7 +89,7 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		obs.setSubject(new Reference(pid2));
 
 		try {
-			myClient.update().resource(obs).execute();
+			ourClient.update().resource(obs).execute();
 			fail();
 		} catch (ForbiddenOperationException e) {
 			// good
@@ -161,7 +103,7 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		Patient patient = new Patient();
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
-		final MethodOutcome output1 = myClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|100").execute();
+		final MethodOutcome output1 = ourClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|100").execute();
 
 		ourRestServer.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
 			@Override
@@ -179,7 +121,7 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		patient.setId(output1.getId().toUnqualifiedVersionless());
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
-		MethodOutcome output2 = myClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|100").execute();
+		MethodOutcome output2 = ourClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|100").execute();
 
 		assertEquals(output1.getId().getIdPart(), output2.getId().getIdPart());
 
@@ -187,7 +129,7 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
 		try {
-			myClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|101").execute();
+			ourClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|101").execute();
 			fail();
 		} catch (ForbiddenOperationException e) {
 			assertEquals("HTTP 403 Forbidden: Access denied by default policy (no applicable rules)", e.getMessage());
@@ -198,7 +140,7 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
 		try {
-			myClient.update().resource(patient).execute();
+			ourClient.update().resource(patient).execute();
 			fail();
 		} catch (ForbiddenOperationException e) {
 			assertEquals("HTTP 403 Forbidden: Access denied by default policy (no applicable rules)", e.getMessage());
@@ -216,17 +158,17 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		patient.setId("Patient/A");
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
-		IIdType id = myClient.update().resource(patient).execute().getId();
+		IIdType id = ourClient.update().resource(patient).execute().getId();
 
 		Observation obs = new Observation();
 		obs.setId("Observation/B");
 		obs.getSubject().setReference("Patient/A");
-		myClient.update().resource(obs).execute();
+		ourClient.update().resource(obs).execute();
 
 		obs = new Observation();
 		obs.setId("Observation/C");
 		obs.setStatus(ObservationStatus.FINAL);
-		myClient.update().resource(obs).execute();
+		ourClient.update().resource(obs).execute();
 
 		ourRestServer.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
 			@Override
@@ -239,17 +181,17 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 			}
 		});
 
-		myClient.delete().resourceById(new IdType("Observation/B")).execute();
+		ourClient.delete().resourceById(new IdType("Observation/B")).execute();
 
 		try {
-			myClient.read().resource(Observation.class).withId("Observation/B").execute();
+			ourClient.read().resource(Observation.class).withId("Observation/B").execute();
 			fail();
 		} catch (ResourceGoneException e) {
 			// good
 		}
 
 		try {
-			myClient.delete().resourceById(new IdType("Observation/C")).execute();
+			ourClient.delete().resourceById(new IdType("Observation/C")).execute();
 			fail();
 		} catch (ForbiddenOperationException e) {
 			// good
@@ -265,16 +207,16 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		Patient patient = new Patient();
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
-		final IIdType id = myClient.create().resource(patient).execute().getId();
+		final IIdType id = ourClient.create().resource(patient).execute().getId();
 
 		Observation obsInCompartment = new Observation();
 		obsInCompartment.setStatus(ObservationStatus.FINAL);
 		obsInCompartment.getSubject().setReferenceElement(id.toUnqualifiedVersionless());
-		IIdType obsInCompartmentId = myClient.create().resource(obsInCompartment).execute().getId().toUnqualifiedVersionless();
+		IIdType obsInCompartmentId = ourClient.create().resource(obsInCompartment).execute().getId().toUnqualifiedVersionless();
 
 		Observation obsNotInCompartment = new Observation();
 		obsNotInCompartment.setStatus(ObservationStatus.FINAL);
-		IIdType obsNotInCompartmentId = myClient.create().resource(obsNotInCompartment).execute().getId().toUnqualifiedVersionless();
+		IIdType obsNotInCompartmentId = ourClient.create().resource(obsNotInCompartment).execute().getId().toUnqualifiedVersionless();
 
 		ourRestServer.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
 			@Override
@@ -287,10 +229,10 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 			}
 		});
 
-		myClient.delete().resourceById(obsInCompartmentId.toUnqualifiedVersionless()).execute();
+		ourClient.delete().resourceById(obsInCompartmentId.toUnqualifiedVersionless()).execute();
 
 		try {
-			myClient.delete().resourceById(obsNotInCompartmentId.toUnqualifiedVersionless()).execute();
+			ourClient.delete().resourceById(obsNotInCompartmentId.toUnqualifiedVersionless()).execute();
 			fail();
 		} catch (ForbiddenOperationException e) {
 			// good
@@ -316,16 +258,16 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		Patient patient = new Patient();
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
-		IIdType id = myClient.create().resource(patient).execute().getId();
+		IIdType id = ourClient.create().resource(patient).execute().getId();
 
 		try {
-			myClient.delete().resourceById(id.toUnqualifiedVersionless()).execute();
+			ourClient.delete().resourceById(id.toUnqualifiedVersionless()).execute();
 			fail();
 		} catch (ForbiddenOperationException e) {
 			// good
 		}
 
-		patient = myClient.read().resource(Patient.class).withId(id.toUnqualifiedVersionless()).execute();
+		patient = ourClient.read().resource(Patient.class).withId(id.toUnqualifiedVersionless()).execute();
 		assertEquals(id.getValue(), patient.getId());
 	}
 
@@ -429,7 +371,7 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		o.getSubject().setResource(p);
 		request.addEntry().setResource(o).getRequest().setMethod(Bundle.HTTPVerb.POST);
 
-		Bundle resp = myClient.transaction().withBundle(request).execute();
+		Bundle resp = ourClient.transaction().withBundle(request).execute();
 		assertEquals(2, resp.getEntry().size());
 
 
@@ -455,13 +397,11 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 		});
 
 
-
 		// Create a bundle that will be used as a transaction
 		Bundle bundle = new Bundle();
 		bundle.setType(Bundle.BundleType.TRANSACTION);
 
 
-
 		String encounterId = "123-123";
 		String encounterSystem = "http://our.internal.code.system/encounter";
 		Encounter encounter = new Encounter();
@@ -518,13 +458,122 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
 			.setMethod(Bundle.HTTPVerb.POST);
 
 
-		Bundle resp = myClient.transaction().withBundle(bundle).execute();
+		Bundle resp = ourClient.transaction().withBundle(bundle).execute();
 		assertEquals(3, resp.getEntry().size());
 
 	}
 
+	@Test
+	public void testPatchWithinCompartment() {
+		Patient pt1 = new Patient();
+		pt1.setActive(true);
+		final IIdType pid1 = ourClient.create().resource(pt1).execute().getId().toUnqualifiedVersionless();
+
+		Observation obs1 = new Observation();
+		obs1.setStatus(ObservationStatus.FINAL);
+		obs1.setSubject(new Reference(pid1));
+		IIdType oid1 = ourClient.create().resource(obs1).execute().getId().toUnqualified();
+
+		Patient pt2 = new Patient();
+		pt2.setActive(false);
+		final IIdType pid2 = ourClient.create().resource(pt2).execute().getId().toUnqualifiedVersionless();
+
+		Observation obs2 = new Observation();
+		obs2.setStatus(ObservationStatus.FINAL);
+		obs2.setSubject(new Reference(pid2));
+		IIdType oid2 = ourClient.create().resource(obs2).execute().getId().toUnqualified();
+
+		ourRestServer.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
+			@Override
+			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
+				return new RuleBuilder()
+					.allow().patch().allRequests().andThen()
+					.allow().write().allResources().inCompartment("Patient", pid1).andThen()
+					.allow().read().allResources().withAnyId().andThen()
+					.build();
+			}
+		});
+
+		String patchBody = "[\n" +
+			"     { \"op\": \"replace\", \"path\": \"Observation/status\", \"value\": \"amended\" }\n" +
+			"     ]";
+
+		// Allowed
+		ourClient.patch().withBody(patchBody).withId(oid1).execute();
+		obs1 = ourClient.read().resource(Observation.class).withId(oid1.toUnqualifiedVersionless()).execute();
+		assertEquals(ObservationStatus.AMENDED, obs1.getStatus());
+
+		// Denied
+		try {
+			ourClient.patch().withBody(patchBody).withId(oid2).execute();
+			fail();
+		} catch (ForbiddenOperationException e) {
+			// good
+		}
+		obs2 = ourClient.read().resource(Observation.class).withId(oid2.toUnqualifiedVersionless()).execute();
+		assertEquals(ObservationStatus.FINAL, obs2.getStatus());
+	}
+
+	/**
+	 * See #778
+	 */
+	@Test
+	public void testReadingObservationAccessRight() {
+		Practitioner practitioner1 = new Practitioner();
+		final IIdType practitionerId1 = ourClient.create().resource(practitioner1).execute().getId().toUnqualifiedVersionless();
+
+		Practitioner practitioner2 = new Practitioner();
+		final IIdType practitionerId2 = ourClient.create().resource(practitioner2).execute().getId().toUnqualifiedVersionless();
+
+		Patient patient = new Patient();
+		patient.setActive(true);
+		final IIdType patientId = ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless();
+
+		ourRestServer.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
+			@Override
+			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
+				// allow write all Observation resource
+				// allow read only Observation resource in which it has a practitioner1 or practitioner2 compartment
+				return new RuleBuilder().allow()
+					.write()
+					.resourcesOfType(Observation.class)
+					.withAnyId()
+					.andThen()
+					.allow()
+					.read()
+					.resourcesOfType(Observation.class)
+					.inCompartment("Practitioner", Arrays.asList(practitionerId1, practitionerId2))
+					.andThen()
+					.denyAll()
+					.build();
+			}
+		});
+
+		Observation obs1 = new Observation();
+		obs1.setStatus(ObservationStatus.FINAL);
+		obs1.setPerformer(
+			Arrays.asList(new Reference(practitionerId1), new Reference(practitionerId2)));
+		IIdType oid1 = ourClient.create().resource(obs1).execute().getId().toUnqualified();
+
+		// Observation with practitioner1 and practitioner1 as the Performer -> should have the read access
+		ourClient.read().resource(Observation.class).withId(oid1).execute();
+
+		Observation obs2 = new Observation();
+		obs2.setStatus(ObservationStatus.FINAL);
+		obs2.setSubject(new Reference(patientId));
+		IIdType oid2 = ourClient.create().resource(obs2).execute().getId().toUnqualified();
+
+		// Observation with patient as the subject -> read access should be blocked
+		try {
+			ourClient.read().resource(Observation.class).withId(oid2).execute();
+			fail();
+		} catch (ForbiddenOperationException e) {
+			// good
+		}
+	}
+
 	private void unregisterInterceptors() {
-		for (IServerInterceptor next : new ArrayList<IServerInterceptor>(ourRestServer.getInterceptors())) {
+		for (IServerInterceptor next : new ArrayList<>(ourRestServer.getInterceptors())) {
 			if (next instanceof AuthorizationInterceptor) {
 				ourRestServer.unregisterInterceptor(next);
 			}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/BaseResourceProviderR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/BaseResourceProviderR4Test.java
index 91c5aba4e89..edd8de32d79 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/BaseResourceProviderR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/BaseResourceProviderR4Test.java
@@ -8,7 +8,6 @@ import ca.uhn.fhir.jpa.search.DatabaseBackedPagingProvider;
 import ca.uhn.fhir.jpa.search.ISearchCoordinatorSvc;
 import ca.uhn.fhir.jpa.subscription.resthook.SubscriptionRestHookInterceptor;
 import ca.uhn.fhir.jpa.util.ResourceCountCache;
-import ca.uhn.fhir.jpa.util.SingleItemLoadingCache;
 import ca.uhn.fhir.jpa.validation.JpaValidationSupportChainR4;
 import ca.uhn.fhir.narrative.DefaultThymeleafNarrativeGenerator;
 import ca.uhn.fhir.parser.StrictErrorHandler;
@@ -16,6 +15,7 @@ import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.client.api.ServerValidationModeEnum;
 import ca.uhn.fhir.rest.client.interceptor.LoggingInterceptor;
 import ca.uhn.fhir.rest.server.RestfulServer;
+import ca.uhn.fhir.rest.server.exceptions.ResourceVersionConflictException;
 import ca.uhn.fhir.rest.server.interceptor.CorsInterceptor;
 import ca.uhn.fhir.util.PortUtil;
 import ca.uhn.fhir.util.TestUtil;
@@ -44,15 +44,14 @@ import org.springframework.web.servlet.DispatcherServlet;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import static org.apache.commons.lang3.StringUtils.isNotBlank;
+import static org.junit.Assert.fail;
 
 public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
 
 	protected static JpaValidationSupportChainR4 myValidationSupport;
-	protected IGenericClient myClient;
 	protected static CloseableHttpClient ourHttpClient;
 	protected static int ourPort;
 	protected static RestfulServer ourRestServer;
@@ -61,12 +60,14 @@ public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
 	protected static DatabaseBackedPagingProvider ourPagingProvider;
 	protected static ISearchDao mySearchEntityDao;
 	protected static ISearchCoordinatorSvc mySearchCoordinatorSvc;
-	private static Server ourServer;
 	protected static GenericWebApplicationContext ourWebApplicationContext;
+	protected static SubscriptionRestHookInterceptor ourReskHookSubscriptionInterceptor;
+	private static Server ourServer;
+	protected IGenericClient ourClient;
+	protected ResourceCountCache ourResourceCountsCache;
 	private TerminologyUploaderProviderR4 myTerminologyUploaderProvider;
 	private Object ourGraphQLProvider;
 	private boolean ourRestHookSubscriptionInterceptorRequested;
-	protected ResourceCountCache ourResourceCountsCache;
 
 	public BaseResourceProviderR4Test() {
 		super();
@@ -128,7 +129,7 @@ public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
 			subsServletHolder.setServlet(dispatcherServlet);
 			subsServletHolder.setInitParameter(
 				ContextLoader.CONFIG_LOCATION_PARAM,
-					WebsocketDispatcherConfig.class.getName());
+				WebsocketDispatcherConfig.class.getName());
 			proxyHandler.addServlet(subsServletHolder, "/*");
 
 			// Register a CORS filter
@@ -155,6 +156,7 @@ public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
 			mySearchCoordinatorSvc = wac.getBean(ISearchCoordinatorSvc.class);
 			mySearchEntityDao = wac.getBean(ISearchDao.class);
 			ourSearchParamRegistry = wac.getBean(SearchParamRegistryR4.class);
+			ourReskHookSubscriptionInterceptor = wac.getBean(SubscriptionRestHookInterceptor.class);
 
 			myFhirCtx.getRestfulClientFactory().setSocketTimeout(5000000);
 
@@ -169,9 +171,9 @@ public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
 
 		ourRestServer.setPagingProvider(ourPagingProvider);
 
-		myClient = myFhirCtx.newRestfulGenericClient(ourServerBase);
+		ourClient = myFhirCtx.newRestfulGenericClient(ourServerBase);
 		if (shouldLogClient()) {
-			myClient.registerInterceptor(new LoggingInterceptor());
+			ourClient.registerInterceptor(new LoggingInterceptor());
 		}
 	}
 
@@ -193,7 +195,7 @@ public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
 	}
 
 	protected List<String> toNameList(Bundle resp) {
-		List<String> names = new ArrayList<String>();
+		List<String> names = new ArrayList<>();
 		for (BundleEntryComponent next : resp.getEntry()) {
 			Patient nextPt = (Patient) next.getResource();
 			String nextStr = nextPt.getName().size() > 0 ? nextPt.getName().get(0).getGivenAsSingleString() + " " + nextPt.getName().get(0).getFamily() : "";
@@ -204,6 +206,24 @@ public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
 		return names;
 	}
 
+	protected void waitForRegisteredSubscriptionCount(int theSize) throws Exception {
+		for (int i = 0; ; i++) {
+			if (i == 10) {
+				fail("Failed to init subscriptions");
+			}
+			try {
+				getRestHookSubscriptionInterceptor().doInitSubscriptions();
+				break;
+			} catch (ResourceVersionConflictException e) {
+				Thread.sleep(250);
+			}
+		}
+
+		SubscriptionRestHookInterceptor interceptor = getRestHookSubscriptionInterceptor();
+		TestUtil.waitForSize(theSize, () -> interceptor.getRegisteredSubscriptions().size());
+		Thread.sleep(500);
+	}
+
 	@AfterClass
 	public static void afterClassClearContextBaseResourceProviderR4Test() throws Exception {
 		ourServer.stop();
@@ -269,4 +289,5 @@ public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
 
 		return false;
 	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/CompositionDocumentR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/CompositionDocumentR4Test.java
new file mode 100644
index 00000000000..15278e50b31
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/CompositionDocumentR4Test.java
@@ -0,0 +1,143 @@
+package ca.uhn.fhir.jpa.provider.r4;
+
+import ca.uhn.fhir.jpa.dao.DaoConfig;
+import ca.uhn.fhir.parser.StrictErrorHandler;
+import ca.uhn.fhir.rest.api.EncodingEnum;
+import ca.uhn.fhir.util.TestUtil;
+import com.google.common.base.Charsets;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+
+import org.hl7.fhir.r4.model.*;
+import org.hl7.fhir.r4.model.codesystems.EncounterStatus;
+import org.hl7.fhir.r4.model.codesystems.ObservationStatus;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasItems;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+
+public class CompositionDocumentR4Test extends BaseResourceProviderR4Test {
+
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(CompositionDocumentR4Test.class);
+	private String orgId;
+	private String patId;
+	private List<String> myObsIds;
+	private String encId;
+	private String listId;
+	private String compId;
+
+	@Before
+	public void beforeDisableResultReuse() {
+		myDaoConfig.setReuseCachedSearchResultsForMillis(null);
+	}
+
+	@Override
+	@After
+	public void after() throws Exception {
+		super.after();
+
+		myDaoConfig.setReuseCachedSearchResultsForMillis(new DaoConfig().getReuseCachedSearchResultsForMillis());
+	}
+
+	@Override
+	public void before() throws Exception {
+		super.before();
+		myFhirCtx.setParserErrorHandler(new StrictErrorHandler());
+
+		myDaoConfig.setAllowMultipleDelete(true);
+
+		Organization org = new Organization();
+		org.setName("an org");
+		orgId = ourClient.create().resource(org).execute().getId().toUnqualifiedVersionless().getValue();
+		ourLog.info("OrgId: {}", orgId);
+
+		Patient patient = new Patient();
+		patient.getManagingOrganization().setReference(orgId);
+		patId = ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless().getValue();
+
+		Encounter enc = new Encounter();
+		enc.setStatus(Encounter.EncounterStatus.ARRIVED);
+		enc.getSubject().setReference(patId);
+		enc.getServiceProvider().setReference(orgId);
+		encId = ourClient.create().resource(enc).execute().getId().toUnqualifiedVersionless().getValue();
+
+		ListResource listResource = new ListResource();
+
+		ArrayList<Observation> myObs = new ArrayList<>();
+		myObsIds = new ArrayList<String>();
+		for (int i = 0; i < 5; i++) {
+			Observation obs = new Observation();
+			obs.getSubject().setReference(patId);
+			obs.setStatus(Observation.ObservationStatus.FINAL);
+			String obsId = ourClient.create().resource(obs).execute().getId().toUnqualifiedVersionless().getValue();
+			listResource.addEntry(new ListResource.ListEntryComponent().setItem(new Reference(obs)));
+			myObs.add(obs);
+			myObsIds.add(obsId);
+		}
+
+		listId = ourClient.create().resource(listResource).execute().getId().toUnqualifiedVersionless().getValue();
+
+		Composition composition = new Composition();
+		composition.setSubject(new Reference(patId));
+		composition.addSection().addEntry(new Reference(patId));
+		composition.addSection().addEntry(new Reference(orgId));
+		composition.addSection().addEntry(new Reference(encId));
+		composition.addSection().addEntry(new Reference(listId));
+
+		for (String obsId : myObsIds) {
+			composition.addSection().addEntry(new Reference(obsId));
+		}
+		compId = ourClient.create().resource(composition).execute().getId().toUnqualifiedVersionless().getValue();
+	}
+
+	@Test
+	public void testDocumentBundleReturnedCorrect() throws IOException {
+
+		String theUrl = ourServerBase + "/" + compId + "/$document?_format=json";
+		Bundle bundle = fetchBundle(theUrl, EncodingEnum.JSON);
+
+		assertNull(bundle.getLink("next"));
+
+		Set<String> actual = new HashSet<>();
+		for (Bundle.BundleEntryComponent nextEntry : bundle.getEntry()) {
+			actual.add(nextEntry.getResource().getIdElement().toUnqualifiedVersionless().getValue());
+		}
+
+		ourLog.info("Found IDs: {}", actual);
+		assertThat(actual, hasItem(compId));
+		assertThat(actual, hasItem(patId));
+		assertThat(actual, hasItem(orgId));
+		assertThat(actual, hasItem(encId));
+		assertThat(actual, hasItem(listId));
+		assertThat(actual, hasItems(myObsIds.toArray(new String[0])));
+	}
+
+	private Bundle fetchBundle(String theUrl, EncodingEnum theEncoding) throws IOException, ClientProtocolException {
+		Bundle bundle;
+		HttpGet get = new HttpGet(theUrl);
+
+		try (CloseableHttpResponse resp = ourHttpClient.execute(get)) {
+			String resourceString = IOUtils.toString(resp.getEntity().getContent(), Charsets.UTF_8);
+			bundle = theEncoding.newParser(myFhirCtx).parseResource(Bundle.class, resourceString);
+		} 
+		return bundle;
+	}
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ExpungeR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ExpungeR4Test.java
index 84d872e667b..14659fca509 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ExpungeR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ExpungeR4Test.java
@@ -2,19 +2,27 @@ package ca.uhn.fhir.jpa.provider.r4;
 
 import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
+import ca.uhn.fhir.jpa.dao.data.IForcedIdDao;
+import ca.uhn.fhir.jpa.dao.data.IResourceHistoryTableDao;
+import ca.uhn.fhir.jpa.dao.data.IResourceTableDao;
 import ca.uhn.fhir.jpa.util.ExpungeOptions;
 import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
 import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
 import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
 import ca.uhn.fhir.util.TestUtil;
+import org.hamcrest.Matchers;
 import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.r4.model.IdType;
 import org.hl7.fhir.r4.model.Observation;
 import org.hl7.fhir.r4.model.Patient;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
 
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.not;
 import static org.junit.Assert.*;
 
 public class ExpungeR4Test extends BaseResourceProviderR4Test {
@@ -58,11 +66,8 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 		getDao(theId).read(theId);
 	}
 
-	@Override
-	@Before
-	public void before() throws Exception {
-		super.before();
 
+	public void createStandardPatients() {
 		Patient p = new Patient();
 		p.setId("PT-ONEVERSION");
 		p.getMeta().addTag().setSystem("http://foo").setCode("bar");
@@ -105,7 +110,6 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 		o.setStatus(Observation.ObservationStatus.FINAL);
 		myDeletedObservationId = myObservationDao.create(o).getId();
 		myDeletedObservationId = myObservationDao.delete(myDeletedObservationId).getId();
-
 	}
 
 	private IFhirResourceDao<?> getDao(IIdType theId) {
@@ -126,6 +130,8 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testExpungeInstanceOldVersionsAndDeleted() {
+		createStandardPatients();
+
 		Patient p = new Patient();
 		p.setId("PT-TWOVERSION");
 		p.getMeta().addTag().setSystem("http://foo").setCode("bar");
@@ -151,8 +157,35 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 		assertGone(myDeletedObservationId);
 	}
 
+	@Test
+	public void testExpungeAllVersionsDeletesRow() {
+		// Create then delete
+		Patient p = new Patient();
+		p.setId("TEST");
+		p.getMeta().addTag().setSystem("http://foo").setCode("bar");
+		p.setActive(true);
+		p.addName().setFamily("FOO");
+		myPatientDao.update(p).getId();
+		myPatientDao.delete(new IdType("Patient/TEST"));
+
+		runInTransaction(()-> assertThat(myResourceTableDao.findAll(), not(empty())));
+		runInTransaction(()-> assertThat(myResourceHistoryTableDao.findAll(), not(empty())));
+		runInTransaction(()-> assertThat(myForcedIdDao.findAll(), not(empty())));
+
+		myPatientDao.expunge(new ExpungeOptions()
+			.setExpungeDeletedResources(true)
+			.setExpungeOldVersions(true));
+
+		runInTransaction(()-> assertThat(myResourceTableDao.findAll(), empty()));
+		runInTransaction(()-> assertThat(myResourceHistoryTableDao.findAll(), empty()));
+		runInTransaction(()-> assertThat(myForcedIdDao.findAll(), empty()));
+
+	}
+
+
 	@Test
 	public void testExpungeInstanceVersionCurrentVersion() {
+		createStandardPatients();
 
 		try {
 			myPatientDao.expunge(myTwoVersionPatientId.withVersion("2"), new ExpungeOptions()
@@ -166,6 +199,8 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testExpungeInstanceVersionOldVersionsAndDeleted() {
+		createStandardPatients();
+
 		Patient p = new Patient();
 		p.setId("PT-TWOVERSION");
 		p.getMeta().addTag().setSystem("http://foo").setCode("bar");
@@ -193,6 +228,8 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testExpungeSystemOldVersionsAndDeleted() {
+		createStandardPatients();
+
 		mySystemDao.expunge(new ExpungeOptions()
 			.setExpungeDeletedResources(true)
 			.setExpungeOldVersions(true));
@@ -212,6 +249,8 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testExpungeTypeDeletedResources() {
+		createStandardPatients();
+
 		myPatientDao.expunge(new ExpungeOptions()
 			.setExpungeDeletedResources(true)
 			.setExpungeOldVersions(false));
@@ -231,6 +270,8 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testExpungeTypeOldVersions() {
+		createStandardPatients();
+
 		myPatientDao.expunge(new ExpungeOptions()
 			.setExpungeDeletedResources(false)
 			.setExpungeOldVersions(true));
@@ -251,6 +292,8 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testExpungeSystemEverything() {
+		createStandardPatients();
+
 		mySystemDao.expunge(new ExpungeOptions()
 			.setExpungeEverything(true));
 
@@ -270,6 +313,8 @@ public class ExpungeR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testExpungeTypeOldVersionsAndDeleted() {
+		createStandardPatients();
+
 		myPatientDao.expunge(new ExpungeOptions()
 			.setExpungeDeletedResources(true)
 			.setExpungeOldVersions(true));
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/GraphQLProviderR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/GraphQLProviderR4Test.java
index 7842f99a75d..4524251c522 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/GraphQLProviderR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/GraphQLProviderR4Test.java
@@ -85,13 +85,13 @@ public class GraphQLProviderR4Test extends BaseResourceProviderR4Test {
 		p.addName()
 			.addGiven("GivenOnly1")
 			.addGiven("GivenOnly2");
-		myPatientId0 = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		myPatientId0 = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		p = new Patient();
 		p.addName()
 			.addGiven("GivenOnlyB1")
 			.addGiven("GivenOnlyB2");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 	}
 
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/PatientEverythingR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/PatientEverythingR4Test.java
index 37b45783b2b..ba0db38b0e9 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/PatientEverythingR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/PatientEverythingR4Test.java
@@ -57,41 +57,41 @@ public class PatientEverythingR4Test extends BaseResourceProviderR4Test {
 		
 		Organization org = new Organization();
 		org.setName("an org");
-		orgId = myClient.create().resource(org).execute().getId().toUnqualifiedVersionless().getValue();
+		orgId = ourClient.create().resource(org).execute().getId().toUnqualifiedVersionless().getValue();
 		ourLog.info("OrgId: {}", orgId);
 
 		Patient patient = new Patient();
 		patient.getManagingOrganization().setReference(orgId);
-		patId = myClient.create().resource(patient).execute().getId().toUnqualifiedVersionless().getValue();
+		patId = ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless().getValue();
 
 		Patient patient2 = new Patient();
 		patient2.getManagingOrganization().setReference(orgId);
-		myWrongPatId = myClient.create().resource(patient2).execute().getId().toUnqualifiedVersionless().getValue();
+		myWrongPatId = ourClient.create().resource(patient2).execute().getId().toUnqualifiedVersionless().getValue();
 
 		Encounter enc1 = new Encounter();
 		enc1.setStatus(EncounterStatus.CANCELLED);
 		enc1.getSubject().setReference(patId);
 		enc1.getServiceProvider().setReference(orgId);
-		encId1 = myClient.create().resource(enc1).execute().getId().toUnqualifiedVersionless().getValue();
+		encId1 = ourClient.create().resource(enc1).execute().getId().toUnqualifiedVersionless().getValue();
 
 		Encounter enc2 = new Encounter();
 		enc2.setStatus(EncounterStatus.ARRIVED);
 		enc2.getSubject().setReference(patId);
 		enc2.getServiceProvider().setReference(orgId);
-		encId2 = myClient.create().resource(enc2).execute().getId().toUnqualifiedVersionless().getValue();
+		encId2 = ourClient.create().resource(enc2).execute().getId().toUnqualifiedVersionless().getValue();
 
 		Encounter wrongEnc1 = new Encounter();
 		wrongEnc1.setStatus(EncounterStatus.ARRIVED);
 		wrongEnc1.getSubject().setReference(myWrongPatId);
 		wrongEnc1.getServiceProvider().setReference(orgId);
-		myWrongEnc1 = myClient.create().resource(wrongEnc1).execute().getId().toUnqualifiedVersionless().getValue();
+		myWrongEnc1 = ourClient.create().resource(wrongEnc1).execute().getId().toUnqualifiedVersionless().getValue();
 
 		myObsIds = new ArrayList<String>();
 		for (int i = 0; i < 20; i++) {
 			Observation obs = new Observation();
 			obs.getSubject().setReference(patId);
 			obs.setStatus(ObservationStatus.FINAL);
-			String obsId = myClient.create().resource(obs).execute().getId().toUnqualifiedVersionless().getValue();
+			String obsId = ourClient.create().resource(obs).execute().getId().toUnqualifiedVersionless().getValue();
 			myObsIds.add(obsId);
 		}
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderCustomSearchParamR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderCustomSearchParamR4Test.java
index 6267a23ee74..19e36cdb5a3 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderCustomSearchParamR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderCustomSearchParamR4Test.java
@@ -80,7 +80,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 		sp.setTitle("Foo Param");
 
 		try {
-			myClient.create().resource(sp).execute();
+			ourClient.create().resource(sp).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertEquals("HTTP 422 Unprocessable Entity: SearchParameter.status is missing or invalid", e.getMessage());
@@ -91,7 +91,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 	public void testConformanceOverrideAllowed() {
 		myDaoConfig.setDefaultSearchParamsCanBeOverridden(true);
 
-		CapabilityStatement conformance = myClient
+		CapabilityStatement conformance = ourClient
 				.fetchConformance()
 				.ofType(CapabilityStatement.class)
 				.execute();
@@ -143,7 +143,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 			}
 		});
 
-		conformance = myClient
+		conformance = ourClient
 				.fetchConformance()
 				.ofType(CapabilityStatement.class)
 				.execute();
@@ -161,7 +161,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 	public void testConformanceOverrideNotAllowed() {
 		myDaoConfig.setDefaultSearchParamsCanBeOverridden(false);
 
-		CapabilityStatement conformance = myClient
+		CapabilityStatement conformance = ourClient
 				.fetchConformance()
 				.ofType(CapabilityStatement.class)
 				.execute();
@@ -197,7 +197,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 
 		mySearchParamRegsitry.forceRefresh();
 
-		conformance = myClient
+		conformance = ourClient
 				.fetchConformance()
 				.ofType(CapabilityStatement.class)
 				.execute();
@@ -301,7 +301,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 
 		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(eyeColourSp));
 
-		myClient
+		ourClient
 				.create()
 				.resource(eyeColourSp)
 				.execute();
@@ -320,7 +320,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 		p2.addExtension().setUrl("http://acme.org/eyecolour").setValue(new CodeType("green"));
 		IIdType p2id = myPatientDao.create(p2).getId().toUnqualifiedVersionless();
 
-		Bundle bundle = myClient
+		Bundle bundle = ourClient
 				.search()
 				.forResource(Patient.class)
 				.where(new TokenClientParam("eyecolour").exactly().code("blue"))
@@ -367,7 +367,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 		List<String> foundResources;
 		Bundle result;
 
-		result = myClient
+		result = ourClient
 				.search()
 				.forResource(Observation.class)
 				.where(new ReferenceClientParam("foo").hasChainedProperty(Patient.GENDER.exactly().code("male")))
@@ -407,7 +407,7 @@ public class ResourceProviderCustomSearchParamR4Test extends BaseResourceProvide
 		List<String> foundResources;
 		Bundle result;
 
-		result = myClient
+		result = ourClient
 				.search()
 				.forResource(Patient.class)
 				.where(new TokenClientParam("foo").exactly().code("male"))
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderExpungeR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderExpungeR4Test.java
index 4f6722b09f1..337cdda4c47 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderExpungeR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderExpungeR4Test.java
@@ -139,7 +139,7 @@ public class ResourceProviderExpungeR4Test extends BaseResourceProviderR4Test {
 
 		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(input));
 
-		Parameters output = myClient
+		Parameters output = ourClient
 			.operation()
 			.onInstance(myTwoVersionPatientId)
 			.named("expunge")
@@ -179,7 +179,7 @@ public class ResourceProviderExpungeR4Test extends BaseResourceProviderR4Test {
 			.setValue(new BooleanType(true));
 
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onInstance(myTwoVersionPatientId)
 				.named("expunge")
@@ -212,7 +212,7 @@ public class ResourceProviderExpungeR4Test extends BaseResourceProviderR4Test {
 
 		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(input));
 
-		Parameters output = myClient
+		Parameters output = ourClient
 			.operation()
 			.onServer()
 			.named("expunge")
@@ -251,7 +251,7 @@ public class ResourceProviderExpungeR4Test extends BaseResourceProviderR4Test {
 
 		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(input));
 
-		Parameters output = myClient
+		Parameters output = ourClient
 			.operation()
 			.onType(Patient.class)
 			.named("expunge")
@@ -297,7 +297,7 @@ public class ResourceProviderExpungeR4Test extends BaseResourceProviderR4Test {
 
 		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(input));
 
-		Parameters output = myClient
+		Parameters output = ourClient
 			.operation()
 			.onInstanceVersion(myTwoVersionPatientId.withVersion("1"))
 			.named("expunge")
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderInterceptorR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderInterceptorR4Test.java
index 0c784920341..9aea53e49d3 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderInterceptorR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderInterceptorR4Test.java
@@ -241,7 +241,7 @@ public class ResourceProviderInterceptorR4Test extends BaseResourceProviderR4Tes
 
 		Organization org = new Organization();
 		org.setName("orgName");
-		IIdType orgId = myClient.create().resource(org).execute().getId().toUnqualified();
+		IIdType orgId = ourClient.create().resource(org).execute().getId().toUnqualified();
 		assertNotNull(orgId.getVersionIdPartAsLong());
 
 		resetServerInterceptor();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderQuestionnaireResponseR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderQuestionnaireResponseR4Test.java
index 98a613849c2..ee1e4b81477 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderQuestionnaireResponseR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderQuestionnaireResponseR4Test.java
@@ -72,7 +72,7 @@ public class ResourceProviderQuestionnaireResponseR4Test extends BaseResourcePro
 		qr1.setStatus(QuestionnaireResponseStatus.COMPLETED);
 		qr1.addItem().setLinkId("link1").addAnswer().setValue(new DecimalType(123));
 		try {
-			myClient.create().resource(qr1).execute();
+			ourClient.create().resource(qr1).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertThat(e.toString(), containsString("Answer value must be of type string"));
@@ -95,7 +95,7 @@ public class ResourceProviderQuestionnaireResponseR4Test extends BaseResourcePro
 		qr1.setStatus(QuestionnaireResponseStatus.COMPLETED);
 		qr1.addItem().setLinkId("link1").addAnswer().setValue(new DecimalType(123));
 		try {
-			myClient.create().resource(qr1).execute();
+			ourClient.create().resource(qr1).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertThat(e.toString(), containsString("Answer value must be of type string"));
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4BundleTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4BundleTest.java
index 6ea92ae282a..adec26e4882 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4BundleTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4BundleTest.java
@@ -1,46 +1,69 @@
 package ca.uhn.fhir.jpa.provider.r4;
 
-import static org.junit.Assert.*;
-
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.rest.server.exceptions.NotImplementedOperationException;
+import ca.uhn.fhir.util.TestUtil;
+import org.hl7.fhir.r4.model.MessageHeader;
+import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.r4.model.Bundle;
 import org.hl7.fhir.r4.model.Bundle.BundleType;
 import org.hl7.fhir.r4.model.Composition;
-import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.r4.model.Parameters;
 import org.junit.AfterClass;
 import org.junit.Test;
 
-import ca.uhn.fhir.util.TestUtil;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.Assert.*;
 
 public class ResourceProviderR4BundleTest extends BaseResourceProviderR4Test {
 
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderR4BundleTest.class);
 
+	/**
+	 * See #401
+	 */
+	@Test
+	public void testBundlePreservesFullUrl() {
+
+		Bundle bundle = new Bundle();
+		bundle.setType(BundleType.DOCUMENT);
+
+		Composition composition = new Composition();
+		composition.setTitle("Visit Summary");
+		bundle.addEntry().setFullUrl("http://foo").setResource(composition);
+
+		IIdType id = ourClient.create().resource(bundle).execute().getId();
+
+		Bundle retBundle = ourClient.read().resource(Bundle.class).withId(id).execute();
+
+    ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(retBundle));
+
+		assertEquals("http://foo", bundle.getEntry().get(0).getFullUrl());
+	}
+
+	@Test
+	public void testProcessMessage() {
+
+		Bundle bundle = new Bundle();
+		bundle.setType(BundleType.MESSAGE);
+
+		Parameters parameters = new Parameters();
+		parameters.addParameter()
+			.setName("content")
+			.setResource(bundle);
+		try {
+			ourClient.operation().onType(MessageHeader.class).named(JpaConstants.OPERATION_PROCESS_MESSAGE).withParameters(parameters).execute();
+			fail();
+		} catch (NotImplementedOperationException e) {
+			assertThat(e.getMessage(), containsString("This operation is not yet implemented on this server"));
+		}
+
+	}
+
 	@AfterClass
 	public static void afterClassClearContext() {
 		TestUtil.clearAllStaticFieldsForUnitTest();
 	}
 
 
-	/**
-	 * See #401
-	 */
-	@Test
-	public void testBundlePreservesFullUrl() throws Exception {
-		
-		Bundle bundle = new Bundle();
-		bundle.setType(BundleType.DOCUMENT);
-		
-		Composition composition = new Composition();
-		composition.setTitle("Visit Summary");
-		bundle.addEntry().setFullUrl("http://foo").setResource(composition);
-		
-		IIdType id = myClient.create().resource(bundle).execute().getId();
-		
-		Bundle retBundle = myClient.read().resource(Bundle.class).withId(id).execute();
-		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(retBundle));
-		
-		assertEquals("http://foo", bundle.getEntry().get(0).getFullUrl());
-	}
-
-
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4CacheTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4CacheTest.java
index 9ffb2e4c623..1792f9fe300 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4CacheTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4CacheTest.java
@@ -35,7 +35,7 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 		myDaoConfig.setReuseCachedSearchResultsForMillis(new DaoConfig().getReuseCachedSearchResultsForMillis());
 		myDaoConfig.setCacheControlNoStoreMaxResultsUpperLimit(new DaoConfig().getCacheControlNoStoreMaxResultsUpperLimit());
 
-		myClient.unregisterInterceptor(myCapturingInterceptor);
+		ourClient.unregisterInterceptor(myCapturingInterceptor);
 	}
 
 	@Override
@@ -45,7 +45,7 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 		mySearchCoordinatorSvcRaw = AopTestUtils.getTargetObject(mySearchCoordinatorSvc);
 
 		myCapturingInterceptor = new CapturingInterceptor();
-		myClient.registerInterceptor(myCapturingInterceptor);
+		ourClient.registerInterceptor(myCapturingInterceptor);
 	}
 
 	@Test
@@ -53,9 +53,9 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 
 		Patient pt1 = new Patient();
 		pt1.addName().setFamily("FAM");
-		myClient.create().resource(pt1).execute();
+		ourClient.create().resource(pt1).execute();
 
-		Bundle results = myClient
+		Bundle results = ourClient
 			.search()
 			.forResource("Patient")
 			.where(Patient.FAMILY.matches().value("FAM"))
@@ -68,9 +68,9 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 
 		Patient pt2 = new Patient();
 		pt2.addName().setFamily("FAM");
-		myClient.create().resource(pt2).execute();
+		ourClient.create().resource(pt2).execute();
 
-		results = myClient
+		results = ourClient
 			.search()
 			.forResource("Patient")
 			.where(Patient.FAMILY.matches().value("FAM"))
@@ -89,10 +89,10 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 		for (int i = 0; i < 10; i++) {
 			Patient pt1 = new Patient();
 			pt1.addName().setFamily("FAM" + i);
-			myClient.create().resource(pt1).execute();
+			ourClient.create().resource(pt1).execute();
 		}
 
-		Bundle results = myClient
+		Bundle results = ourClient
 			.search()
 			.forResource("Patient")
 			.where(Patient.FAMILY.matches().value("FAM"))
@@ -109,7 +109,7 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 	public void testCacheNoStoreMaxResultsWithIllegalValue() throws IOException {
 		myDaoConfig.setCacheControlNoStoreMaxResultsUpperLimit(123);
 		try {
-			myClient
+			ourClient
 				.search()
 				.forResource("Patient")
 				.where(Patient.FAMILY.matches().value("FAM"))
@@ -127,18 +127,18 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 
 		Patient pt1 = new Patient();
 		pt1.addName().setFamily("FAM");
-		myClient.create().resource(pt1).execute();
+		ourClient.create().resource(pt1).execute();
 
-		Bundle results = myClient.search().forResource("Patient").where(Patient.FAMILY.matches().value("FAM")).returnBundle(Bundle.class).execute();
+		Bundle results = ourClient.search().forResource("Patient").where(Patient.FAMILY.matches().value("FAM")).returnBundle(Bundle.class).execute();
 		assertEquals(1, results.getEntry().size());
 		assertEquals(1, mySearchEntityDao.count());
 		assertThat(myCapturingInterceptor.getLastResponse().getHeaders(Constants.HEADER_X_CACHE), empty());
 
 		Patient pt2 = new Patient();
 		pt2.addName().setFamily("FAM");
-		myClient.create().resource(pt2).execute();
+		ourClient.create().resource(pt2).execute();
 
-		results = myClient
+		results = ourClient
 			.search()
 			.forResource("Patient")
 			.where(Patient.FAMILY.matches().value("FAM"))
@@ -156,11 +156,11 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 
 		Patient pt1 = new Patient();
 		pt1.addName().setFamily("FAM");
-		myClient.create().resource(pt1).execute();
+		ourClient.create().resource(pt1).execute();
 
 		Date beforeFirst = new Date();
 
-		Bundle results1 = myClient.search().forResource("Patient").where(Patient.FAMILY.matches().value("FAM")).returnBundle(Bundle.class).execute();
+		Bundle results1 = ourClient.search().forResource("Patient").where(Patient.FAMILY.matches().value("FAM")).returnBundle(Bundle.class).execute();
 		assertEquals(1, results1.getEntry().size());
 		assertEquals(1, mySearchEntityDao.count());
 		assertThat(myCapturingInterceptor.getLastResponse().getHeaders(Constants.HEADER_X_CACHE), empty());
@@ -170,9 +170,9 @@ public class ResourceProviderR4CacheTest extends BaseResourceProviderR4Test {
 
 		Patient pt2 = new Patient();
 		pt2.addName().setFamily("FAM");
-		myClient.create().resource(pt2).execute();
+		ourClient.create().resource(pt2).execute();
 
-		Bundle results2 = myClient.search().forResource("Patient").where(Patient.FAMILY.matches().value("FAM")).returnBundle(Bundle.class).execute();
+		Bundle results2 = ourClient.search().forResource("Patient").where(Patient.FAMILY.matches().value("FAM")).returnBundle(Bundle.class).execute();
 		assertEquals(1, results2.getEntry().size());
 		assertEquals(1, mySearchEntityDao.count());
 		assertEquals("HIT from " + ourServerBase, myCapturingInterceptor.getLastResponse().getHeaders(Constants.HEADER_X_CACHE).get(0));
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4CodeSystemTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4CodeSystemTest.java
index a54963a5f6f..9b04ff87ed2 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4CodeSystemTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4CodeSystemTest.java
@@ -40,7 +40,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	public void testLookupOnExternalCode() {
 		ResourceProviderR4ValueSetTest.createExternalCs(myCodeSystemDao, myResourceTableDao, myTermSvc, mySrd);
 		
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(CodeSystem.class)
 			.named("lookup")
@@ -59,7 +59,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 		assertEquals(false, ((BooleanType)respParam.getParameter().get(2).getValue()).getValue().booleanValue());
 
 		// With HTTP GET
-		respParam = myClient
+		respParam = ourClient
 				.operation()
 				.onType(CodeSystem.class)
 				.named("lookup")
@@ -82,7 +82,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	
 	@Test
 	public void testLookupOperationByCodeAndSystemBuiltInCode() {
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(CodeSystem.class)
 			.named("lookup")
@@ -105,7 +105,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	public void testLookupOperationByCodeAndSystemBuiltInNonexistantCode() {
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onType(CodeSystem.class)
 				.named("lookup")
@@ -122,7 +122,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	@Test
 	public void testLookupOperationByCodeAndSystemUserDefinedCode() {
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(CodeSystem.class)
 			.named("lookup")
@@ -146,7 +146,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	public void testLookupOperationByCodeAndSystemUserDefinedNonExistantCode() {
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onType(CodeSystem.class)
 				.named("lookup")
@@ -163,7 +163,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	@Test
 	public void testLookupOperationByCoding() {
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(CodeSystem.class)
 			.named("lookup")
@@ -186,7 +186,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	public void testLookupOperationByInvalidCombination() {
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onType(CodeSystem.class)
 				.named("lookup")
@@ -205,7 +205,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	public void testLookupOperationByInvalidCombination2() {
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onType(CodeSystem.class)
 				.named("lookup")
@@ -223,7 +223,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 	public void testLookupOperationByInvalidCombination3() {
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onType(CodeSystem.class)
 				.named("lookup")
@@ -240,7 +240,7 @@ public class ResourceProviderR4CodeSystemTest extends BaseResourceProviderR4Test
 //	@Ignore
 	public void testLookupOperationForBuiltInCode() {
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(CodeSystem.class)
 			.named("lookup")
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4ConceptMapTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4ConceptMapTest.java
index 904b248e682..4ee1149e756 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4ConceptMapTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4ConceptMapTest.java
@@ -34,7 +34,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 	public void testStoreExistingTermConceptMapAndChildren() {
 		ConceptMap conceptMap = createConceptMap();
 
-		MethodOutcome methodOutcome = myClient
+		MethodOutcome methodOutcome = ourClient
 			.update()
 			.resource(conceptMap)
 			.conditional()
@@ -50,7 +50,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		ConceptMap conceptMap = createConceptMap();
 		conceptMap.getGroupFirstRep().getElementFirstRep().setCode("UPDATED_CODE");
 
-		MethodOutcome methodOutcome = myClient
+		MethodOutcome methodOutcome = ourClient
 			.update()
 			.resource(conceptMap)
 			.conditional()
@@ -74,7 +74,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -132,7 +132,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -177,7 +177,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -210,7 +210,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -288,7 +288,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -341,7 +341,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -432,7 +432,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -511,7 +511,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -562,7 +562,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -627,7 +627,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -678,7 +678,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -741,7 +741,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -818,7 +818,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -889,7 +889,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onInstance(myConceptMapId)
 			.named("translate")
@@ -970,7 +970,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -988,9 +988,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(1, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1016,7 +1016,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1051,7 +1051,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1069,9 +1069,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(2, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1083,9 +1083,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(1);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1117,7 +1117,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1135,9 +1135,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(2, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1149,9 +1149,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(1);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1187,7 +1187,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1205,9 +1205,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(4, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1219,9 +1219,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(1);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1247,9 +1247,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(3);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1280,7 +1280,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1298,9 +1298,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(2, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1312,9 +1312,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(1);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1347,7 +1347,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1365,9 +1365,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(2, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1379,9 +1379,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(1);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1414,7 +1414,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1432,9 +1432,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(1, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1467,7 +1467,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1485,9 +1485,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(1, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1518,7 +1518,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1536,9 +1536,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(2, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1550,9 +1550,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(1);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1583,7 +1583,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onType(ConceptMap.class)
 			.named("translate")
@@ -1601,9 +1601,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(2, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1615,9 +1615,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(1);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
@@ -1641,7 +1641,7 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 
 		ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
 
-		Parameters respParams = myClient
+		Parameters respParams = ourClient
 			.operation()
 			.onInstance(myConceptMapId)
 			.named("translate")
@@ -1659,9 +1659,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(2, getNumberOfParametersByName(respParams, "match"));
 
 		param = getParametersByName(respParams, "match").get(0);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		ParametersParameterComponent part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("equal", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		Coding coding = (Coding) part.getValue();
 		assertEquals("12345", coding.getCode());
@@ -1673,9 +1673,9 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
 		assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
 
 		param = getParametersByName(respParams, "match").get(1);
-		assertEquals(2, param.getPart().size());
+		assertEquals(3, param.getPart().size());
 		part = getPartByName(param, "equivalence");
-		assertFalse(part.hasValue());
+		assertEquals("narrower", ((CodeType)part.getValue()).getCode());
 		part = getPartByName(param, "concept");
 		coding = (Coding) part.getValue();
 		assertEquals("78901", coding.getCode());
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java
index 4bd8a736df3..f941a167177 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4Test.java
@@ -1,39 +1,58 @@
 package ca.uhn.fhir.jpa.provider.r4;
 
-import ca.uhn.fhir.jpa.config.TestR4Config;
-import ca.uhn.fhir.jpa.dao.DaoConfig;
-import ca.uhn.fhir.jpa.entity.ResourceHistoryTable;
-import ca.uhn.fhir.jpa.entity.Search;
-import ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl;
-import ca.uhn.fhir.jpa.util.JpaConstants;
-import ca.uhn.fhir.util.StopWatch;
-import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
-import ca.uhn.fhir.model.primitive.InstantDt;
-import ca.uhn.fhir.model.primitive.UriDt;
-import ca.uhn.fhir.parser.IParser;
-import ca.uhn.fhir.parser.StrictErrorHandler;
-import ca.uhn.fhir.rest.api.Constants;
-import ca.uhn.fhir.rest.api.MethodOutcome;
-import ca.uhn.fhir.rest.api.SummaryEnum;
-import ca.uhn.fhir.rest.client.api.IGenericClient;
-import ca.uhn.fhir.rest.client.interceptor.CapturingInterceptor;
-import ca.uhn.fhir.rest.gclient.StringClientParam;
-import ca.uhn.fhir.rest.param.*;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
-import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
-import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
-import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
-import ca.uhn.fhir.util.TestUtil;
-import ca.uhn.fhir.util.UrlUtil;
-import com.google.common.base.Charsets;
-import com.google.common.collect.Lists;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.containsInRelativeOrder;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.empty;
+import static org.hamcrest.Matchers.emptyString;
+import static org.hamcrest.Matchers.endsWith;
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.hasItem;
+import static org.hamcrest.Matchers.hasItems;
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.lessThan;
+import static org.hamcrest.Matchers.lessThanOrEqualTo;
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.Matchers.startsWith;
+import static org.hamcrest.Matchers.stringContainsInOrder;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.math.BigDecimal;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketTimeoutException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
-import org.apache.http.client.methods.*;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPatch;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
 import org.apache.http.entity.ByteArrayEntity;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
@@ -44,36 +63,111 @@ import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
 import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator;
-import org.hl7.fhir.r4.model.*;
-import org.hl7.fhir.r4.model.Bundle.*;
+import org.hl7.fhir.r4.model.AuditEvent;
+import org.hl7.fhir.r4.model.BaseResource;
+import org.hl7.fhir.r4.model.Basic;
+import org.hl7.fhir.r4.model.Binary;
+import org.hl7.fhir.r4.model.Bundle;
+import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent;
+import org.hl7.fhir.r4.model.Bundle.BundleLinkComponent;
+import org.hl7.fhir.r4.model.Bundle.BundleType;
+import org.hl7.fhir.r4.model.Bundle.HTTPVerb;
+import org.hl7.fhir.r4.model.Bundle.SearchEntryMode;
+import org.hl7.fhir.r4.model.CarePlan;
+import org.hl7.fhir.r4.model.CodeSystem;
+import org.hl7.fhir.r4.model.CodeType;
+import org.hl7.fhir.r4.model.Coding;
+import org.hl7.fhir.r4.model.Condition;
+import org.hl7.fhir.r4.model.DateTimeType;
+import org.hl7.fhir.r4.model.DateType;
+import org.hl7.fhir.r4.model.Device;
+import org.hl7.fhir.r4.model.DocumentManifest;
+import org.hl7.fhir.r4.model.DocumentReference;
+import org.hl7.fhir.r4.model.Encounter;
 import org.hl7.fhir.r4.model.Encounter.EncounterLocationComponent;
 import org.hl7.fhir.r4.model.Encounter.EncounterStatus;
 import org.hl7.fhir.r4.model.Enumerations.AdministrativeGender;
+import org.hl7.fhir.r4.model.Extension;
+import org.hl7.fhir.r4.model.IdType;
+import org.hl7.fhir.r4.model.ImagingStudy;
+import org.hl7.fhir.r4.model.ImmunizationRecommendation;
+import org.hl7.fhir.r4.model.InstantType;
+import org.hl7.fhir.r4.model.IntegerType;
+import org.hl7.fhir.r4.model.Location;
+import org.hl7.fhir.r4.model.Medication;
+import org.hl7.fhir.r4.model.MedicationAdministration;
+import org.hl7.fhir.r4.model.MedicationRequest;
+import org.hl7.fhir.r4.model.Meta;
 import org.hl7.fhir.r4.model.Narrative.NarrativeStatus;
+import org.hl7.fhir.r4.model.Observation;
 import org.hl7.fhir.r4.model.Observation.ObservationStatus;
+import org.hl7.fhir.r4.model.OperationOutcome;
+import org.hl7.fhir.r4.model.Organization;
+import org.hl7.fhir.r4.model.Parameters;
+import org.hl7.fhir.r4.model.Patient;
+import org.hl7.fhir.r4.model.Period;
+import org.hl7.fhir.r4.model.Practitioner;
+import org.hl7.fhir.r4.model.Quantity;
+import org.hl7.fhir.r4.model.Questionnaire;
 import org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemType;
+import org.hl7.fhir.r4.model.QuestionnaireResponse;
+import org.hl7.fhir.r4.model.Reference;
+import org.hl7.fhir.r4.model.ServiceRequest;
+import org.hl7.fhir.r4.model.StringType;
+import org.hl7.fhir.r4.model.StructureDefinition;
+import org.hl7.fhir.r4.model.Subscription;
 import org.hl7.fhir.r4.model.Subscription.SubscriptionChannelType;
 import org.hl7.fhir.r4.model.Subscription.SubscriptionStatus;
-import org.junit.*;
+import org.hl7.fhir.r4.model.UnsignedIntType;
+import org.hl7.fhir.r4.model.ValueSet;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
 import org.springframework.test.util.AopTestUtils;
 import org.springframework.transaction.TransactionStatus;
 import org.springframework.transaction.support.TransactionCallback;
 import org.springframework.transaction.support.TransactionCallbackWithoutResult;
 import org.springframework.transaction.support.TransactionTemplate;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.math.BigDecimal;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.SocketTimeoutException;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
+import com.google.common.base.Charsets;
+import com.google.common.collect.Lists;
 
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
+import ca.uhn.fhir.jpa.config.TestR4Config;
+import ca.uhn.fhir.jpa.dao.DaoConfig;
+import ca.uhn.fhir.jpa.entity.ResourceHistoryTable;
+import ca.uhn.fhir.jpa.entity.Search;
+import ca.uhn.fhir.jpa.search.SearchCoordinatorSvcImpl;
+import ca.uhn.fhir.jpa.util.JpaConstants;
+import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
+import ca.uhn.fhir.model.primitive.InstantDt;
+import ca.uhn.fhir.model.primitive.UriDt;
+import ca.uhn.fhir.parser.IParser;
+import ca.uhn.fhir.parser.StrictErrorHandler;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.MethodOutcome;
+import ca.uhn.fhir.rest.api.SummaryEnum;
+import ca.uhn.fhir.rest.client.api.IClientInterceptor;
+import ca.uhn.fhir.rest.client.api.IGenericClient;
+import ca.uhn.fhir.rest.client.api.IHttpRequest;
+import ca.uhn.fhir.rest.client.api.IHttpResponse;
+import ca.uhn.fhir.rest.client.interceptor.CapturingInterceptor;
+import ca.uhn.fhir.rest.gclient.StringClientParam;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import ca.uhn.fhir.rest.param.NumberParam;
+import ca.uhn.fhir.rest.param.ParamPrefixEnum;
+import ca.uhn.fhir.rest.param.StringAndListParam;
+import ca.uhn.fhir.rest.param.StringOrListParam;
+import ca.uhn.fhir.rest.param.StringParam;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
+import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
+import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
+import ca.uhn.fhir.rest.server.interceptor.RequestValidatingInterceptor;
+import ca.uhn.fhir.util.StopWatch;
+import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.UrlUtil;
 
 public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
@@ -96,7 +190,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		mySearchCoordinatorSvcRaw.setNeverUseLocalSearchForUnitTests(false);
 		mySearchCoordinatorSvcRaw.cancelAllActiveSearches();
 
-		myClient.unregisterInterceptor(myCapturingInterceptor);
+		ourClient.unregisterInterceptor(myCapturingInterceptor);
 	}
 
 	@Override
@@ -105,7 +199,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		myFhirCtx.setParserErrorHandler(new StrictErrorHandler());
 
 		myDaoConfig.setAllowMultipleDelete(true);
-		myClient.registerInterceptor(myCapturingInterceptor);
+		ourClient.registerInterceptor(myCapturingInterceptor);
 	}
 
 	@Test
@@ -115,15 +209,15 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		p.addName().setFamily("FAM").addGiven("GIV");
 		IIdType id = myPatientDao.create(p).getId();
 
-		myClient.read().resource("Patient").withId(id.toUnqualifiedVersionless()).execute();
+		ourClient.read().resource("Patient").withId(id.toUnqualifiedVersionless()).execute();
 
-		myClient
+		ourClient
 			.delete()
 			.resourceConditionalByUrl("Patient?family=FAM&given=giv")
 			.execute();
 
 		try {
-			myClient.read().resource("Patient").withId(id.toUnqualifiedVersionless()).execute();
+			ourClient.read().resource("Patient").withId(id.toUnqualifiedVersionless()).execute();
 			fail();
 		} catch (ResourceGoneException e) {
 			// good
@@ -164,12 +258,12 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void saveAndRetrieveBasicResource() throws IOException {
 		String input = IOUtils.toString(getClass().getResourceAsStream("/basic-stu3.xml"), StandardCharsets.UTF_8);
 
-		String respString = myClient.transaction().withBundle(input).prettyPrint().execute();
+		String respString = ourClient.transaction().withBundle(input).prettyPrint().execute();
 		ourLog.info(respString);
 		Bundle bundle = myFhirCtx.newXmlParser().parseResource(Bundle.class, respString);
 		IdType id = new IdType(bundle.getEntry().get(0).getResponse().getLocation());
 
-		Basic basic = myClient.read().resource(Basic.class).withId(id).execute();
+		Basic basic = ourClient.read().resource(Basic.class).withId(id).execute();
 		List<Extension> exts = basic.getExtensionsByUrl("http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/DateID");
 		assertEquals(1, exts.size());
 	}
@@ -217,7 +311,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testBundleCreate() throws Exception {
-		IGenericClient client = myClient;
+		IGenericClient client = ourClient;
 
 		String resBody = IOUtils.toString(ResourceProviderR4Test.class.getResource("/r4/document-father.json"), StandardCharsets.UTF_8);
 		IIdType id = client.create().resource(resBody).execute().getId();
@@ -231,7 +325,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testBundleCreateWithTypeTransaction() throws Exception {
-		IGenericClient client = myClient;
+		IGenericClient client = ourClient;
 
 		String resBody = IOUtils.toString(ResourceProviderR4Test.class.getResource("/r4/document-father.json"), StandardCharsets.UTF_8);
 		resBody = resBody.replace("\"type\": \"document\"", "\"type\": \"transaction\"");
@@ -249,10 +343,10 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		subs.setStatus(SubscriptionStatus.ACTIVE);
 		subs.getChannel().setType(SubscriptionChannelType.WEBSOCKET);
 		subs.setCriteria("Observation?");
-		IIdType id = myClient.create().resource(subs).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(subs).execute().getId().toUnqualifiedVersionless();
 
 		//@formatter:off
-		Bundle resp = myClient
+		Bundle resp = ourClient
 			.search()
 			.forResource(Subscription.class)
 			.where(Subscription.TYPE.exactly().code(SubscriptionChannelType.WEBSOCKET.toCode()))
@@ -264,7 +358,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		assertThat(toUnqualifiedVersionlessIds(resp), contains(id));
 
 		//@formatter:off
-		resp = myClient
+		resp = ourClient
 			.search()
 			.forResource(Subscription.class)
 			.where(Subscription.TYPE.exactly().systemAndCode(SubscriptionChannelType.WEBSOCKET.getSystem(), SubscriptionChannelType.WEBSOCKET.toCode()))
@@ -276,7 +370,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		assertThat(toUnqualifiedVersionlessIds(resp), contains(id));
 
 		//@formatter:off
-		resp = myClient
+		resp = ourClient
 			.search()
 			.forResource(Subscription.class)
 			.where(Subscription.TYPE.exactly().systemAndCode(SubscriptionChannelType.WEBSOCKET.getSystem(), SubscriptionChannelType.WEBSOCKET.toCode()))
@@ -297,13 +391,13 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			org.setName("rpdstu2_testCountParam_01");
 			resources.add(org);
 		}
-		myClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
+		ourClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
 
-		Bundle found = myClient.search().forResource(Organization.class).where(Organization.NAME.matches().value("rpdstu2_testCountParam_01")).count(10).returnBundle(Bundle.class).execute();
+		Bundle found = ourClient.search().forResource(Organization.class).where(Organization.NAME.matches().value("rpdstu2_testCountParam_01")).count(10).returnBundle(Bundle.class).execute();
 		assertEquals(100, found.getTotal());
 		assertEquals(10, found.getEntry().size());
 
-		found = myClient.search().forResource(Organization.class).where(Organization.NAME.matches().value("rpdstu2_testCountParam_01")).count(999).returnBundle(Bundle.class).execute();
+		found = ourClient.search().forResource(Organization.class).where(Organization.NAME.matches().value("rpdstu2_testCountParam_01")).count(999).returnBundle(Bundle.class).execute();
 		assertEquals(100, found.getTotal());
 		assertEquals(50, found.getEntry().size());
 
@@ -319,9 +413,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		binary.setContent(arr);
 		binary.setContentType("dansk");
 
-		IIdType resource = myClient.create().resource(binary).execute().getId();
+		IIdType resource = ourClient.create().resource(binary).execute().getId();
 
-		Binary fromDB = myClient.read().resource(Binary.class).withId(resource.toVersionless()).execute();
+		Binary fromDB = ourClient.read().resource(Binary.class).withId(resource.toVersionless()).execute();
 		assertEquals("1", fromDB.getIdElement().getVersionIdPart());
 
 		arr[ 0 ] = 2;
@@ -335,7 +429,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			IOUtils.closeQuietly(resp);
 		}
 
-		fromDB = myClient.read().resource(Binary.class).withId(resource.toVersionless()).execute();
+		fromDB = ourClient.read().resource(Binary.class).withId(resource.toVersionless()).execute();
 		assertEquals("2", fromDB.getIdElement().getVersionIdPart());
 
 		arr[ 0 ] = 3;
@@ -351,7 +445,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			IOUtils.closeQuietly(resp);
 		}
 
-		fromDB = myClient.read().resource(Binary.class).withId(resource.toVersionless()).execute();
+		fromDB = ourClient.read().resource(Binary.class).withId(resource.toVersionless()).execute();
 		assertEquals("3", fromDB.getIdElement().getVersionIdPart());
 
 		// Now an update with the wrong ID in the body
@@ -368,7 +462,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			IOUtils.closeQuietly(resp);
 		}
 
-		fromDB = myClient.read().resource(Binary.class).withId(resource.toVersionless()).execute();
+		fromDB = ourClient.read().resource(Binary.class).withId(resource.toVersionless()).execute();
 		assertEquals("3", fromDB.getIdElement().getVersionIdPart());
 
 	}
@@ -380,7 +474,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testCreateBundle() throws IOException {
 		String input = IOUtils.toString(getClass().getResourceAsStream("/bryn-bundle.json"), StandardCharsets.UTF_8);
 		Validate.notNull(input);
-		myClient.create().resource(input).execute().getResource();
+		ourClient.create().resource(input).execute().getResource();
 	}
 
 	@Test
@@ -389,13 +483,13 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
 
-		MethodOutcome output1 = myClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|100").execute();
+		MethodOutcome output1 = ourClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|100").execute();
 
 		patient = new Patient();
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.addName().setFamily("Tester").addGiven("Raghad");
 
-		MethodOutcome output2 = myClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|100").execute();
+		MethodOutcome output2 = ourClient.update().resource(patient).conditionalByUrl("Patient?identifier=http://uhn.ca/mrns|100").execute();
 
 		assertEquals(output1.getId().getIdPart(), output2.getId().getIdPart());
 	}
@@ -407,11 +501,21 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		interceptor.setFailOnSeverity(null);
 
 		ourRestServer.registerInterceptor(interceptor);
+		ourClient.registerInterceptor(new IClientInterceptor() {
+			@Override
+			public void interceptRequest(IHttpRequest theRequest) {
+				theRequest.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);					
+			}
+			@Override
+			public void interceptResponse(IHttpResponse theResponse) throws IOException {					// TODO Auto-generated method stu					
+			}
+			
+		});
 		try {
 			// Missing status, which is mandatory
 			Observation obs = new Observation();
 			obs.addIdentifier().setSystem("urn:foo").setValue("bar");
-			IBaseResource outcome = myClient.create().resource(obs).execute().getOperationOutcome();
+			IBaseResource outcome = ourClient.create().resource(obs).execute().getOperationOutcome();
 
 			String encodedOo = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(outcome);
 			ourLog.info(encodedOo);
@@ -419,7 +523,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			assertThat(encodedOo, containsString("Successfully created resource \\\"Observation/"));
 
 			interceptor.setAddValidationResultsToResponseOperationOutcome(false);
-			outcome = myClient.create().resource(obs).execute().getOperationOutcome();
+			outcome = ourClient.create().resource(obs).execute().getOperationOutcome();
 			encodedOo = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(outcome);
 			ourLog.info(encodedOo);
 			assertThat(encodedOo, not(containsString("cvc-complex-type.2.4.b")));
@@ -436,15 +540,15 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		CodeSystem cs = new CodeSystem();
 		cs.setUrl("http://urn/system");
 		cs.addConcept().setCode("code0");
-		myClient.create().resource(cs).execute();
+		ourClient.create().resource(cs).execute();
 
 		ValueSet options = new ValueSet();
 		options.getCompose().addInclude().setSystem("http://urn/system");
-		IIdType optId = myClient.create().resource(options).execute().getId();
+		IIdType optId = ourClient.create().resource(options).execute().getId();
 
 		Questionnaire q = new Questionnaire();
 		q.addItem().setLinkId("link0").setRequired(false).setType(QuestionnaireItemType.CHOICE).setOptions((optId.getValue()));
-		IIdType qId = myClient.create().resource(q).execute().getId();
+		IIdType qId = ourClient.create().resource(q).execute().getId();
 
 		QuestionnaireResponse qa;
 
@@ -453,7 +557,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		qa = new QuestionnaireResponse();
 		qa.setQuestionnaire(qId.toUnqualifiedVersionless().getValue());
 		qa.addItem().setLinkId("link0").addAnswer().setValue(new Coding().setSystem("urn:system").setCode("code0"));
-		myClient.create().resource(qa).execute();
+		ourClient.create().resource(qa).execute();
 
 		// Bad code
 
@@ -461,7 +565,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		qa.setQuestionnaire(qId.toUnqualifiedVersionless().getValue());
 		qa.addItem().setLinkId("link0").addAnswer().setValue(new Coding().setSystem("urn:system").setCode("code1"));
 		try {
-			myClient.create().resource(qa).execute();
+			ourClient.create().resource(qa).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertThat(e.getMessage(), containsString("Question with linkId[link0]"));
@@ -537,7 +641,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 
 //		//@formatter:off
-//		IIdType id3 = myClient
+//		IIdType id3 = ourClient
 //			.update()
 //			.resource(pt)
 //			.conditionalByUrl("Patient?identifier=http://general-hospital.co.uk/Identifiers|09832345234543876876")
@@ -548,12 +652,34 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	}
 
 	@Test
-	public void testCreateResourceReturnsOperationOutcomeByDefault() throws IOException {
+	public void testCreateResourceReturnsRepresentationByDefault() throws IOException {
 		String resource = "<Patient xmlns=\"http://hl7.org/fhir\"></Patient>";
 
 		HttpPost post = new HttpPost(ourServerBase + "/Patient");
 		post.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
 
+		CloseableHttpResponse response = ourHttpClient.execute(post);
+		try {
+			assertEquals(201, response.getStatusLine().getStatusCode());
+			String respString = IOUtils.toString(response.getEntity().getContent(), StandardCharsets.UTF_8);
+			ourLog.info(response.toString());
+			ourLog.info(respString);
+			assertThat(respString, startsWith("<Patient xmlns=\"http://hl7.org/fhir\">"));
+			assertThat(respString, endsWith("</Patient>"));
+		} finally {
+			response.getEntity().getContent().close();
+			response.close();
+		}
+	}
+	
+	@Test
+	public void testCreateResourceReturnsOperationOutcome() throws IOException {
+		String resource = "<Patient xmlns=\"http://hl7.org/fhir\"></Patient>";
+
+		HttpPost post = new HttpPost(ourServerBase + "/Patient");
+		post.setEntity(new StringEntity(resource, ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
+		post.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
+
 		CloseableHttpResponse response = ourHttpClient.execute(post);
 		try {
 			assertEquals(201, response.getStatusLine().getStatusCode());
@@ -597,7 +723,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		p.addName().setFamily(methodName);
 		p.setId(methodName);
 
-		IIdType optId = myClient.update().resource(p).execute().getId();
+		IIdType optId = ourClient.update().resource(p).execute().getId();
 		assertEquals(methodName, optId.getIdPart());
 		assertEquals("1", optId.getVersionIdPart());
 	}
@@ -606,12 +732,12 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testDeepChaining() {
 		Location l1 = new Location();
 		l1.getNameElement().setValue("testDeepChainingL1");
-		IIdType l1id = myClient.create().resource(l1).execute().getId();
+		IIdType l1id = ourClient.create().resource(l1).execute().getId();
 
 		Location l2 = new Location();
 		l2.getNameElement().setValue("testDeepChainingL2");
 		l2.getPartOf().setReferenceElement(l1id.toVersionless().toUnqualified());
-		IIdType l2id = myClient.create().resource(l2).execute().getId();
+		IIdType l2id = ourClient.create().resource(l2).execute().getId();
 
 		Encounter e1 = new Encounter();
 		e1.addIdentifier().setSystem("urn:foo").setValue("testDeepChainingE1");
@@ -619,10 +745,10 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		EncounterLocationComponent location = e1.addLocation();
 		location.getLocation().setReferenceElement(l2id.toUnqualifiedVersionless());
 		location.setPeriod(new Period().setStart(new Date(), TemporalPrecisionEnum.SECOND).setEnd(new Date(), TemporalPrecisionEnum.SECOND));
-		IIdType e1id = myClient.create().resource(e1).execute().getId();
+		IIdType e1id = ourClient.create().resource(e1).execute().getId();
 
 		//@formatter:off
-		Bundle res = myClient.search()
+		Bundle res = ourClient.search()
 			.forResource(Encounter.class)
 			.where(Encounter.IDENTIFIER.exactly().systemAndCode("urn:foo", "testDeepChainingE1"))
 			.include(Encounter.INCLUDE_LOCATION.asRecursive())
@@ -655,7 +781,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		try {
 			//@formatter:off
-			myClient
+			ourClient
 				.delete()
 				.resourceConditionalByType(Patient.class)
 				.where(Patient.IDENTIFIER.exactly().code(methodName))
@@ -668,13 +794,13 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 
 		// Not deleted yet..
-		myClient.read().resource("Patient").withId(id1).execute();
-		myClient.read().resource("Patient").withId(id2).execute();
+		ourClient.read().resource("Patient").withId(id1).execute();
+		ourClient.read().resource("Patient").withId(id2).execute();
 
 		myDaoConfig.setAllowMultipleDelete(true);
 
 		//@formatter:off
-		IBaseOperationOutcome response = myClient
+		IBaseOperationOutcome response = ourClient
 			.delete()
 			.resourceConditionalByType(Patient.class)
 			.where(Patient.IDENTIFIER.exactly().code(methodName))
@@ -686,13 +812,13 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		assertThat(encoded, containsString(
 			"<issue><severity value=\"information\"/><code value=\"informational\"/><diagnostics value=\"Successfully deleted 2 resource(s) in "));
 		try {
-			myClient.read().resource("Patient").withId(id1).execute();
+			ourClient.read().resource("Patient").withId(id1).execute();
 			fail();
 		} catch (ResourceGoneException e) {
 			// good
 		}
 		try {
-			myClient.read().resource("Patient").withId(id2).execute();
+			ourClient.read().resource("Patient").withId(id2).execute();
 			fail();
 		} catch (ResourceGoneException e) {
 			// good
@@ -739,14 +865,14 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testDeleteNormal() {
 		Patient p = new Patient();
 		p.addName().setFamily("FAM");
-		IIdType id = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
-		myClient.read().resource(Patient.class).withId(id).execute();
+		ourClient.read().resource(Patient.class).withId(id).execute();
 
-		myClient.delete().resourceById(id).execute();
+		ourClient.delete().resourceById(id).execute();
 
 		try {
-			myClient.read().resource(Patient.class).withId(id).execute();
+			ourClient.read().resource(Patient.class).withId(id).execute();
 			fail();
 		} catch (ResourceGoneException e) {
 			// good
@@ -885,9 +1011,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testDeleteReturnsOperationOutcome() {
 		Patient p = new Patient();
 		p.addName().setFamily("FAM");
-		IIdType id = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
-		IBaseOperationOutcome resp = myClient.delete().resourceById(id).execute();
+		IBaseOperationOutcome resp = ourClient.delete().resourceById(id).execute();
 		OperationOutcome oo = (OperationOutcome) resp;
 		assertThat(oo.getIssueFirstRep().getDiagnostics(), startsWith("Successfully deleted 1 resource(s) in "));
 	}
@@ -900,7 +1026,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		myFhirCtx.getResourceDefinition(Practitioner.class);
 		myFhirCtx.getResourceDefinition(DocumentManifest.class);
 
-		IGenericClient client = myClient;
+		IGenericClient client = ourClient;
 
 		int initialSize = client.search().forResource(DocumentManifest.class).returnBundle(Bundle.class).execute().getEntry().size();
 
@@ -918,7 +1044,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	 */
 	@Test
 	public void testDocumentReferenceResources() throws Exception {
-		IGenericClient client = myClient;
+		IGenericClient client = ourClient;
 
 		int initialSize = client.search().forResource(DocumentReference.class).returnBundle(Bundle.class).execute().getEntry().size();
 
@@ -935,13 +1061,13 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testEmptySearch() {
 		Bundle responseBundle;
 
-		responseBundle = myClient.search().forResource(Patient.class).returnBundle(Bundle.class).execute();
+		responseBundle = ourClient.search().forResource(Patient.class).returnBundle(Bundle.class).execute();
 		assertEquals(0, responseBundle.getTotal());
 
-		responseBundle = myClient.search().forResource(Patient.class).where(Patient.NAME.matches().value("AAA")).returnBundle(Bundle.class).execute();
+		responseBundle = ourClient.search().forResource(Patient.class).where(Patient.NAME.matches().value("AAA")).returnBundle(Bundle.class).execute();
 		assertEquals(0, responseBundle.getTotal());
 
-		responseBundle = myClient.search().forResource(Patient.class).where(new StringClientParam("_content").matches().value("AAA")).returnBundle(Bundle.class).execute();
+		responseBundle = ourClient.search().forResource(Patient.class).where(new StringClientParam("_content").matches().value("AAA")).returnBundle(Bundle.class).execute();
 		assertEquals(0, responseBundle.getTotal());
 
 	}
@@ -953,55 +1079,55 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Organization org1parent = new Organization();
 		org1parent.setId("org1parent");
 		org1parent.setName(methodName + "1parent");
-		IIdType orgId1parent = myClient.update().resource(org1parent).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId1parent = ourClient.update().resource(org1parent).execute().getId().toUnqualifiedVersionless();
 
 		Organization org1 = new Organization();
 		org1.setName(methodName + "1");
 		org1.getPartOf().setReferenceElement(orgId1parent);
-		IIdType orgId1 = myClient.create().resource(org1).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId1 = ourClient.create().resource(org1).execute().getId().toUnqualifiedVersionless();
 
 		Patient p = new Patient();
 		p.addName().setFamily(methodName);
 		p.getManagingOrganization().setReferenceElement(orgId1);
-		IIdType patientId = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType patientId = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		Organization org2 = new Organization();
 		org2.setName(methodName + "1");
-		IIdType orgId2 = myClient.create().resource(org2).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId2 = ourClient.create().resource(org2).execute().getId().toUnqualifiedVersionless();
 
 		Device dev = new Device();
 		dev.setModel(methodName);
 		dev.getOwner().setReferenceElement(orgId2);
-		IIdType devId = myClient.create().resource(dev).execute().getId().toUnqualifiedVersionless();
+		IIdType devId = ourClient.create().resource(dev).execute().getId().toUnqualifiedVersionless();
 
 		Location locParent = new Location();
 		locParent.setName(methodName + "Parent");
-		IIdType locPId = myClient.create().resource(locParent).execute().getId().toUnqualifiedVersionless();
+		IIdType locPId = ourClient.create().resource(locParent).execute().getId().toUnqualifiedVersionless();
 
 		Location locChild = new Location();
 		locChild.setName(methodName);
 		locChild.getPartOf().setReferenceElement(locPId);
-		IIdType locCId = myClient.create().resource(locChild).execute().getId().toUnqualifiedVersionless();
+		IIdType locCId = ourClient.create().resource(locChild).execute().getId().toUnqualifiedVersionless();
 
 		Encounter encU = new Encounter();
 		encU.getSubject().setReferenceElement(patientId);
 		encU.addLocation().getLocation().setReferenceElement(locCId);
-		IIdType encUId = myClient.create().resource(encU).execute().getId().toUnqualifiedVersionless();
+		IIdType encUId = ourClient.create().resource(encU).execute().getId().toUnqualifiedVersionless();
 
 		Encounter enc = new Encounter();
 		enc.getSubject().setReferenceElement(patientId);
 		enc.addLocation().getLocation().setReferenceElement(locCId);
-		IIdType encId = myClient.create().resource(enc).execute().getId().toUnqualifiedVersionless();
+		IIdType encId = ourClient.create().resource(enc).execute().getId().toUnqualifiedVersionless();
 
 		Observation obs = new Observation();
 		obs.getSubject().setReferenceElement(patientId);
 		obs.getDevice().setReferenceElement(devId);
 		obs.getContext().setReferenceElement(encId);
-		IIdType obsId = myClient.create().resource(obs).execute().getId().toUnqualifiedVersionless();
+		IIdType obsId = ourClient.create().resource(obs).execute().getId().toUnqualifiedVersionless();
 
 		ourLog.info("IDs: EncU:" + encUId.getIdPart() + " Enc:" + encId.getIdPart() + "  " + patientId.toUnqualifiedVersionless());
 
-		Parameters output = myClient.operation().onInstance(encId).named("everything").withNoParameters(Parameters.class).execute();
+		Parameters output = ourClient.operation().onInstance(encId).named("everything").withNoParameters(Parameters.class).execute();
 		Bundle b = (Bundle) output.getParameter().get(0).getResource();
 		List<IIdType> ids = toUnqualifiedVersionlessIds(b);
 		assertThat(ids, containsInAnyOrder(patientId, encId, orgId1, orgId2, orgId1parent, locPId, locCId, obsId, devId));
@@ -1017,52 +1143,52 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Organization org1parent = new Organization();
 		org1parent.setId("org1parent");
 		org1parent.setName(methodName + "1parent");
-		IIdType orgId1parent = myClient.update().resource(org1parent).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId1parent = ourClient.update().resource(org1parent).execute().getId().toUnqualifiedVersionless();
 
 		Organization org1 = new Organization();
 		org1.setName(methodName + "1");
 		org1.getPartOf().setReferenceElement(orgId1parent);
-		IIdType orgId1 = myClient.create().resource(org1).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId1 = ourClient.create().resource(org1).execute().getId().toUnqualifiedVersionless();
 
 		Patient p = new Patient();
 		p.addName().setFamily(methodName);
 		p.getManagingOrganization().setReferenceElement(orgId1);
-		IIdType patientId = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType patientId = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		Organization org2 = new Organization();
 		org2.setName(methodName + "1");
-		IIdType orgId2 = myClient.create().resource(org2).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId2 = ourClient.create().resource(org2).execute().getId().toUnqualifiedVersionless();
 
 		Device dev = new Device();
 		dev.setModel(methodName);
 		dev.getOwner().setReferenceElement(orgId2);
-		IIdType devId = myClient.create().resource(dev).execute().getId().toUnqualifiedVersionless();
+		IIdType devId = ourClient.create().resource(dev).execute().getId().toUnqualifiedVersionless();
 
 		Location locParent = new Location();
 		locParent.setName(methodName + "Parent");
-		IIdType locPId = myClient.create().resource(locParent).execute().getId().toUnqualifiedVersionless();
+		IIdType locPId = ourClient.create().resource(locParent).execute().getId().toUnqualifiedVersionless();
 
 		Location locChild = new Location();
 		locChild.setName(methodName);
 		locChild.getPartOf().setReferenceElement(locPId);
-		IIdType locCId = myClient.create().resource(locChild).execute().getId().toUnqualifiedVersionless();
+		IIdType locCId = ourClient.create().resource(locChild).execute().getId().toUnqualifiedVersionless();
 
 		Encounter encU = new Encounter();
 		encU.addIdentifier().setValue(methodName);
-		IIdType encUId = myClient.create().resource(encU).execute().getId().toUnqualifiedVersionless();
+		IIdType encUId = ourClient.create().resource(encU).execute().getId().toUnqualifiedVersionless();
 
 		Encounter enc = new Encounter();
 		enc.getSubject().setReferenceElement(patientId);
 		enc.addLocation().getLocation().setReferenceElement(locCId);
-		IIdType encId = myClient.create().resource(enc).execute().getId().toUnqualifiedVersionless();
+		IIdType encId = ourClient.create().resource(enc).execute().getId().toUnqualifiedVersionless();
 
 		Observation obs = new Observation();
 		obs.getSubject().setReferenceElement(patientId);
 		obs.getDevice().setReferenceElement(devId);
 		obs.getContext().setReferenceElement(encId);
-		IIdType obsId = myClient.create().resource(obs).execute().getId().toUnqualifiedVersionless();
+		IIdType obsId = ourClient.create().resource(obs).execute().getId().toUnqualifiedVersionless();
 
-		Parameters output = myClient.operation().onType(Encounter.class).named("everything").withNoParameters(Parameters.class).execute();
+		Parameters output = ourClient.operation().onType(Encounter.class).named("everything").withNoParameters(Parameters.class).execute();
 		Bundle b = (Bundle) output.getParameter().get(0).getResource();
 		List<IIdType> ids = toUnqualifiedVersionlessIds(b);
 		assertThat(ids, containsInAnyOrder(patientId, encUId, encId, orgId1, orgId2, orgId1parent, locPId, locCId, obsId, devId));
@@ -1117,7 +1243,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		param.addAnd(new StringOrListParam().addOr(new StringParam("obsvalue1")));
 
 		//@formatter:off
-		Parameters response = myClient
+		Parameters response = ourClient
 			.operation()
 			.onInstance(ptId1)
 			.named("everything")
@@ -1139,7 +1265,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		IParser parser = myFhirCtx.newJsonParser();
 		b = parser.parseResource(Bundle.class, new InputStreamReader(ResourceProviderR4Test.class.getResourceAsStream("/r4/bug147-bundle.json")));
 
-		Bundle resp = myClient.transaction().withBundle(b).execute();
+		Bundle resp = ourClient.transaction().withBundle(b).execute();
 		List<IdType> ids = new ArrayList<IdType>();
 		for (BundleEntryComponent next : resp.getEntry()) {
 			IdType toAdd = new IdType(next.getResponse().getLocation()).toUnqualifiedVersionless();
@@ -1151,7 +1277,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		assertEquals("Patient", patientId.getResourceType());
 
 		{
-			Parameters output = myClient.operation().onInstance(patientId).named("everything").withNoParameters(Parameters.class).execute();
+			Parameters output = ourClient.operation().onInstance(patientId).named("everything").withNoParameters(Parameters.class).execute();
 			b = (Bundle) output.getParameter().get(0).getResource();
 
 			ids = new ArrayList<IdType>();
@@ -1172,7 +1298,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		{
 			Parameters input = new Parameters();
 			input.addParameter().setName(Constants.PARAM_COUNT).setValue(new UnsignedIntType(100));
-			Parameters output = myClient.operation().onInstance(patientId).named("everything").withParameters(input).execute();
+			Parameters output = ourClient.operation().onInstance(patientId).named("everything").withParameters(input).execute();
 			b = (Bundle) output.getParameter().get(0).getResource();
 
 			ids = new ArrayList<IdType>();
@@ -1210,7 +1336,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		mo.setMedication(new Reference(medId));
 		IIdType moId = myMedicationRequestDao.create(mo, mySrd).getId().toUnqualifiedVersionless();
 
-		Parameters output = myClient.operation().onInstance(patId).named("everything").withNoParameters(Parameters.class).execute();
+		Parameters output = ourClient.operation().onInstance(patId).named("everything").withNoParameters(Parameters.class).execute();
 		Bundle b = (Bundle) output.getParameter().get(0).getResource();
 		List<IIdType> ids = toUnqualifiedVersionlessIds(b);
 		ourLog.info(ids.toString());
@@ -1231,14 +1357,14 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		c.getSubject().setReference("Patient/1");
 		b.addEntry().setResource(c).getRequest().setMethod(HTTPVerb.POST);
 
-		Bundle resp = myClient.transaction().withBundle(b).execute();
+		Bundle resp = ourClient.transaction().withBundle(b).execute();
 
 		ourLog.info(myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(resp));
 
 		IdType patientId = new IdType(resp.getEntry().get(0).getResponse().getLocation());
 		assertEquals("Patient", patientId.getResourceType());
 
-		Parameters output = myClient.operation().onInstance(patientId).named("everything").withNoParameters(Parameters.class).execute();
+		Parameters output = ourClient.operation().onInstance(patientId).named("everything").withNoParameters(Parameters.class).execute();
 		b = (Bundle) output.getParameter().get(0).getResource();
 
 		List<IdType> ids = new ArrayList<IdType>();
@@ -1259,37 +1385,37 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Organization org1parent = new Organization();
 		org1parent.setId("org1parent");
 		org1parent.setName(methodName + "1parent");
-		IIdType orgId1parent = myClient.update().resource(org1parent).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId1parent = ourClient.update().resource(org1parent).execute().getId().toUnqualifiedVersionless();
 
 		Organization org1 = new Organization();
 		org1.setName(methodName + "1");
 		org1.getPartOf().setReferenceElement(orgId1parent);
-		IIdType orgId1 = myClient.create().resource(org1).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId1 = ourClient.create().resource(org1).execute().getId().toUnqualifiedVersionless();
 
 		Patient p = new Patient();
 		p.addName().setFamily(methodName);
 		p.getManagingOrganization().setReferenceElement(orgId1);
-		IIdType patientId = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType patientId = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		Organization org2 = new Organization();
 		org2.setName(methodName + "1");
-		IIdType orgId2 = myClient.create().resource(org2).execute().getId().toUnqualifiedVersionless();
+		IIdType orgId2 = ourClient.create().resource(org2).execute().getId().toUnqualifiedVersionless();
 
 		Device dev = new Device();
 		dev.setModel(methodName);
 		dev.getOwner().setReferenceElement(orgId2);
-		IIdType devId = myClient.create().resource(dev).execute().getId().toUnqualifiedVersionless();
+		IIdType devId = ourClient.create().resource(dev).execute().getId().toUnqualifiedVersionless();
 
 		Observation obs = new Observation();
 		obs.getSubject().setReferenceElement(patientId);
 		obs.getDevice().setReferenceElement(devId);
-		IIdType obsId = myClient.create().resource(obs).execute().getId().toUnqualifiedVersionless();
+		IIdType obsId = ourClient.create().resource(obs).execute().getId().toUnqualifiedVersionless();
 
 		Encounter enc = new Encounter();
 		enc.getSubject().setReferenceElement(patientId);
-		IIdType encId = myClient.create().resource(enc).execute().getId().toUnqualifiedVersionless();
+		IIdType encId = ourClient.create().resource(enc).execute().getId().toUnqualifiedVersionless();
 
-		Parameters output = myClient.operation().onInstance(patientId).named("everything").withNoParameters(Parameters.class).execute();
+		Parameters output = ourClient.operation().onInstance(patientId).named("everything").withNoParameters(Parameters.class).execute();
 		Bundle b = (Bundle) output.getParameter().get(0).getResource();
 		List<IIdType> ids = toUnqualifiedVersionlessIds(b);
 		assertThat(ids, containsInAnyOrder(patientId, devId, obsId, encId, orgId1, orgId2, orgId1parent));
@@ -1303,32 +1429,32 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Organization o1 = new Organization();
 		o1.setName(methodName + "1");
-		IIdType o1Id = myClient.create().resource(o1).execute().getId().toUnqualifiedVersionless();
+		IIdType o1Id = ourClient.create().resource(o1).execute().getId().toUnqualifiedVersionless();
 		Organization o2 = new Organization();
 		o2.setName(methodName + "2");
-		IIdType o2Id = myClient.create().resource(o2).execute().getId().toUnqualifiedVersionless();
+		IIdType o2Id = ourClient.create().resource(o2).execute().getId().toUnqualifiedVersionless();
 
 		Patient p1 = new Patient();
 		p1.addName().setFamily(methodName + "1");
 		p1.getManagingOrganization().setReferenceElement(o1Id);
-		IIdType p1Id = myClient.create().resource(p1).execute().getId().toUnqualifiedVersionless();
+		IIdType p1Id = ourClient.create().resource(p1).execute().getId().toUnqualifiedVersionless();
 		Patient p2 = new Patient();
 		p2.addName().setFamily(methodName + "2");
 		p2.getManagingOrganization().setReferenceElement(o2Id);
-		IIdType p2Id = myClient.create().resource(p2).execute().getId().toUnqualifiedVersionless();
+		IIdType p2Id = ourClient.create().resource(p2).execute().getId().toUnqualifiedVersionless();
 
 		Condition c1 = new Condition();
 		c1.getSubject().setReferenceElement(p1Id);
-		IIdType c1Id = myClient.create().resource(c1).execute().getId().toUnqualifiedVersionless();
+		IIdType c1Id = ourClient.create().resource(c1).execute().getId().toUnqualifiedVersionless();
 		Condition c2 = new Condition();
 		c2.getSubject().setReferenceElement(p2Id);
-		IIdType c2Id = myClient.create().resource(c2).execute().getId().toUnqualifiedVersionless();
+		IIdType c2Id = ourClient.create().resource(c2).execute().getId().toUnqualifiedVersionless();
 
 		Condition c3 = new Condition();
 		c3.addIdentifier().setValue(methodName + "3");
-		IIdType c3Id = myClient.create().resource(c3).execute().getId().toUnqualifiedVersionless();
+		IIdType c3Id = ourClient.create().resource(c3).execute().getId().toUnqualifiedVersionless();
 
-		Parameters output = myClient.operation().onType(Patient.class).named("everything").withNoParameters(Parameters.class).execute();
+		Parameters output = ourClient.operation().onType(Patient.class).named("everything").withNoParameters(Parameters.class).execute();
 		Bundle b = (Bundle) output.getParameter().get(0).getResource();
 
 		assertEquals(BundleType.SEARCHSET, b.getType());
@@ -1345,7 +1471,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Organization org = new Organization();
 		org.setName(methodName);
-		IIdType oId = myClient.create().resource(org).execute().getId().toUnqualifiedVersionless();
+		IIdType oId = ourClient.create().resource(org).execute().getId().toUnqualifiedVersionless();
 
 		long time1 = System.currentTimeMillis();
 		Thread.sleep(10);
@@ -1353,7 +1479,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p = new Patient();
 		p.addName().setFamily(methodName);
 		p.getManagingOrganization().setReferenceElement(oId);
-		IIdType pId = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType pId = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		long time2 = System.currentTimeMillis();
 		Thread.sleep(10);
@@ -1361,7 +1487,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Condition c = new Condition();
 		c.getCode().setText(methodName);
 		c.getSubject().setReferenceElement(pId);
-		IIdType cId = myClient.create().resource(c).execute().getId().toUnqualifiedVersionless();
+		IIdType cId = ourClient.create().resource(c).execute().getId().toUnqualifiedVersionless();
 
 		Thread.sleep(10);
 		long time3 = System.currentTimeMillis();
@@ -1377,7 +1503,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			ourLog.info(output);
 			List<IIdType> ids = toUnqualifiedVersionlessIds(myFhirCtx.newXmlParser().parseResource(Bundle.class, output));
 			ourLog.info(ids.toString());
-			assertThat(ids, containsInAnyOrder(pId, cId));
+			assertThat(ids, containsInAnyOrder(pId, cId, oId));
 		} finally {
 			response.close();
 		}
@@ -1392,7 +1518,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			ourLog.info(output);
 			List<IIdType> ids = toUnqualifiedVersionlessIds(myFhirCtx.newXmlParser().parseResource(Bundle.class, output));
 			ourLog.info(ids.toString());
-			assertThat(ids, containsInAnyOrder(pId, cId));
+			assertThat(ids, containsInAnyOrder(pId, cId, oId));
 		} finally {
 			response.close();
 		}
@@ -1455,7 +1581,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		mySystemDao.transaction(mySrd, inputBundle);
 
-		Bundle responseBundle = myClient
+		Bundle responseBundle = ourClient
 			.operation()
 			.onInstance(new IdType("Patient/A161443"))
 			.named("everything")
@@ -1483,7 +1609,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 
 		String nextUrl = responseBundle.getLink("next").getUrl();
-		responseBundle = myClient.fetchResourceFromUrl(Bundle.class, nextUrl);
+		responseBundle = ourClient.fetchResourceFromUrl(Bundle.class, nextUrl);
 		for (int i = 0; i < responseBundle.getEntry().size(); i++) {
 			for (BundleEntryComponent nextEntry : responseBundle.getEntry()) {
 				idsSet.add(nextEntry.getResource().getIdElement().toUnqualifiedVersionless().getValue());
@@ -1491,7 +1617,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 
 		nextUrl = responseBundle.getLink("next").getUrl();
-		responseBundle = myClient.fetchResourceFromUrl(Bundle.class, nextUrl);
+		responseBundle = ourClient.fetchResourceFromUrl(Bundle.class, nextUrl);
 		for (int i = 0; i < responseBundle.getEntry().size(); i++) {
 			for (BundleEntryComponent nextEntry : responseBundle.getEntry()) {
 				idsSet.add(nextEntry.getResource().getIdElement().toUnqualifiedVersionless().getValue());
@@ -1517,16 +1643,16 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testEverythingWithLargeSet2() {
 		Patient p = new Patient();
 		p.setActive(true);
-		IIdType id = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		for (int i = 1; i < 77; i++) {
 			Observation obs = new Observation();
 			obs.setId("A" + StringUtils.leftPad(Integer.toString(i), 2, '0'));
 			obs.setSubject(new Reference(id));
-			myClient.update().resource(obs).execute();
+			ourClient.update().resource(obs).execute();
 		}
 
-		Bundle responseBundle = myClient.operation().onInstance(id).named("everything").withParameter(Parameters.class, "_count", new IntegerType(50)).useHttpGet().returnResourceType(Bundle.class)
+		Bundle responseBundle = ourClient.operation().onInstance(id).named("everything").withParameter(Parameters.class, "_count", new IntegerType(50)).useHttpGet().returnResourceType(Bundle.class)
 			.execute();
 
 		TreeSet<String> ids = new TreeSet<String>();
@@ -1541,7 +1667,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		BundleLinkComponent nextLink = responseBundle.getLink("next");
 		while (nextLink != null) {
 			String nextUrl = nextLink.getUrl();
-			responseBundle = myClient.fetchResourceFromUrl(Bundle.class, nextUrl);
+			responseBundle = ourClient.fetchResourceFromUrl(Bundle.class, nextUrl);
 			for (int i = 0; i < responseBundle.getEntry().size(); i++) {
 				for (BundleEntryComponent nextEntry : responseBundle.getEntry()) {
 					ids.add(nextEntry.getResource().getIdElement().getIdPart());
@@ -1563,11 +1689,11 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testEverythingWithOnlyPatient() {
 		Patient p = new Patient();
 		p.setActive(true);
-		IIdType id = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		myFhirCtx.getRestfulClientFactory().setSocketTimeout(300 * 1000);
 
-		Bundle response = myClient
+		Bundle response = ourClient
 			.operation()
 			.onInstance(id)
 			.named("everything")
@@ -1658,18 +1784,18 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p = new Patient();
 		p.setId("FOO");
 		p.addName().setFamily("FAMILY");
-		myClient.update().resource(p).execute();
+		ourClient.update().resource(p).execute();
 
 		p = new Patient();
 		p.setId("BAR");
 		p.addName().setFamily("HELLO");
-		myClient.update().resource(p).execute();
+		ourClient.update().resource(p).execute();
 
 		Observation o = new Observation();
 		o.setId("BAZ");
 		o.getSubject().setReference("Patient/FOO");
 		o.getCode().setText("GOODBYE");
-		myClient.update().resource(o).execute();
+		ourClient.update().resource(o).execute();
 
 		List<String> ids = searchAndReturnUnqualifiedVersionlessIdValues(ourServerBase + "/Patient/FOO/$everything?_content=White");
 		assertThat(ids, contains("Patient/FOO"));
@@ -1686,18 +1812,18 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p = new Patient();
 		p.setId("FOO");
 		p.addName().setFamily("FAMILY");
-		myClient.update().resource(p).execute();
+		ourClient.update().resource(p).execute();
 
 		p = new Patient();
 		p.setId("BAR");
 		p.addName().setFamily("HELLO");
-		myClient.update().resource(p).execute();
+		ourClient.update().resource(p).execute();
 
 		Observation o = new Observation();
 		o.setId("BAZ");
 		o.getSubject().setReference("Patient/FOO");
 		o.getCode().setText("GOODBYE");
-		myClient.update().resource(o).execute();
+		ourClient.update().resource(o).execute();
 
 		List<String> ids = searchAndReturnUnqualifiedVersionlessIdValues(ourServerBase + "/Patient?_id=FOO&_content=family");
 		assertThat(ids, contains("Patient/FOO"));
@@ -1712,7 +1838,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Patient pt = new Patient();
 		pt.addName().setFamily(methodName);
-		myClient.create().resource(pt).execute().getId().toUnqualifiedVersionless();
+		ourClient.create().resource(pt).execute().getId().toUnqualifiedVersionless();
 
 		myResourceCountsCache.clear();
 		myResourceCountsCache.update();
@@ -1831,12 +1957,12 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Patient patient = new Patient();
 		patient.addName().setFamily(methodName);
-		IIdType id = myClient.create().resource(patient).execute().getId().toVersionless();
-		myClient.delete().resourceById(id).execute();
+		IIdType id = ourClient.create().resource(patient).execute().getId().toVersionless();
+		ourClient.delete().resourceById(id).execute();
 		patient.setId(id);
-		myClient.update().resource(patient).execute();
+		ourClient.update().resource(patient).execute();
 
-		Bundle history = myClient.history().onInstance(id).andReturnBundle(Bundle.class).prettyPrint().summaryMode(SummaryEnum.DATA).execute();
+		Bundle history = ourClient.history().onInstance(id).andReturnBundle(Bundle.class).prettyPrint().summaryMode(SummaryEnum.DATA).execute();
 		assertEquals(3, history.getEntry().size());
 		assertEquals(id.withVersion("3").getValue(), history.getEntry().get(0).getResource().getId());
 		assertEquals(1, ((Patient) history.getEntry().get(0).getResource()).getName().size());
@@ -1860,25 +1986,25 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	// private void delete(String theResourceType, String theParamName, String theParamValue) {
 	// Bundle resources;
 	// do {
-	// IQuery<Bundle> forResource = myClient.search().forResource(theResourceType);
+	// IQuery<Bundle> forResource = ourClient.search().forResource(theResourceType);
 	// if (theParamName != null) {
 	// forResource = forResource.where(new StringClientParam(theParamName).matches().value(theParamValue));
 	// }
 	// resources = forResource.execute();
 	// for (IResource next : resources.toListOfResources()) {
 	// ourLog.info("Deleting resource: {}", next.getId());
-	// myClient.delete().resource(next).execute();
+	// ourClient.delete().resource(next).execute();
 	// }
 	// } while (resources.size() > 0);
 	// }
 	//
 	// private void deleteToken(String theResourceType, String theParamName, String theParamSystem, String theParamValue)
 	// {
-	// Bundle resources = myClient.search().forResource(theResourceType).where(new
+	// Bundle resources = ourClient.search().forResource(theResourceType).where(new
 	// TokenClientParam(theParamName).exactly().systemAndCode(theParamSystem, theParamValue)).execute();
 	// for (IResource next : resources.toListOfResources()) {
 	// ourLog.info("Deleting resource: {}", next.getId());
-	// myClient.delete().resource(next).execute();
+	// ourClient.delete().resource(next).execute();
 	// }
 	// }
 
@@ -1976,7 +2102,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	 */
 	@Test
 	public void testImagingStudyResources() throws Exception {
-		IGenericClient client = myClient;
+		IGenericClient client = ourClient;
 
 		int initialSize = client.search().forResource(ImagingStudy.class).returnBundle(Bundle.class).execute().getEntry().size();
 
@@ -2005,7 +2131,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			myPatientDao.create(pt);
 		}
 
-		Bundle bundle = myClient
+		Bundle bundle = ourClient
 			.search()
 			.forResource(Patient.class)
 			.include(Patient.INCLUDE_ORGANIZATION)
@@ -2028,9 +2154,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Patient p = new Patient();
 		p.getManagingOrganization().setReference("http://example.com/Organization/123");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
-		Bundle b = myClient.search().forResource("Patient").include(Patient.INCLUDE_ORGANIZATION).returnBundle(Bundle.class).execute();
+		Bundle b = ourClient.search().forResource("Patient").include(Patient.INCLUDE_ORGANIZATION).returnBundle(Bundle.class).execute();
 		assertEquals(1, b.getEntry().size());
 	}
 
@@ -2038,7 +2164,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testMetaOperationWithNoMetaParameter() throws Exception {
 		Patient p = new Patient();
 		p.addName().setFamily("testMetaAddInvalid");
-		IIdType id = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		//@formatter:off
 		String input = "<Parameters>\n" +
@@ -2084,19 +2210,19 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Patient pt = new Patient();
 		pt.addName().setFamily(methodName);
-		IIdType id = myClient.create().resource(pt).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(pt).execute().getId().toUnqualifiedVersionless();
 
-		Meta meta = myClient.meta().get(Meta.class).fromResource(id).execute();
+		Meta meta = ourClient.meta().get(Meta.class).fromResource(id).execute();
 		assertEquals(0, meta.getTag().size());
 
 		Meta inMeta = new Meta();
 		inMeta.addTag().setSystem("urn:system1").setCode("urn:code1");
-		meta = myClient.meta().add().onResource(id).meta(inMeta).execute();
+		meta = ourClient.meta().add().onResource(id).meta(inMeta).execute();
 		assertEquals(1, meta.getTag().size());
 
 		inMeta = new Meta();
 		inMeta.addTag().setSystem("urn:system1").setCode("urn:code1");
-		meta = myClient.meta().delete().onResource(id).meta(inMeta).execute();
+		meta = ourClient.meta().delete().onResource(id).meta(inMeta).execute();
 		assertEquals(0, meta.getTag().size());
 
 	}
@@ -2122,9 +2248,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		StructureDefinition p = new StructureDefinition();
 		p.setAbstract(true);
 		p.setUrl("http://example.com/foo");
-		IIdType id = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
-		Bundle resp = myClient
+		Bundle resp = ourClient
 			.search()
 			.forResource(StructureDefinition.class)
 			.where(StructureDefinition.URL.matches().value("http://example.com/foo"))
@@ -2151,7 +2277,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		mySearchCoordinatorSvcRaw.setSyncSizeForUnitTests(10);
 		mySearchCoordinatorSvcRaw.setNeverUseLocalSearchForUnitTests(true);
 
-		Bundle response = myClient
+		Bundle response = ourClient
 			.operation()
 			.onInstance(new IdType(pid))
 			.named("everything")
@@ -2169,7 +2295,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		// Load page 2
 
 		String nextUrl = response.getLink("next").getUrl();
-		response = myClient.fetchResourceFromUrl(Bundle.class, nextUrl);
+		response = ourClient.fetchResourceFromUrl(Bundle.class, nextUrl);
 
 		assertEquals(10, response.getEntry().size());
 		if (response.getTotalElement().getValueAsString() != null) {
@@ -2181,7 +2307,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Thread.sleep(2000);
 
 		nextUrl = response.getLink("next").getUrl();
-		response = myClient.fetchResourceFromUrl(Bundle.class, nextUrl);
+		response = ourClient.fetchResourceFromUrl(Bundle.class, nextUrl);
 
 		assertEquals(1, response.getEntry().size());
 		assertEquals("21", response.getTotalElement().getValueAsString());
@@ -2208,7 +2334,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		mySearchCoordinatorSvcRaw.setSyncSizeForUnitTests(10);
 		mySearchCoordinatorSvcRaw.setNeverUseLocalSearchForUnitTests(true);
 
-		Bundle response = myClient
+		Bundle response = ourClient
 			.operation()
 			.onInstance(new IdType(pid))
 			.named("everything")
@@ -2284,6 +2410,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 
 		HttpPatch patch = new HttpPatch(ourServerBase + "/Patient/" + pid1.getIdPart());
+		patch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + '=' + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		patch.setEntity(new StringEntity("[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]", ContentType.parse(Constants.CT_JSON_PATCH + Constants.CHARSET_UTF8_CTSUFFIX)));
 
 		CloseableHttpResponse response = ourHttpClient.execute(patch);
@@ -2296,7 +2423,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			response.close();
 		}
 
-		Patient newPt = myClient.read().resource(Patient.class).withId(pid1.getIdPart()).execute();
+		Patient newPt = ourClient.read().resource(Patient.class).withId(pid1.getIdPart()).execute();
 		assertEquals("2", newPt.getIdElement().getVersionIdPart());
 		assertEquals(false, newPt.getActive());
 	}
@@ -2327,7 +2454,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			response.close();
 		}
 
-		Patient newPt = myClient.read().resource(Patient.class).withId(pid1.getIdPart()).execute();
+		Patient newPt = ourClient.read().resource(Patient.class).withId(pid1.getIdPart()).execute();
 		assertEquals("1", newPt.getIdElement().getVersionIdPart());
 		assertEquals(true, newPt.getActive());
 	}
@@ -2345,8 +2472,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 
 		HttpPatch patch = new HttpPatch(ourServerBase + "/Patient/" + pid1.getIdPart());
-		patch.setEntity(new StringEntity("[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]", ContentType.parse(Constants.CT_JSON_PATCH + Constants.CHARSET_UTF8_CTSUFFIX)));
+		patch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + '=' + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		patch.addHeader("If-Match", "W/\"1\"");
+		patch.setEntity(new StringEntity("[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]", ContentType.parse(Constants.CT_JSON_PATCH + Constants.CHARSET_UTF8_CTSUFFIX)));
 
 		CloseableHttpResponse response = ourHttpClient.execute(patch);
 		try {
@@ -2358,7 +2486,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			response.close();
 		}
 
-		Patient newPt = myClient.read().resource(Patient.class).withId(pid1.getIdPart()).execute();
+		Patient newPt = ourClient.read().resource(Patient.class).withId(pid1.getIdPart()).execute();
 		assertEquals("2", newPt.getIdElement().getVersionIdPart());
 		assertEquals(false, newPt.getActive());
 	}
@@ -2377,6 +2505,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		HttpPatch patch = new HttpPatch(ourServerBase + "/Patient/" + pid1.getIdPart());
 		String patchString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><diff xmlns:fhir=\"http://hl7.org/fhir\"><replace sel=\"fhir:Patient/fhir:active/@value\">false</replace></diff>";
+		patch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + '=' + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		patch.setEntity(new StringEntity(patchString, ContentType.parse(Constants.CT_XML_PATCH + Constants.CHARSET_UTF8_CTSUFFIX)));
 
 		CloseableHttpResponse response = ourHttpClient.execute(patch);
@@ -2389,7 +2518,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			response.close();
 		}
 
-		Patient newPt = myClient.read().resource(Patient.class).withId(pid1.getIdPart()).execute();
+		Patient newPt = ourClient.read().resource(Patient.class).withId(pid1.getIdPart()).execute();
 		assertEquals("2", newPt.getIdElement().getVersionIdPart());
 		assertEquals(false, newPt.getActive());
 	}
@@ -2398,25 +2527,25 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testPreserveVersionsOnAuditEvent() {
 		Organization org = new Organization();
 		org.setName("ORG");
-		IIdType orgId = myClient.create().resource(org).execute().getId();
+		IIdType orgId = ourClient.create().resource(org).execute().getId();
 		assertEquals("1", orgId.getVersionIdPart());
 
 		Patient patient = new Patient();
 		patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
 		patient.getManagingOrganization().setReference(orgId.toUnqualified().getValue());
-		IIdType patientId = myClient.create().resource(patient).execute().getId();
+		IIdType patientId = ourClient.create().resource(patient).execute().getId();
 		assertEquals("1", patientId.getVersionIdPart());
 
 		AuditEvent ae = new org.hl7.fhir.r4.model.AuditEvent();
 		ae.addEntity().getReference().setReference(patientId.toUnqualified().getValue());
-		IIdType aeId = myClient.create().resource(ae).execute().getId();
+		IIdType aeId = ourClient.create().resource(ae).execute().getId();
 		assertEquals("1", aeId.getVersionIdPart());
 
-		patient = myClient.read().resource(Patient.class).withId(patientId).execute();
+		patient = ourClient.read().resource(Patient.class).withId(patientId).execute();
 		assertTrue(patient.getManagingOrganization().getReferenceElement().hasIdPart());
 		assertFalse(patient.getManagingOrganization().getReferenceElement().hasVersionIdPart());
 
-		ae = myClient.read().resource(AuditEvent.class).withId(aeId).execute();
+		ae = ourClient.read().resource(AuditEvent.class).withId(aeId).execute();
 		assertTrue(ae.getEntityFirstRep().getReference().getReferenceElement().hasIdPart());
 		assertTrue(ae.getEntityFirstRep().getReference().getReferenceElement().hasVersionIdPart());
 
@@ -2427,7 +2556,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	 */
 	@Test
 	public void testProcedureRequestResources() {
-		IGenericClient client = myClient;
+		IGenericClient client = ourClient;
 
 		int initialSize = client.search().forResource(ServiceRequest.class).returnBundle(Bundle.class).execute().getEntry().size();
 
@@ -2451,19 +2580,19 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		pat = new Patient();
 		pat.addIdentifier().setSystem("urn:system").setValue("testReadAllInstancesOfType_01");
-		myClient.create().resource(pat).prettyPrint().encodedXml().execute().getId();
+		ourClient.create().resource(pat).prettyPrint().encodedXml().execute().getId();
 
 		pat = new Patient();
 		pat.addIdentifier().setSystem("urn:system").setValue("testReadAllInstancesOfType_02");
-		myClient.create().resource(pat).prettyPrint().encodedXml().execute().getId();
+		ourClient.create().resource(pat).prettyPrint().encodedXml().execute().getId();
 
 		{
-			Bundle returned = myClient.search().forResource(Patient.class).encodedXml().returnBundle(Bundle.class).execute();
+			Bundle returned = ourClient.search().forResource(Patient.class).encodedXml().returnBundle(Bundle.class).execute();
 			assertThat(returned.getEntry().size(), greaterThan(1));
 			assertEquals(BundleType.SEARCHSET, returned.getType());
 		}
 		{
-			Bundle returned = myClient.search().forResource(Patient.class).encodedJson().returnBundle(Bundle.class).execute();
+			Bundle returned = ourClient.search().forResource(Patient.class).encodedJson().returnBundle(Bundle.class).execute();
 			assertThat(returned.getEntry().size(), greaterThan(1));
 		}
 	}
@@ -2472,11 +2601,11 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testRetrieveMissingVersionsDoesntCrashHistory() {
 		Patient p1 = new Patient();
 		p1.setActive(true);
-		final IIdType id1 = myClient.create().resource(p1).execute().getId();
+		final IIdType id1 = ourClient.create().resource(p1).execute().getId();
 
 		Patient p2 = new Patient();
 		p2.setActive(false);
-		IIdType id2 = myClient.create().resource(p2).execute().getId();
+		IIdType id2 = ourClient.create().resource(p2).execute().getId();
 
 		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
 			@Override
@@ -2486,7 +2615,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			}
 		});
 
-		Bundle bundle = myClient.history().onServer().andReturnBundle(Bundle.class).execute();
+		Bundle bundle = ourClient.history().onServer().andReturnBundle(Bundle.class).execute();
 		assertEquals(1, bundle.getTotal());
 		assertEquals(1, bundle.getEntry().size());
 		assertEquals(id2.getIdPart(), bundle.getEntry().get(0).getResource().getIdElement().getIdPart());
@@ -2496,11 +2625,11 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testRetrieveMissingVersionsDoesntCrashSearch() {
 		Patient p1 = new Patient();
 		p1.setActive(true);
-		final IIdType id1 = myClient.create().resource(p1).execute().getId();
+		final IIdType id1 = ourClient.create().resource(p1).execute().getId();
 
 		Patient p2 = new Patient();
 		p2.setActive(false);
-		IIdType id2 = myClient.create().resource(p2).execute().getId();
+		IIdType id2 = ourClient.create().resource(p2).execute().getId();
 
 		new TransactionTemplate(myTxManager).execute(new TransactionCallbackWithoutResult() {
 			@Override
@@ -2510,7 +2639,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			}
 		});
 
-		Bundle bundle = myClient.search().forResource("Patient").returnBundle(Bundle.class).execute();
+		Bundle bundle = ourClient.search().forResource("Patient").returnBundle(Bundle.class).execute();
 		assertEquals(2, bundle.getTotal());
 		assertEquals(1, bundle.getEntry().size());
 		assertEquals(id2.getIdPart(), bundle.getEntry().get(0).getResource().getIdElement().getIdPart());
@@ -2523,9 +2652,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		p1.getText().getDiv().setValueAsString("<div>HELLO WORLD</div>");
 		p1.addIdentifier().setSystem("urn:system").setValue("testSaveAndRetrieveExistingNarrative01");
 
-		IIdType newId = myClient.create().resource(p1).encodedJson().execute().getId();
+		IIdType newId = ourClient.create().resource(p1).encodedJson().execute().getId();
 
-		Patient actual = myClient.read().resource(Patient.class).withId(newId).encodedJson().execute();
+		Patient actual = ourClient.read().resource(Patient.class).withId(newId).encodedJson().execute();
 		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">HELLO WORLD</div>", actual.getText().getDiv().getValueAsString());
 	}
 
@@ -2536,9 +2665,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		p1.getText().getDiv().setValueAsString("<div>HELLO WORLD</div>");
 		p1.addIdentifier().setSystem("urn:system").setValue("testSaveAndRetrieveExistingNarrative01");
 
-		IIdType newId = myClient.create().resource(p1).encodedXml().execute().getId();
+		IIdType newId = ourClient.create().resource(p1).encodedXml().execute().getId();
 
-		Patient actual = myClient.read().resource(Patient.class).withId(newId).encodedXml().execute();
+		Patient actual = ourClient.read().resource(Patient.class).withId(newId).encodedXml().execute();
 		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">HELLO WORLD</div>", actual.getText().getDiv().getValueAsString());
 	}
 
@@ -2551,9 +2680,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			.setUrl("http://foo")
 			.setValue(new Reference("Practitioner/A"));
 
-		myClient.update().resource(nextPatient).execute();
+		ourClient.update().resource(nextPatient).execute();
 
-		Patient p = myClient.read().resource(Patient.class).withId("B").execute();
+		Patient p = ourClient.read().resource(Patient.class).withId("B").execute();
 
 		String encoded = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(p);
 		ourLog.info(encoded);
@@ -2571,13 +2700,13 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		p1.getManagingOrganization().setResource(o1);
 
-		IIdType newId = myClient.create().resource(p1).execute().getId();
+		IIdType newId = ourClient.create().resource(p1).execute().getId();
 
-		Patient actual = myClient.read(Patient.class, new UriDt(newId.getValue()));
+		Patient actual = ourClient.read(Patient.class, new UriDt(newId.getValue()));
 		assertEquals(1, actual.getContained().size());
 
 		//@formatter:off
-		Bundle b = myClient
+		Bundle b = ourClient
 			.search()
 			.forResource("Patient")
 			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system:rpdstu2", "testSaveAndRetrieveWithContained01"))
@@ -2595,9 +2724,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		p1.getText().setDivAsString("<div><td>Identifier</td><td>testSearchByResourceChain01</td></div>");
 		p1.addIdentifier().setSystem("urn:system").setValue("testSearchByResourceChain01");
 
-		IdType newId = (IdType) myClient.create().resource(p1).execute().getId();
+		IdType newId = (IdType) ourClient.create().resource(p1).execute().getId();
 
-		Patient actual = myClient.read(Patient.class, newId.getIdPart());
+		Patient actual = ourClient.read(Patient.class, newId.getIdPart());
 		assertThat(actual.getText().getDiv().getValueAsString(), containsString("<td>Identifier</td><td>testSearchByResourceChain01</td>"));
 	}
 
@@ -2663,7 +2792,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Bundle found;
 
-		found = myClient
+		found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(BaseResource.RES_ID.exactly().systemAndValues(null, id1.getIdPart(), id2.getIdPart()))
@@ -2672,7 +2801,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1, id2));
 
-		found = myClient
+		found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(BaseResource.RES_ID.exactly().systemAndValues(null, Arrays.asList(id1.getIdPart(), id2.getIdPart(), "FOOOOO")))
@@ -2681,7 +2810,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1, id2));
 
-		found = myClient
+		found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(BaseResource.RES_ID.exactly().systemAndCode(null, id1.getIdPart()))
@@ -2690,7 +2819,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1));
 
-		found = myClient
+		found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(BaseResource.RES_ID.exactly().codes(id1.getIdPart(), id2.getIdPart()))
@@ -2700,7 +2829,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1));
 
-		found = myClient
+		found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(BaseResource.RES_ID.exactly().codes(Arrays.asList(id1.getIdPart(), id2.getIdPart(), "FOOOOO")))
@@ -2710,7 +2839,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1));
 
-		found = myClient
+		found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(BaseResource.RES_ID.exactly().codes(id1.getIdPart(), id2.getIdPart(), "FOOO"))
@@ -2719,7 +2848,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		assertThat(toUnqualifiedVersionlessIds(found), containsInAnyOrder(id1, id2));
 
-		found = myClient
+		found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(BaseResource.RES_ID.exactly().codes("FOOO"))
@@ -2735,15 +2864,15 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p1 = new Patient();
 		p1.addIdentifier().setSystem("urn:system").setValue("testSearchByIdentifier01");
 		p1.addName().setFamily("testSearchByIdentifierFamily01").addGiven("testSearchByIdentifierGiven01");
-		IdType p1Id = (IdType) myClient.create().resource(p1).execute().getId();
+		IdType p1Id = (IdType) ourClient.create().resource(p1).execute().getId();
 
 		Patient p2 = new Patient();
 		p2.addIdentifier().setSystem("urn:system").setValue("testSearchByIdentifier02");
 		p2.addName().setFamily("testSearchByIdentifierFamily01").addGiven("testSearchByIdentifierGiven02");
-		myClient.create().resource(p2).execute().getId();
+		ourClient.create().resource(p2).execute().getId();
 
 		//@formatter:off
-		Bundle actual = myClient
+		Bundle actual = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", "testSearchByIdentifier01"))
@@ -2764,10 +2893,10 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Patient p1 = new Patient();
 		p1.addIdentifier().setValue("testSearchByIdentifierWithoutSystem01");
-		IdType p1Id = (IdType) myClient.create().resource(p1).execute().getId();
+		IdType p1Id = (IdType) ourClient.create().resource(p1).execute().getId();
 
 		//@formatter:off
-		Bundle actual = myClient
+		Bundle actual = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(Patient.IDENTIFIER.exactly().systemAndCode(null, "testSearchByIdentifierWithoutSystem01"))
@@ -2787,7 +2916,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Patient p = new Patient();
 		p.addName().setFamily(methodName + "1");
-		IIdType pid1 = myClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
+		IIdType pid1 = ourClient.create().resource(p).execute().getId().toUnqualifiedVersionless();
 
 		Thread.sleep(10);
 		long time1 = System.currentTimeMillis();
@@ -2795,7 +2924,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Patient p2 = new Patient();
 		p2.addName().setFamily(methodName + "2");
-		IIdType pid2 = myClient.create().resource(p2).execute().getId().toUnqualifiedVersionless();
+		IIdType pid2 = ourClient.create().resource(p2).execute().getId().toUnqualifiedVersionless();
 
 		HttpGet get = new HttpGet(ourServerBase + "/Patient?_lastUpdated=lt" + new InstantType(new Date(time1)).getValueAsString());
 		CloseableHttpResponse response = ourHttpClient.execute(get);
@@ -2835,12 +2964,12 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p2 = new Patient();
 		p2.setId("P2");
 		p2.addName().setFamily("P2");
-		myClient.update().resource(p2).execute().getId().toUnqualifiedVersionless();
+		ourClient.update().resource(p2).execute().getId().toUnqualifiedVersionless();
 
 		Practitioner pract = new Practitioner();
 		pract.setId("PRAC");
 		pract.addName().setFamily("PRACT");
-		myClient.update().resource(pract).execute().getId().toUnqualifiedVersionless();
+		ourClient.update().resource(pract).execute().getId().toUnqualifiedVersionless();
 
 		Encounter enc = new Encounter();
 		enc.setId("E2");
@@ -2848,7 +2977,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		enc.setPeriod(new Period().setStart(new Date()).setEnd(new Date()));
 		enc.getSubject().setReference("Patient/P2");
 		enc.addParticipant().getIndividual().setReference("Practitioner/PRAC");
-		myClient.update().resource(enc).execute().getId().toUnqualifiedVersionless();
+		ourClient.update().resource(enc).execute().getId().toUnqualifiedVersionless();
 
 		HttpGet get = new HttpGet(ourServerBase + "/Encounter?patient=P2&date=ge2017-01-01&_include:recurse=Encounter:practitioner&_lastUpdated=ge2017-11-10");
 		CloseableHttpResponse response = ourHttpClient.execute(get);
@@ -2884,25 +3013,25 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testSearchByReferenceIds() {
 		Organization o1 = new Organization();
 		o1.setName("testSearchByResourceChainName01");
-		IIdType o1id = myClient.create().resource(o1).execute().getId().toUnqualifiedVersionless();
+		IIdType o1id = ourClient.create().resource(o1).execute().getId().toUnqualifiedVersionless();
 		Organization o2 = new Organization();
 		o2.setName("testSearchByResourceChainName02");
-		IIdType o2id = myClient.create().resource(o2).execute().getId().toUnqualifiedVersionless();
+		IIdType o2id = ourClient.create().resource(o2).execute().getId().toUnqualifiedVersionless();
 
 		Patient p1 = new Patient();
 		p1.addIdentifier().setSystem("urn:system").setValue("testSearchByReferenceIds01");
 		p1.addName().setFamily("testSearchByReferenceIdsFamily01").addGiven("testSearchByReferenceIdsGiven01");
 		p1.setManagingOrganization(new Reference(o1id.toUnqualifiedVersionless()));
-		IIdType p1Id = myClient.create().resource(p1).execute().getId();
+		IIdType p1Id = ourClient.create().resource(p1).execute().getId();
 
 		Patient p2 = new Patient();
 		p2.addIdentifier().setSystem("urn:system").setValue("testSearchByReferenceIds02");
 		p2.addName().setFamily("testSearchByReferenceIdsFamily02").addGiven("testSearchByReferenceIdsGiven02");
 		p2.setManagingOrganization(new Reference(o2id.toUnqualifiedVersionless()));
-		IIdType p2Id = myClient.create().resource(p2).execute().getId();
+		IIdType p2Id = ourClient.create().resource(p2).execute().getId();
 
 		//@formatter:off
-		Bundle actual = myClient.search()
+		Bundle actual = ourClient.search()
 			.forResource(Patient.class)
 			.where(Patient.ORGANIZATION.hasAnyOfIds(Arrays.asList(o1id.getIdPart(), o2id.getIdPart())))
 			.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
@@ -2922,16 +3051,16 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Organization o1 = new Organization();
 		o1.setName("testSearchByResourceChainName01");
-		IdType o1id = (IdType) myClient.create().resource(o1).execute().getId().toUnqualifiedVersionless();
+		IdType o1id = (IdType) ourClient.create().resource(o1).execute().getId().toUnqualifiedVersionless();
 
 		Patient p1 = new Patient();
 		p1.addIdentifier().setSystem("urn:system").setValue("testSearchByResourceChain01");
 		p1.addName().setFamily("testSearchByResourceChainFamily01").addGiven("testSearchByResourceChainGiven01");
 		p1.setManagingOrganization(new Reference(o1id.toUnqualifiedVersionless()));
-		IdType p1Id = (IdType) myClient.create().resource(p1).execute().getId();
+		IdType p1Id = (IdType) ourClient.create().resource(p1).execute().getId();
 
 		//@formatter:off
-		Bundle actual = myClient.search()
+		Bundle actual = ourClient.search()
 			.forResource(Patient.class)
 			.where(Patient.ORGANIZATION.hasId(o1id.getIdPart()))
 			.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
@@ -2940,7 +3069,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		assertEquals(p1Id.getIdPart(), actual.getEntry().get(0).getResource().getIdElement().getIdPart());
 
 		//@formatter:off
-		actual = myClient.search()
+		actual = ourClient.search()
 			.forResource(Patient.class)
 			.where(Patient.ORGANIZATION.hasId(o1id.getValue()))
 			.encodedJson().prettyPrint().returnBundle(Bundle.class).execute();
@@ -2985,14 +3114,14 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			Patient patient = new Patient();
 			patient.addIdentifier().setSystem("urn:system").setValue("001");
 			patient.addName().setFamily(methodName).addGiven("Joe");
-			id1a = myClient.create().resource(patient).execute().getId().toUnqualifiedVersionless();
+			id1a = ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless();
 		}
 		IIdType id1b;
 		{
 			Patient patient = new Patient();
 			patient.addIdentifier().setSystem("urn:system").setValue("002");
 			patient.addName().setFamily(methodName + "XXXX").addGiven("Joe");
-			id1b = myClient.create().resource(patient).execute().getId().toUnqualifiedVersionless();
+			id1b = ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless();
 		}
 
 		Thread.sleep(1100);
@@ -3004,12 +3133,12 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			Patient patient = new Patient();
 			patient.addIdentifier().setSystem("urn:system").setValue("002");
 			patient.addName().setFamily(methodName).addGiven("John");
-			id2 = myClient.create().resource(patient).execute().getId().toUnqualifiedVersionless();
+			id2 = ourClient.create().resource(patient).execute().getId().toUnqualifiedVersionless();
 		}
 
 		{
 			//@formatter:off
-			Bundle found = myClient.search()
+			Bundle found = ourClient.search()
 				.forResource(Patient.class)
 				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
 				.returnBundle(Bundle.class)
@@ -3020,7 +3149,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 		{
 			//@formatter:off
-			Bundle found = myClient.search()
+			Bundle found = ourClient.search()
 				.forResource(Patient.class)
 				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
 				.lastUpdated(new DateRangeParam(beforeAny, null))
@@ -3032,7 +3161,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 		{
 			//@formatter:off
-			Bundle found = myClient.search()
+			Bundle found = ourClient.search()
 				.forResource(Patient.class)
 				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
 				.lastUpdated(new DateRangeParam(beforeR2, null))
@@ -3045,7 +3174,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 		{
 			//@formatter:off
-			Bundle found = myClient.search()
+			Bundle found = ourClient.search()
 				.forResource(Patient.class)
 				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
 				.lastUpdated(new DateRangeParam(beforeAny, beforeR2))
@@ -3058,7 +3187,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 		{
 			//@formatter:off
-			Bundle found = myClient.search()
+			Bundle found = ourClient.search()
 				.forResource(Patient.class)
 				.where(Patient.NAME.matches().value("testSearchLastUpdatedParamRp"))
 				.lastUpdated(new DateRangeParam(null, beforeR2))
@@ -3143,7 +3272,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		List<String> linkNext = Lists.newArrayList();
 		for (int i = 0; i < 100; i++) {
-			Bundle bundle = myClient.search().forResource(Patient.class).where(Patient.NAME.matches().value("testSearchPagingKeepsOldSearches")).count(5).returnBundle(Bundle.class).execute();
+			Bundle bundle = ourClient.search().forResource(Patient.class).where(Patient.NAME.matches().value("testSearchPagingKeepsOldSearches")).count(5).returnBundle(Bundle.class).execute();
 			assertTrue(isNotBlank(bundle.getLink("next").getUrl()));
 			assertEquals(5, bundle.getEntry().size());
 			linkNext.add(bundle.getLink("next").getUrl());
@@ -3152,7 +3281,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		int index = 0;
 		for (String nextLink : linkNext) {
 			ourLog.info("Fetching index {}", index++);
-			Bundle b = myClient.fetchResourceFromUrl(Bundle.class, nextLink);
+			Bundle b = ourClient.fetchResourceFromUrl(Bundle.class, nextLink);
 			assertEquals(5, b.getEntry().size());
 		}
 	}
@@ -3176,7 +3305,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Thread.sleep(1);
 
 		//@formatter:off
-		Bundle found = myClient
+		Bundle found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.prettyPrint()
@@ -3205,11 +3334,11 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			org.setName("HELLO");
 			resources.add(org);
 		}
-		myClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
+		ourClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
 
 		myDaoConfig.setReuseCachedSearchResultsForMillis(1000L);
 
-		Bundle result1 = myClient
+		Bundle result1 = ourClient
 			.search()
 			.forResource("Organization")
 			.returnBundle(Bundle.class)
@@ -3217,7 +3346,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		final String uuid1 = toSearchUuidFromLinkNext(result1);
 
-		Bundle result2 = myClient
+		Bundle result2 = ourClient
 			.search()
 			.forResource("Organization")
 			.returnBundle(Bundle.class)
@@ -3236,11 +3365,11 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			org.setName("HELLO");
 			resources.add(org);
 		}
-		myClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
+		ourClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
 
 		myDaoConfig.setReuseCachedSearchResultsForMillis(null);
 
-		Bundle result1 = myClient
+		Bundle result1 = ourClient
 			.search()
 			.forResource("Organization")
 			.where(Organization.NAME.matches().value("HELLO"))
@@ -3250,7 +3379,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		final String uuid1 = toSearchUuidFromLinkNext(result1);
 
-		Bundle result2 = myClient
+		Bundle result2 = ourClient
 			.search()
 			.forResource("Organization")
 			.where(Organization.NAME.matches().value("HELLO"))
@@ -3260,7 +3389,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		final String uuid2 = toSearchUuidFromLinkNext(result2);
 
-		Bundle result3 = myClient
+		Bundle result3 = ourClient
 			.search()
 			.forResource("Organization")
 			.where(Organization.NAME.matches().value("HELLO"))
@@ -3282,11 +3411,11 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			org.setName("HELLO");
 			resources.add(org);
 		}
-		myClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
+		ourClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
 
 		myDaoConfig.setReuseCachedSearchResultsForMillis(1000L);
 
-		Bundle result1 = myClient
+		Bundle result1 = ourClient
 			.search()
 			.forResource("Organization")
 			.where(Organization.NAME.matches().value("HELLO"))
@@ -3303,7 +3432,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		});
 		Date lastReturned1 = search1.getSearchLastReturned();
 
-		Bundle result2 = myClient
+		Bundle result2 = ourClient
 			.search()
 			.forResource("Organization")
 			.where(Organization.NAME.matches().value("HELLO"))
@@ -3324,7 +3453,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Thread.sleep(1500);
 
-		Bundle result3 = myClient
+		Bundle result3 = ourClient
 			.search()
 			.forResource("Organization")
 			.where(Organization.NAME.matches().value("HELLO"))
@@ -3346,11 +3475,11 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			org.setName("HELLO");
 			resources.add(org);
 		}
-		myClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
+		ourClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
 
 		myDaoConfig.setReuseCachedSearchResultsForMillis(100000L);
 
-		Bundle result1 = myClient
+		Bundle result1 = ourClient
 			.search()
 			.forResource("Organization")
 			.returnBundle(Bundle.class)
@@ -3365,7 +3494,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		});
 		Date lastReturned1 = search1.getSearchLastReturned();
 
-		Bundle result2 = myClient
+		Bundle result2 = ourClient
 			.search()
 			.forResource("Organization")
 			.returnBundle(Bundle.class)
@@ -3393,9 +3522,9 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient patient = new Patient();
 		patient.addIdentifier().setSystem("urn:system2").setValue("testSearchTokenParam002");
 		patient.addName().setFamily("Tester").addGiven("testSearchTokenParam2");
-		myClient.create().resource(patient).execute();
+		ourClient.create().resource(patient).execute();
 
-		Bundle response = myClient
+		Bundle response = ourClient
 			.search()
 			.forResource(Patient.class)
 			.returnBundle(Bundle.class)
@@ -3403,14 +3532,14 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		patient = (Patient) response.getEntry().get(0).getResource();
 
-		myClient
+		ourClient
 			.meta()
 			.add()
 			.onResource(patient.getIdElement())
 			.meta(new Meta().addTag("http://system", "tag1", "display"))
 			.execute();
 
-		response = myClient
+		response = ourClient
 			.search()
 			.forResource(Patient.class)
 			.returnBundle(Bundle.class)
@@ -3439,7 +3568,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		patient.addName().setFamily("Tester").addGiven("testSearchTokenParam2");
 		myPatientDao.create(patient, mySrd);
 
-		Bundle response = myClient
+		Bundle response = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(Patient.IDENTIFIER.hasSystemWithAnyCode("urn:system"))
@@ -3457,14 +3586,14 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		for (int i = 0; i < 10; i++) {
 			Patient pat = new Patient();
 			pat.addIdentifier().setSystem("urn:system:rpdstu2").setValue("test" + i);
-			myClient.create().resource(pat).execute();
+			ourClient.create().resource(pat).execute();
 		}
 
 		StopWatch sw = new StopWatch();
 
 		ourLog.info("** About to search with count of 1");
 
-		Bundle found = myClient
+		Bundle found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.returnBundle(Bundle.class)
@@ -3500,12 +3629,12 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		for (int i = 0; i < 10; i++) {
 			Patient pat = new Patient();
 			pat.addIdentifier().setSystem("urn:system:rpdstu2").setValue("test" + i);
-			myClient.create().resource(pat).execute();
+			ourClient.create().resource(pat).execute();
 		}
 
 		StopWatch sw = new StopWatch();
 
-		Bundle found = myClient
+		Bundle found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.returnBundle(Bundle.class)
@@ -3528,12 +3657,12 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		for (int i = 0; i < 10; i++) {
 			Patient pat = new Patient();
 			pat.addIdentifier().setSystem("urn:system:rpdstu2").setValue("test" + i);
-			myClient.create().resource(pat).execute();
+			ourClient.create().resource(pat).execute();
 		}
 
 		StopWatch sw = new StopWatch();
 
-		Bundle found = myClient
+		Bundle found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.returnBundle(Bundle.class)
@@ -3559,7 +3688,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Observation obs = new Observation();
 		obs.setStatus(ObservationStatus.FINAL);
 		obs.getCode().addCoding().setSystem("foo").setCode("bar");
-		myClient.create().resource(obs).execute();
+		ourClient.create().resource(obs).execute();
 
 		testSearchWithEmptyParameter("/Observation?value-quantity=");
 		testSearchWithEmptyParameter("/Observation?code=bar&value-quantity=");
@@ -3571,14 +3700,11 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 	private void testSearchWithEmptyParameter(String url) throws IOException {
 		HttpGet get = new HttpGet(ourServerBase + url);
-		CloseableHttpResponse resp = ourHttpClient.execute(get);
-		try {
+		try (CloseableHttpResponse resp = ourHttpClient.execute(get)) {
 			assertEquals(200, resp.getStatusLine().getStatusCode());
 			String respString = IOUtils.toString(resp.getEntity().getContent(), Constants.CHARSET_UTF8);
 			Bundle bundle = myFhirCtx.newXmlParser().parseResource(Bundle.class, respString);
 			assertEquals(1, bundle.getEntry().size());
-		} finally {
-			IOUtils.closeQuietly(resp.getEntity().getContent());
 		}
 	}
 
@@ -3586,14 +3712,14 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testSearchWithInclude() {
 		Organization org = new Organization();
 		org.addIdentifier().setSystem("urn:system:rpdstu2").setValue("testSearchWithInclude01");
-		IdType orgId = (IdType) myClient.create().resource(org).prettyPrint().encodedXml().execute().getId();
+		IdType orgId = (IdType) ourClient.create().resource(org).prettyPrint().encodedXml().execute().getId();
 
 		Patient pat = new Patient();
 		pat.addIdentifier().setSystem("urn:system:rpdstu2").setValue("testSearchWithInclude02");
 		pat.getManagingOrganization().setReferenceElement(orgId.toUnqualifiedVersionless());
-		myClient.create().resource(pat).prettyPrint().encodedXml().execute().getId();
+		ourClient.create().resource(pat).prettyPrint().encodedXml().execute().getId();
 
-		Bundle found = myClient
+		Bundle found = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(Patient.IDENTIFIER.exactly().systemAndIdentifier("urn:system:rpdstu2", "testSearchWithInclude02"))
@@ -3612,7 +3738,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	@Test()
 	public void testSearchWithInvalidNumberPrefix() {
 		try {
-			myClient
+			ourClient
 				.search()
 				.forResource(ImmunizationRecommendation.class)
 				.where(ImmunizationRecommendation.DOSE_NUMBER.withPrefix(ParamPrefixEnum.ENDS_BEFORE).number(100))
@@ -3632,7 +3758,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		myObservationDao.create(o, mySrd);
 		try {
 			//@formatter:off
-			myClient
+			ourClient
 				.search()
 				.forResource(Observation.class)
 				.where(Observation.VALUE_QUANTITY.withPrefix(ParamPrefixEnum.ENDS_BEFORE).number(100).andNoUnits())
@@ -3652,7 +3778,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		o.getCode().setText("testSearchWithInvalidSort");
 		myObservationDao.create(o, mySrd);
 		//@formatter:off
-		myClient
+		ourClient
 			.search()
 			.forResource(Observation.class)
 			.sort().ascending(Observation.CODE_VALUE_QUANTITY) // composite sort not supported yet
@@ -3669,13 +3795,13 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		String methodName = "testSearchWithMissing";
 
 		Organization org = new Organization();
-		IIdType deletedIdMissingTrue = myClient.create().resource(org).execute().getId().toUnqualifiedVersionless();
-		myClient.delete().resourceById(deletedIdMissingTrue).execute();
+		IIdType deletedIdMissingTrue = ourClient.create().resource(org).execute().getId().toUnqualifiedVersionless();
+		ourClient.delete().resourceById(deletedIdMissingTrue).execute();
 
 		org = new Organization();
 		org.setName("Help I'm a Bug");
-		IIdType deletedIdMissingFalse = myClient.create().resource(org).execute().getId().toUnqualifiedVersionless();
-		myClient.delete().resourceById(deletedIdMissingFalse).execute();
+		IIdType deletedIdMissingFalse = ourClient.create().resource(org).execute().getId().toUnqualifiedVersionless();
+		ourClient.delete().resourceById(deletedIdMissingFalse).execute();
 
 		List<IBaseResource> resources = new ArrayList<>();
 		for (int i = 0; i < 20; i++) {
@@ -3683,20 +3809,20 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 			org.setName(methodName + "_0" + i);
 			resources.add(org);
 		}
-		myClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
+		ourClient.transaction().withResources(resources).prettyPrint().encodedXml().execute();
 
 		org = new Organization();
 		org.addIdentifier().setSystem("urn:system:rpdstu2").setValue(methodName + "01");
 		org.setName(methodName + "name");
-		IIdType orgNotMissing = myClient.create().resource(org).prettyPrint().encodedXml().execute().getId().toUnqualifiedVersionless();
+		IIdType orgNotMissing = ourClient.create().resource(org).prettyPrint().encodedXml().execute().getId().toUnqualifiedVersionless();
 
 		org = new Organization();
 		org.addIdentifier().setSystem("urn:system:rpdstu2").setValue(methodName + "01");
-		IIdType orgMissing = myClient.create().resource(org).prettyPrint().encodedXml().execute().getId().toUnqualifiedVersionless();
+		IIdType orgMissing = ourClient.create().resource(org).prettyPrint().encodedXml().execute().getId().toUnqualifiedVersionless();
 
 		{
 			//@formatter:off
-			Bundle found = myClient
+			Bundle found = ourClient
 				.search()
 				.forResource(Organization.class)
 				.where(Organization.NAME.isMissing(false))
@@ -3715,7 +3841,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 
 		//@formatter:off
-		Bundle found = myClient
+		Bundle found = ourClient
 			.search()
 			.forResource(Organization.class)
 			.where(Organization.NAME.isMissing(true))
@@ -3803,7 +3929,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Observation obs = new Observation();
 		obs.getCode().setText("THIS_IS_THE_TEXT");
 		obs.getCode().addCoding().setSystem("SYSTEM").setCode("CODE").setDisplay("THIS_IS_THE_DISPLAY");
-		myClient.create().resource(obs).execute();
+		ourClient.create().resource(obs).execute();
 
 		testSearchReturnsResults("/Observation?code%3Atext=THIS_IS_THE_TEXT");
 		testSearchReturnsResults("/Observation?code%3Atext=THIS_IS_THE_");
@@ -3816,25 +3942,25 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testSelfReferentialInclude() {
 		Location loc1 = new Location();
 		loc1.setName("loc1");
-		IIdType loc1id = myClient.create().resource(loc1).execute().getId().toUnqualifiedVersionless();
+		IIdType loc1id = ourClient.create().resource(loc1).execute().getId().toUnqualifiedVersionless();
 
 		Location loc2 = new Location();
 		loc2.setName("loc2");
-		IIdType loc2id = myClient.create().resource(loc2).execute().getId().toUnqualifiedVersionless();
+		IIdType loc2id = ourClient.create().resource(loc2).execute().getId().toUnqualifiedVersionless();
 
 		loc1 = new Location();
 		loc1.setId(loc1id);
 		loc1.setName("loc1");
 		loc1.getPartOf().setReference(loc2id.getValue());
-		myClient.update().resource(loc1).execute().getId().toUnqualifiedVersionless();
+		ourClient.update().resource(loc1).execute().getId().toUnqualifiedVersionless();
 
 		loc2 = new Location();
 		loc2.setId(loc2id);
 		loc2.setName("loc2");
 		loc2.getPartOf().setReference(loc1id.getValue());
-		myClient.update().resource(loc2).execute().getId().toUnqualifiedVersionless();
+		ourClient.update().resource(loc2).execute().getId().toUnqualifiedVersionless();
 
-		IBaseBundle result = myClient
+		IBaseBundle result = ourClient
 			.search()
 			.forResource(Location.class)
 			.where(Location.NAME.matches().value("loc1"))
@@ -3847,25 +3973,25 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	public void testSelfReferentialRevInclude() {
 		Location loc1 = new Location();
 		loc1.setName("loc1");
-		IIdType loc1id = myClient.create().resource(loc1).execute().getId().toUnqualifiedVersionless();
+		IIdType loc1id = ourClient.create().resource(loc1).execute().getId().toUnqualifiedVersionless();
 
 		Location loc2 = new Location();
 		loc2.setName("loc2");
-		IIdType loc2id = myClient.create().resource(loc2).execute().getId().toUnqualifiedVersionless();
+		IIdType loc2id = ourClient.create().resource(loc2).execute().getId().toUnqualifiedVersionless();
 
 		loc1 = new Location();
 		loc1.setId(loc1id);
 		loc1.setName("loc1");
 		loc1.getPartOf().setReference(loc2id.getValue());
-		myClient.update().resource(loc1).execute().getId().toUnqualifiedVersionless();
+		ourClient.update().resource(loc1).execute().getId().toUnqualifiedVersionless();
 
 		loc2 = new Location();
 		loc2.setId(loc2id);
 		loc2.setName("loc2");
 		loc2.getPartOf().setReference(loc1id.getValue());
-		myClient.update().resource(loc2).execute().getId().toUnqualifiedVersionless();
+		ourClient.update().resource(loc2).execute().getId().toUnqualifiedVersionless();
 
-		IBaseBundle result = myClient
+		IBaseBundle result = ourClient
 			.search()
 			.forResource(Location.class)
 			.where(Location.NAME.matches().value("loc1"))
@@ -3879,15 +4005,15 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p = new Patient();
 		p.setId("p");
 		p.setActive(true);
-		myClient.update().resource(p).execute();
+		ourClient.update().resource(p).execute();
 
 		CarePlan cp = new CarePlan();
 		cp.setId("cp");
 		cp.getSubject().setResource(p);
 		cp.addActivity().getDetail().getCode().addCoding().setSystem("FOO").setCode("BAR");
-		myClient.update().resource(cp).execute();
+		ourClient.update().resource(cp).execute();
 
-		Bundle b = myClient
+		Bundle b = ourClient
 			.search()
 			.forResource(CarePlan.class)
 			.where(CarePlan.ACTIVITY_CODE.exactly().systemAndCode("FOO", "BAR"))
@@ -3910,89 +4036,89 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Daniel").setFamily("Adams");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Aaron").setFamily("Alexis");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Carol").setFamily("Allen");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Ruth").setFamily("Black");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Brian").setFamily("Brooks");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Susan").setFamily("Clark");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Amy").setFamily("Clark");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Anthony").setFamily("Coleman");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Steven").setFamily("Coleman");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Lisa").setFamily("Coleman");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Ruth").setFamily("Cook");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Betty").setFamily("Davis");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Joshua").setFamily("Diaz");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Brian").setFamily("Gracia");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Stephan").setFamily("Graham");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		p = new Patient();
 		p.addIdentifier().setSystem("urn:system").setValue(methodName);
 		p.addName().addGiven("Sarah").setFamily("Graham");
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
-		Bundle resp = myClient
+		Bundle resp = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", methodName))
@@ -4034,7 +4160,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Organization org = new Organization();
 		org.setName("測試醫院");
 		org.addIdentifier().setSystem("urn:system").setValue("testStoreUtf8Characters_01");
-		IdType orgId = (IdType) myClient.create().resource(org).prettyPrint().encodedXml().execute().getId();
+		IdType orgId = (IdType) ourClient.create().resource(org).prettyPrint().encodedXml().execute().getId();
 
 		// Read back directly from the DAO
 		{
@@ -4045,7 +4171,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		}
 		// Read back through the HTTP API
 		{
-			Organization returned = myClient.read(Organization.class, orgId.getIdPart());
+			Organization returned = ourClient.read(Organization.class, orgId.getIdPart());
 			String val = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(returned);
 			ourLog.info(val);
 			assertThat(val, containsString("<name value=\"測試醫院\"/>"));
@@ -4075,7 +4201,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		p1.setManagingOrganization(new Reference("Organization/99999999999"));
 
 		try {
-			myClient.create().resource(p1).execute().getId();
+			ourClient.create().resource(p1).execute().getId();
 			fail();
 		} catch (InvalidRequestException e) {
 			assertThat(e.getMessage(), containsString("Organization/99999999999"));
@@ -4161,7 +4287,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p1 = new Patient();
 		p1.addIdentifier().setSystem("urn:system").setValue("testUpdateRejectsInvalidTypes");
 		p1.addName().setFamily("Tester").addGiven("testUpdateRejectsInvalidTypes");
-		IdType p1id = (IdType) myClient.create().resource(p1).execute().getId();
+		IdType p1id = (IdType) ourClient.create().resource(p1).execute().getId();
 
 		// Try to update with the wrong ID in the resource body
 		p1.setId("FOO");
@@ -4222,20 +4348,20 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p1 = new Patient();
 		p1.addIdentifier().setSystem("urn:system").setValue("testUpdateRejectsInvalidTypes");
 		p1.addName().setFamily("Tester").addGiven("testUpdateRejectsInvalidTypes");
-		IdType p1id = (IdType) myClient.create().resource(p1).execute().getId();
+		IdType p1id = (IdType) ourClient.create().resource(p1).execute().getId();
 
 		Organization p2 = new Organization();
 		p2.setId(p1id.getIdPart());
 		p2.getNameElement().setValue("testUpdateRejectsInvalidTypes");
 		try {
-			myClient.update().resource(p2).withId("Organization/" + p1id.getIdPart()).execute();
+			ourClient.update().resource(p2).withId("Organization/" + p1id.getIdPart()).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			// good
 		}
 
 		try {
-			myClient.update().resource(p2).withId("Patient/" + p1id.getIdPart()).execute();
+			ourClient.update().resource(p2).withId("Patient/" + p1id.getIdPart()).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			// good
@@ -4411,14 +4537,14 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		Patient p1 = new Patient();
 		p1.addIdentifier().setSystem("urn:system").setValue("testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2");
 
-		MethodOutcome outcome = myClient.update().resource(p1).withId("testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2").execute();
+		MethodOutcome outcome = ourClient.update().resource(p1).withId("testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2").execute();
 		assertEquals(true, outcome.getCreated().booleanValue());
 		IdType p1Id = (IdType) outcome.getId();
 
 		assertThat(p1Id.getValue(), containsString("Patient/testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2/_history"));
 
 		//@formatter:off
-		Bundle actual = myClient
+		Bundle actual = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:system", "testUpdateWithClientSuppliedIdWhichDoesntExistRpDstu2"))
@@ -4439,7 +4565,7 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 
 		Patient pt = new Patient();
 		pt.addName().setFamily(methodName);
-		IIdType id = myClient.create().resource(pt).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(pt).execute().getId().toUnqualifiedVersionless();
 
 		pt.addName().setFamily("FAM2");
 		pt.setId(id.toUnqualifiedVersionless());
@@ -4504,12 +4630,12 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 		String input = IOUtils.toString(getClass().getResourceAsStream("/dstu3-person.json"), StandardCharsets.UTF_8);
 
 		try {
-			MethodOutcome resp = myClient.update().resource(input).withId("Patient/PERSON1").execute();
+			MethodOutcome resp = ourClient.update().resource(input).withId("Patient/PERSON1").execute();
 		} catch (InvalidRequestException e) {
 			assertEquals("", e.getMessage());
 		}
 
-		MethodOutcome resp = myClient.update().resource(input).withId("Person/PERSON1").execute();
+		MethodOutcome resp = ourClient.update().resource(input).withId("Person/PERSON1").execute();
 		assertEquals("Person/PERSON1/_history/1", resp.getId().toUnqualified().getValue());
 	}
 
@@ -4718,10 +4844,10 @@ public class ResourceProviderR4Test extends BaseResourceProviderR4Test {
 	@Test
 	public void testValueSetExpandOperation() throws IOException {
 		CodeSystem cs = myFhirCtx.newXmlParser().parseResource(CodeSystem.class, new InputStreamReader(ResourceProviderR4Test.class.getResourceAsStream("/extensional-case-3-cs.xml")));
-		myClient.create().resource(cs).execute();
+		ourClient.create().resource(cs).execute();
 
 		ValueSet upload = myFhirCtx.newXmlParser().parseResource(ValueSet.class, new InputStreamReader(ResourceProviderR4Test.class.getResourceAsStream("/extensional-case-3-vs.xml")));
-		IIdType vsid = myClient.create().resource(upload).execute().getId().toUnqualifiedVersionless();
+		IIdType vsid = ourClient.create().resource(upload).execute().getId().toUnqualifiedVersionless();
 
 		HttpGet get = new HttpGet(ourServerBase + "/ValueSet/" + vsid.getIdPart() + "/$expand");
 		CloseableHttpResponse response = ourHttpClient.execute(get);
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4ValueSetTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4ValueSetTest.java
index df5af636f79..e2cbb97fd56 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4ValueSetTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ResourceProviderR4ValueSetTest.java
@@ -10,8 +10,11 @@ import ca.uhn.fhir.jpa.term.IHapiTerminologySvc;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
 import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.UrlUtil;
+import com.google.common.base.Charsets;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
@@ -72,7 +75,6 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	}
 
 	private void createLocalCsAndVs() {
-		//@formatter:off
 		CodeSystem codeSystem = new CodeSystem();
 		codeSystem.setUrl(URL_MY_CODE_SYSTEM);
 		codeSystem.setContent(CodeSystemContentMode.COMPLETE);
@@ -86,10 +88,17 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 			.addConcept().setCode("B").setDisplay("Code B")
 			.addConcept(new ConceptDefinitionComponent().setCode("BA").setDisplay("Code BA"))
 			.addConcept(new ConceptDefinitionComponent().setCode("BB").setDisplay("Code BB"));
-		//@formatter:on
 		myCodeSystemDao.create(codeSystem, mySrd);
+	}
 
-		createLocalVs(codeSystem);
+	private void createLocalVsWithIncludeConcept() {
+		myLocalVs = new ValueSet();
+		myLocalVs.setUrl(URL_MY_VALUE_SET);
+		ConceptSetComponent include = myLocalVs.getCompose().addInclude();
+		include.setSystem(URL_MY_CODE_SYSTEM);
+		include.addConcept().setCode("A");
+		include.addConcept().setCode("AA");
+		myLocalValueSetId = myValueSetDao.create(myLocalVs, mySrd).getId().toUnqualifiedVersionless();
 	}
 
 	private void createLocalVs(CodeSystem codeSystem) {
@@ -97,7 +106,7 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 		myLocalVs.setUrl(URL_MY_VALUE_SET);
 		ConceptSetComponent include = myLocalVs.getCompose().addInclude();
 		include.setSystem(codeSystem.getUrl());
-		include.addFilter().setProperty("concept").setOp(FilterOperator.ISA).setValue("childAA");
+		include.addFilter().setProperty("concept").setOp(FilterOperator.ISA).setValue("ParentA");
 		myLocalValueSetId = myValueSetDao.create(myLocalVs, mySrd).getId().toUnqualifiedVersionless();
 	}
 
@@ -119,9 +128,9 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	}
 
 	@Test
-	public void testExpandById() throws IOException {
+	public void testExpandById() {
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onInstance(myExtensionalVsId)
 			.named("expand")
@@ -149,10 +158,10 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	}
 
 	@Test
-	public void testExpandByIdWithFilter() throws IOException {
+	public void testExpandByIdWithFilter() {
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onInstance(myExtensionalVsId)
 			.named("expand")
@@ -170,7 +179,7 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testExpandByUrl() {
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(ValueSet.class)
 			.named("expand")
@@ -190,7 +199,7 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	public void testExpandByValueSet() throws IOException {
 		ValueSet toExpand = loadResourceFromClasspath(ValueSet.class, "/extensional-case-3-vs.xml");
 
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(ValueSet.class)
 			.named("expand")
@@ -208,12 +217,12 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 
 
 	@Test
-	public void testExpandInlineVsAgainstBuiltInCs() throws IOException {
+	public void testExpandInlineVsAgainstBuiltInCs() {
 		createLocalVsPointingAtBuiltInCodeSystem();
 		assertNotNull(myLocalValueSetId);
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(ValueSet.class)
 			.named("expand")
@@ -229,13 +238,13 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	}
 
 	@Test
-	public void testExpandInlineVsAgainstExternalCs() throws IOException {
+	public void testExpandInlineVsAgainstExternalCs() {
 		createExternalCsAndLocalVs();
 		assertNotNull(myLocalVs);
 		myLocalVs.setId("");
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(ValueSet.class)
 			.named("expand")
@@ -257,7 +266,7 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	public void testExpandInvalidParams() throws IOException {
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onType(ValueSet.class)
 				.named("expand")
@@ -272,7 +281,7 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 		//@formatter:off
 		try {
 			ValueSet toExpand = loadResourceFromClasspath(ValueSet.class, "/r4/extensional-case-r4.xml");
-			myClient
+			ourClient
 				.operation()
 				.onType(ValueSet.class)
 				.named("expand")
@@ -288,7 +297,7 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 		//@formatter:off
 		try {
 			ValueSet toExpand = loadResourceFromClasspath(ValueSet.class, "/r4/extensional-case.xml");
-			myClient
+			ourClient
 				.operation()
 				.onInstance(myExtensionalVsId)
 				.named("expand")
@@ -304,12 +313,12 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	}
 
 	@Test
-	public void testExpandLocalVsAgainstBuiltInCs() throws IOException {
+	public void testExpandLocalVsAgainstBuiltInCs() {
 		createLocalVsPointingAtBuiltInCodeSystem();
 		assertNotNull(myLocalValueSetId);
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onInstance(myLocalValueSetId)
 			.named("expand")
@@ -325,12 +334,12 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	}
 
 	@Test
-	public void testExpandLocalVsAgainstExternalCs() throws IOException {
+	public void testExpandLocalVsAgainstExternalCs() {
 		createExternalCsAndLocalVs();
 		assertNotNull(myLocalValueSetId);
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onInstance(myLocalValueSetId)
 			.named("expand")
@@ -349,12 +358,12 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	}
 
 	@Test
-	public void testExpandLocalVsCanonicalAgainstExternalCs() throws IOException {
+	public void testExpandLocalVsCanonicalAgainstExternalCs() {
 		createExternalCsAndLocalVs();
 		assertNotNull(myLocalValueSetId);
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(ValueSet.class)
 			.named("expand")
@@ -373,13 +382,13 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 	}
 
 	@Test
-	public void testExpandLocalVsWithUnknownCode() throws IOException {
+	public void testExpandLocalVsWithUnknownCode() {
 		createExternalCsAndLocalVsWithUnknownCode();
 		assertNotNull(myLocalValueSetId);
 
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onInstance(myLocalValueSetId)
 				.named("expand")
@@ -400,8 +409,7 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 		HttpPost post = new HttpPost(ourServerBase + "/ValueSet/%24expand");
 		post.setEntity(new StringEntity(string, ContentType.parse(ca.uhn.fhir.rest.api.Constants.CT_FHIR_JSON_NEW)));
 
-		CloseableHttpResponse resp = ourHttpClient.execute(post);
-		try {
+		try (CloseableHttpResponse resp = ourHttpClient.execute(post)) {
 
 			String respString = IOUtils.toString(resp.getEntity().getContent(), StandardCharsets.UTF_8);
 			ourLog.info(respString);
@@ -411,22 +419,19 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 			assertEquals(400, resp.getStatusLine().getStatusCode());
 			assertThat(respString, containsString("Unknown FilterOperator code 'n'"));
 
-		} finally {
-			IOUtils.closeQuietly(resp);
 		}
 	}
 
 	@Test
 	public void testValidateCodeOperationByCodeAndSystemInstance() {
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onInstance(myExtensionalVsId)
 			.named("validate-code")
 			.withParameter(Parameters.class, "code", new CodeType("8495-4"))
 			.andParameter("system", new UriType("http://acme.org"))
 			.execute();
-		//@formatter:on
 
 		String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
 		ourLog.info(resp);
@@ -434,17 +439,59 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 		assertEquals(true, ((BooleanType) respParam.getParameter().get(0).getValue()).booleanValue());
 	}
 
+	@Test
+	public void testValidateCodeOperationByCodeAndSystemInstanceOnType() throws IOException {
+		createLocalCsAndVs();
+
+		String url = ourServerBase +
+			"/ValueSet/$validate-code?system=" +
+			UrlUtil.escapeUrlParam(URL_MY_CODE_SYSTEM) +
+			"&code=AA";
+
+		HttpGet request = new HttpGet(url);
+		request.addHeader("Accept", "application/fhir+json");
+		try (CloseableHttpResponse response = ourHttpClient.execute(request)) {
+			String respString = IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(respString);
+
+			Parameters respParam = myFhirCtx.newJsonParser().parseResource(Parameters.class, respString);
+			assertTrue(((BooleanType) respParam.getParameter().get(0).getValue()).booleanValue());
+		}
+	}
+
+	@Test
+	public void testValidateCodeOperationByCodeAndSystemInstanceOnInstance() throws IOException {
+		createLocalCsAndVs();
+		createLocalVsWithIncludeConcept();
+
+		String url = ourServerBase +
+			"/ValueSet/" + myLocalValueSetId.getIdPart() + "/$validate-code?system=" +
+			UrlUtil.escapeUrlParam(URL_MY_CODE_SYSTEM) +
+			"&code=AA";
+
+		ourLog.info("* Requesting: {}", url);
+
+		HttpGet request = new HttpGet(url);
+		request.addHeader("Accept", "application/fhir+json");
+		try (CloseableHttpResponse response = ourHttpClient.execute(request)) {
+			String respString = IOUtils.toString(response.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(respString);
+
+			Parameters respParam = myFhirCtx.newJsonParser().parseResource(Parameters.class, respString);
+			assertTrue(((BooleanType) respParam.getParameter().get(0).getValue()).booleanValue());
+		}
+	}
+
 	@Test
 	public void testValidateCodeOperationByCodeAndSystemType() {
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(ValueSet.class)
 			.named("validate-code")
 			.withParameter(Parameters.class, "code", new CodeType("8450-9"))
 			.andParameter("system", new UriType("http://acme.org"))
 			.execute();
-		//@formatter:on
 
 		String resp = myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(respParam);
 		ourLog.info(resp);
@@ -454,7 +501,7 @@ public class ResourceProviderR4ValueSetTest extends BaseResourceProviderR4Test {
 
 	@Test
 	public void testValiedateCodeAgainstBuiltInSystem() {
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onType(ValueSet.class)
 			.named("validate-code")
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ServerR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ServerR4Test.java
index ca9766e73f3..d80dd679964 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ServerR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/ServerR4Test.java
@@ -65,7 +65,7 @@ public class ServerR4Test extends BaseResourceProviderR4Test {
 	public void testMetadataIncludesResourceCounts() {
 		Patient p = new Patient();
 		p.setActive(true);
-		myClient.create().resource(p).execute();
+		ourClient.create().resource(p).execute();
 
 		/*
 		 * Initial fetch after a clear should return
@@ -73,7 +73,7 @@ public class ServerR4Test extends BaseResourceProviderR4Test {
 		 */
 		ourResourceCountsCache.clear();
 
-		CapabilityStatement capabilityStatement = myClient
+		CapabilityStatement capabilityStatement = ourClient
 			.capabilities()
 			.ofType(CapabilityStatement.class)
 			.execute();
@@ -95,7 +95,7 @@ public class ServerR4Test extends BaseResourceProviderR4Test {
 		 */
 		ourResourceCountsCache.update();
 
-		capabilityStatement = myClient
+		capabilityStatement = ourClient
 			.capabilities()
 			.ofType(CapabilityStatement.class)
 			.execute();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/StaleSearchDeletingSvcR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/StaleSearchDeletingSvcR4Test.java
index 998e8250a57..8334a1d3bd8 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/StaleSearchDeletingSvcR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/StaleSearchDeletingSvcR4Test.java
@@ -56,7 +56,7 @@ public class StaleSearchDeletingSvcR4Test extends BaseResourceProviderR4Test {
 		}
 
 		//@formatter:off
-		IClientExecutable<IQuery<Bundle>, Bundle> search = myClient
+		IClientExecutable<IQuery<Bundle>, Bundle> search = ourClient
 			.search()
 			.forResource(Patient.class)
 			.where(Patient.NAME.matches().value("Everything"))
@@ -74,12 +74,12 @@ public class StaleSearchDeletingSvcR4Test extends BaseResourceProviderR4Test {
 		String nextLinkUrl = nextLink.getUrl();
 		assertThat(nextLinkUrl, not(blankOrNullString()));
 
-		Bundle resp2 = myClient.search().byUrl(nextLinkUrl).returnBundle(Bundle.class).execute();
+		Bundle resp2 = ourClient.search().byUrl(nextLinkUrl).returnBundle(Bundle.class).execute();
 		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(resp2));
 
 		myStaleSearchDeletingSvc.pollForStaleSearchesAndDeleteThem();
 
-		myClient.search().byUrl(nextLinkUrl).returnBundle(Bundle.class).execute();
+		ourClient.search().byUrl(nextLinkUrl).returnBundle(Bundle.class).execute();
 
 		Thread.sleep(20);
 		myDaoConfig.setExpireSearchResultsAfterMillis(10);
@@ -87,7 +87,7 @@ public class StaleSearchDeletingSvcR4Test extends BaseResourceProviderR4Test {
 		myStaleSearchDeletingSvc.pollForStaleSearchesAndDeleteThem();
 
 		try {
-			myClient.search().byUrl(nextLinkUrl).returnBundle(Bundle.class).execute();
+			ourClient.search().byUrl(nextLinkUrl).returnBundle(Bundle.class).execute();
 			fail();
 		} catch (ResourceGoneException e) {
 			assertThat(e.getMessage(), containsString("does not exist and may have expired"));
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/SubscriptionsR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/SubscriptionsR4Test.java
index 8724c3fdffa..eac3edd6280 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/SubscriptionsR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/SubscriptionsR4Test.java
@@ -57,7 +57,7 @@ public class SubscriptionsR4Test extends BaseResourceProviderR4Test {
 		subs.getChannel().setEndpoint("http://localhost:8888");
 		subs.setCriteria("Observation?identifier=123");
 		try {
-			myClient.create().resource(subs).execute();
+			ourClient.create().resource(subs).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertThat(e.getMessage(), containsString("Subscription.status must be populated on this server"));
@@ -65,14 +65,14 @@ public class SubscriptionsR4Test extends BaseResourceProviderR4Test {
 
 		subs.setId("ABC");
 		try {
-			myClient.update().resource(subs).execute();
+			ourClient.update().resource(subs).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertThat(e.getMessage(), containsString("Subscription.status must be populated on this server"));
 		}
 
 		subs.setStatus(SubscriptionStatus.REQUESTED);
-		myClient.update().resource(subs).execute();
+		ourClient.update().resource(subs).execute();
 	}
 
 	@Test
@@ -84,7 +84,7 @@ public class SubscriptionsR4Test extends BaseResourceProviderR4Test {
 		subs.setStatus(SubscriptionStatus.ACTIVE);
 		subs.setCriteria("Observation?identifier=123");
 		try {
-			myClient.create().resource(subs).execute();
+			ourClient.create().resource(subs).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertEquals("HTTP 422 Unprocessable Entity: Subscription.status must be 'off' or 'requested' on a newly created subscription", e.getMessage());
@@ -92,7 +92,7 @@ public class SubscriptionsR4Test extends BaseResourceProviderR4Test {
 
 		subs.setId("ABC");
 		try {
-			myClient.update().resource(subs).execute();
+			ourClient.update().resource(subs).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertEquals("HTTP 422 Unprocessable Entity: Subscription.status must be 'off' or 'requested' on a newly created subscription", e.getMessage());
@@ -109,13 +109,13 @@ public class SubscriptionsR4Test extends BaseResourceProviderR4Test {
 		subs.getChannel().setEndpoint("http://localhost:8888");
 		subs.setStatus(SubscriptionStatus.REQUESTED);
 		subs.setCriteria("Observation?identifier=123");
-		IIdType id = myClient.create().resource(subs).execute().getId().toUnqualifiedVersionless();
+		IIdType id = ourClient.create().resource(subs).execute().getId().toUnqualifiedVersionless();
 
 		subs.setId(id);
 
 		try {
 			subs.setStatus(SubscriptionStatus.ACTIVE);
-			myClient.update().resource(subs).execute();
+			ourClient.update().resource(subs).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertEquals("HTTP 422 Unprocessable Entity: Subscription.status can not be changed from 'requested' to 'active'", e.getMessage());
@@ -123,7 +123,7 @@ public class SubscriptionsR4Test extends BaseResourceProviderR4Test {
 
 		try {
 			subs.setStatus((SubscriptionStatus) null);
-			myClient.update().resource(subs).execute();
+			ourClient.update().resource(subs).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertThat(e.getMessage(), containsString("Subscription.status must be populated on this server"));
@@ -141,12 +141,12 @@ public class SubscriptionsR4Test extends BaseResourceProviderR4Test {
 		subs.getChannel().setEndpoint("http://localhost:8888");
 		subs.setCriteria("Observation?identifier=123");
 		subs.setStatus(SubscriptionStatus.REQUESTED);
-		IIdType id = myClient.create().resource(subs).execute().getId();
+		IIdType id = ourClient.create().resource(subs).execute().getId();
 		subs.setId(id);
 
 		try {
 			subs.setStatus(SubscriptionStatus.ACTIVE);
-			myClient.update().resource(subs).execute();
+			ourClient.update().resource(subs).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertEquals("HTTP 422 Unprocessable Entity: Subscription.status can not be changed from 'requested' to 'active'", e.getMessage());
@@ -154,14 +154,14 @@ public class SubscriptionsR4Test extends BaseResourceProviderR4Test {
 
 		try {
 			subs.setStatus((SubscriptionStatus) null);
-			myClient.update().resource(subs).execute();
+			ourClient.update().resource(subs).execute();
 			fail();
 		} catch (UnprocessableEntityException e) {
 			assertThat(e.getMessage(), containsString("Subscription.status must be populated on this server"));
 		}
 
 		subs.setStatus(SubscriptionStatus.OFF);
-		myClient.update().resource(subs).execute();
+		ourClient.update().resource(subs).execute();
 	}
 
 	@AfterClass
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/TerminologyUploaderProviderR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/TerminologyUploaderProviderR4Test.java
index 560b3b082db..a58a970dbc2 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/TerminologyUploaderProviderR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/provider/r4/TerminologyUploaderProviderR4Test.java
@@ -1,5 +1,6 @@
 package ca.uhn.fhir.jpa.provider.r4;
 
+import ca.uhn.fhir.jpa.provider.dstu3.TerminologyUploaderProviderDstu3Test;
 import ca.uhn.fhir.jpa.term.IHapiTerminologyLoaderSvc;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.util.TestUtil;
@@ -25,19 +26,6 @@ public class TerminologyUploaderProviderR4Test extends BaseResourceProviderR4Tes
 
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(TerminologyUploaderProviderR4Test.class);
 
-	private byte[] createLoincZip() throws IOException {
-		ByteArrayOutputStream bos = new ByteArrayOutputStream();
-		ZipOutputStream zos = new ZipOutputStream(bos);
-
-		zos.putNextEntry(new ZipEntry("Loinc.csv"));
-		zos.write(IOUtils.toByteArray(getClass().getResourceAsStream("/loinc/Loinc.csv")));
-		zos.putNextEntry(new ZipEntry("MultiAxialHierarchy.csv"));
-		zos.write(IOUtils.toByteArray(getClass().getResourceAsStream("/loinc/MultiAxialHierarchy.csv")));
-		zos.close();
-
-		byte[] packageBytes = bos.toByteArray();
-		return packageBytes;
-	}
 
 	private byte[] createSctZip() throws IOException {
 		ByteArrayOutputStream bos = new ByteArrayOutputStream();
@@ -59,7 +47,7 @@ public class TerminologyUploaderProviderR4Test extends BaseResourceProviderR4Tes
 
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onServer()
 				.named("upload-external-code-system")
@@ -75,10 +63,10 @@ public class TerminologyUploaderProviderR4Test extends BaseResourceProviderR4Tes
 
 	@Test
 	public void testUploadLoinc() throws Exception {
-		byte[] packageBytes = createLoincZip();
+		byte[] packageBytes = TerminologyUploaderProviderDstu3Test.createLoincZip();
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onServer()
 			.named("upload-external-code-system")
@@ -98,7 +86,7 @@ public class TerminologyUploaderProviderR4Test extends BaseResourceProviderR4Tes
 		 */
 
 		//@formatter:off
-		respParam = myClient
+		respParam = ourClient
 			.operation()
 			.onServer()
 			.named("upload-external-code-system")
@@ -116,7 +104,7 @@ public class TerminologyUploaderProviderR4Test extends BaseResourceProviderR4Tes
 	public void testUploadMissingPackage() throws Exception {
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onServer()
 				.named("upload-external-code-system")
@@ -135,7 +123,7 @@ public class TerminologyUploaderProviderR4Test extends BaseResourceProviderR4Tes
 
 		//@formatter:off
 		try {
-			myClient
+			ourClient
 				.operation()
 				.onServer()
 				.named("upload-external-code-system")
@@ -153,7 +141,7 @@ public class TerminologyUploaderProviderR4Test extends BaseResourceProviderR4Tes
 		byte[] packageBytes = createSctZip();
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onServer()
 			.named("upload-external-code-system")
@@ -179,7 +167,7 @@ public class TerminologyUploaderProviderR4Test extends BaseResourceProviderR4Tes
 		fos.close();
 
 		//@formatter:off
-		Parameters respParam = myClient
+		Parameters respParam = ourClient
 			.operation()
 			.onServer()
 			.named("upload-external-code-system")
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/search/r4/PagingMultinodeProviderR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/search/r4/PagingMultinodeProviderR4Test.java
index 121debf6f37..851f28a3dbf 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/search/r4/PagingMultinodeProviderR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/search/r4/PagingMultinodeProviderR4Test.java
@@ -61,7 +61,7 @@ public class PagingMultinodeProviderR4Test extends BaseResourceProviderR4Test {
 		mySearchCoordinatorSvcRaw.setSyncSizeForUnitTests(10);
 		mySearchCoordinatorSvcRaw.setNeverUseLocalSearchForUnitTests(true);
 
-		found = myClient
+		found = ourClient
 				.search()
 				.forResource(Patient.class)
 				.sort().ascending(Patient.SP_FAMILY)
@@ -70,19 +70,19 @@ public class PagingMultinodeProviderR4Test extends BaseResourceProviderR4Test {
 				.execute();
 		assertThat(toUnqualifiedVersionlessIdValues(found), contains("Patient/A000", "Patient/A001", "Patient/A002", "Patient/A003", "Patient/A004", "Patient/A005", "Patient/A006", "Patient/A007", "Patient/A008", "Patient/A009"));
 
-		found = myClient
+		found = ourClient
 				.loadPage()
 				.next(found)
 				.execute();
 		assertThat(toUnqualifiedVersionlessIdValues(found), contains("Patient/A010", "Patient/A011", "Patient/A012", "Patient/A013", "Patient/A014", "Patient/A015", "Patient/A016", "Patient/A017", "Patient/A018", "Patient/A019"));
 
-		found = myClient
+		found = ourClient
 				.loadPage()
 				.next(found)
 				.execute();
 		assertThat(toUnqualifiedVersionlessIdValues(found), contains("Patient/A020", "Patient/A021", "Patient/A022", "Patient/A023", "Patient/A024", "Patient/A025", "Patient/A026", "Patient/A027", "Patient/A028", "Patient/A029"));
 
-		found = myClient
+		found = ourClient
 				.loadPage()
 				.next(found)
 				.execute();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/stresstest/IndexStressTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/stresstest/IndexStressTest.java
new file mode 100644
index 00000000000..0b963c30101
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/stresstest/IndexStressTest.java
@@ -0,0 +1,69 @@
+package ca.uhn.fhir.jpa.stresstest;
+
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.RuntimeSearchParam;
+import ca.uhn.fhir.jpa.dao.DaoConfig;
+import ca.uhn.fhir.jpa.dao.ISearchParamRegistry;
+import ca.uhn.fhir.jpa.dao.dstu3.SearchParamExtractorDstu3;
+import ca.uhn.fhir.jpa.entity.ResourceIndexedSearchParamString;
+import ca.uhn.fhir.jpa.entity.ResourceTable;
+import ca.uhn.fhir.util.StopWatch;
+import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
+import org.hl7.fhir.dstu3.hapi.validation.CachingValidationSupport;
+import org.hl7.fhir.dstu3.hapi.validation.DefaultProfileValidationSupport;
+import org.hl7.fhir.dstu3.hapi.validation.ValidationSupportChain;
+import org.hl7.fhir.dstu3.model.Patient;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.*;
+
+public class IndexStressTest {
+
+	private static final Logger ourLog = LoggerFactory.getLogger(IndexStressTest.class);
+
+	@Test
+	public void testExtractSearchParams() {
+		Patient p = new Patient();
+		p.addName().setFamily("FOO").addGiven("BAR").addGiven("BAR");
+		p.getMaritalStatus().setText("DDDDD");
+		p.addAddress().addLine("A").addLine("B").addLine("C");
+
+		DaoConfig daoConfig = new DaoConfig();
+		FhirContext ctx = FhirContext.forDstu3();
+		IValidationSupport mockValidationSupport = mock(IValidationSupport.class);
+		IValidationSupport validationSupport = new CachingValidationSupport(new ValidationSupportChain(new DefaultProfileValidationSupport(), mockValidationSupport));
+		ISearchParamRegistry searchParamRegistry = mock(ISearchParamRegistry.class);
+		SearchParamExtractorDstu3 extractor = new SearchParamExtractorDstu3(daoConfig, ctx, validationSupport, searchParamRegistry);
+		extractor.start();
+
+		Map<String, RuntimeSearchParam> spMap = ctx
+			.getResourceDefinition("Patient")
+			.getSearchParams()
+			.stream()
+			.collect(Collectors.toMap(RuntimeSearchParam::getName, t -> t));
+		when(searchParamRegistry.getActiveSearchParams(eq("Patient"))).thenReturn(spMap);
+
+		ResourceTable entity = new ResourceTable();
+		Set<ResourceIndexedSearchParamString> params = extractor.extractSearchParamStrings(entity, p);
+
+		StopWatch sw = new StopWatch();
+		int loops = 100;
+		for (int i = 0; i < loops; i++) {
+			entity = new ResourceTable();
+			params = extractor.extractSearchParamStrings(entity, p);
+		}
+
+		ourLog.info("Indexed {} times in {}ms/time", loops, sw.getMillisPerOperation(loops));
+
+		assertEquals(9, params.size());
+		verify(mockValidationSupport, times(1)).fetchAllStructureDefinitions((any(FhirContext.class)));
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/stresstest/StressTestDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/stresstest/StressTestDstu3Test.java
index ca346af6e6a..29f8fe00a43 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/stresstest/StressTestDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/stresstest/StressTestDstu3Test.java
@@ -48,7 +48,6 @@ public class StressTestDstu3Test extends BaseResourceProviderDstu3Test {
 		myRequestValidatingInterceptor.addValidatorModule(module);
 	}
 
-
 	@Test
 	public void testMultithreadedSearch() throws Exception {
 		Bundle input = new Bundle();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/RestHookTestWithInterceptorRegisteredToDaoConfigDstu2Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/RestHookTestWithInterceptorRegisteredToDaoConfigDstu2Test.java
index 51e57322d66..2ea0529282a 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/RestHookTestWithInterceptorRegisteredToDaoConfigDstu2Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/RestHookTestWithInterceptorRegisteredToDaoConfigDstu2Test.java
@@ -206,7 +206,7 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigDstu2Test extends B
 
 		subscriptionTemp.setCriteria(criteria1);
 		ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
-
+		waitForQueueToDrain();
 
 		Observation observation2 = sendObservation(code, "SNOMED-CT");
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/WebsocketWithSubscriptionIdDstu2Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/WebsocketWithSubscriptionIdDstu2Test.java
index b023267854a..7ba7a7d8366 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/WebsocketWithSubscriptionIdDstu2Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/WebsocketWithSubscriptionIdDstu2Test.java
@@ -109,7 +109,7 @@ public class WebsocketWithSubscriptionIdDstu2Test extends BaseResourceProviderDs
 		ClientUpgradeRequest request = new ClientUpgradeRequest();
 		ourLog.info("Connecting to : {}", echoUri);
 		Future<Session> connection = myWebSocketClient.connect(mySocketImplementation, echoUri, request);
-		Session session = connection.get(2, TimeUnit.SECONDS);
+		Session session = connection.get(20, TimeUnit.SECONDS);
 
 		ourLog.info("Connected to WS: {}", session.isOpen());
 	}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/CountingInterceptor.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/CountingInterceptor.java
new file mode 100644
index 00000000000..287c3c8b898
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/CountingInterceptor.java
@@ -0,0 +1,21 @@
+package ca.uhn.fhir.jpa.subscription.r4;
+
+import org.springframework.messaging.Message;
+import org.springframework.messaging.MessageChannel;
+import org.springframework.messaging.support.ChannelInterceptorAdapter;
+
+public class CountingInterceptor extends ChannelInterceptorAdapter {
+
+	private int mySentCount;
+
+	public int getSentCount() {
+		return mySentCount;
+	}
+
+	@Override
+	public void afterSendCompletion(Message<?> message, MessageChannel channel, boolean sent, Exception ex) {
+		if (sent) {
+			mySentCount++;
+		}
+	}
+}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookActivatesPreExistingSubscriptionsR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookActivatesPreExistingSubscriptionsR4Test.java
index ad9eaacd2d4..031140227c4 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookActivatesPreExistingSubscriptionsR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookActivatesPreExistingSubscriptionsR4Test.java
@@ -52,6 +52,7 @@ public class RestHookActivatesPreExistingSubscriptionsR4Test extends BaseResourc
 	@Before
 	public void beforeSetSubscriptionActivatingInterceptor() {
 		SubscriptionActivatingSubscriber.setWaitForSubscriptionActivationSynchronouslyForUnitTest(true);
+		getRestHookSubscriptionInterceptor().initSubscriptions();
 	}
 
 
@@ -66,7 +67,7 @@ public class RestHookActivatesPreExistingSubscriptionsR4Test extends BaseResourc
 		channel.setPayload(thePayload);
 		channel.setEndpoint(theEndpoint);
 
-		MethodOutcome methodOutcome = myClient.create().resource(subscription).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(subscription).execute();
 		subscription.setId(methodOutcome.getId().getIdPart());
 
 		waitForQueueToDrain();
@@ -83,7 +84,7 @@ public class RestHookActivatesPreExistingSubscriptionsR4Test extends BaseResourc
 
 		observation.setStatus(Observation.ObservationStatus.FINAL);
 
-		MethodOutcome methodOutcome = myClient.create().resource(observation).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(observation).execute();
 
 		String observationId = methodOutcome.getId().getIdPart();
 		observation.setId(observationId);
@@ -102,8 +103,6 @@ public class RestHookActivatesPreExistingSubscriptionsR4Test extends BaseResourc
 		createSubscription(criteria1, payload, ourListenerServerBase);
 		createSubscription(criteria2, payload, ourListenerServerBase);
 
-		assertFalse(hasRestHookSubscriptionInterceptor());
-
 		ourRestServer.registerInterceptor(getRestHookSubscriptionInterceptor());
 		getRestHookSubscriptionInterceptor().initSubscriptions();
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookTestR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookTestR4Test.java
index 4de1ab758ac..00b0f31eda1 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookTestR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookTestR4Test.java
@@ -2,7 +2,6 @@ package ca.uhn.fhir.jpa.subscription.r4;
 
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.jpa.dao.DaoConfig;
-import ca.uhn.fhir.jpa.provider.JpaConformanceProviderDstu2;
 import ca.uhn.fhir.jpa.provider.r4.BaseResourceProviderR4Test;
 import ca.uhn.fhir.jpa.subscription.RestHookTestDstu2Test;
 import ca.uhn.fhir.jpa.util.JpaConstants;
@@ -14,6 +13,7 @@ import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.server.IResourceProvider;
 import ca.uhn.fhir.rest.server.RestfulServer;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.util.BundleUtil;
 import ca.uhn.fhir.util.PortUtil;
 import com.google.common.collect.Lists;
 import org.eclipse.jetty.server.Server;
@@ -23,6 +23,7 @@ import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
 import org.hl7.fhir.r4.model.*;
 import org.junit.*;
+import org.springframework.messaging.support.ExecutorSubscribableChannel;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
@@ -49,20 +50,21 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 	private static List<String> ourContentTypes = new ArrayList<>();
 	private static List<String> ourHeaders = new ArrayList<>();
 	private List<IIdType> mySubscriptionIds = new ArrayList<>();
+	private CountingInterceptor myCountingInterceptor;
 
 	@After
 	public void afterUnregisterRestHookListener() {
 		for (IIdType next : mySubscriptionIds) {
 			IIdType nextId = next.toUnqualifiedVersionless();
 			ourLog.info("Deleting: {}", nextId);
-			myClient.delete().resourceById(nextId).execute();
+			ourClient.delete().resourceById(nextId).execute();
 		}
 		mySubscriptionIds.clear();
 
 		myDaoConfig.setAllowMultipleDelete(true);
 		ourLog.info("Deleting all subscriptions");
-		myClient.delete().resourceConditionalByUrl("Subscription?status=active").execute();
-		myClient.delete().resourceConditionalByUrl("Observation?code:missing=false").execute();
+		ourClient.delete().resourceConditionalByUrl("Subscription?status=active").execute();
+		ourClient.delete().resourceConditionalByUrl("Observation?code:missing=false").execute();
 		ourLog.info("Done deleting all subscriptions");
 		myDaoConfig.setAllowMultipleDelete(new DaoConfig().isAllowMultipleDelete());
 
@@ -75,11 +77,23 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 	}
 
 	@Before
-	public void beforeReset() {
+	public void beforeReset() throws Exception {
 		ourCreatedObservations.clear();
 		ourUpdatedObservations.clear();
 		ourContentTypes.clear();
 		ourHeaders.clear();
+
+		// Delete all Subscriptions
+		Bundle allSubscriptions = ourClient.search().forResource(Subscription.class).returnBundle(Bundle.class).execute();
+		for (IBaseResource next : BundleUtil.toListOfResources(myFhirCtx, allSubscriptions)) {
+			ourClient.delete().resource(next).execute();
+		}
+		waitForRegisteredSubscriptionCount(0);
+
+		ExecutorSubscribableChannel processingChannel = (ExecutorSubscribableChannel) getRestHookSubscriptionInterceptor().getProcessingChannel();
+		processingChannel.setInterceptors(new ArrayList<>());
+		myCountingInterceptor = new CountingInterceptor();
+		processingChannel.addInterceptor(myCountingInterceptor);
 	}
 
 	private Subscription createSubscription(String theCriteria, String thePayload, String theEndpoint) throws InterruptedException {
@@ -93,11 +107,10 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		channel.setPayload(thePayload);
 		channel.setEndpoint(theEndpoint);
 
-		MethodOutcome methodOutcome = myClient.create().resource(subscription).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(subscription).execute();
 		subscription.setId(methodOutcome.getId().getIdPart());
 		mySubscriptionIds.add(methodOutcome.getId());
 
-		waitForQueueToDrain();
 		return subscription;
 	}
 
@@ -111,7 +124,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		observation.setStatus(Observation.ObservationStatus.FINAL);
 
-		MethodOutcome methodOutcome = myClient.create().resource(observation).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(observation).execute();
 
 		String observationId = methodOutcome.getId().getIdPart();
 		observation.setId(observationId);
@@ -129,6 +142,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		createSubscription(criteria1, payload, ourListenerServerBase);
 		createSubscription(criteria2, payload, ourListenerServerBase);
+		waitForRegisteredSubscriptionCount(2);
 
 		sendObservation(code, "SNOMED-CT");
 
@@ -139,6 +153,19 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		assertEquals(Constants.CT_FHIR_JSON_NEW, ourContentTypes.get(0));
 	}
 
+	@Test
+	public void testActiveSubscriptionShouldntReActivate() throws Exception {
+		String criteria = "Observation?code=111111111&_format=xml";
+		String payload = "application/fhir+json";
+		createSubscription(criteria, payload, ourListenerServerBase);
+
+		waitForRegisteredSubscriptionCount(1);
+		for (int i = 0; i < 5; i++) {
+			Integer changes = ourReskHookSubscriptionInterceptor.doInitSubscriptions();
+			assertEquals(0, changes.intValue());
+		}
+	}
+
 	@Test
 	public void testRestHookSubscriptionNoopUpdateDoesntTriggerNewDelivery() throws Exception {
 		String payload = "application/fhir+json";
@@ -149,6 +176,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		createSubscription(criteria1, payload, ourListenerServerBase);
 		createSubscription(criteria2, payload, ourListenerServerBase);
+		waitForRegisteredSubscriptionCount(2);
 
 		Observation obs = sendObservation(code, "SNOMED-CT");
 
@@ -160,7 +188,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		// Send an update with no changes
 		obs.setId(obs.getIdElement().toUnqualifiedVersionless());
-		myClient.update().resource(obs).execute();
+		ourClient.update().resource(obs).execute();
 
 		// Should be no further deliveries
 		Thread.sleep(1000);
@@ -169,12 +197,8 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		waitForSize(1, ourUpdatedObservations);
 
 
-
-
-
 	}
 
-
 	@Test
 	public void testRestHookSubscriptionApplicationJsonDisableVersionIdInDelivery() throws Exception {
 		String payload = "application/json";
@@ -182,16 +206,22 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		String code = "1000000050";
 		String criteria1 = "Observation?code=SNOMED-CT|" + code + "&_format=xml";
 
+		waitForRegisteredSubscriptionCount(0);
 		Subscription subscription1 = createSubscription(criteria1, payload, ourListenerServerBase);
+		waitForRegisteredSubscriptionCount(1);
+
+		int modCount = myCountingInterceptor.getSentCount();
 		subscription1
 			.getChannel()
 			.addExtension(JpaConstants.EXT_SUBSCRIPTION_RESTHOOK_STRIP_VERSION_IDS, new BooleanType("true"));
 		subscription1
 			.getChannel()
 			.addExtension(JpaConstants.EXT_SUBSCRIPTION_RESTHOOK_DELIVER_LATEST_VERSION, new BooleanType("true"));
-		myClient.update().resource(subscription1).execute();
-		waitForQueueToDrain();
+		ourLog.info("** About to update subscription");
+		ourClient.update().resource(subscription1).execute();
+		waitForSize(modCount + 1, () -> myCountingInterceptor.getSentCount());
 
+		ourLog.info("** About to send observation");
 		Observation observation1 = sendObservation(code, "SNOMED-CT");
 
 		// Should see 1 subscription notification
@@ -204,8 +234,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		assertEquals(null, ourUpdatedObservations.get(0).getIdElement().getVersionIdPart());
 	}
 
-
-		@Test
+	@Test
 	public void testRestHookSubscriptionApplicationJson() throws Exception {
 		String payload = "application/json";
 
@@ -215,6 +244,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		Subscription subscription1 = createSubscription(criteria1, payload, ourListenerServerBase);
 		Subscription subscription2 = createSubscription(criteria2, payload, ourListenerServerBase);
+		waitForRegisteredSubscriptionCount(2);
 
 		Observation observation1 = sendObservation(code, "SNOMED-CT");
 
@@ -226,11 +256,11 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		assertEquals("1", ourUpdatedObservations.get(0).getIdElement().getVersionIdPart());
 
-		Subscription subscriptionTemp = myClient.read(Subscription.class, subscription2.getId());
+		Subscription subscriptionTemp = ourClient.read(Subscription.class, subscription2.getId());
 		Assert.assertNotNull(subscriptionTemp);
 
 		subscriptionTemp.setCriteria(criteria1);
-		myClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
+		ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
 		waitForQueueToDrain();
 
 		Observation observation2 = sendObservation(code, "SNOMED-CT");
@@ -240,7 +270,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(3, ourUpdatedObservations);
 
-		myClient.delete().resourceById(new IdType("Subscription/" + subscription2.getId())).execute();
+		ourClient.delete().resourceById(new IdType("Subscription/" + subscription2.getId())).execute();
 		waitForQueueToDrain();
 
 		Observation observationTemp3 = sendObservation(code, "SNOMED-CT");
@@ -250,27 +280,27 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(4, ourUpdatedObservations);
 
-		Observation observation3 = myClient.read(Observation.class, observationTemp3.getId());
+		Observation observation3 = ourClient.read(Observation.class, observationTemp3.getId());
 		CodeableConcept codeableConcept = new CodeableConcept();
 		observation3.setCode(codeableConcept);
 		Coding coding = codeableConcept.addCoding();
 		coding.setCode(code + "111");
 		coding.setSystem("SNOMED-CT");
-		myClient.update().resource(observation3).withId(observation3.getIdElement()).execute();
+		ourClient.update().resource(observation3).withId(observation3.getIdElement()).execute();
 
 		// Should see no subscription notification
 		waitForQueueToDrain();
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(4, ourUpdatedObservations);
 
-		Observation observation3a = myClient.read(Observation.class, observationTemp3.getId());
+		Observation observation3a = ourClient.read(Observation.class, observationTemp3.getId());
 
 		CodeableConcept codeableConcept1 = new CodeableConcept();
 		observation3a.setCode(codeableConcept1);
 		Coding coding1 = codeableConcept1.addCoding();
 		coding1.setCode(code);
 		coding1.setSystem("SNOMED-CT");
-		myClient.update().resource(observation3a).withId(observation3a.getIdElement()).execute();
+		ourClient.update().resource(observation3a).withId(observation3a.getIdElement()).execute();
 
 		// Should see only one subscription notification
 		waitForQueueToDrain();
@@ -292,19 +322,20 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		Subscription subscription1 = createSubscription(criteria1, payload, ourListenerServerBase);
 		Subscription subscription2 = createSubscription(criteria2, payload, ourListenerServerBase);
+		waitForRegisteredSubscriptionCount(2);
 
+		ourLog.info("** About to send obervation");
 		Observation observation1 = sendObservation(code, "SNOMED-CT");
 
 		// Should see 1 subscription notification
-		waitForQueueToDrain();
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(1, ourUpdatedObservations);
 		assertEquals(Constants.CT_FHIR_XML_NEW, ourContentTypes.get(0));
 
-		Subscription subscriptionTemp = myClient.read(Subscription.class, subscription2.getId());
+		Subscription subscriptionTemp = ourClient.read(Subscription.class, subscription2.getId());
 		Assert.assertNotNull(subscriptionTemp);
 		subscriptionTemp.setCriteria(criteria1);
-		myClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
+		ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
 		waitForQueueToDrain();
 
 		Observation observation2 = sendObservation(code, "SNOMED-CT");
@@ -314,7 +345,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(3, ourUpdatedObservations);
 
-		myClient.delete().resourceById(new IdType("Subscription/" + subscription2.getId())).execute();
+		ourClient.delete().resourceById(new IdType("Subscription/" + subscription2.getId())).execute();
 
 		Observation observationTemp3 = sendObservation(code, "SNOMED-CT");
 
@@ -323,27 +354,27 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(4, ourUpdatedObservations);
 
-		Observation observation3 = myClient.read(Observation.class, observationTemp3.getId());
+		Observation observation3 = ourClient.read(Observation.class, observationTemp3.getId());
 		CodeableConcept codeableConcept = new CodeableConcept();
 		observation3.setCode(codeableConcept);
 		Coding coding = codeableConcept.addCoding();
 		coding.setCode(code + "111");
 		coding.setSystem("SNOMED-CT");
-		myClient.update().resource(observation3).withId(observation3.getIdElement()).execute();
+		ourClient.update().resource(observation3).withId(observation3.getIdElement()).execute();
 
 		// Should see no subscription notification
 		waitForQueueToDrain();
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(4, ourUpdatedObservations);
 
-		Observation observation3a = myClient.read(Observation.class, observationTemp3.getId());
+		Observation observation3a = ourClient.read(Observation.class, observationTemp3.getId());
 
 		CodeableConcept codeableConcept1 = new CodeableConcept();
 		observation3a.setCode(codeableConcept1);
 		Coding coding1 = codeableConcept1.addCoding();
 		coding1.setCode(code);
 		coding1.setSystem("SNOMED-CT");
-		myClient.update().resource(observation3a).withId(observation3a.getIdElement()).execute();
+		ourClient.update().resource(observation3a).withId(observation3a.getIdElement()).execute();
 
 		// Should see only one subscription notification
 		waitForQueueToDrain();
@@ -355,6 +386,51 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		Assert.assertFalse(observation2.getId().isEmpty());
 	}
 
+	@Test
+	public void testUpdateSubscriptionToMatchLater() throws Exception {
+		String payload = "application/xml";
+
+		String code = "1000000050";
+		String criteriaBad = "Observation?code=SNOMED-CT|" + code + "111&_format=xml";
+
+		ourLog.info("** About to create non-matching subscription");
+
+		Subscription subscription2 = createSubscription(criteriaBad, payload, ourListenerServerBase);
+
+		ourLog.info("** About to send observation that wont match");
+
+		Observation observation1 = sendObservation(code, "SNOMED-CT");
+
+		// Criteria didn't match, shouldn't see any updates
+		waitForQueueToDrain();
+		Thread.sleep(1000);
+		assertEquals(0, ourUpdatedObservations.size());
+
+		Subscription subscriptionTemp = ourClient.read().resource(Subscription.class).withId(subscription2.getId()).execute();
+		Assert.assertNotNull(subscriptionTemp);
+		String criteriaGood = "Observation?code=SNOMED-CT|" + code + "&_format=xml";
+		subscriptionTemp.setCriteria(criteriaGood);
+		ourLog.info("** About to update subscription");
+		ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
+		waitForQueueToDrain();
+
+		ourLog.info("** About to send Observation 2");
+		Observation observation2 = sendObservation(code, "SNOMED-CT");
+		waitForQueueToDrain();
+
+		// Should see a subscription notification this time
+		waitForSize(0, ourCreatedObservations);
+		waitForSize(1, ourUpdatedObservations);
+
+		ourClient.delete().resourceById(new IdType("Subscription/" + subscription2.getId())).execute();
+
+		Observation observationTemp3 = sendObservation(code, "SNOMED-CT");
+
+		// No more matches
+		Thread.sleep(1000);
+		assertEquals(1, ourUpdatedObservations.size());
+	}
+
 	@Test
 	public void testRestHookSubscriptionApplicationXmlJson() throws Exception {
 		String payload = "application/fhir+xml";
@@ -365,6 +441,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		Subscription subscription1 = createSubscription(criteria1, payload, ourListenerServerBase);
 		Subscription subscription2 = createSubscription(criteria2, payload, ourListenerServerBase);
+		waitForRegisteredSubscriptionCount(2);
 
 		Observation observation1 = sendObservation(code, "SNOMED-CT");
 
@@ -400,10 +477,12 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		// Add some headers, and we'll also turn back to requested status for fun
 		Subscription subscription = createSubscription(criteria1, payload, ourListenerServerBase);
+		waitForRegisteredSubscriptionCount(1);
+
 		subscription.getChannel().addHeader("X-Foo: FOO");
 		subscription.getChannel().addHeader("X-Bar: BAR");
 		subscription.setStatus(Subscription.SubscriptionStatus.REQUESTED);
-		myClient.update().resource(subscription).execute();
+		ourClient.update().resource(subscription).execute();
 		waitForQueueToDrain();
 
 		sendObservation(code, "SNOMED-CT");
@@ -425,6 +504,8 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		String criteria1 = "Observation?code=SNOMED-CT|" + code + "&_format=xml";
 
 		Subscription subscription = createSubscription(criteria1, payload, ourListenerServerBase);
+		waitForRegisteredSubscriptionCount(1);
+
 		sendObservation(code, "SNOMED-CT");
 
 		// Should see 1 subscription notification
@@ -434,7 +515,7 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 		// Disable
 		subscription.setStatus(Subscription.SubscriptionStatus.OFF);
-		myClient.update().resource(subscription).execute();
+		ourClient.update().resource(subscription).execute();
 		waitForQueueToDrain();
 
 		// Send another object
@@ -451,33 +532,6 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 		RestHookTestDstu2Test.waitForQueueToDrain(getRestHookSubscriptionInterceptor());
 	}
 
-	@BeforeClass
-	public static void startListenerServer() throws Exception {
-		ourListenerPort = PortUtil.findFreePort();
-		ourListenerRestServer = new RestfulServer(FhirContext.forR4());
-		ourListenerServerBase = "http://localhost:" + ourListenerPort + "/fhir/context";
-
-		ObservationListener obsListener = new ObservationListener();
-		ourListenerRestServer.setResourceProviders(obsListener);
-
-		ourListenerServer = new Server(ourListenerPort);
-
-		ServletContextHandler proxyHandler = new ServletContextHandler();
-		proxyHandler.setContextPath("/");
-
-		ServletHolder servletHolder = new ServletHolder();
-		servletHolder.setServlet(ourListenerRestServer);
-		proxyHandler.addServlet(servletHolder, "/fhir/context/*");
-
-		ourListenerServer.setHandler(proxyHandler);
-		ourListenerServer.start();
-	}
-
-	@AfterClass
-	public static void stopListenerServer() throws Exception {
-		ourListenerServer.stop();
-	}
-
 	public static class ObservationListener implements IResourceProvider {
 
 		@Create
@@ -517,4 +571,31 @@ public class RestHookTestR4Test extends BaseResourceProviderR4Test {
 
 	}
 
+	@BeforeClass
+	public static void startListenerServer() throws Exception {
+		ourListenerPort = PortUtil.findFreePort();
+		ourListenerRestServer = new RestfulServer(FhirContext.forR4());
+		ourListenerServerBase = "http://localhost:" + ourListenerPort + "/fhir/context";
+
+		ObservationListener obsListener = new ObservationListener();
+		ourListenerRestServer.setResourceProviders(obsListener);
+
+		ourListenerServer = new Server(ourListenerPort);
+
+		ServletContextHandler proxyHandler = new ServletContextHandler();
+		proxyHandler.setContextPath("/");
+
+		ServletHolder servletHolder = new ServletHolder();
+		servletHolder.setServlet(ourListenerRestServer);
+		proxyHandler.addServlet(servletHolder, "/fhir/context/*");
+
+		ourListenerServer.setHandler(proxyHandler);
+		ourListenerServer.start();
+	}
+
+	@AfterClass
+	public static void stopListenerServer() throws Exception {
+		ourListenerServer.stop();
+	}
+
 }
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookTestWithInterceptorRegisteredToDaoConfigR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookTestWithInterceptorRegisteredToDaoConfigR4Test.java
index 32e418e82a8..56560a12a6e 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookTestWithInterceptorRegisteredToDaoConfigR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookTestWithInterceptorRegisteredToDaoConfigR4Test.java
@@ -44,7 +44,7 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 	public void afterUnregisterRestHookListener() {
 		myDaoConfig.setAllowMultipleDelete(true);
 		ourLog.info("Deleting all subscriptions");
-		myClient.delete().resourceConditionalByUrl("Subscription?status=active").execute();
+		ourClient.delete().resourceConditionalByUrl("Subscription?status=active").execute();
 		ourLog.info("Done deleting all subscriptions");
 		myDaoConfig.setAllowMultipleDelete(new DaoConfig().isAllowMultipleDelete());
 		
@@ -74,7 +74,7 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 		channel.setEndpoint(endpoint);
 		subscription.setChannel(channel);
 
-		MethodOutcome methodOutcome = myClient.create().resource(subscription).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(subscription).execute();
 		subscription.setId(methodOutcome.getId().getIdPart());
 
 		waitForQueueToDrain();
@@ -99,7 +99,7 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 
 		observation.setStatus(Observation.ObservationStatus.FINAL);
 
-		MethodOutcome methodOutcome = myClient.create().resource(observation).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(observation).execute();
 
 		String observationId = methodOutcome.getId().getIdPart();
 		observation.setId(observationId);
@@ -127,11 +127,11 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(1, ourUpdatedObservations);
 
-		Subscription subscriptionTemp = myClient.read(Subscription.class, subscription2.getId());
+		Subscription subscriptionTemp = ourClient.read(Subscription.class, subscription2.getId());
 		Assert.assertNotNull(subscriptionTemp);
 
 		subscriptionTemp.setCriteria(criteria1);
-		myClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
+		ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
 
 
 		Observation observation2 = sendObservation(code, "SNOMED-CT");
@@ -141,7 +141,7 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(3, ourUpdatedObservations);
 
-		myClient.delete().resourceById(new IdDt("Subscription", subscription2.getId())).execute();
+		ourClient.delete().resourceById(new IdDt("Subscription", subscription2.getId())).execute();
 
 		Observation observationTemp3 = sendObservation(code, "SNOMED-CT");
 
@@ -150,27 +150,27 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(4, ourUpdatedObservations);
 
-		Observation observation3 = myClient.read(Observation.class, observationTemp3.getId());
+		Observation observation3 = ourClient.read(Observation.class, observationTemp3.getId());
 		CodeableConcept codeableConcept = new CodeableConcept();
 		observation3.setCode(codeableConcept);
 		Coding coding = codeableConcept.addCoding();
 		coding.setCode(code + "111");
 		coding.setSystem("SNOMED-CT");
-		myClient.update().resource(observation3).withId(observation3.getIdElement()).execute();
+		ourClient.update().resource(observation3).withId(observation3.getIdElement()).execute();
 
 		// Should see no subscription notification
 		Thread.sleep(500);
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(4, ourUpdatedObservations);
 
-		Observation observation3a = myClient.read(Observation.class, observationTemp3.getId());
+		Observation observation3a = ourClient.read(Observation.class, observationTemp3.getId());
 
 		CodeableConcept codeableConcept1 = new CodeableConcept();
 		observation3a.setCode(codeableConcept1);
 		Coding coding1 = codeableConcept1.addCoding();
 		coding1.setCode(code);
 		coding1.setSystem("SNOMED-CT");
-		myClient.update().resource(observation3a).withId(observation3a.getIdElement()).execute();
+		ourClient.update().resource(observation3a).withId(observation3a.getIdElement()).execute();
 
 		// Should see only one subscription notification
 		Thread.sleep(500);
@@ -200,11 +200,11 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(1, ourUpdatedObservations);
 
-		Subscription subscriptionTemp = myClient.read(Subscription.class, subscription2.getId());
+		Subscription subscriptionTemp = ourClient.read(Subscription.class, subscription2.getId());
 		Assert.assertNotNull(subscriptionTemp);
 
 		subscriptionTemp.setCriteria(criteria1);
-		myClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
+		ourClient.update().resource(subscriptionTemp).withId(subscriptionTemp.getIdElement()).execute();
 
 
 		Observation observation2 = sendObservation(code, "SNOMED-CT");
@@ -214,7 +214,7 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(3, ourUpdatedObservations);
 
-		myClient.delete().resourceById(new IdDt("Subscription", subscription2.getId())).execute();
+		ourClient.delete().resourceById(new IdDt("Subscription", subscription2.getId())).execute();
 
 		Observation observationTemp3 = sendObservation(code, "SNOMED-CT");
 
@@ -223,27 +223,27 @@ public class RestHookTestWithInterceptorRegisteredToDaoConfigR4Test extends Base
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(4, ourUpdatedObservations);
 
-		Observation observation3 = myClient.read(Observation.class, observationTemp3.getId());
+		Observation observation3 = ourClient.read(Observation.class, observationTemp3.getId());
 		CodeableConcept codeableConcept = new CodeableConcept();
 		observation3.setCode(codeableConcept);
 		Coding coding = codeableConcept.addCoding();
 		coding.setCode(code + "111");
 		coding.setSystem("SNOMED-CT");
-		myClient.update().resource(observation3).withId(observation3.getIdElement()).execute();
+		ourClient.update().resource(observation3).withId(observation3.getIdElement()).execute();
 
 		// Should see no subscription notification
 		waitForQueueToDrain();
 		waitForSize(0, ourCreatedObservations);
 		waitForSize(4, ourUpdatedObservations);
 
-		Observation observation3a = myClient.read(Observation.class, observationTemp3.getId());
+		Observation observation3a = ourClient.read(Observation.class, observationTemp3.getId());
 
 		CodeableConcept codeableConcept1 = new CodeableConcept();
 		observation3a.setCode(codeableConcept1);
 		Coding coding1 = codeableConcept1.addCoding();
 		coding1.setCode(code);
 		coding1.setSystem("SNOMED-CT");
-		myClient.update().resource(observation3a).withId(observation3a.getIdElement()).execute();
+		ourClient.update().resource(observation3a).withId(observation3a.getIdElement()).execute();
 
 		// Should see only one subscription notification
 		waitForQueueToDrain();
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookWithEventDefinitionR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookWithEventDefinitionR4Test.java
index d32b823f680..2a0eae5a583 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookWithEventDefinitionR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/RestHookWithEventDefinitionR4Test.java
@@ -52,14 +52,14 @@ public class RestHookWithEventDefinitionR4Test extends BaseResourceProviderR4Tes
 	@After
 	public void afterUnregisterRestHookListener() {
 		for (IIdType next : mySubscriptionIds) {
-			myClient.delete().resourceById(next).execute();
+			ourClient.delete().resourceById(next).execute();
 		}
 		mySubscriptionIds.clear();
 
 		myDaoConfig.setAllowMultipleDelete(true);
 		ourLog.info("Deleting all subscriptions");
-		myClient.delete().resourceConditionalByUrl("Subscription?status=active").execute();
-		myClient.delete().resourceConditionalByUrl("Observation?code:missing=false").execute();
+		ourClient.delete().resourceConditionalByUrl("Subscription?status=active").execute();
+		ourClient.delete().resourceConditionalByUrl("Observation?code:missing=false").execute();
 		ourLog.info("Done deleting all subscriptions");
 		myDaoConfig.setAllowMultipleDelete(new DaoConfig().isAllowMultipleDelete());
 
@@ -83,7 +83,7 @@ public class RestHookWithEventDefinitionR4Test extends BaseResourceProviderR4Tes
 		 */
 
 		Patient patient = FhirR4Util.getPatient();
-		MethodOutcome methodOutcome = myClient.create().resource(patient).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(patient).execute();
 		myPatientId = methodOutcome.getId().getIdPart();
 
 		/*
@@ -114,7 +114,7 @@ public class RestHookWithEventDefinitionR4Test extends BaseResourceProviderR4Tes
 		channel.setPayload("application/json");
 		subscription.setChannel(channel);
 
-		methodOutcome = myClient.create().resource(subscription).execute();
+		methodOutcome = ourClient.create().resource(subscription).execute();
 		mySubscriptionId = methodOutcome.getId().getIdPart();
 
 	}
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/WebsocketWithCriteriaR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/WebsocketWithCriteriaR4Test.java
index 316c9caeba3..dfe9b283c9f 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/WebsocketWithCriteriaR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/WebsocketWithCriteriaR4Test.java
@@ -49,7 +49,7 @@ public class WebsocketWithCriteriaR4Test extends BaseResourceProviderR4Test {
 		 */
 		
 		Patient patient = FhirR4Util.getPatient();
-		MethodOutcome methodOutcome = myClient.create().resource(patient).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(patient).execute();
 		myPatientId = methodOutcome.getId().getIdPart();
 
 		/* 
@@ -66,7 +66,7 @@ public class WebsocketWithCriteriaR4Test extends BaseResourceProviderR4Test {
 		channel.setPayload("application/json");
 		subscription.setChannel(channel);
 
-		methodOutcome = myClient.create().resource(subscription).execute();
+		methodOutcome = ourClient.create().resource(subscription).execute();
 		mySubscriptionId = methodOutcome.getId().getIdPart();
 		
 		/*
@@ -105,7 +105,7 @@ public class WebsocketWithCriteriaR4Test extends BaseResourceProviderR4Test {
 		observation.setSubject(reference);
 		observation.setStatus(Observation.ObservationStatus.FINAL);
 
-		MethodOutcome methodOutcome2 = myClient.create().resource(observation).execute();
+		MethodOutcome methodOutcome2 = ourClient.create().resource(observation).execute();
 		String observationId = methodOutcome2.getId().getIdPart();
 		observation.setId(observationId);
 
@@ -129,7 +129,7 @@ public class WebsocketWithCriteriaR4Test extends BaseResourceProviderR4Test {
 		observation.setSubject(reference);
 		observation.setStatus(Observation.ObservationStatus.FINAL);
 
-		MethodOutcome methodOutcome2 = myClient.create().resource(observation).execute();
+		MethodOutcome methodOutcome2 = ourClient.create().resource(observation).execute();
 		String observationId = methodOutcome2.getId().getIdPart();
 		observation.setId(observationId);
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/WebsocketWithSubscriptionIdR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/WebsocketWithSubscriptionIdR4Test.java
index 90a973e69e6..a815ff10f58 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/WebsocketWithSubscriptionIdR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/subscription/r4/WebsocketWithSubscriptionIdR4Test.java
@@ -47,6 +47,7 @@ public class WebsocketWithSubscriptionIdR4Test extends BaseResourceProviderR4Tes
 	private WebSocketClient myWebSocketClient;
 	private SocketImplementation mySocketImplementation;
 
+	@Override
 	@After
 	public void after() throws Exception {
 		super.after();
@@ -60,6 +61,7 @@ public class WebsocketWithSubscriptionIdR4Test extends BaseResourceProviderR4Tes
 		myWebSocketClient.stop();
 	}
 
+	@Override
 	@Before
 	public void before() throws Exception {
 		super.before();
@@ -72,7 +74,7 @@ public class WebsocketWithSubscriptionIdR4Test extends BaseResourceProviderR4Tes
 		 */
 
 		Patient patient = FhirR4Util.getPatient();
-		MethodOutcome methodOutcome = myClient.create().resource(patient).execute();
+		MethodOutcome methodOutcome = ourClient.create().resource(patient).execute();
 		myPatientId = methodOutcome.getId().getIdPart();
 
 		/*
@@ -89,7 +91,7 @@ public class WebsocketWithSubscriptionIdR4Test extends BaseResourceProviderR4Tes
 		channel.setPayload("application/json");
 		subscription.setChannel(channel);
 
-		methodOutcome = myClient.create().resource(subscription).execute();
+		methodOutcome = ourClient.create().resource(subscription).execute();
 		mySubscriptionId = methodOutcome.getId().getIdPart();
 
 		/*
@@ -122,7 +124,7 @@ public class WebsocketWithSubscriptionIdR4Test extends BaseResourceProviderR4Tes
 		observation.setSubject(reference);
 		observation.setStatus(Observation.ObservationStatus.FINAL);
 
-		MethodOutcome methodOutcome2 = myClient.create().resource(observation).execute();
+		MethodOutcome methodOutcome2 = ourClient.create().resource(observation).execute();
 		String observationId = methodOutcome2.getId().getIdPart();
 		observation.setId(observationId);
 
@@ -146,7 +148,7 @@ public class WebsocketWithSubscriptionIdR4Test extends BaseResourceProviderR4Tes
 		observation.setSubject(reference);
 		observation.setStatus(Observation.ObservationStatus.FINAL);
 
-		MethodOutcome methodOutcome2 = myClient.create().resource(observation).execute();
+		MethodOutcome methodOutcome2 = ourClient.create().resource(observation).execute();
 		String observationId = methodOutcome2.getId().getIdPart();
 		observation.setId(observationId);
 
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcIntegrationDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcIntegrationDstu3Test.java
index 6d2ab2a578b..ce8c0a5712b 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcIntegrationDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcIntegrationDstu3Test.java
@@ -2,6 +2,7 @@ package ca.uhn.fhir.jpa.term;
 
 import ca.uhn.fhir.jpa.dao.DaoConfig;
 import ca.uhn.fhir.jpa.dao.IFhirResourceDaoCodeSystem;
+import ca.uhn.fhir.jpa.dao.IFhirResourceDaoValueSet;
 import ca.uhn.fhir.jpa.dao.dstu3.BaseJpaDstu3Test;
 import ca.uhn.fhir.util.TestUtil;
 import com.google.common.collect.Lists;
@@ -52,22 +53,10 @@ public class TerminologyLoaderSvcIntegrationDstu3Test extends BaseJpaDstu3Test {
 			.findFirst();
 	}
 
-	private <T extends Type> Optional<T> getPropertyPart(Parameters theParameters, String thePropName, String thePart) {
-		return theParameters
-			.getParameter()
-			.stream()
-			.filter(t -> t.getName().equals(thePropName))
-			.flatMap(t -> t.getPart().stream())
-			.filter(t -> t.getName().equals(thePart))
-			.map(t -> (T) t.getValue())
-			.findFirst();
-	}
-
 	@Test
 	public void testExpandWithPropertyCoding() throws Exception {
 		ZipCollectionBuilder files = new ZipCollectionBuilder();
 		TerminologyLoaderSvcLoincTest.addLoincMandatoryFilesToZip(files);
-		TerminologyLoaderSvcLoincTest.addLoincOptionalFilesToZip(files);
 		myLoader.loadLoinc(files.getFiles(), mySrd);
 
 		// Search by code
@@ -121,7 +110,6 @@ public class TerminologyLoaderSvcIntegrationDstu3Test extends BaseJpaDstu3Test {
 	public void testExpandWithPropertyString() throws Exception {
 		ZipCollectionBuilder files = new ZipCollectionBuilder();
 		TerminologyLoaderSvcLoincTest.addLoincMandatoryFilesToZip(files);
-		TerminologyLoaderSvcLoincTest.addLoincOptionalFilesToZip(files);
 		myLoader.loadLoinc(files.getFiles(), mySrd);
 
 		ValueSet input = new ValueSet();
@@ -144,7 +132,6 @@ public class TerminologyLoaderSvcIntegrationDstu3Test extends BaseJpaDstu3Test {
 	public void testLookupWithProperties() throws Exception {
 		ZipCollectionBuilder files = new ZipCollectionBuilder();
 		TerminologyLoaderSvcLoincTest.addLoincMandatoryFilesToZip(files);
-		TerminologyLoaderSvcLoincTest.addLoincOptionalFilesToZip(files);
 		myLoader.loadLoinc(files.getFiles(), mySrd);
 
 		IFhirResourceDaoCodeSystem.LookupCodeResult result = myCodeSystemDao.lookupCode(new StringType("10013-1"), new StringType(IHapiTerminologyLoaderSvc.LOINC_URI), null, mySrd);
@@ -172,11 +159,29 @@ public class TerminologyLoaderSvcIntegrationDstu3Test extends BaseJpaDstu3Test {
 
 	}
 
+	@Test
+	public void testLookupWithProperties2() throws Exception {
+		ZipCollectionBuilder files = new ZipCollectionBuilder();
+		TerminologyLoaderSvcLoincTest.addLoincMandatoryFilesToZip(files);
+		myLoader.loadLoinc(files.getFiles(), mySrd);
+
+		IFhirResourceDaoCodeSystem.LookupCodeResult result = myCodeSystemDao.lookupCode(new StringType("17788-1"), new StringType(IHapiTerminologyLoaderSvc.LOINC_URI), null, mySrd);
+		org.hl7.fhir.r4.model.Parameters parametersR4 = result.toParameters(null);
+		Parameters parameters = VersionConvertor_30_40.convertParameters(parametersR4);
+
+		ourLog.info(myFhirCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(parameters));
+
+		Optional<Coding> propertyValue = findProperty(parameters, "COMPONENT");
+		assertTrue(propertyValue.isPresent());
+		assertEquals(IHapiTerminologyLoaderSvc.LOINC_URI, propertyValue.get().getSystem());
+		assertEquals("LP19258-0", propertyValue.get().getCode());
+		assertEquals("Large unstained cells/100 leukocytes", propertyValue.get().getDisplay());
+	}
+
 	@Test
 	public void testLookupWithPropertiesExplicit() throws Exception {
 		ZipCollectionBuilder files = new ZipCollectionBuilder();
 		TerminologyLoaderSvcLoincTest.addLoincMandatoryFilesToZip(files);
-		TerminologyLoaderSvcLoincTest.addLoincOptionalFilesToZip(files);
 		myLoader.loadLoinc(files.getFiles(), mySrd);
 
 		IFhirResourceDaoCodeSystem.LookupCodeResult result = myCodeSystemDao.lookupCode(new StringType("10013-1"), new StringType(IHapiTerminologyLoaderSvc.LOINC_URI), null, mySrd);
@@ -197,6 +202,30 @@ public class TerminologyLoaderSvcIntegrationDstu3Test extends BaseJpaDstu3Test {
 
 	}
 
+	@Test
+	public void testValidateCodeFound() throws Exception {
+		ZipCollectionBuilder files = new ZipCollectionBuilder();
+		TerminologyLoaderSvcLoincTest.addLoincMandatoryFilesToZip(files);
+		myLoader.loadLoinc(files.getFiles(), mySrd);
+
+		IFhirResourceDaoValueSet.ValidateCodeResult result = myValueSetDao.validateCode(null, null, new StringType("10013-1"), new StringType(IHapiTerminologyLoaderSvc.LOINC_URI), null, null, null, mySrd);
+
+		assertTrue(result.isResult());
+		assertEquals("Found code", result.getMessage());
+	}
+
+	@Test
+	public void testValidateCodeNotFound() throws Exception {
+		ZipCollectionBuilder files = new ZipCollectionBuilder();
+		TerminologyLoaderSvcLoincTest.addLoincMandatoryFilesToZip(files);
+		myLoader.loadLoinc(files.getFiles(), mySrd);
+
+		IFhirResourceDaoValueSet.ValidateCodeResult result = myValueSetDao.validateCode(null, null, new StringType("10013-1-9999999999"), new StringType(IHapiTerminologyLoaderSvc.LOINC_URI), null, null, null, mySrd);
+
+		assertFalse(result.isResult());
+		assertEquals("Code not found", result.getMessage());
+	}
+
 	private Set<String> toExpandedCodes(ValueSet theExpanded) {
 		return theExpanded
 			.getExpansion()
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcLoincTest.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcLoincTest.java
index d4c1d9c2b74..2169febd229 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcLoincTest.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologyLoaderSvcLoincTest.java
@@ -13,6 +13,7 @@ import org.hl7.fhir.r4.model.Enumerations;
 import org.hl7.fhir.r4.model.ValueSet;
 import org.junit.AfterClass;
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -26,9 +27,10 @@ import java.util.List;
 import java.util.Map;
 
 import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.containsString;
 import static org.hamcrest.Matchers.empty;
 import static org.junit.Assert.*;
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
@@ -92,7 +94,6 @@ public class TerminologyLoaderSvcLoincTest {
 	@Test
 	public void testLoadLoinc() throws Exception {
 		addLoincMandatoryFilesToZip(myFiles);
-		addLoincOptionalFilesToZip(myFiles);
 
 		// Actually do the load
 		mySvc.loadLoinc(myFiles.getFiles(), details);
@@ -116,6 +117,13 @@ public class TerminologyLoaderSvcLoincTest {
 		assertEquals("EKG.MEAS", code.getStringProperty("CLASS"));
 		assertEquals("R' wave amplitude in lead I", code.getDisplay());
 
+		// Code with component that has a divisor
+		code = concepts.get("17788-1");
+		assertEquals("17788-1", code.getCode());
+		assertEquals(1, code.getCodingProperties("COMPONENT").size());
+		assertEquals("http://loinc.org", code.getCodingProperties("COMPONENT").get(0).getSystem());
+		assertEquals("LP19258-0", code.getCodingProperties("COMPONENT").get(0).getCode());
+
 		// Loinc code with answer
 		code = concepts.get("61438-8");
 		assertThat(code.getStringProperties("answer-list"), contains("LL1000-0"));
@@ -148,6 +156,10 @@ public class TerminologyLoaderSvcLoincTest {
 		assertEquals("LA6270-8", vs.getCompose().getInclude().get(0).getConcept().get(0).getCode());
 		assertEquals("Never", vs.getCompose().getInclude().get(0).getConcept().get(0).getDisplay());
 
+		// External AnswerList
+		vs = valueSets.get("LL1892-0");
+		assertEquals(0, vs.getCompose().getIncludeFirstRep().getConcept().size());
+
 		// Part
 		code = concepts.get("LP101394-7");
 		assertEquals("LP101394-7", code.getCode());
@@ -221,9 +233,9 @@ public class TerminologyLoaderSvcLoincTest {
 		assertEquals("NM", code.getCodingProperties(propertyName).get(0).getDisplay());
 
 		// RSNA Playbook - LOINC Part -> RadLex RID Mappings
-		conceptMap = conceptMaps.get(LoincRsnaPlaybookHandler.RID_MAPPING_CM_ID);
-		assertEquals(LoincRsnaPlaybookHandler.RID_MAPPING_CM_URI, conceptMap.getUrl());
-		assertEquals(LoincRsnaPlaybookHandler.RID_MAPPING_CM_NAME, conceptMap.getName());
+		conceptMap = conceptMaps.get(LoincPartRelatedCodeMappingHandler.LOINC_PART_TO_RID_PART_MAP_ID);
+		assertEquals(LoincPartRelatedCodeMappingHandler.LOINC_PART_TO_RID_PART_MAP_URI, conceptMap.getUrl());
+		assertEquals(LoincPartRelatedCodeMappingHandler.LOINC_PART_TO_RID_PART_MAP_NAME, conceptMap.getName());
 		assertEquals(1, conceptMap.getGroup().size());
 		group = conceptMap.getGroupFirstRep();
 		// all entries have the same source and target so these should be null
@@ -237,9 +249,9 @@ public class TerminologyLoaderSvcLoincTest {
 		assertEquals(Enumerations.ConceptMapEquivalence.EQUAL, group.getElement().get(0).getTarget().get(0).getEquivalence());
 
 		// RSNA Playbook - LOINC Term -> RadLex RPID Mappings
-		conceptMap = conceptMaps.get(LoincRsnaPlaybookHandler.RPID_MAPPING_CM_ID);
-		assertEquals(LoincRsnaPlaybookHandler.RPID_MAPPING_CM_URI, conceptMap.getUrl());
-		assertEquals(LoincRsnaPlaybookHandler.RPID_MAPPING_CM_NAME, conceptMap.getName());
+		conceptMap = conceptMaps.get(LoincPartRelatedCodeMappingHandler.LOINC_TERM_TO_RPID_PART_MAP_ID);
+		assertEquals(LoincPartRelatedCodeMappingHandler.LOINC_TERM_TO_RPID_PART_MAP_URI, conceptMap.getUrl());
+		assertEquals(LoincPartRelatedCodeMappingHandler.LOINC_TERM_TO_RPID_PART_MAP_NAME, conceptMap.getName());
 		assertEquals(1, conceptMap.getGroup().size());
 		group = conceptMap.getGroupFirstRep();
 		// all entries have the same source and target so these should be null
@@ -286,7 +298,7 @@ public class TerminologyLoaderSvcLoincTest {
 
 		// IEEE Medical Device Codes
 		conceptMap = conceptMaps.get(LoincIeeeMedicalDeviceCodeHandler.LOINC_IEEE_CM_ID);
-		ourLog.info(FhirContext.forR4().newXmlParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
+		ourLog.debug(FhirContext.forR4().newXmlParser().setPrettyPrint(true).encodeResourceToString(conceptMap));
 		assertEquals(LoincIeeeMedicalDeviceCodeHandler.LOINC_IEEE_CM_NAME, conceptMap.getName());
 		assertEquals(LoincIeeeMedicalDeviceCodeHandler.LOINC_IEEE_CM_URI, conceptMap.getUrl());
 		assertEquals(1, conceptMap.getGroup().size());
@@ -308,9 +320,29 @@ public class TerminologyLoaderSvcLoincTest {
 		assertEquals(9, vs.getCompose().getInclude().get(0).getConcept().size());
 		assertEquals("11525-3", vs.getCompose().getInclude().get(0).getConcept().get(0).getCode());
 		assertEquals("US Pelvis Fetus for pregnancy", vs.getCompose().getInclude().get(0).getConcept().get(0).getDisplay());
+
+		// Group - Parent
+		vs = valueSets.get("LG100-4");
+		ourLog.info(FhirContext.forR4().newXmlParser().setPrettyPrint(true).encodeResourceToString(vs));
+		assertEquals("Chem_DrugTox_Chal_Sero_Allergy<SAME:Comp|Prop|Tm|Syst (except intravascular and urine)><ANYBldSerPlas,ANYUrineUrineSed><ROLLUP:Method>", vs.getName());
+		assertEquals("http://loinc.org/vs/LG100-4", vs.getUrl());
+		assertEquals(1, vs.getCompose().getInclude().size());
+		assertEquals(1, vs.getCompose().getInclude().get(0).getValueSet().size());
+		assertEquals("http://loinc.org/vs/LG1695-8", vs.getCompose().getInclude().get(0).getValueSet().get(0).getValueAsString());
+
+		// Group - Child
+		vs = valueSets.get("LG1695-8");
+		ourLog.info(FhirContext.forR4().newXmlParser().setPrettyPrint(true).encodeResourceToString(vs));
+		assertEquals("1,4-Dichlorobenzene|MCnc|Pt|ANYBldSerPl", vs.getName());
+		assertEquals("http://loinc.org/vs/LG1695-8", vs.getUrl());
+		assertEquals(1, vs.getCompose().getInclude().size());
+		assertEquals(2, vs.getCompose().getInclude().get(0).getConcept().size());
+		assertEquals("17424-3", vs.getCompose().getInclude().get(0).getConcept().get(0).getCode());
+		assertEquals("13006-2", vs.getCompose().getInclude().get(0).getConcept().get(1).getCode());
 	}
 
 	@Test
+	@Ignore
 	public void testLoadLoincMandatoryFilesOnly() throws IOException {
 		addLoincMandatoryFilesToZip(myFiles);
 
@@ -334,26 +366,29 @@ public class TerminologyLoaderSvcLoincTest {
 
 	@Test
 	public void testLoadLoincMissingMandatoryFiles() throws IOException {
-		addLoincOptionalFilesToZip(myFiles);
+		myFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_UPLOAD_PROPERTIES_FILE);
+		myFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_GROUP_FILE);
 
 		// Actually do the load
 		try {
 			mySvc.loadLoinc(myFiles.getFiles(), details);
 			fail();
 		} catch (UnprocessableEntityException e) {
-			assertEquals("Could not find the following mandatory files in input: [Loinc.csv, MultiAxialHierarchy.csv]", e.getMessage());
+			assertThat(e.getMessage(), containsString("Could not find the following mandatory files in input:"));
+			assertThat(e.getMessage(), containsString("Loinc.csv"));
+			assertThat(e.getMessage(), containsString("MultiAxialHierarchy.csv"));
 		}
 	}
 
 
-	static void addLoincMandatoryFilesToZip(ZipCollectionBuilder theFiles) throws IOException {
-		theFiles.addFileZip("/loinc/", "Loinc.csv", TerminologyLoaderSvcImpl.LOINC_FILE);
-		theFiles.addFileZip("/loinc/", "MultiAxialHierarchy.csv", TerminologyLoaderSvcImpl.LOINC_HIERARCHY_FILE);
-	}
-
-	static void addLoincOptionalFilesToZip(ZipCollectionBuilder theFiles) throws IOException {
-		theFiles.addFileZip("/loinc/", "loincupload.properties");
-		theFiles.addFileZip("/loinc/", "AnswerList.csv", TerminologyLoaderSvcImpl.LOINC_ANSWERLIST_FILE);
+	public static void addLoincMandatoryFilesToZip(ZipCollectionBuilder theFiles) throws IOException {
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_UPLOAD_PROPERTIES_FILE);
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_GROUP_FILE);
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_GROUP_TERMS_FILE);
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_PARENT_GROUP_FILE);
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_FILE, TerminologyLoaderSvcImpl.LOINC_FILE);
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_HIERARCHY_FILE, TerminologyLoaderSvcImpl.LOINC_HIERARCHY_FILE);
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_ANSWERLIST_FILE, TerminologyLoaderSvcImpl.LOINC_ANSWERLIST_FILE);
 		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_ANSWERLIST_LINK_FILE, TerminologyLoaderSvcImpl.LOINC_ANSWERLIST_LINK_FILE);
 		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_PART_FILE, TerminologyLoaderSvcImpl.LOINC_PART_FILE);
 		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_PART_LINK_FILE, TerminologyLoaderSvcImpl.LOINC_PART_LINK_FILE);
@@ -363,13 +398,8 @@ public class TerminologyLoaderSvcLoincTest {
 		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_UNIVERSAL_LAB_ORDER_VALUESET_FILE);
 		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_IEEE_MEDICAL_DEVICE_CODE_MAPPING_TABLE_CSV);
 		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_IMAGING_DOCUMENT_CODES_FILE);
-
-		/*
-		 * Top 2000 files have versions in the filename so don't use the
-		 * constant.. that way this is a better test
-		 */
-		theFiles.addFilePlain("/loinc/", "Top2000CommonLabResultsSi.csv");
-		theFiles.addFilePlain("/loinc/", "Top2000CommonLabResultsUs.csv");
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_TOP2000_COMMON_LAB_RESULTS_SI_FILE);
+		theFiles.addFileZip("/loinc/", TerminologyLoaderSvcImpl.LOINC_TOP2000_COMMON_LAB_RESULTS_US_FILE);
 	}
 
 	@AfterClass
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologySvcImplDstu3Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologySvcImplDstu3Test.java
index 665eca92428..14e8ddc9fb3 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologySvcImplDstu3Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologySvcImplDstu3Test.java
@@ -129,6 +129,12 @@ public class TerminologySvcImplDstu3Test extends BaseJpaDstu3Test {
 
 			code = new TermConcept(cs, "43343-3");
 			code.addPropertyString("SYSTEM", "Ser");
+			code.addPropertyString("HELLO", "12345-1");
+			cs.getConcepts().add(code);
+
+			code = new TermConcept(cs, "43343-4");
+			code.addPropertyString("SYSTEM", "Ser");
+			code.addPropertyString("HELLO", "12345-2");
 			cs.getConcepts().add(code);
 
 			myTermSvc.storeNewCodeSystemVersion(table.getId(), CS_URL, "SYSTEM NAME", cs);
@@ -286,6 +292,33 @@ public class TerminologySvcImplDstu3Test extends BaseJpaDstu3Test {
 		assertThat(codes, containsInAnyOrder("43343-3"));
 	}
 
+	@Test
+	public void testExpandValueSetPropertySearchWithRegexExcludeUsingOr() {
+		createLoincSystemWithSomeCodes();
+
+		List<String> codes;
+		ValueSet vs;
+		ValueSet outcome;
+		ValueSet.ConceptSetComponent exclude;
+
+		// Include
+		vs = new ValueSet();
+		vs.getCompose()
+			.addInclude()
+			.setSystem(CS_URL);
+
+		exclude = vs.getCompose().addExclude();
+		exclude.setSystem(CS_URL);
+		exclude
+			.addFilter()
+			.setProperty("HELLO")
+			.setOp(ValueSet.FilterOperator.REGEX)
+			.setValue("12345-1|12345-2");
+		outcome = myTermSvc.expandValueSet(vs);
+		codes = toCodesContains(outcome.getExpansion().getContains());
+		assertThat(codes, containsInAnyOrder("50015-7"));
+	}
+
 	@Test
 	public void testExpandValueSetPropertySearchWithRegexInclude() {
 		// create codes with "SYSTEM" property "Bld/Bone mar^Donor" and "Ser"
@@ -558,7 +591,7 @@ public class TerminologySvcImplDstu3Test extends BaseJpaDstu3Test {
 		}
 	}
 
-	private List<String> toCodesContains(List<ValueSet.ValueSetExpansionContainsComponent> theContains) {
+	public static List<String> toCodesContains(List<ValueSet.ValueSetExpansionContainsComponent> theContains) {
 		List<String> retVal = new ArrayList<>();
 
 		for (ValueSet.ValueSetExpansionContainsComponent next : theContains) {
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologySvcImplR4Test.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologySvcImplR4Test.java
index 920febf026c..bbec7646802 100644
--- a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologySvcImplR4Test.java
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/term/TerminologySvcImplR4Test.java
@@ -190,12 +190,22 @@ public class TerminologySvcImplR4Test extends BaseJpaR4Test {
 				assertEquals("Version 1", element.getSystemVersion());
 				assertEquals(VS_URL, element.getValueSet());
 				assertEquals(CM_URL, element.getConceptMapUrl());
-				assertEquals(1, element.getConceptMapGroupElementTargets().size());
+
+				assertEquals(2, element.getConceptMapGroupElementTargets().size());
 
 				target = element.getConceptMapGroupElementTargets().get(0);
-
 				ourLog.info("ConceptMap.group(0).element(1).target(0):\n" + target.toString());
+				assertEquals("45678", target.getCode());
+				assertEquals("Target Code 45678", target.getDisplay());
+				assertEquals(CS_URL_2, target.getSystem());
+				assertEquals("Version 2", target.getSystemVersion());
+				assertEquals(ConceptMapEquivalence.WIDER, target.getEquivalence());
+				assertEquals(VS_URL_2, target.getValueSet());
+				assertEquals(CM_URL, target.getConceptMapUrl());
 
+				// We had deliberately added a duplicate, and here it is...
+				target = element.getConceptMapGroupElementTargets().get(1);
+				ourLog.info("ConceptMap.group(0).element(1).target(1):\n" + target.toString());
 				assertEquals("45678", target.getCode());
 				assertEquals("Target Code 45678", target.getDisplay());
 				assertEquals(CS_URL_2, target.getSystem());
diff --git a/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/util/HashFunctionTester.java b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/util/HashFunctionTester.java
new file mode 100644
index 00000000000..2de91e905bf
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/java/ca/uhn/fhir/jpa/util/HashFunctionTester.java
@@ -0,0 +1,47 @@
+package ca.uhn.fhir.jpa.util;
+
+import ca.uhn.fhir.util.StopWatch;
+import com.google.common.base.Charsets;
+import com.google.common.hash.HashFunction;
+import com.google.common.hash.Hasher;
+import com.google.common.hash.Hashing;
+import com.helger.commons.base64.Base64;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.TimeUnit;
+
+public class HashFunctionTester {
+	byte[] bytes1 = "ABCDiohseoiey oisegoyi  loegsiyosg l".getBytes(Charsets.UTF_8);
+	byte[] bytes2 = "sepyo  pyoiyi fdfff".getBytes(Charsets.UTF_8);
+	byte[] bytes3 = "us".getBytes(Charsets.UTF_8);
+	byte[] bytes4 = "f;pspus sgrygliy gfdygfio fdgxylxgfdyfgxloygfxdofgixyl yxxfly3ar3r8a3988".getBytes(Charsets.UTF_8);
+
+	@Test
+	public void testHashBenchmark() {
+
+		test(Hashing.murmur3_128(), "murmur3_128 ");
+		test(Hashing.sha256()     , "sha256      ");
+		test(Hashing.sha384()     , "sha384      ");
+		test(Hashing.sha512()     , "sha512      ");
+
+	}
+
+	public void test(HashFunction theHashFunction, String theName) {
+		int loops = 10000;
+		StopWatch sw = new StopWatch();
+		String output = "";
+		for (int i = 0; i < loops; i++) {
+			Hasher hasher = theHashFunction.newHasher();
+			hasher.putBytes(bytes1);
+			hasher.putBytes(bytes2);
+			hasher.putBytes(bytes3);
+			hasher.putBytes(bytes4);
+			output = Base64.encodeBytes(hasher.hash().asBytes());
+		}
+		ourLog.info("{} took {}ms for {} or {}/second to generate {} chars: {}", theName, sw.getMillis(), loops, sw.getThroughput(loops, TimeUnit.SECONDS), output.length(), output);
+	}
+
+	private static final Logger ourLog = LoggerFactory.getLogger(HashFunctionTester.class);
+}
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/bug1044-bundle.xml b/hapi-fhir-jpaserver-base/src/test/resources/bug1044-bundle.xml
new file mode 100644
index 00000000000..d86d0a79e6b
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/resources/bug1044-bundle.xml
@@ -0,0 +1,214 @@
+<Bundle>
+	<type value="transaction"/>
+	<entry>
+		<resource>
+		<StructureDefinition xmlns="http://hl7.org/fhir">
+			<meta>
+				<lastUpdated value="2017-10-20T11:01:15.167+02:00"/>
+			</meta>
+			<url value="http://fhir.de/StructureDefinition/organization-de-basis/0.2"/>
+			<version value="0.2-WORK"/>
+			<name value="organization-de-basis-0.2"/>
+			<title value="Organisation, deutsches Basisprofil (Version 0.2)"/>
+			<status value="draft"/>
+			<date value="2018-06-28"/>
+			<publisher value="HL7 Deutschland e.V. (Technisches Komitee FHIR)"/>
+			<contact>
+				<telecom>
+					<system value="other"/>
+					<value value="http://hl7.de/technische-komitees/fhir/"/>
+				</telecom>
+			</contact>
+			<description value="Basisprofil für die Verwendung der Organization Ressource in Deutschland."/>
+			<copyright value="HL7 Deutschland e.V."/>
+			<fhirVersion value="3.0.1"/>
+			<kind value="resource"/>
+			<abstract value="false"/>
+			<type value="Organization"/>
+			<baseDefinition value="http://hl7.org/fhir/StructureDefinition/Organization"/>
+			<differential>
+				<element id="Organization">
+					<path value="Organization"/>
+					<short value="Organisationen im deutschen Gesundheitswesen."/>
+					<definition
+						value="Basisprofil für die Repräsentation verschiedener Organisationen mit in Deutschland üblichen Identifiern."/>
+				</element>
+				<element id="Organization.extension">
+					<path value="Organization.extension"/>
+					<slicing>
+						<discriminator>
+							<type value="value"/>
+							<path value="url"/>
+						</discriminator>
+						<rules value="open"/>
+					</slicing>
+				</element>
+				<element id="Organization.extension:betriebsstaetten-hierarchie">
+					<path value="Organization.extension"/>
+					<sliceName value="betriebsstaetten-hierarchie"/>
+					<max value="1"/>
+					<type>
+						<code value="Extension"/>
+						<profile value="http://fhir.de/StructureDefinition/betriebsstaetten-hierarchie/0.2"/>
+					</type>
+				</element>
+				<element id="Organization.identifier">
+					<path value="Organization.identifier"/>
+					<slicing>
+						<discriminator>
+							<type value="value"/>
+							<path value="system"/>
+						</discriminator>
+						<discriminator>
+							<type value="value"/>
+							<path value="value"/>
+						</discriminator>
+						<rules value="open"/>
+					</slicing>
+					<short value="Identifiziert eine Organisation"/>
+					<definition
+						value="Identifikator für die Organisation, mit dem die Organisation über mehrere verschiedene Systeme hinweg identifiziert wird."/>
+				</element>
+				<element id="Organization.identifier.system">
+					<path value="Organization.identifier.system"/>
+					<min value="1"/>
+				</element>
+				<element id="Organization.identifier.value">
+					<path value="Organization.identifier.value"/>
+					<min value="1"/>
+				</element>
+				<element id="Organization.identifier:Betriebsstaettennummer">
+					<path value="Organization.identifier"/>
+					<sliceName value="Betriebsstaettennummer"/>
+					<short value="Betriebstättennummer (BSNR) vergeben durch die KBV."/>
+					<definition
+						value="Die Betriebsstättennummer (BSNR) entspricht der bis zum 30. Juni 2008 gültigen siebenstelligen KV-Abrechnungsnummer, ergänzt um zwei angehängte Nullen. Sie identifiziert die Arztpraxis als abrechnende Einheit und ermöglicht die Zuordnung ärztlicher Leistungen zum Ort der Leistungserbringung. Dabei umfasst der Begriff Arztpraxis auch Medizinische Versorgungszentren (MVZ), Institute, Notfallambulanzen sowie Ermächtigungen an Krankenhäusern. Stellen 1–2: KV-Landes- oder Bezirksstellenschlüssel[1] Stellen 3–7: eindeutige Identifikationsnummer der KV, in deren Bereich die Betriebsstätte liegt Stellen 8, 9: „00“"/>
+					<max value="1"/>
+				</element>
+				<element id="Organization.identifier:Betriebsstaettennummer.system">
+					<path value="Organization.identifier.system"/>
+					<short value="Namespace für Betriebsstättennnummern der KBV"/>
+					<definition value="Die URL dient als eindeutiger Name des BSNR-Nummernkreises."/>
+					<min value="1"/>
+					<fixedUri value="http://fhir.de/NamingSystem/kbv/bsnr"/>
+				</element>
+				<element id="Organization.identifier:Betriebsstaettennummer.value">
+					<path value="Organization.identifier.value"/>
+					<short value="Betriebsstättennummer der Organisation"/>
+					<definition value="Betriebsstättennummer der Organisation"/>
+					<min value="1"/>
+				</element>
+				<element id="Organization.identifier:Betriebsstaettennummer.period">
+					<path value="Organization.identifier.period"/>
+					<short value="Zeitraum in welchem der Identifikator gültig ist oder war."/>
+					<definition value="Zeitraum in welchem der Identifikator gültig ist oder war."/>
+				</element>
+				<element id="Organization.identifier:Betriebsstaettennummer.period.start">
+					<path value="Organization.identifier.period.start"/>
+					<short value="Beginn der BSNR Gültigkeit"/>
+					<definition value="Beginn der BSNR Gültigkeit"/>
+				</element>
+				<element id="Organization.identifier:Betriebsstaettennummer.period.end">
+					<path value="Organization.identifier.period.end"/>
+					<short value="Ende der BSNR Gültigkeit"/>
+					<definition value="Ende der BSNR Gültigkeit. leer, falls aktuell gültig."/>
+				</element>
+				<element id="Organization.identifier:Betriebsstaettennummer.assigner">
+					<path value="Organization.identifier.assigner"/>
+					<short value="Organisation welche den Identifikator vergeben hat."/>
+					<definition value="Organisation welche den Identifikator vergeben hat."/>
+				</element>
+				<element id="Organization.identifier:Betriebsstaettennummer.assigner.display">
+					<extension url="http://hl7.org/fhir/StructureDefinition/elementdefinition-translatable">
+						<valueBoolean value="true"/>
+					</extension>
+					<path value="Organization.identifier.assigner.display"/>
+					<short value="Name der zuständigen Kassenärztlichen Vereinigung (KV)"/>
+					<definition
+						value="Name der zuständigen Kassenärztlichen Vereinigung (KV). z.B.: &quot;KV Baden-Württemberg&quot;"/>
+				</element>
+				<element id="Organization.identifier:Institutionskennzeichen">
+					<path value="Organization.identifier"/>
+					<sliceName value="Institutionskennzeichen"/>
+					<short value="IK Nummer vergeben durch die Arbeitsgemeinschaft Institutionskennzeichen."/>
+					<definition
+						value="Die Institutionskennzeichen (kurz: IK) sind bundesweit eindeutige, neunstellige Zahlen vergeben durch die Arbeitsgemeinschaft Institutionskennzeichen, mit deren Hilfe Abrechnungen und Qualitätssicherungsmaßnahmen im Bereich der deutschen Sozialversicherung einrichtungsübergreifend abgewickelt werden können. "/>
+					<max value="1"/>
+				</element>
+				<element id="Organization.identifier:Institutionskennzeichen.system">
+					<path value="Organization.identifier.system"/>
+					<short value="Namespace für Instituskennzeichen."/>
+					<min value="1"/>
+					<fixedUri value=" http://fhir.de/NamingSystem/arge-ik/iknr"/>
+				</element>
+				<element id="Organization.identifier:Institutionskennzeichen.value">
+					<path value="Organization.identifier.value"/>
+					<short value="Institutskennzeichen der Organisation"/>
+					<definition value="Institutskennzeichen der Organisation"/>
+					<min value="1"/>
+				</element>
+				<element id="Organization.identifier:ASV-Teamnummer">
+					<path value="Organization.identifier"/>
+					<sliceName value="ASV-Teamnummer"/>
+					<short value="Die ASV-Teamnummer"/>
+					<definition value="ASV-Teamnummer. Wird nur für Organizations vom Typ ASV-Team vergeben."/>
+					<max value="1"/>
+				</element>
+				<element id="Organization.identifier:ASV-Teamnummer.system">
+					<path value="Organization.identifier.system"/>
+					<min value="1"/>
+					<fixedUri value="http://fhir.de/NamingSystem/asv/teamnummer"/>
+				</element>
+				<element id="Organization.identifier:ASV-Teamnummer.value">
+					<path value="Organization.identifier.value"/>
+					<min value="1"/>
+				</element>
+				<element id="Organization.type">
+					<path value="Organization.type"/>
+					<short value="Art(en) der Organisation"/>
+					<definition value="Art(en) der Organisation"/>
+					<binding>
+						<extension url="http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName">
+							<valueString value="OrganizationType"/>
+						</extension>
+						<strength value="extensible"/>
+						<valueSetUri value="http://fhir.de/ValueSet/arge-ik/klassifikation"/>
+					</binding>
+				</element>
+				<element id="Organization.type.coding">
+					<path value="Organization.type.coding"/>
+					<short value="IK Klassifikation der Organisation"/>
+					<definition value="IK Klassifikation der Organisation"/>
+				</element>
+				<element id="Organization.name">
+					<path value="Organization.name"/>
+					<short value="Name der Betriebsstätte"/>
+					<definition
+						value="Menschenlesbarer Name der Betriebsstätte, z.B.: &quot;Gemeinschaftspraxis Dr. Soundso&quot;"/>
+				</element>
+				<element id="Organization.address">
+					<path value="Organization.address"/>
+					<type>
+						<code value="Address"/>
+						<profile value="http://fhir.de/StructureDefinition/address-de-basis/0.2"/>
+					</type>
+				</element>
+				<element id="Organization.address.state">
+					<path value="Organization.address.state"/>
+					<definition value="Name (oder Kürzel) des Bundeslandes."/>
+				</element>
+				<element id="Organization.partOf">
+					<path value="Organization.partOf"/>
+					<type>
+						<code value="Reference"/>
+						<targetProfile value="http://fhir.de/StructureDefinition/organization-de-basis/0.2"/>
+					</type>
+				</element>
+			</differential>
+		</StructureDefinition>
+		</resource>
+		<request>
+			<method value="POST"/>
+		</request>
+	</entry>
+</Bundle>
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/logback-test.xml b/hapi-fhir-jpaserver-base/src/test/resources/logback-test.xml
index 91f8a74d3e2..b426d227835 100644
--- a/hapi-fhir-jpaserver-base/src/test/resources/logback-test.xml
+++ b/hapi-fhir-jpaserver-base/src/test/resources/logback-test.xml
@@ -1,5 +1,4 @@
 <configuration>
-
 	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
 			<level>INFO</level>
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/loinc/AnswerList.csv b/hapi-fhir-jpaserver-base/src/test/resources/loinc/AnswerList.csv
index 8af66cca178..a448cf80f2d 100644
--- a/hapi-fhir-jpaserver-base/src/test/resources/loinc/AnswerList.csv
+++ b/hapi-fhir-jpaserver-base/src/test/resources/loinc/AnswerList.csv
@@ -1,11 +1,12 @@
-"AnswerListId","AnswerListName"          ,"AnswerListOID"             ,"ExtDefinedYN","ExtDefinedAnswerListCodeSystem","ExtDefinedAnswerListLink","AnswerStringId","LocalAnswerCode","LocalAnswerCodeSystem","SequenceNumber","DisplayText"                         ,"ExtCodeId","ExtCodeDisplayName"       ,"ExtCodeSystem"         ,"ExtCodeSystemVersion"                                      ,"ExtCodeSystemCopyrightNotice"                                                                                                                                                                                                                                   ,"SubsequentTextPrompt","Description","Score"
-"LL1000-0"    ,"PhenX05_13_30D bread amt","1.3.6.1.4.1.12009.10.1.165","N"           ,                                ,                          ,"LA13825-7"     ,"1"              ,                       ,1               ,"1 slice or 1 dinner roll"            ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1000-0"    ,"PhenX05_13_30D bread amt","1.3.6.1.4.1.12009.10.1.165","N"           ,                                ,                          ,"LA13838-0"     ,"2"              ,                       ,2               ,"2 slices or 2 dinner rolls"          ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1000-0"    ,"PhenX05_13_30D bread amt","1.3.6.1.4.1.12009.10.1.165","N"           ,                                ,                          ,"LA13892-7"     ,"3"              ,                       ,3               ,"More than 2 slices or 2 dinner rolls",           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166","N"           ,                                ,                          ,"LA6270-8"      ,"00"             ,                       ,1               ,"Never"                               ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166","N"           ,                                ,                          ,"LA13836-4"     ,"01"             ,                       ,2               ,"1-3 times per month"                 ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166","N"           ,                                ,                          ,"LA13834-9"     ,"02"             ,                       ,3               ,"1-2 times per week"                  ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166","N"           ,                                ,                          ,"LA13853-9"     ,"03"             ,                       ,4               ,"3-4 times per week"                  ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166","N"           ,                                ,                          ,"LA13860-4"     ,"04"             ,                       ,5               ,"5-6 times per week"                  ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166","N"           ,                                ,                          ,"LA13827-3"     ,"05"             ,                       ,6               ,"1 time per day"                      ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
-"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166","N"           ,                                ,                          ,"LA4389-8"      ,"97"             ,                       ,11              ,"Refused"                             ,"443390004","Refused (qualifier value)","http://snomed.info/sct","http://snomed.info/sct/900000000000207008/version/20170731","This material includes SNOMED Clinical Terms® (SNOMED CT®) which is used by permission of the International Health Terminology Standards Development Organisation (IHTSDO) under license. All rights reserved. SNOMED CT® was originally created by The College",                      ,             ,
+"AnswerListId","AnswerListName"          ,"AnswerListOID"              ,"ExtDefinedYN","ExtDefinedAnswerListCodeSystem","ExtDefinedAnswerListLink"       ,"AnswerStringId","LocalAnswerCode","LocalAnswerCodeSystem","SequenceNumber","DisplayText"                         ,"ExtCodeId","ExtCodeDisplayName"       ,"ExtCodeSystem"         ,"ExtCodeSystemVersion"                                      ,"ExtCodeSystemCopyrightNotice"                                                                                                                                                                                                                                   ,"SubsequentTextPrompt","Description","Score"
+"LL1000-0"    ,"PhenX05_13_30D bread amt","1.3.6.1.4.1.12009.10.1.165" ,"N"           ,                                ,                                 ,"LA13825-7"     ,"1"              ,                       ,1               ,"1 slice or 1 dinner roll"            ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1000-0"    ,"PhenX05_13_30D bread amt","1.3.6.1.4.1.12009.10.1.165" ,"N"           ,                                ,                                 ,"LA13838-0"     ,"2"              ,                       ,2               ,"2 slices or 2 dinner rolls"          ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1000-0"    ,"PhenX05_13_30D bread amt","1.3.6.1.4.1.12009.10.1.165" ,"N"           ,                                ,                                 ,"LA13892-7"     ,"3"              ,                       ,3               ,"More than 2 slices or 2 dinner rolls",           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166" ,"N"           ,                                ,                                 ,"LA6270-8"      ,"00"             ,                       ,1               ,"Never"                               ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166" ,"N"           ,                                ,                                 ,"LA13836-4"     ,"01"             ,                       ,2               ,"1-3 times per month"                 ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166" ,"N"           ,                                ,                                 ,"LA13834-9"     ,"02"             ,                       ,3               ,"1-2 times per week"                  ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166" ,"N"           ,                                ,                                 ,"LA13853-9"     ,"03"             ,                       ,4               ,"3-4 times per week"                  ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166" ,"N"           ,                                ,                                 ,"LA13860-4"     ,"04"             ,                       ,5               ,"5-6 times per week"                  ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166" ,"N"           ,                                ,                                 ,"LA13827-3"     ,"05"             ,                       ,6               ,"1 time per day"                      ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
+"LL1001-8"    ,"PhenX05_14_30D freq amts","1.3.6.1.4.1.12009.10.1.166" ,"N"           ,                                ,                                 ,"LA4389-8"      ,"97"             ,                       ,11              ,"Refused"                             ,"443390004","Refused (qualifier value)","http://snomed.info/sct","http://snomed.info/sct/900000000000207008/version/20170731","This material includes SNOMED Clinical Terms® (SNOMED CT®) which is used by permission of the International Health Terminology Standards Development Organisation (IHTSDO) under license. All rights reserved. SNOMED CT® was originally created by The College",                      ,             ,
+"LL1892-0"    ,"ICD-9_ICD-10"            ,"1.3.6.1.4.1.12009.10.1.1069","Y"           ,                                ,"http://www.cdc.gov/nchs/icd.htm",                ,                 ,                       ,                ,                                      ,           ,                           ,                        ,                                                            ,                                                                                                                                                                                                                                                                 ,                      ,             ,
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/loinc/Group.csv b/hapi-fhir-jpaserver-base/src/test/resources/loinc/Group.csv
new file mode 100644
index 00000000000..66f5561ea1c
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/resources/loinc/Group.csv
@@ -0,0 +1,2 @@
+"ParentGroupId","GroupId","Group","Archetype","Status","VersionFirstReleased"
+"LG100-4","LG1695-8","1,4-Dichlorobenzene|MCnc|Pt|ANYBldSerPl","","Active",""
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/loinc/GroupLoincTerms.csv b/hapi-fhir-jpaserver-base/src/test/resources/loinc/GroupLoincTerms.csv
new file mode 100644
index 00000000000..04c19759cfb
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/resources/loinc/GroupLoincTerms.csv
@@ -0,0 +1,3 @@
+"Category","GroupId","Archetype","LoincNumber","LongCommonName"
+"Flowsheet","LG1695-8","","17424-3","1,4-Dichlorobenzene [Mass/volume] in Blood"
+"Flowsheet","LG1695-8","","13006-2","1,4-Dichlorobenzene [Mass/volume] in Serum or Plasma"
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/loinc/Loinc.csv b/hapi-fhir-jpaserver-base/src/test/resources/loinc/Loinc.csv
index 67e3ebfc0bd..dfb7f1dd732 100644
--- a/hapi-fhir-jpaserver-base/src/test/resources/loinc/Loinc.csv
+++ b/hapi-fhir-jpaserver-base/src/test/resources/loinc/Loinc.csv
@@ -1,16 +1,15 @@
-"LOINC_NUM","COMPONENT"                                                                                   ,"PROPERTY","TIME_ASPCT","SYSTEM"            ,"SCALE_TYP","METHOD_TYP"     ,"CLASS"       ,"VersionLastChanged","CHNG_TYPE","DefinitionDescription"                                                                                            ,"STATUS","CONSUMER_NAME","CLASSTYPE","FORMULA","SPECIES","EXMPL_ANSWERS","SURVEY_QUEST_TEXT"                                                           ,"SURVEY_QUEST_SRC"  ,"UNITSREQUIRED","SUBMITTED_UNITS","RELATEDNAMES2"                                                                                                                                                                                                                                                                               ,"SHORTNAME"                  ,"ORDER_OBS"  ,"CDISC_COMMON_TESTS","HL7_FIELD_SUBFIELD_ID","EXTERNAL_COPYRIGHT_NOTICE","EXAMPLE_UNITS","LONG_COMMON_NAME"                                                                                        ,"UnitsAndRange","DOCUMENT_SECTION","EXAMPLE_UCUM_UNITS","EXAMPLE_SI_UCUM_UNITS","STATUS_REASON","STATUS_TEXT","CHANGE_REASON_PUBLIC"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ,"COMMON_TEST_RANK","COMMON_ORDER_RANK","COMMON_SI_TEST_RANK","HL7_ATTACHMENT_STRUCTURE","EXTERNAL_COPYRIGHT_LINK","PanelType","AskAtOrderEntry","AssociatedObservations" ,"VersionFirstReleased","ValidHL7AttachmentRequest"
-"10013-1"  ,"R' wave amplitude.lead I"                                                                    ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-I; R wave Amp L-I; Random; Right; Voltage"                                            ,"R' wave Amp L-I"            ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead I"                                                                             ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"10014-9"  ,"R' wave amplitude.lead II"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"2; Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-II; R wave Amp L-II; Random; Right; Voltage"                                       ,"R' wave Amp L-II"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead II"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"10015-6"  ,"R' wave amplitude.lead III"                                                                  ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"3; Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-III; R wave Amp L-III; Random; Right; Voltage"                                     ,"R' wave Amp L-III"          ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead III"                                                                           ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"10016-4"  ,"R' wave amplitude.lead V1"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V1; R wave Amp L-V1; Random; Right; Voltage"                                          ,"R' wave Amp L-V1"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V1"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"1001-7"   ,"DBG Ab"                                                                                      ,"Pr"      ,"Pt"        ,"Ser/Plas^donor"    ,"Ord"      ,                 ,"BLDBK"       ,"2.44"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,1          ,         ,         ,               ,                                                                              ,                    ,               ,                 ,"ABS; Aby; Antby; Anti; Antibodies; Antibody; Autoantibodies; Autoantibody; BLOOD BANK; Donna Bennett-Goodspeed; Donr; Ordinal; Pl; Plasma; Plsm; Point in time; QL; Qual; Qualitative; Random; Screen; SerP; SerPl; SerPl^donor; SerPlas; Serum; Serum or plasma; SR"                        ,"DBG Ab SerPl Donr Ql"       ,"Observation",                    ,                       ,                           ,               ,"DBG Ab [Presence] in Serum or Plasma from donor"                                                         ,               ,                  ,                    ,                       ,               ,             ,"The Property has been changed from ACnc to Pr (Presence) to reflect the new model for ordinal terms where results are based on presence or absence."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"10017-2"  ,"R' wave amplitude.lead V2"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V2; R wave Amp L-V2; Random; Right; Voltage"                                          ,"R' wave Amp L-V2"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V2"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"10018-0"  ,"R' wave amplitude.lead V3"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V3; R wave Amp L-V3; Random; Right; Voltage"                                          ,"R' wave Amp L-V3"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V3"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"10019-8"  ,"R' wave amplitude.lead V4"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V4; R wave Amp L-V4; Random; Right; Voltage"                                          ,"R' wave Amp L-V4"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V4"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"10020-6"  ,"R' wave amplitude.lead V5"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V5; R wave Amp L-V5; Random; Right; Voltage"                                          ,"R' wave Amp L-V5"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V5"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"61438-8"  ,"Each time you ate bread, toast or dinner rolls, how much did you usually eat in the past 30D","Find"    ,"Pt"        ,"^Patient"          ,"Ord"      ,"PhenX"          ,"PHENX"       ,"2.44"              ,"MIN"      ,                                                                                                                   ,"TRIAL" ,               ,2          ,         ,         ,               ,"Each time you eat bread, toast or dinner rolls, how much do you usually eat?","PhenX.050201100100","N"            ,                 ,"Finding; Findings; How much bread in 30D; Last; Ordinal; Point in time; QL; Qual; Qualitative; Random; Screen"                                                                                                                                                                               ,"How much bread in 30D PhenX",             ,                    ,                       ,                           ,               ,"Each time you ate bread, toast or dinner rolls, how much did you usually eat in the past 30 days [PhenX]",               ,                  ,                    ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"10000-8"  ,"R wave duration.lead AVR"                                                                    ,"Time"    ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; Durat; ECG; EKG.MEASUREMENTS; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave dur L-AVR; R wave dur L-AVR; Random; Right"                                                                ,"R wave dur L-AVR"           ,"Observation",                    ,                       ,                           ,"s"            ,"R wave duration in lead AVR"                                                                             ,               ,                  ,"s"                 ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
-"17787-3"  ,"Study report"                                                                                ,"Find"    ,"Pt"        ,"Neck>Thyroid gland","Doc"      ,"NM"             ,"RAD"         ,"2.61"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,               ,                 ,"Document; Finding; Findings; Imaging; Point in time; Radiology; Random; Study report; Thy"                                                                                                                                                                                                   ,"NM Thyroid Study report"    ,"Both"       ,                    ,                       ,                           ,               ,"NM Thyroid gland Study report"                                                                           ,               ,                  ,                    ,                       ,               ,             ,"Changed System from ""Thyroid"" for conformance with the LOINC/RadLex unified model.; Method of ""Radnuc"" was changed to ""NM"". The LOINC/RadLex Committee agreed to use a subset of the two-letter DICOM modality codes as the primary modality identifier."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,"IG exists"               ,                         ,           ,                 ,"81220-6;72230-6"        ,"1.0l"                ,
-"17788-1"  ,"Large unstained cells/100 leukocytes"                                                        ,"NFr"     ,"Pt"        ,"Bld"               ,"Qn"       ,"Automated count","HEM/BC"      ,"2.50"              ,"MIN"      ,"Part of auto diff output of Bayer H*3S; peroxidase negative cells too large to be classified as lymph or basophil","ACTIVE",               ,1          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,"%"              ,"100WBC; Auto; Automated detection; Blood; Cell; Cellularity; Elec; Elect; Electr; HEMATOLOGY/CELL COUNTS; Leuc; Leuk; Leukocyte; Lkcs; LUC; Number Fraction; Percent; Point in time; QNT; Quan; Quant; Quantitative; Random; WB; WBC; WBCs; White blood cell; White blood cells; Whole blood","LUC/leuk NFr Bld Auto"      ,"Observation",                    ,                       ,                           ,"%"            ,"Large unstained cells/100 leukocytes in Blood by Automated count"                                        ,               ,                  ,"%"                 ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,1894              ,0                  ,1894                 ,                          ,                         ,           ,                 ,                         ,"1.0l"                ,
-"11488-4"  ,"Consultation note"                                                                           ,"Find"    ,"Pt"        ,"{Setting}"         ,"Doc"      ,"{Role}"         ,"DOC.ONTOLOGY","2.63"              ,"MIN"      ,                                                                                                                   ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,               ,                 ,"Consult note; DOC.ONT; Document; Encounter; Evaluation and management; Evaluation and management note; Finding; Findings; notes; Point in time; Random; Visit note"                                                                                                                          ,"Consult note"               ,"Both"       ,                    ,                       ,                           ,               ,"Consult note"                                                                                            ,               ,                  ,                    ,                       ,               ,             ,"Edit made because this term is conformant to the Document Ontology axis values and therefore are being placed in this class.; Based on Clinical LOINC Committee decision during the September 2014 meeting, {Provider} was changed to {Author Type} to emphasize a greater breadth of potential document authors. At the September 2015 Clinical LOINC Committee meeting, the Committee decided to change {Author Type} to {Role} to align with the 'Role' axis name in the LOINC Document Ontology.; Because it is too difficult to maintain and because the distinction between documents and sections is not clear-cut nor necessary in most cases, the DOCUMENT_SECTION field has been deemed to have little value. The field has been set to null in the December 2017 release in preparation for removal in the December 2018 release. These changes were approved by the Clinical LOINC Committee.",0                 ,0                  ,0                    ,"IG exists"               ,                         ,           ,                 ,"81222-2;72231-4;81243-8","1.0j-a"              ,"Y"
-
+"LOINC_NUM","COMPONENT"                                                                                   ,"PROPERTY","TIME_ASPCT","SYSTEM"            ,"SCALE_TYP","METHOD_TYP"     ,"CLASS"       ,"VersionLastChanged","CHNG_TYPE","DefinitionDescription"                                                                                                                                                                                ,"STATUS","CONSUMER_NAME","CLASSTYPE","FORMULA","SPECIES","EXMPL_ANSWERS","SURVEY_QUEST_TEXT"                                                           ,"SURVEY_QUEST_SRC"  ,"UNITSREQUIRED","SUBMITTED_UNITS","RELATEDNAMES2"                                                                                                                                                                                                                                                                                                                                                      ,"SHORTNAME"                  ,"ORDER_OBS"  ,"CDISC_COMMON_TESTS","HL7_FIELD_SUBFIELD_ID","EXTERNAL_COPYRIGHT_NOTICE","EXAMPLE_UNITS","LONG_COMMON_NAME"                                                                                        ,"UnitsAndRange","DOCUMENT_SECTION","EXAMPLE_UCUM_UNITS","EXAMPLE_SI_UCUM_UNITS","STATUS_REASON","STATUS_TEXT","CHANGE_REASON_PUBLIC"                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     ,"COMMON_TEST_RANK","COMMON_ORDER_RANK","COMMON_SI_TEST_RANK","HL7_ATTACHMENT_STRUCTURE","EXTERNAL_COPYRIGHT_LINK","PanelType","AskAtOrderEntry","AssociatedObservations" ,"VersionFirstReleased","ValidHL7AttachmentRequest"
+"10013-1"  ,"R' wave amplitude.lead I"                                                                    ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-I; R wave Amp L-I; Random; Right; Voltage"                                                                                                                   ,"R' wave Amp L-I"            ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead I"                                                                             ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"10014-9"  ,"R' wave amplitude.lead II"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"2; Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-II; R wave Amp L-II; Random; Right; Voltage"                                                                                                              ,"R' wave Amp L-II"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead II"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"10015-6"  ,"R' wave amplitude.lead III"                                                                  ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"3; Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-III; R wave Amp L-III; Random; Right; Voltage"                                                                                                            ,"R' wave Amp L-III"          ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead III"                                                                           ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"10016-4"  ,"R' wave amplitude.lead V1"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V1; R wave Amp L-V1; Random; Right; Voltage"                                                                                                                 ,"R' wave Amp L-V1"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V1"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"1001-7"   ,"DBG Ab"                                                                                      ,"Pr"      ,"Pt"        ,"Ser/Plas^donor"    ,"Ord"      ,                 ,"BLDBK"       ,"2.44"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,1          ,         ,         ,               ,                                                                              ,                    ,               ,                 ,"ABS; Aby; Antby; Anti; Antibodies; Antibody; Autoantibodies; Autoantibody; BLOOD BANK; Donna Bennett-Goodspeed; Donr; Ordinal; Pl; Plasma; Plsm; Point in time; QL; Qual; Qualitative; Random; Screen; SerP; SerPl; SerPl^donor; SerPlas; Serum; Serum or plasma; SR"                                                                                               ,"DBG Ab SerPl Donr Ql"       ,"Observation",                    ,                       ,                           ,               ,"DBG Ab [Presence] in Serum or Plasma from donor"                                                         ,               ,                  ,                    ,                       ,               ,             ,"The Property has been changed from ACnc to Pr (Presence) to reflect the new model for ordinal terms where results are based on presence or absence."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"10017-2"  ,"R' wave amplitude.lead V2"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V2; R wave Amp L-V2; Random; Right; Voltage"                                                                                                                 ,"R' wave Amp L-V2"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V2"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"10018-0"  ,"R' wave amplitude.lead V3"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V3; R wave Amp L-V3; Random; Right; Voltage"                                                                                                                 ,"R' wave Amp L-V3"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V3"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"10019-8"  ,"R' wave amplitude.lead V4"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V4; R wave Amp L-V4; Random; Right; Voltage"                                                                                                                 ,"R' wave Amp L-V4"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V4"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"10020-6"  ,"R' wave amplitude.lead V5"                                                                   ,"Elpot"   ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; ECG; EKG.MEASUREMENTS; Electrical potential; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave Amp L-V5; R wave Amp L-V5; Random; Right; Voltage"                                                                                                                 ,"R' wave Amp L-V5"           ,"Observation",                    ,                       ,                           ,"mV"           ,"R' wave amplitude in lead V5"                                                                            ,               ,                  ,"mV"                ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"61438-8"  ,"Each time you ate bread, toast or dinner rolls, how much did you usually eat in the past 30D","Find"    ,"Pt"        ,"^Patient"          ,"Ord"      ,"PhenX"          ,"PHENX"       ,"2.44"              ,"MIN"      ,                                                                                                                                                                                                       ,"TRIAL" ,               ,2          ,         ,         ,               ,"Each time you eat bread, toast or dinner rolls, how much do you usually eat?","PhenX.050201100100","N"            ,                 ,"Finding; Findings; How much bread in 30D; Last; Ordinal; Point in time; QL; Qual; Qualitative; Random; Screen"                                                                                                                                                                                                                                                      ,"How much bread in 30D PhenX",             ,                    ,                       ,                           ,               ,"Each time you ate bread, toast or dinner rolls, how much did you usually eat in the past 30 days [PhenX]",               ,                  ,                    ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"10000-8"  ,"R wave duration.lead AVR"                                                                    ,"Time"    ,"Pt"        ,"Heart"             ,"Qn"       ,"EKG"            ,"EKG.MEAS"    ,"2.48"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,                 ,"Cardiac; Durat; ECG; EKG.MEASUREMENTS; Electrocardiogram; Electrocardiograph; Hrt; Painter's colic; PB; Plumbism; Point in time; QNT; Quan; Quant; Quantitative; R prime; R' wave dur L-AVR; R wave dur L-AVR; Random; Right"                                                                                                                                       ,"R wave dur L-AVR"           ,"Observation",                    ,                       ,                           ,"s"            ,"R wave duration in lead AVR"                                                                             ,               ,                  ,"s"                 ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,                          ,                         ,           ,                 ,                         ,                      ,
+"17787-3"  ,"Study report"                                                                                ,"Find"    ,"Pt"        ,"Neck>Thyroid gland","Doc"      ,"NM"             ,"RAD"         ,"2.61"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,               ,                 ,"Document; Finding; Findings; Imaging; Point in time; Radiology; Random; Study report; Thy"                                                                                                                                                                                                                                                                          ,"NM Thyroid Study report"    ,"Both"       ,                    ,                       ,                           ,               ,"NM Thyroid gland Study report"                                                                           ,               ,                  ,                    ,                       ,               ,             ,"Changed System from ""Thyroid"" for conformance with the LOINC/RadLex unified model.; Method of ""Radnuc"" was changed to ""NM"". The LOINC/RadLex Committee agreed to use a subset of the two-letter DICOM modality codes as the primary modality identifier."                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,0                 ,0                  ,0                    ,"IG exists"               ,                         ,           ,                 ,"81220-6;72230-6"        ,"1.0l"                ,
+"17788-1"  ,"Large unstained cells/100 leukocytes"                                                        ,"NFr"     ,"Pt"        ,"Bld"               ,"Qn"       ,"Automated count","HEM/BC"      ,"2.50"              ,"MIN"      ,"Part of auto diff output of Bayer H*3S; peroxidase negative cells too large to be classified as lymph or basophil"                                                                                    ,"ACTIVE",               ,1          ,         ,         ,               ,                                                                              ,                    ,"Y"            ,"%"              ,"100WBC; Auto; Automated detection; Blood; Cell; Cellularity; Elec; Elect; Electr; HEMATOLOGY/CELL COUNTS; Leuc; Leuk; Leukocyte; Lkcs; LUC; Number Fraction; Percent; Point in time; QNT; Quan; Quant; Quantitative; Random; WB; WBC; WBCs; White blood cell; White blood cells; Whole blood"                                                                       ,"LUC/leuk NFr Bld Auto"      ,"Observation",                    ,                       ,                           ,"%"            ,"Large unstained cells/100 leukocytes in Blood by Automated count"                                        ,               ,                  ,"%"                 ,                       ,               ,             ,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           ,1894              ,0                  ,1894                 ,                          ,                         ,           ,                 ,                         ,"1.0l"                ,
+"11488-4"  ,"Consultation note"                                                                           ,"Find"    ,"Pt"        ,"{Setting}"         ,"Doc"      ,"{Role}"         ,"DOC.ONTOLOGY","2.63"              ,"MIN"      ,                                                                                                                                                                                                       ,"ACTIVE",               ,2          ,         ,         ,               ,                                                                              ,                    ,               ,                 ,"Consult note; DOC.ONT; Document; Encounter; Evaluation and management; Evaluation and management note; Finding; Findings; notes; Point in time; Random; Visit note"                                                                                                                                                                                                 ,"Consult note"               ,"Both"       ,                    ,                       ,                           ,               ,"Consult note"                                                                                            ,               ,                  ,                    ,                       ,               ,             ,"Edit made because this term is conformant to the Document Ontology axis values and therefore are being placed in this class.; Based on Clinical LOINC Committee decision during the September 2014 meeting, {Provider} was changed to {Author Type} to emphasize a greater breadth of potential document authors. At the September 2015 Clinical LOINC Committee meeting, the Committee decided to change {Author Type} to {Role} to align with the 'Role' axis name in the LOINC Document Ontology.; Because it is too difficult to maintain and because the distinction between documents and sections is not clear-cut nor necessary in most cases, the DOCUMENT_SECTION field has been deemed to have little value. The field has been set to null in the December 2017 release in preparation for removal in the December 2018 release. These changes were approved by the Clinical LOINC Committee.",0                 ,0                  ,0                    ,"IG exists"               ,                         ,           ,                 ,"81222-2;72231-4;81243-8","1.0j-a"              ,"Y"
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/loinc/ParentGroup.csv b/hapi-fhir-jpaserver-base/src/test/resources/loinc/ParentGroup.csv
new file mode 100644
index 00000000000..734a86c43dd
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/resources/loinc/ParentGroup.csv
@@ -0,0 +1,2 @@
+"ParentGroupId","ParentGroup","Status"
+"LG100-4","Chem_DrugTox_Chal_Sero_Allergy<SAME:Comp|Prop|Tm|Syst (except intravascular and urine)><ANYBldSerPlas,ANYUrineUrineSed><ROLLUP:Method>","ACTIVE"
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/loinc/Part.csv b/hapi-fhir-jpaserver-base/src/test/resources/loinc/Part.csv
index 85a4fed2c90..d5816ead286 100644
--- a/hapi-fhir-jpaserver-base/src/test/resources/loinc/Part.csv
+++ b/hapi-fhir-jpaserver-base/src/test/resources/loinc/Part.csv
@@ -39,3 +39,8 @@
 "LP6838-9","PROPERTY","NFr","Number Fraction","ACTIVE"
 "LP6141-8","METHOD","Automated count","Automated count","ACTIVE"
 "LP15842-5","COMPONENT","Pyridoxine","Pyridoxine","ACTIVE"
+"LP19258-0","COMPONENT","Large unstained cells","Large unstained cells","ACTIVE"
+"LP32887-9","SYSTEM","{Setting}","{Setting}","ACTIVE"
+"LP187178-1","METHOD","{Role}","Role-unspecified","ACTIVE"
+"LP72311-1","COMPONENT","Consultation note","Consultation note","ACTIVE"
+
diff --git a/hapi-fhir-jpaserver-base/src/test/resources/r4/tls_communication_bug_communication.json b/hapi-fhir-jpaserver-base/src/test/resources/r4/tls_communication_bug_communication.json
new file mode 100644
index 00000000000..0ee68a87d3d
--- /dev/null
+++ b/hapi-fhir-jpaserver-base/src/test/resources/r4/tls_communication_bug_communication.json
@@ -0,0 +1,46 @@
+{
+	"resourceType": "Communication",
+	"meta": {
+		"lastUpdated": "2018-07-20T19:34:56.236+05:30",
+		"tag": [
+			{
+				"system": "systemDefined",
+				"code": "read"
+			}
+		]
+	},
+	"text": {
+		"status": "generated"
+	},
+	"extension": [
+		{
+			"url": "http://telus.com/fhir/StructureDefinition/ext-communication-msgOwner",
+			"valueString": "17427"
+		},
+		{
+			"url": "http://telus.com/fhir/StructureDefinition/ext-communication-priority",
+			"valueCode": "normal"
+		},
+		{
+			"url": "http://telus.com/fhir/StructureDefinition/ext-communication-topic",
+			"valueString": "dsads"
+		},
+		{
+			"url": "http://telus.com/fhir/StructureDefinition/ext-communication-state",
+			"valueCode": "draft"
+		},
+		{
+			"url": "http://telus.com/fhir/StructureDefinition/ext-communication-thread-id",
+			"valueString": "bd7bc833-953b-4379-b0b0-be3d898dee40"
+		}
+	],
+	"status": "in-progress",
+	"recipient": [
+		{
+			"reference": "RelatedPerson/17852"
+		}
+	],
+	"sender": {
+		"reference": "RelatedPerson/17427"
+	}
+}
diff --git a/hapi-fhir-jpaserver-uhnfhirtest/derby_maintenance.txt b/hapi-fhir-jpaserver-uhnfhirtest/derby_maintenance.txt
index b2f8445cc2e..8899c04f40f 100644
--- a/hapi-fhir-jpaserver-uhnfhirtest/derby_maintenance.txt
+++ b/hapi-fhir-jpaserver-uhnfhirtest/derby_maintenance.txt
@@ -136,3 +136,140 @@ drop table cdr_audit_evt_target_user cascade constraints;
 drop table cdr_xact_log_step cascade constraints;
 drop table cdr_xact_log cascade constraints;
 
+
+
+drop table hfj_history_tag cascade;
+drop table hfj_forced_id cascade;
+drop table hfj_res_link cascade;
+drop table hfj_spidx_coords cascade;
+drop table hfj_spidx_date cascade;
+drop table hfj_spidx_number cascade;
+drop table hfj_spidx_quantity cascade;
+drop table hfj_spidx_string cascade;
+drop table hfj_spidx_token cascade;
+drop table hfj_spidx_uri cascade;
+drop table hfj_res_tag cascade;
+drop table hfj_search_result cascade;
+drop table hfj_search_include cascade;
+drop table hfj_search cascade;
+drop table hfj_res_param_present cascade;
+drop table hfj_idx_cmp_string_uniq cascade;
+drop table hfj_subscription_stats cascade;
+drop table trm_concept_property cascade;
+drop table trm_concept_pc_link cascade;
+drop table trm_concept cascade;
+drop table trm_codesystem_ver cascade;
+drop table trm_codesystem cascade;
+DROP TABLE hfj_resource cascade;
+DROP TABLE hfj_res_ver cascade;
+drop table hfj_search_parm cascade;
+drop table hfj_tag_def cascade;
+
+drop index IDX_FORCEDID_TYPE_FORCEDID;
+alter table hfj_forced_id drop constraint idx_forcedid_type_resid;
+
+
+
+Upgrading
+drop index IDX_SP_STRING;
+create index IDX_SP_STRING_HASH_NRM;
+create index IDX_SP_STRING_HASH_EXCT;
+drop index IDX_SP_TOKEN;
+drop index IDX_SP_TOKEN_UNQUAL;
+create index IDX_SP_TOKEN_HASH;
+create index IDX_SP_TOKEN_HASH_S;
+create index IDX_SP_TOKEN_HASH_SV;
+create index IDX_SP_TOKEN_HASH_V;
+drop index IDX_SP_DATE;
+create index IDX_SP_DATE_HASH;
+drop index IDX_SP_QUANTITY;
+create index IDX_SP_QUANTITY_HASH;
+create index IDX_SP_QUANTITY_HASH_UN;
+drop index IDX_FORCEDID_TYPE_FORCEDID;
+alter table hfj_forced_id drop constraint idx_forcedid_type_resid;
+create index IDX_FORCEDID_TYPE_FID;
+drop index IDX_SP_NUMBER;
+create index IDX_SP_NUMBER_HASH_VAL;
+
+drop column SP_ID from table HFJ_RES_PARAM_PRESENT;
+drop index IDX_SEARCHPARM_RESTYPE_SPNAME;
+drop index IDX_RESPARMPRESENT_SPID_RESID;
+drop table HFJ_SEARCH_PARM;
+
+
+
+# Delete everything
+update hfj_res_ver set forced_id_pid = null where res_id in (select res_id from hfj_resource);
+update hfj_resource set forced_id_pid = null where res_id in (select res_id from hfj_resource);
+delete from hfj_history_tag where res_id in (select res_id from hfj_resource);
+delete from hfj_res_ver where res_id in (select res_id from hfj_resource);
+delete from hfj_forced_id where resource_pid in (select res_id from hfj_resource);
+delete from hfj_res_link where src_resource_id in (select res_id from hfj_resource);
+delete from hfj_res_link where target_resource_id in (select res_id from hfj_resource);
+delete from hfj_spidx_coords;
+delete from hfj_spidx_date;
+delete from hfj_spidx_number;
+delete from hfj_spidx_quantity;
+delete from hfj_spidx_string;
+delete from hfj_spidx_token;
+delete from hfj_spidx_uri;
+delete from hfj_res_tag;
+delete from hfj_search_result;
+delete from hfj_res_param_present;
+delete from hfj_idx_cmp_string_uniq;
+delete from hfj_subscription_stats;
+DELETE FROM TRM_CONCEPT_MAP_GRP_ELM_TGT;
+DELETE FROM TRM_CONCEPT_MAP_GRP_ELEMENT;
+DELETE FROM TRM_CONCEPT_MAP_GROUP;
+DELETE FROM TRM_CONCEPT_MAP;
+DELETE FROM TRM_CONCEPT_DESIG;
+DELETE FROM TRM_CONCEPT_PC_LINK;
+DELETE FROM TRM_CONCEPT_PROPERTY;
+DELETE FROM TRM_CONCEPT;
+DELETE FROM TRM_CODESYSTEM_VER;
+DELETE FROM TRM_CODESYSTEM;
+delete from hfj_resource;
+
+
+
+
+# Delete All (Oracle)
+DROP TABLE HFJ_FORCED_ID CASCADE CONSTRAINTS PURGE;
+DROP TABLE hfj_res_ver CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_resource CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_history_tag CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_res_ver CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_forced_id CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_res_link CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_res_link CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_spidx_coords CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_spidx_date CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_spidx_number CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_spidx_quantity CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_spidx_string CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_spidx_token CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_spidx_uri CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_res_tag CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_search_result CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_res_param_present CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_idx_cmp_string_uniq CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_subscription_stats CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CONCEPT_MAP_GRP_ELM_TGT CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CONCEPT_MAP_GRP_ELEMENT CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CONCEPT_MAP_GROUP CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CONCEPT_MAP CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CONCEPT_DESIG CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CONCEPT_PC_LINK CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CONCEPT_PROPERTY CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CONCEPT CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CODESYSTEM_VER CASCADE CONSTRAINTS PURGE;
+DROP TABLE  TRM_CODESYSTEM CASCADE CONSTRAINTS PURGE;
+DROP TABLE  hfj_resource CASCADE CONSTRAINTS PURGE;
+DROP TABLE HFJ_SEARCH_RESULT CASCADE CONSTRAINTS PURGE;
+DROP TABLE HFJ_SEARCH_PARM CASCADE CONSTRAINTS PURGE;
+DROP TABLE HFJ_SEARCH_INCLUDE CASCADE CONSTRAINTS PURGE;
+DROP TABLE HFJ_SEARCH  CASCADE CONSTRAINTS PURGE;
+DROP TABLE HFJ_SUBSCRIPTION  CASCADE CONSTRAINTS PURGE;
+DROP TABLE HFJ_SUBSCRIPTION_FLAG_RES CASCADE CONSTRAINTS PURGE;
+DROP TABLE HFJ_TAG_DEF CASCADE CONSTRAINTS PURGE;
+
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/api/server/IBundleProvider.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/api/server/IBundleProvider.java
index ed9cebf6f63..9658cd5d500 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/api/server/IBundleProvider.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/api/server/IBundleProvider.java
@@ -1,6 +1,10 @@
 package ca.uhn.fhir.rest.api.server;
 
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+
 import java.util.Date;
+import java.util.List;
 
 /*
  * #%L
@@ -22,51 +26,89 @@ import java.util.Date;
  * #L%
  */
 
-import java.util.List;
-
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.instance.model.api.IPrimitiveType;
-
 
 public interface IBundleProvider {
 
+	/**
+	 * If this method is implemented, provides an ID for the current
+	 * page of results. This ID should be unique (at least within
+	 * the current search as identified by {@link #getUuid()})
+	 * so that it can be used to look up a specific page of results.
+	 * <p>
+	 * This can be used in order to allow the
+	 * server paging mechanism to work using completely
+	 * opaque links (links that do not encode any index/offset
+	 * information), which can be useful on some servers.
+	 * </p>
+	 *
+	 * @since 3.5.0
+	 */
+	default String getCurrentPageId() {
+		return null;
+	}
+
+	/**
+	 * If this method is implemented, provides an ID for the next
+	 * page of results. This ID should be unique (at least within
+	 * the current search as identified by {@link #getUuid()})
+	 * so that it can be used to look up a specific page of results.
+	 * <p>
+	 * This can be used in order to allow the
+	 * server paging mechanism to work using completely
+	 * opaque links (links that do not encode any index/offset
+	 * information), which can be useful on some servers.
+	 * </p>
+	 *
+	 * @since 3.5.0
+	 */
+	default String getNextPageId() {
+		return null;
+	}
+
+	/**
+	 * If this method is implemented, provides an ID for the previous
+	 * page of results. This ID should be unique (at least within
+	 * the current search as identified by {@link #getUuid()})
+	 * so that it can be used to look up a specific page of results.
+	 * <p>
+	 * This can be used in order to allow the
+	 * server paging mechanism to work using completely
+	 * opaque links (links that do not encode any index/offset
+	 * information), which can be useful on some servers.
+	 * </p>
+	 *
+	 * @since 3.5.0
+	 */
+	default String getPreviousPageId() {
+		return null;
+	}
+
+	/**
+	 * Returns the instant as of which this result was created. The
+	 * result of this value is used to populate the <code>lastUpdated</code>
+	 * value on search result/history result bundles.
+	 */
+	IPrimitiveType<Date> getPublished();
+
 	/**
 	 * Load the given collection of resources by index, plus any additional resources per the
 	 * server's processing rules (e.g. _include'd resources, OperationOutcome, etc.). For example,
 	 * if the method is invoked with index 0,10 the method might return 10 search results, plus an
 	 * additional 20 resources which matched a client's _include specification.
-	 * 
-	 * @param theFromIndex
-	 *           The low index (inclusive) to return
-	 * @param theToIndex
-	 *           The high index (exclusive) to return
+	 * <p>
+	 * Note that if this bundle provider was loaded using a
+	 * page ID (i.e. via {@link ca.uhn.fhir.rest.server.IPagingProvider#retrieveResultList(String, String)}
+	 * because {@link #getNextPageId()} provided a value on the
+	 * previous page, then the indexes should be ignored and the
+	 * whole page returned.
+	 * </p>
+	 *
+	 * @param theFromIndex The low index (inclusive) to return
+	 * @param theToIndex   The high index (exclusive) to return
 	 * @return A list of resources. The size of this list must be at least <code>theToIndex - theFromIndex</code>.
 	 */
 	List<IBaseResource> getResources(int theFromIndex, int theToIndex);
 
-	/**
-	 * Optionally may be used to signal a preferred page size to the server, e.g. because
-	 * the implementing code recognizes that the resources which will be returned by this
-	 * implementation are expensive to load so a smaller page size should be used. The value
-	 * returned by this method will only be used if the client has not explicitly requested
-	 * a page size.
-	 * 
-	 * @return Returns the preferred page size or <code>null</code>
-	 */
-	Integer preferredPageSize();
-
-	/**
-	 * Returns the total number of results which match the given query (exclusive of any
-	 * _include's or OperationOutcome). May return {@literal null} if the total size is not
-	 * known or would be too expensive to calculate.
-	 */
-	Integer size();
-
-	/**
-	 * Returns the instant as of which this result was valid
-	 */
-	IPrimitiveType<Date> getPublished();
-
 	/**
 	 * Returns the UUID associated with this search. Note that this
 	 * does not need to return a non-null value unless it a
@@ -79,7 +121,29 @@ public interface IBundleProvider {
 	 * IPagingProvider implementation you might use this method to communicate
 	 * the search ID back to the provider.
 	 * </p>
+	 * <p>
+	 * Note that the UUID returned by this method corresponds to
+	 * the search, and not to the individual page.
+	 * </p>
 	 */
-	public String getUuid();
+	String getUuid();
+
+	/**
+	 * Optionally may be used to signal a preferred page size to the server, e.g. because
+	 * the implementing code recognizes that the resources which will be returned by this
+	 * implementation are expensive to load so a smaller page size should be used. The value
+	 * returned by this method will only be used if the client has not explicitly requested
+	 * a page size.
+	 *
+	 * @return Returns the preferred page size or <code>null</code>
+	 */
+	Integer preferredPageSize();
+
+	/**
+	 * Returns the total number of results which match the given query (exclusive of any
+	 * _include's or OperationOutcome). May return {@literal null} if the total size is not
+	 * known or would be too expensive to calculate.
+	 */
+	Integer size();
 
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/api/server/RequestDetails.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/api/server/RequestDetails.java
index 1dd093562fd..6c3e2be0607 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/api/server/RequestDetails.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/api/server/RequestDetails.java
@@ -7,6 +7,7 @@ import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
 import ca.uhn.fhir.rest.server.IRestfulServerDefaults;
 import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
 import ca.uhn.fhir.rest.server.interceptor.IServerOperationInterceptor;
+import ca.uhn.fhir.util.UrlUtil;
 import org.apache.commons.lang3.Validate;
 import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
@@ -19,6 +20,8 @@ import java.io.Reader;
 import java.io.UnsupportedEncodingException;
 import java.nio.charset.Charset;
 import java.util.*;
+import java.util.function.BiFunction;
+import java.util.stream.Collectors;
 
 import static org.apache.commons.lang3.StringUtils.isBlank;
 
@@ -184,6 +187,21 @@ public abstract class RequestDetails {
 	public void setParameters(Map<String, String[]> theParams) {
 		myParameters = theParams;
 		myUnqualifiedToQualifiedNames = null;
+
+		// Sanitize keys if necessary to prevent injection attacks
+		boolean needsSanitization = false;
+		for (String nextKey : theParams.keySet()) {
+			if (UrlUtil.isNeedsSanitization(nextKey)) {
+				needsSanitization = true;
+				break;
+			}
+		}
+		if (needsSanitization) {
+			myParameters = myParameters
+				.entrySet()
+				.stream()
+				.collect(Collectors.toMap(t -> UrlUtil.sanitizeUrlPart((String) ((Map.Entry) t).getKey()), t -> (String[]) ((Map.Entry) t).getValue()));
+		}
 	}
 
 	/**
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/BundleProviderWithNamedPages.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/BundleProviderWithNamedPages.java
new file mode 100644
index 00000000000..ac764173b65
--- /dev/null
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/BundleProviderWithNamedPages.java
@@ -0,0 +1,98 @@
+package ca.uhn.fhir.rest.server;
+
+/*-
+ * #%L
+ * HAPI FHIR - Server Framework
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import org.apache.commons.lang3.Validate;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+import java.util.List;
+
+/**
+ * Bundle provider that uses named pages instead of counts
+ */
+public class BundleProviderWithNamedPages extends SimpleBundleProvider {
+
+	private String myNextPageId;
+	private String myCurrentPageId;
+	private String myPreviousPageId;
+
+	/**
+	 * Constructor
+	 *
+	 * @param theResultsInThisPage The complete list of results in the current page. Must not be null.
+	 * @param theSearchId          The ID for the search. Note that you should also populate {@link #setNextPageId(String)} and {@link #setPreviousPageId(String)} if these are known. Must not be <code>null</code> or blank.
+	 * @param thePageId            The ID for the current page. Note that you should also populate {@link #setNextPageId(String)} and {@link #setPreviousPageId(String)} if these are known. Must not be <code>null</code> or blank.
+	 * @param theTotalResults      The total number of result (if this is known), or <code>null</code>
+	 * @see #setNextPageId(String)
+	 * @see #setPreviousPageId(String)
+	 */
+	public BundleProviderWithNamedPages(List<IBaseResource> theResultsInThisPage, String theSearchId, String thePageId, Integer theTotalResults) {
+		super(theResultsInThisPage, theSearchId);
+
+		Validate.notNull(theResultsInThisPage, "theResultsInThisPage must not be null");
+		Validate.notBlank(thePageId, "thePageId must not be null or blank");
+
+		setCurrentPageId(thePageId);
+		setSize(theTotalResults);
+	}
+
+	@Override
+	public String getCurrentPageId() {
+		return myCurrentPageId;
+	}
+
+	public BundleProviderWithNamedPages setCurrentPageId(String theCurrentPageId) {
+		myCurrentPageId = theCurrentPageId;
+		return this;
+	}
+
+	@Override
+	public String getNextPageId() {
+		return myNextPageId;
+	}
+
+	public BundleProviderWithNamedPages setNextPageId(String theNextPageId) {
+		myNextPageId = theNextPageId;
+		return this;
+	}
+
+	@Override
+	public String getPreviousPageId() {
+		return myPreviousPageId;
+	}
+
+	public BundleProviderWithNamedPages setPreviousPageId(String thePreviousPageId) {
+		myPreviousPageId = thePreviousPageId;
+		return this;
+	}
+
+	@Override
+	public List<IBaseResource> getResources(int theFromIndex, int theToIndex) {
+		return getList(); // indexes are ignored for this provider type
+	}
+
+	@Override
+	public BundleProviderWithNamedPages setSize(Integer theSize) {
+		super.setSize(theSize);
+		return this;
+	}
+
+}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/FifoMemoryPagingProvider.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/FifoMemoryPagingProvider.java
index f7c1a907d48..8e4ee4dacb7 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/FifoMemoryPagingProvider.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/FifoMemoryPagingProvider.java
@@ -36,7 +36,7 @@ public class FifoMemoryPagingProvider extends BasePagingProvider implements IPag
 		Validate.isTrue(theSize > 0, "theSize must be greater than 0");
 
 		mySize = theSize;
-		myBundleProviders = new LinkedHashMap<String, IBundleProvider>(mySize);
+		myBundleProviders = new LinkedHashMap<>(mySize);
 	}
 
 	@Override
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/IPagingProvider.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/IPagingProvider.java
index fe4d47bcb11..99caed09be7 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/IPagingProvider.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/IPagingProvider.java
@@ -25,17 +25,24 @@ import ca.uhn.fhir.rest.api.server.IBundleProvider;
 public interface IPagingProvider {
 
 	int getDefaultPageSize();
-		
+
 	int getMaximumPageSize();
-	
-	/**
-	 * Stores a result list and returns an ID with which that list can be returned
-	 */
-	public String storeResultList(IBundleProvider theList);
-	
+
 	/**
 	 * Retrieve a result list by ID
 	 */
-	public IBundleProvider retrieveResultList(String theId);
-	
+	IBundleProvider retrieveResultList(String theSearchId);
+
+	/**
+	 * Retrieve a result list by ID
+	 */
+	default IBundleProvider retrieveResultList(String theSearchId, String thePageId) {
+		return null;
+	}
+
+	/**
+	 * Stores a result list and returns an ID with which that list can be returned
+	 */
+	String storeResultList(IBundleProvider theList);
+
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/RestfulServer.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/RestfulServer.java
index d6b1caa9d79..55f2d1a9611 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/RestfulServer.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/RestfulServer.java
@@ -122,7 +122,6 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 	 */
 	private String myServerVersion = createPoweredByHeaderProductVersion();
 	private boolean myStarted;
-	private Map<String, IResourceProvider> myTypeToProvider = new HashMap<>();
 	private boolean myUncompressIncomingContents = true;
 	private boolean myUseBrowserFriendlyContentTypes;
 	private ITenantIdentificationStrategy myTenantIdentificationStrategy;
@@ -301,7 +300,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 		} else {
 			resourceBinding = myResourceNameToBinding.get(resourceName);
 			if (resourceBinding == null) {
-				throw new ResourceNotFoundException("Unknown resource type '" + resourceName + "' - Server knows how to handle: " + myResourceNameToBinding.keySet());
+				throwUnknownResourceTypeException(resourceName);
 			}
 		}
 
@@ -317,7 +316,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 			if (isBlank(requestPath)) {
 				throw new InvalidRequestException(myFhirContext.getLocalizer().getMessage(RestfulServer.class, "rootRequest"));
 			}
-			throw new InvalidRequestException(myFhirContext.getLocalizer().getMessage(RestfulServer.class, "unknownMethod", requestType.name(), requestPath, requestDetails.getParameters().keySet()));
+			throwUnknownFhirOperationException(requestDetails, requestPath, requestType);
 		}
 		return resourceMethod;
 	}
@@ -376,7 +375,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 		try {
 			count += findResourceMethods(theProvider, clazz);
 		} catch (ConfigurationException e) {
-			throw new ConfigurationException("Failure scanning class " + clazz.getSimpleName() + ": " + e.getMessage());
+			throw new ConfigurationException("Failure scanning class " + clazz.getSimpleName() + ": " + e.getMessage(), e);
 		}
 		if (count == 0) {
 			throw new ConfigurationException("Did not find any annotated RESTful methods on provider class " + theProvider.getClass().getCanonicalName());
@@ -570,10 +569,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 	 *
 	 * @param theList The list of interceptors (may be null)
 	 */
-	public void setInterceptors(IServerInterceptor... theList) {
+	public void setInterceptors(List<IServerInterceptor> theList) {
 		myInterceptors.clear();
 		if (theList != null) {
-			myInterceptors.addAll(Arrays.asList(theList));
+			myInterceptors.addAll(theList);
 		}
 	}
 
@@ -603,11 +602,8 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 	 *
 	 * @see #setResourceProviders(Collection)
 	 */
-	public void setPlainProviders(Collection<Object> theProviders) {
-		myPlainProviders.clear();
-		if (theProviders != null) {
-			myPlainProviders.addAll(theProviders);
-		}
+	public void setPlainProviders(Object... theProv) {
+		setPlainProviders(Arrays.asList(theProv));
 	}
 
 	/**
@@ -637,10 +633,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 	/**
 	 * Sets the resource providers for this server
 	 */
-	public void setResourceProviders(Collection<IResourceProvider> theResourceProviders) {
+	public void setResourceProviders(IResourceProvider... theResourceProviders) {
 		myResourceProviders.clear();
 		if (theResourceProviders != null) {
-			myResourceProviders.addAll(theResourceProviders);
+			myResourceProviders.addAll(Arrays.asList(theResourceProviders));
 		}
 	}
 
@@ -1246,7 +1242,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 		String operation = null;
 		String compartment = null;
 		if (tok.hasMoreTokens()) {
-			resourceName = tok.nextToken();
+			resourceName = tok.nextTokenUnescapedAndSanitized();
 			if (partIsOperation(resourceName)) {
 				operation = resourceName;
 				resourceName = null;
@@ -1255,7 +1251,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 		theRequestDetails.setResourceName(resourceName);
 
 		if (tok.hasMoreTokens()) {
-			String nextString = tok.nextToken();
+			String nextString = tok.nextTokenUnescapedAndSanitized();
 			if (partIsOperation(nextString)) {
 				operation = nextString;
 			} else {
@@ -1265,10 +1261,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 		}
 
 		if (tok.hasMoreTokens()) {
-			String nextString = tok.nextToken();
+			String nextString = tok.nextTokenUnescapedAndSanitized();
 			if (nextString.equals(Constants.PARAM_HISTORY)) {
 				if (tok.hasMoreTokens()) {
-					String versionString = tok.nextToken();
+					String versionString = tok.nextTokenUnescapedAndSanitized();
 					if (id == null) {
 						throw new InvalidRequestException("Don't know how to handle request path: " + theRequestPath);
 					}
@@ -1290,7 +1286,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 		String secondaryOperation = null;
 
 		while (tok.hasMoreTokens()) {
-			String nextString = tok.nextToken();
+			String nextString = tok.nextTokenUnescapedAndSanitized();
 			if (operation == null) {
 				operation = nextString;
 			} else if (secondaryOperation == null) {
@@ -1365,14 +1361,9 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 						throw new NullPointerException("getResourceType() on class '" + rsrcProvider.getClass().getCanonicalName() + "' returned null");
 					}
 					String resourceName = getFhirContext().getResourceDefinition(resourceType).getName();
-					if (myTypeToProvider.containsKey(resourceName)) {
-						throw new ConfigurationException("Multiple resource providers return resource type[" + resourceName + "]: First[" + myTypeToProvider.get(resourceName).getClass().getCanonicalName()
-							+ "] and Second[" + rsrcProvider.getClass().getCanonicalName() + "]");
-					}
 					if (!inInit) {
 						myResourceProviders.add(rsrcProvider);
 					}
-					myTypeToProvider.put(resourceName, rsrcProvider);
 					providedResourceScanner.scanForProvidedResources(rsrcProvider);
 					newResourceProviders.add(rsrcProvider);
 				} else {
@@ -1384,7 +1375,7 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 
 			}
 			if (!newResourceProviders.isEmpty()) {
-				ourLog.info("Added {} resource provider(s). Total {}", newResourceProviders.size(), myTypeToProvider.size());
+				ourLog.info("Added {} resource provider(s). Total {}", newResourceProviders.size(), myResourceProviders.size());
 				for (IResourceProvider provider : newResourceProviders) {
 					assertProviderIsValid(provider);
 					findResourceMethods(provider);
@@ -1518,10 +1509,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 	 *
 	 * @param theList The list of interceptors (may be null)
 	 */
-	public void setInterceptors(List<IServerInterceptor> theList) {
+	public void setInterceptors(IServerInterceptor... theList) {
 		myInterceptors.clear();
 		if (theList != null) {
-			myInterceptors.addAll(theList);
+			myInterceptors.addAll(Arrays.asList(theList));
 		}
 	}
 
@@ -1530,8 +1521,11 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 	 *
 	 * @see #setResourceProviders(Collection)
 	 */
-	public void setPlainProviders(Object... theProv) {
-		setPlainProviders(Arrays.asList(theProv));
+	public void setPlainProviders(Collection<Object> theProviders) {
+		myPlainProviders.clear();
+		if (theProviders != null) {
+			myPlainProviders.addAll(theProviders);
+		}
 	}
 
 	/**
@@ -1549,10 +1543,10 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 	/**
 	 * Sets the resource providers for this server
 	 */
-	public void setResourceProviders(IResourceProvider... theResourceProviders) {
+	public void setResourceProviders(Collection<IResourceProvider> theResourceProviders) {
 		myResourceProviders.clear();
 		if (theResourceProviders != null) {
-			myResourceProviders.addAll(Arrays.asList(theResourceProviders));
+			myResourceProviders.addAll(theResourceProviders);
 		}
 	}
 
@@ -1565,6 +1559,14 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 		myTenantIdentificationStrategy = theTenantIdentificationStrategy;
 	}
 
+	protected void throwUnknownFhirOperationException(RequestDetails requestDetails, String requestPath, RequestTypeEnum theRequestType) {
+		throw new InvalidRequestException(myFhirContext.getLocalizer().getMessage(RestfulServer.class, "unknownMethod", theRequestType.name(), requestPath, requestDetails.getParameters().keySet()));
+	}
+
+	protected void throwUnknownResourceTypeException(String theResourceName) {
+		throw new ResourceNotFoundException("Unknown resource type '" + theResourceName + "' - Server knows how to handle: " + myResourceNameToBinding.keySet());
+	}
+
 	public void unregisterInterceptor(IServerInterceptor theInterceptor) {
 		Validate.notNull(theInterceptor, "Interceptor can not be null");
 		myInterceptors.remove(theInterceptor);
@@ -1594,7 +1596,6 @@ public class RestfulServer extends HttpServlet implements IRestfulServer<Servlet
 					IResourceProvider rsrcProvider = (IResourceProvider) provider;
 					Class<? extends IBaseResource> resourceType = rsrcProvider.getResourceType();
 					String resourceName = getFhirContext().getResourceDefinition(resourceType).getName();
-					myTypeToProvider.remove(resourceName);
 					providedResourceScanner.removeProvidedResources(rsrcProvider);
 				} else {
 					myPlainProviders.remove(provider);
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/RestfulServerUtils.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/RestfulServerUtils.java
index 36710e49f2c..b505103750f 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/RestfulServerUtils.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/RestfulServerUtils.java
@@ -130,6 +130,18 @@ public class RestfulServerUtils {
 
 	public static String createPagingLink(Set<Include> theIncludes, String theServerBase, String theSearchId, int theOffset, int theCount, Map<String, String[]> theRequestParameters, boolean thePrettyPrint,
 													  BundleTypeEnum theBundleType) {
+		return createPagingLink(theIncludes, theServerBase, theSearchId, theOffset, theCount, theRequestParameters, thePrettyPrint,
+			theBundleType, null);
+	}
+
+	public static String createPagingLink(Set<Include> theIncludes, String theServerBase, String theSearchId, String thePageId, Map<String, String[]> theRequestParameters, boolean thePrettyPrint,
+													  BundleTypeEnum theBundleType) {
+		return createPagingLink(theIncludes, theServerBase, theSearchId, null, null, theRequestParameters, thePrettyPrint,
+			theBundleType, thePageId);
+	}
+
+	private static String createPagingLink(Set<Include> theIncludes, String theServerBase, String theSearchId, Integer theOffset, Integer theCount, Map<String, String[]> theRequestParameters, boolean thePrettyPrint,
+														BundleTypeEnum theBundleType, String thePageId) {
 		StringBuilder b = new StringBuilder();
 		b.append(theServerBase);
 		b.append('?');
@@ -137,14 +149,24 @@ public class RestfulServerUtils {
 		b.append('=');
 		b.append(UrlUtil.escapeUrlParam(theSearchId));
 
-		b.append('&');
-		b.append(Constants.PARAM_PAGINGOFFSET);
-		b.append('=');
-		b.append(theOffset);
-		b.append('&');
-		b.append(Constants.PARAM_COUNT);
-		b.append('=');
-		b.append(theCount);
+		if (theOffset != null) {
+			b.append('&');
+			b.append(Constants.PARAM_PAGINGOFFSET);
+			b.append('=');
+			b.append(theOffset);
+		}
+		if (theCount != null) {
+			b.append('&');
+			b.append(Constants.PARAM_COUNT);
+			b.append('=');
+			b.append(theCount);
+		}
+		if (isNotBlank(thePageId)) {
+			b.append('&');
+			b.append(Constants.PARAM_PAGEID);
+			b.append('=');
+			b.append(UrlUtil.escapeUrlParam(thePageId));
+		}
 		String[] strings = theRequestParameters.get(Constants.PARAM_FORMAT);
 		if (strings != null && strings.length > 0) {
 			b.append('&');
@@ -442,6 +464,18 @@ public class RestfulServerUtils {
 		return retVal;
 	}
 
+	private static FhirContext getContextForVersion(FhirContext theContext, FhirVersionEnum theForVersion) {
+		FhirContext context = theContext;
+		if (context.getVersion().getVersion() != theForVersion) {
+			context = myFhirContextMap.get(theForVersion);
+			if (context == null) {
+				context = theForVersion.newContext();
+				myFhirContextMap.put(theForVersion, context);
+			}
+		}
+		return context;
+	}
+
 	private static ResponseEncoding getEncodingForContentType(FhirContext theFhirContext, boolean theStrict, String theContentType) {
 		EncodingEnum encoding;
 		if (theStrict) {
@@ -476,18 +510,6 @@ public class RestfulServerUtils {
 		return parser;
 	}
 
-	private static FhirContext getContextForVersion(FhirContext theContext, FhirVersionEnum theForVersion) {
-		FhirContext context = theContext;
-		if (context.getVersion().getVersion() != theForVersion) {
-			context = myFhirContextMap.get(theForVersion);
-			if (context == null) {
-				context = theForVersion.newContext();
-				myFhirContextMap.put(theForVersion, context);
-			}
-		}
-		return context;
-	}
-
 	public static Set<String> parseAcceptHeaderAndReturnHighestRankedOptions(HttpServletRequest theRequest) {
 		Set<String> retVal = new HashSet<String>();
 
@@ -725,7 +747,7 @@ public class RestfulServerUtils {
 		try {
 			return Integer.parseInt(retVal[0]);
 		} catch (NumberFormatException e) {
-			ourLog.debug("Failed to parse {} value '{}': {}", new Object[]{theParamName, retVal[0], e});
+			ourLog.debug("Failed to parse {} value '{}': {}", new Object[] {theParamName, retVal[0], e});
 			return null;
 		}
 	}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/SearchParameterMap.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/SearchParameterMap.java
deleted file mode 100644
index e0d3633331b..00000000000
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/SearchParameterMap.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package ca.uhn.fhir.rest.server;
-
-/*
- * #%L
- * HAPI FHIR - Server Framework
- * %%
- * Copyright (C) 2014 - 2018 University Health Network
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import java.util.LinkedHashMap;
-
-import ca.uhn.fhir.model.api.IQueryParameterType;
-import ca.uhn.fhir.rest.param.BaseAndListParam;
-import ca.uhn.fhir.rest.param.CompositeAndListParam;
-import ca.uhn.fhir.rest.param.CompositeOrListParam;
-import ca.uhn.fhir.rest.param.DateAndListParam;
-import ca.uhn.fhir.rest.param.DateOrListParam;
-import ca.uhn.fhir.rest.param.NumberAndListParam;
-import ca.uhn.fhir.rest.param.NumberOrListParam;
-import ca.uhn.fhir.rest.param.QuantityAndListParam;
-import ca.uhn.fhir.rest.param.QuantityOrListParam;
-import ca.uhn.fhir.rest.param.ReferenceAndListParam;
-import ca.uhn.fhir.rest.param.ReferenceOrListParam;
-import ca.uhn.fhir.rest.param.StringAndListParam;
-import ca.uhn.fhir.rest.param.StringOrListParam;
-import ca.uhn.fhir.rest.param.TokenAndListParam;
-import ca.uhn.fhir.rest.param.TokenOrListParam;
-import ca.uhn.fhir.rest.param.UriAndListParam;
-import ca.uhn.fhir.rest.param.UriOrListParam;
-
-public class SearchParameterMap extends LinkedHashMap<String, BaseAndListParam<?>> {
-
-	private static final long serialVersionUID = 1L;
-
-	public <A extends IQueryParameterType, B extends IQueryParameterType> void add(String theName, CompositeOrListParam<A, B> theCompositeOrListParam) {
-		@SuppressWarnings("unchecked")
-		CompositeAndListParam<A, B> andList = (CompositeAndListParam<A, B>) get(theName);
-		if (andList == null) {
-			andList = new CompositeAndListParam<A, B>(theCompositeOrListParam.getLeftType(), theCompositeOrListParam.getRightType());
-			put(theName, andList);
-		}
-		andList.addValue(theCompositeOrListParam);
-	}
-
-	public void add(String theName, DateOrListParam theOrListParam) {
-		DateAndListParam andList = (DateAndListParam) get(theName);
-		if (andList == null) {
-			andList = new DateAndListParam();
-			put(theName, andList);
-		}
-		andList.addValue(theOrListParam);
-	}
-
-	public void add(String theName, NumberOrListParam theOrListParam) {
-		NumberAndListParam andList = (NumberAndListParam) get(theName);
-		if (andList == null) {
-			andList = new NumberAndListParam();
-			put(theName, andList);
-		}
-		andList.addValue(theOrListParam);
-	}
-
-	public void add(String theName, QuantityOrListParam theOrListParam) {
-		QuantityAndListParam andList = (QuantityAndListParam) get(theName);
-		if (andList == null) {
-			andList = new QuantityAndListParam();
-			put(theName, andList);
-		}
-		andList.addValue(theOrListParam);
-	}
-
-	public void add(String theName, ReferenceOrListParam theOrListParam) {
-		ReferenceAndListParam andList = (ReferenceAndListParam) get(theName);
-		if (andList == null) {
-			andList = new ReferenceAndListParam();
-			put(theName, andList);
-		}
-		andList.addValue(theOrListParam);
-	}
-
-	public void add(String theName, StringOrListParam theOrListParam) {
-		StringAndListParam andList = (StringAndListParam) get(theName);
-		if (andList == null) {
-			andList = new StringAndListParam();
-			put(theName, andList);
-		}
-		andList.addValue(theOrListParam);
-	}
-
-	public void add(String theName, TokenOrListParam theOrListParam) {
-		TokenAndListParam andList = (TokenAndListParam) get(theName);
-		if (andList == null) {
-			andList = new TokenAndListParam();
-			put(theName, andList);
-		}
-		andList.addValue(theOrListParam);
-	}
-
-	public void add(String theName, UriOrListParam theOrListParam) {
-		UriAndListParam andList = (UriAndListParam) get(theName);
-		if (andList == null) {
-			andList = new UriAndListParam();
-			put(theName, andList);
-		}
-		andList.addValue(theOrListParam);
-	}
-
-	// public void add(String theName, IQueryParameterOr<?> theOr) {
-	// if (theOr == null) {
-	// return;
-	// }
-	//
-	// switch (theOr.getClass()) {
-	//
-	// }
-	//
-	// if (!containsKey(theName)) {
-	// put(theName, new ArrayList<List<? extends IQueryParameterType>>());
-	// }
-	//
-	// StringAndListParam
-	//
-	// IQueryParameterAnd<IQueryParameterOr<?>> and = get(theName);
-	// and.add(theOr);
-	// }
-
-}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/SimpleBundleProvider.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/SimpleBundleProvider.java
index f404a255b38..3e9e7dba84e 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/SimpleBundleProvider.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/SimpleBundleProvider.java
@@ -20,31 +20,62 @@ package ca.uhn.fhir.rest.server;
  * #L%
  */
 
-import java.util.Collections;
-import java.util.List;
-
-import org.hl7.fhir.instance.model.api.IBaseResource;
-
 import ca.uhn.fhir.model.primitive.InstantDt;
 import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
 
 public class SimpleBundleProvider implements IBundleProvider {
 
-	private List<IBaseResource> myList;
-	
+	private final List<IBaseResource> myList;
+	private final String myUuid;
+	private Integer myPreferredPageSize;
+	private Integer mySize;
+	private IPrimitiveType<Date> myPublished = InstantDt.withCurrentTime();
 	public SimpleBundleProvider(List<IBaseResource> theList) {
-		myList = theList;
+		this(theList, null);
 	}
 
 	public SimpleBundleProvider(IBaseResource theResource) {
-		myList = Collections.singletonList(theResource);
+		this(Collections.singletonList(theResource));
 	}
 
 	/**
 	 * Create an empty bundle
 	 */
 	public SimpleBundleProvider() {
-		myList = Collections.emptyList();
+		this(Collections.emptyList());
+	}
+
+	public SimpleBundleProvider(List<IBaseResource> theList, String theUuid) {
+		myList = theList;
+		myUuid = theUuid;
+		setSize(theList.size());
+	}
+
+	/**
+	 * Returns the results stored in this provider
+	 */
+	protected List<IBaseResource> getList() {
+		return myList;
+	}
+
+	@Override
+	public IPrimitiveType<Date> getPublished() {
+		return myPublished;
+	}
+
+	/**
+	 * By default this class uses the object creation date/time (for this object)
+	 * to determine {@link #getPublished() the published date} but this
+	 * method may be used to specify an alternate date/time
+	 */
+	public void setPublished(IPrimitiveType<Date> thePublished) {
+		myPublished = thePublished;
 	}
 
 	@Override
@@ -53,23 +84,38 @@ public class SimpleBundleProvider implements IBundleProvider {
 	}
 
 	@Override
-	public Integer size() {
-		return myList.size();
-	}
-
-	@Override
-	public InstantDt getPublished() {
-		return InstantDt.withCurrentTime();
+	public String getUuid() {
+		return myUuid;
 	}
 
+	/**
+	 * Defaults to null
+	 */
 	@Override
 	public Integer preferredPageSize() {
-		return null;
+		return myPreferredPageSize;
+	}
+
+	/**
+	 * Sets the preferred page size to be returned by {@link #preferredPageSize()}.
+	 * Default is <code>null</code>.
+	 */
+	public void setPreferredPageSize(Integer thePreferredPageSize) {
+		myPreferredPageSize = thePreferredPageSize;
+	}
+
+	/**
+	 * Sets the total number of results, if this provider
+	 * corresponds to a single page within a larger search result
+	 */
+	public SimpleBundleProvider setSize(Integer theSize) {
+		mySize = theSize;
+		return this;
 	}
 
 	@Override
-	public String getUuid() {
-		return null;
+	public Integer size() {
+		return mySize;
 	}
-	
+
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/IServerInterceptor.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/IServerInterceptor.java
index e91709dc40f..0072cc0c009 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/IServerInterceptor.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/IServerInterceptor.java
@@ -9,9 +9,9 @@ package ca.uhn.fhir.rest.server.interceptor;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -262,6 +262,10 @@ public interface IServerInterceptor {
 	 * This method is called after all processing is completed for a request, but only if the
 	 * request completes normally (i.e. no exception is thrown).
 	 * <p>
+	 * This method should not throw any exceptions. Any exception that is thrown by this
+	 * method will be logged, but otherwise not acted upon.
+	 * </p>
+	 * <p>
 	 * Note that this individual interceptors will have this method called in the reverse order from the order in
 	 * which the interceptors were registered with the server.
 	 * </p>
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/ResponseHighlighterInterceptor.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/ResponseHighlighterInterceptor.java
index 3045580b603..1b7e81e81ff 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/ResponseHighlighterInterceptor.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/ResponseHighlighterInterceptor.java
@@ -13,7 +13,9 @@ import ca.uhn.fhir.rest.server.RestfulServerUtils.ResponseEncoding;
 import ca.uhn.fhir.rest.server.exceptions.AuthenticationException;
 import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import ca.uhn.fhir.util.StopWatch;
 import ca.uhn.fhir.util.UrlUtil;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringEscapeUtils;
 import org.hl7.fhir.instance.model.api.IBaseResource;
@@ -440,206 +442,237 @@ public class ResponseHighlighterInterceptor extends InterceptorAdapter {
 			}
 			theServletResponse.setContentType(Constants.CT_HTML_WITH_UTF8);
 
-			StringBuilder b = new StringBuilder();
-			b.append("<html lang=\"en\">\n");
-			b.append("	<head>\n");
-			b.append("		<meta charset=\"utf-8\" />\n");
-			b.append("       <style>\n");
-			b.append(".httpStatusDiv {");
-			b.append("  font-size: 1.2em;");
-			b.append("  font-weight: bold;");
-			b.append("}");
-			b.append(".hlQuot { color: #88F; }\n");
-			b.append(".hlQuot a { text-decoration: underline; text-decoration-color: #CCC; }\n");
-			b.append(".hlQuot a:HOVER { text-decoration: underline; text-decoration-color: #008; }\n");
-			b.append(".hlQuot .uuid, .hlQuot .dateTime {\n");
-			b.append("  user-select: all;\n");
-			b.append("  -moz-user-select: all;\n");
-			b.append("  -webkit-user-select: all;\n");
-			b.append("  -ms-user-select: element;\n");
-			b.append("}\n");
-			b.append(".hlAttr {\n");
-			b.append("  color: #888;\n");
-			b.append("}\n");
-			b.append(".hlTagName {\n");
-			b.append("  color: #006699;\n");
-			b.append("}\n");
-			b.append(".hlControl {\n");
-			b.append("  color: #660000;\n");
-			b.append("}\n");
-			b.append(".hlText {\n");
-			b.append("  color: #000000;\n");
-			b.append("}\n");
-			b.append(".hlUrlBase {\n");
-			b.append("}");
-			b.append(".headersDiv {\n");
-			b.append("  padding: 10px;");
-			b.append("  margin-left: 10px;");
-			b.append("  border: 1px solid #CCC;");
-			b.append("  border-radius: 10px;");
-			b.append("}");
-			b.append(".headersRow {\n");
-			b.append("}");
-			b.append(".headerName {\n");
-			b.append("  color: #888;\n");
-			b.append("  font-family: monospace;\n");
-			b.append("}");
-			b.append(".headerValue {\n");
-			b.append("  color: #88F;\n");
-			b.append("  font-family: monospace;\n");
-			b.append("}");
-			b.append(".responseBodyTable {");
-			b.append("  width: 100%;\n");
-			b.append("  margin-left: 0px;\n");
-			b.append("  margin-top: -10px;\n");
-			b.append("  position: relative;\n");
-			b.append("}");
-			b.append(".responseBodyTableFirstColumn {");
-			b.append("  position: absolute;\n");
-			b.append("  width: 70px;\n");
-			b.append("}");
-			b.append(".responseBodyTableSecondColumn {");
-			b.append("  position: absolute;\n");
-			b.append("  margin-left: 70px;\n");
-			b.append("  vertical-align: top;\n");
-			b.append("  left: 0px;\n");
-			b.append("  right: 0px;\n");
-			b.append("}");
-			b.append(".lineAnchor A {");
-			b.append("  text-decoration: none;");
-			b.append("  padding-left: 20px;");
-			b.append("}");
-			b.append(".lineAnchor {");
-			b.append("  display: block;");
-			b.append("  padding-right: 20px;");
-			b.append("}");
-			b.append(".selectedLine {");
-			b.append("  background-color: #EEF;");
-			b.append("  font-weight: bold;");
-			b.append("}");
-			b.append("H1 {");
-			b.append("  font-size: 1.1em;");
-			b.append("  color: #666;");
-			b.append("}");
-			b.append("BODY {\n");
-			b.append("  font-family: Arial;\n");
-			b.append("}");
-			b.append("       </style>\n");
-			b.append("	</head>\n");
-			b.append("\n");
-			b.append("	<body>");
+			StringBuilder outputBuffer = new StringBuilder();
+			outputBuffer.append("<html lang=\"en\">\n");
+			outputBuffer.append("	<head>\n");
+			outputBuffer.append("		<meta charset=\"utf-8\" />\n");
+			outputBuffer.append("       <style>\n");
+			outputBuffer.append(".httpStatusDiv {");
+			outputBuffer.append("  font-size: 1.2em;");
+			outputBuffer.append("  font-weight: bold;");
+			outputBuffer.append("}");
+			outputBuffer.append(".hlQuot { color: #88F; }\n");
+			outputBuffer.append(".hlQuot a { text-decoration: underline; text-decoration-color: #CCC; }\n");
+			outputBuffer.append(".hlQuot a:HOVER { text-decoration: underline; text-decoration-color: #008; }\n");
+			outputBuffer.append(".hlQuot .uuid, .hlQuot .dateTime {\n");
+			outputBuffer.append("  user-select: all;\n");
+			outputBuffer.append("  -moz-user-select: all;\n");
+			outputBuffer.append("  -webkit-user-select: all;\n");
+			outputBuffer.append("  -ms-user-select: element;\n");
+			outputBuffer.append("}\n");
+			outputBuffer.append(".hlAttr {\n");
+			outputBuffer.append("  color: #888;\n");
+			outputBuffer.append("}\n");
+			outputBuffer.append(".hlTagName {\n");
+			outputBuffer.append("  color: #006699;\n");
+			outputBuffer.append("}\n");
+			outputBuffer.append(".hlControl {\n");
+			outputBuffer.append("  color: #660000;\n");
+			outputBuffer.append("}\n");
+			outputBuffer.append(".hlText {\n");
+			outputBuffer.append("  color: #000000;\n");
+			outputBuffer.append("}\n");
+			outputBuffer.append(".hlUrlBase {\n");
+			outputBuffer.append("}");
+			outputBuffer.append(".headersDiv {\n");
+			outputBuffer.append("  padding: 10px;");
+			outputBuffer.append("  margin-left: 10px;");
+			outputBuffer.append("  border: 1px solid #CCC;");
+			outputBuffer.append("  border-radius: 10px;");
+			outputBuffer.append("}");
+			outputBuffer.append(".headersRow {\n");
+			outputBuffer.append("}");
+			outputBuffer.append(".headerName {\n");
+			outputBuffer.append("  color: #888;\n");
+			outputBuffer.append("  font-family: monospace;\n");
+			outputBuffer.append("}");
+			outputBuffer.append(".headerValue {\n");
+			outputBuffer.append("  color: #88F;\n");
+			outputBuffer.append("  font-family: monospace;\n");
+			outputBuffer.append("}");
+			outputBuffer.append(".responseBodyTable {");
+			outputBuffer.append("  width: 100%;\n");
+			outputBuffer.append("  margin-left: 0px;\n");
+			outputBuffer.append("  margin-top: -10px;\n");
+			outputBuffer.append("  position: relative;\n");
+			outputBuffer.append("}");
+			outputBuffer.append(".responseBodyTableFirstColumn {");
+//			outputBuffer.append("  position: absolute;\n");
+//			outputBuffer.append("  width: 70px;\n");
+			outputBuffer.append("}");
+			outputBuffer.append(".responseBodyTableSecondColumn {");
+			outputBuffer.append("  position: absolute;\n");
+			outputBuffer.append("  margin-left: 70px;\n");
+			outputBuffer.append("  vertical-align: top;\n");
+			outputBuffer.append("  left: 0px;\n");
+			outputBuffer.append("  right: 0px;\n");
+			outputBuffer.append("}");
+			outputBuffer.append(".responseBodyTableSecondColumn PRE {");
+			outputBuffer.append("  margin: 0px;");
+			outputBuffer.append("}");
+			outputBuffer.append(".sizeInfo {");
+			outputBuffer.append("  margin-top: 20px;");
+			outputBuffer.append("  font-size: 0.8em;");
+			outputBuffer.append("}");
+			outputBuffer.append(".lineAnchor A {");
+			outputBuffer.append("  text-decoration: none;");
+			outputBuffer.append("  padding-left: 20px;");
+			outputBuffer.append("}");
+			outputBuffer.append(".lineAnchor {");
+			outputBuffer.append("  display: block;");
+			outputBuffer.append("  padding-right: 20px;");
+			outputBuffer.append("}");
+			outputBuffer.append(".selectedLine {");
+			outputBuffer.append("  background-color: #EEF;");
+			outputBuffer.append("  font-weight: bold;");
+			outputBuffer.append("}");
+			outputBuffer.append("H1 {");
+			outputBuffer.append("  font-size: 1.1em;");
+			outputBuffer.append("  color: #666;");
+			outputBuffer.append("}");
+			outputBuffer.append("BODY {\n");
+			outputBuffer.append("  font-family: Arial;\n");
+			outputBuffer.append("}");
+			outputBuffer.append("       </style>\n");
+			outputBuffer.append("	</head>\n");
+			outputBuffer.append("\n");
+			outputBuffer.append("	<body>");
 
-			b.append("<p>");
-			b.append("This result is being rendered in HTML for easy viewing. ");
-			b.append("You may access this content as ");
+			outputBuffer.append("<p>");
+			outputBuffer.append("This result is being rendered in HTML for easy viewing. ");
+			outputBuffer.append("You may access this content as ");
 
-			b.append("<a href=\"");
-			b.append(createLinkHref(parameters, Constants.FORMAT_JSON));
-			b.append("\">Raw JSON</a> or ");
+			outputBuffer.append("<a href=\"");
+			outputBuffer.append(createLinkHref(parameters, Constants.FORMAT_JSON));
+			outputBuffer.append("\">Raw JSON</a> or ");
 
-			b.append("<a href=\"");
-			b.append(createLinkHref(parameters, Constants.FORMAT_XML));
-			b.append("\">Raw XML</a>, ");
+			outputBuffer.append("<a href=\"");
+			outputBuffer.append(createLinkHref(parameters, Constants.FORMAT_XML));
+			outputBuffer.append("\">Raw XML</a>, ");
 
-			b.append(" or view this content in ");
+			outputBuffer.append(" or view this content in ");
 
-			b.append("<a href=\"");
-			b.append(createLinkHref(parameters, Constants.FORMATS_HTML_JSON));
-			b.append("\">HTML JSON</a> ");
+			outputBuffer.append("<a href=\"");
+			outputBuffer.append(createLinkHref(parameters, Constants.FORMATS_HTML_JSON));
+			outputBuffer.append("\">HTML JSON</a> ");
 
-			b.append("or ");
-			b.append("<a href=\"");
-			b.append(createLinkHref(parameters, Constants.FORMATS_HTML_XML));
-			b.append("\">HTML XML</a>.");
+			outputBuffer.append("or ");
+			outputBuffer.append("<a href=\"");
+			outputBuffer.append(createLinkHref(parameters, Constants.FORMATS_HTML_XML));
+			outputBuffer.append("\">HTML XML</a>.");
 
 			Date startTime = (Date) theServletRequest.getAttribute(RestfulServer.REQUEST_START_TIME);
 			if (startTime != null) {
 				long time = System.currentTimeMillis() - startTime.getTime();
-				b.append(" Response generated in ");
-				b.append(time);
-				b.append("ms.");
+				outputBuffer.append(" Response generated in ");
+				outputBuffer.append(time);
+				outputBuffer.append("ms.");
 			}
 
-			b.append("</p>");
+			outputBuffer.append("</p>");
 
-			b.append("\n");
+			outputBuffer.append("\n");
 
 			// status (e.g. HTTP 200 OK)
 			String statusName = Constants.HTTP_STATUS_NAMES.get(theServletResponse.getStatus());
 			statusName = defaultString(statusName);
-			b.append("<div class=\"httpStatusDiv\">");
-			b.append("HTTP ");
-			b.append(theServletResponse.getStatus());
-			b.append(" ");
-			b.append(statusName);
-			b.append("</div>");
+			outputBuffer.append("<div class=\"httpStatusDiv\">");
+			outputBuffer.append("HTTP ");
+			outputBuffer.append(theServletResponse.getStatus());
+			outputBuffer.append(" ");
+			outputBuffer.append(statusName);
+			outputBuffer.append("</div>");
 
-			b.append("\n");
-			b.append("\n");
+			outputBuffer.append("\n");
+			outputBuffer.append("\n");
 
 			try {
 				if (isShowRequestHeaders()) {
-					streamRequestHeaders(theServletRequest, b);
+					streamRequestHeaders(theServletRequest, outputBuffer);
 				}
 				if (isShowResponseHeaders()) {
-					streamResponseHeaders(theRequestDetails, theServletResponse, b);
+					streamResponseHeaders(theRequestDetails, theServletResponse, outputBuffer);
 				}
 			} catch (Throwable t) {
 				// ignore (this will hit if we're running in a servlet 2.5 environment)
 			}
 
-			b.append("<h1>Response Body</h1>");
+			outputBuffer.append("<h1>Response Body</h1>");
 
-			b.append("<div class=\"responseBodyTable\">");
+			outputBuffer.append("<div class=\"responseBodyTable\">");
 
 			// Response Body
-			b.append("<div class=\"responseBodyTableSecondColumn\"><pre>");
+			outputBuffer.append("<div class=\"responseBodyTableSecondColumn\"><pre>");
 			StringBuilder target = new StringBuilder();
 			int linesCount = format(encoded, target, encoding);
-			b.append(target);
-			b.append("</pre></div>");
+			outputBuffer.append(target);
+			outputBuffer.append("</pre></div>");
 
 			// Line Numbers
-			b.append("<div class=\"responseBodyTableFirstColumn\"><pre>");
+			outputBuffer.append("<div class=\"responseBodyTableFirstColumn\"><pre>");
 			for (int i = 1; i <= linesCount; i++) {
-				b.append("<div class=\"lineAnchor\" id=\"anchor");
-				b.append(i);
-				b.append("\">");
+				outputBuffer.append("<div class=\"lineAnchor\" id=\"anchor");
+				outputBuffer.append(i);
+				outputBuffer.append("\">");
 
-				b.append("<a href=\"#L");
-				b.append(i);
-				b.append("\" name=\"L");
-				b.append(i);
-				b.append("\" id=\"L");
-				b.append(i);
-				b.append("\">");
-				b.append(i);
-				b.append("</a></div>");
+				outputBuffer.append("<a href=\"#L");
+				outputBuffer.append(i);
+				outputBuffer.append("\" name=\"L");
+				outputBuffer.append(i);
+				outputBuffer.append("\" id=\"L");
+				outputBuffer.append(i);
+				outputBuffer.append("\">");
+				outputBuffer.append(i);
+				outputBuffer.append("</a></div>");
 			}
-			b.append("</div></td>");
+			outputBuffer.append("</div></td>");
 
-			b.append("</div>");
+			outputBuffer.append("</div>");
 
-			b.append("\n");
+			outputBuffer.append("\n");
 
 			InputStream jsStream = ResponseHighlighterInterceptor.class.getResourceAsStream("ResponseHighlighter.js");
 			String jsStr = jsStream != null ? IOUtils.toString(jsStream, "UTF-8") : "console.log('ResponseHighlighterInterceptor: javascript theResource not found')";
 			jsStr = jsStr.replace("FHIR_BASE", theRequestDetails.getServerBaseForRequest());
-			b.append("<script type=\"text/javascript\">");
-			b.append(jsStr);
-			b.append("</script>\n");
+			outputBuffer.append("<script type=\"text/javascript\">");
+			outputBuffer.append(jsStr);
+			outputBuffer.append("</script>\n");
 
-			b.append("</body>");
-			b.append("</html>");
-			String out = b.toString();
+			StopWatch writeSw = new StopWatch();
+			theServletResponse.getWriter().append(outputBuffer);
+			theServletResponse.getWriter().flush();
+
+			theServletResponse.getWriter().append("<div class=\"sizeInfo\">");
+			theServletResponse.getWriter().append("Wrote ");
+			writeLength(theServletResponse, encoded.length());
+			theServletResponse.getWriter().append(" (");
+			writeLength(theServletResponse, outputBuffer.length());
+			theServletResponse.getWriter().append(" total including HTML)");
+
+			theServletResponse.getWriter().append(" in estimated ");
+			theServletResponse.getWriter().append(writeSw.toString());
+			theServletResponse.getWriter().append("</div>");
+
+
+			theServletResponse.getWriter().append("</body>");
+			theServletResponse.getWriter().append("</html>");
 
-			theServletResponse.getWriter().append(out);
 			theServletResponse.getWriter().close();
 		} catch (IOException e) {
 			throw new InternalErrorException(e);
 		}
 	}
 
+	private void writeLength(HttpServletResponse theServletResponse, int theLength) throws IOException {
+		double kb = ((double)theLength) / FileUtils.ONE_KB;
+		if (kb <= 1000) {
+			theServletResponse.getWriter().append(String.format("%.1f", kb)).append(" KB");
+		} else {
+			double mb = kb / 1000;
+			theServletResponse.getWriter().append(String.format("%.1f", mb)).append(" MB");
+		}
+	}
+
 	private void streamResponseHeaders(RequestDetails theRequestDetails, HttpServletResponse theServletResponse, StringBuilder b) {
 		if (theServletResponse.getHeaderNames().isEmpty() == false) {
 			b.append("<h1>Response Headers</h1>");
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationFlagsEnum.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationFlagsEnum.java
index 5a558ad9c50..58d116e3ca5 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationFlagsEnum.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationFlagsEnum.java
@@ -50,6 +50,7 @@ public enum AuthorizationFlagsEnum {
 	 * version, this flag was the default and there was no ability to
 	 * proactively block compartment read access.
 	 */
-	NO_NOT_PROACTIVELY_BLOCK_COMPARTMENT_READ_ACCESS;
+	NO_NOT_PROACTIVELY_BLOCK_COMPARTMENT_READ_ACCESS,
 
+	ALLOW_PATCH_REQUEST_UNCHALLENGED;
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationInterceptor.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationInterceptor.java
index 816282e347d..ace45066ee5 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationInterceptor.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationInterceptor.java
@@ -126,7 +126,7 @@ public class AuthorizationInterceptor extends ServerOperationInterceptorAdapter
 	 * @param theRequestDetails The individual request currently being applied
 	 */
 	public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
-		return new ArrayList<IAuthRule>();
+		return new ArrayList<>();
 	}
 
 	private OperationExamineDirection determineOperationDirection(RestOperationTypeEnum theOperation, IBaseResource theRequestResource) {
@@ -407,7 +407,9 @@ public class AuthorizationInterceptor extends ServerOperationInterceptorAdapter
 		private final IAuthRule myDecidingRule;
 		private final PolicyEnum myDecision;
 
-		public Verdict(PolicyEnum theDecision, IAuthRule theDecidingRule) {
+		Verdict(PolicyEnum theDecision, IAuthRule theDecidingRule) {
+			Validate.notNull(theDecision);
+
 			myDecision = theDecision;
 			myDecidingRule = theDecidingRule;
 		}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/BaseRule.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/BaseRule.java
index c378b2b04bb..bdb381ae088 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/BaseRule.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/BaseRule.java
@@ -35,6 +35,7 @@ abstract class BaseRule implements IAuthRule {
 	private String myName;
 	private PolicyEnum myMode;
 	private List<IAuthRuleTester> myTesters;
+	private RuleBuilder.ITenantApplicabilityChecker myTenantApplicabilityChecker;
 
 	BaseRule(String theRuleName) {
 		myName = theRuleName;
@@ -51,7 +52,7 @@ abstract class BaseRule implements IAuthRule {
 	public void addTesters(List<IAuthRuleTester> theTesters) {
 		theTesters.forEach(this::addTester);
 	}
-	
+
 	boolean applyTesters(RestOperationTypeEnum theOperation, RequestDetails theRequestDetails, IIdType theInputResourceId, IBaseResource theInputResource, IBaseResource theOutputResource) {
 		boolean retVal = true;
 		if (theOutputResource == null) {
@@ -69,8 +70,9 @@ abstract class BaseRule implements IAuthRule {
 		return myMode;
 	}
 
-	void setMode(PolicyEnum theRuleMode) {
+	BaseRule setMode(PolicyEnum theRuleMode) {
 		myMode = theRuleMode;
+		return this;
 	}
 
 	@Override
@@ -78,6 +80,14 @@ abstract class BaseRule implements IAuthRule {
 		return myName;
 	}
 
+	public RuleBuilder.ITenantApplicabilityChecker getTenantApplicabilityChecker() {
+		return myTenantApplicabilityChecker;
+	}
+
+	public final void setTenantApplicabilityChecker(RuleBuilder.ITenantApplicabilityChecker theTenantApplicabilityChecker) {
+		myTenantApplicabilityChecker = theTenantApplicabilityChecker;
+	}
+
 	public List<IAuthRuleTester> getTesters() {
 		if (myTesters == null) {
 			return Collections.emptyList();
@@ -85,6 +95,16 @@ abstract class BaseRule implements IAuthRule {
 		return Collections.unmodifiableList(myTesters);
 	}
 
+	public boolean isOtherTenant(RequestDetails theRequestDetails) {
+		boolean otherTenant = false;
+		if (getTenantApplicabilityChecker() != null) {
+			if (!getTenantApplicabilityChecker().applies(theRequestDetails)) {
+				otherTenant = true;
+			}
+		}
+		return otherTenant;
+	}
+
 	Verdict newVerdict() {
 		return new Verdict(myMode, this);
 	}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/IAuthRuleBuilderPatch.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/IAuthRuleBuilderPatch.java
new file mode 100644
index 00000000000..4893f319c7e
--- /dev/null
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/IAuthRuleBuilderPatch.java
@@ -0,0 +1,40 @@
+package ca.uhn.fhir.rest.server.interceptor.auth;
+
+/*-
+ * #%L
+ * HAPI FHIR - Server Framework
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+public interface IAuthRuleBuilderPatch {
+
+	/**
+	 * With this setting, all <a href="http://hl7.org/fhir/http.html#patch">patch</a> requests will be permitted
+	 * to proceed. This rule will not permit the
+	 * {@link ca.uhn.fhir.rest.server.interceptor.IServerOperationInterceptor#resourceCreated(RequestDetails, IBaseResource)}
+	 * and
+	 * {@link ca.uhn.fhir.rest.server.interceptor.IServerOperationInterceptor#resourceUpdated(RequestDetails, IBaseResource, IBaseResource)}
+	 * methods if your server supports {@link ca.uhn.fhir.rest.server.interceptor.IServerOperationInterceptor}.
+	 * In that case, additional rules are generally required in order to
+	 * permit write operations.
+	 */
+	IAuthRuleFinished allRequests();
+
+}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/IAuthRuleBuilderRule.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/IAuthRuleBuilderRule.java
index e604ebf4769..80e68a7725d 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/IAuthRuleBuilderRule.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/IAuthRuleBuilderRule.java
@@ -69,6 +69,11 @@ public interface IAuthRuleBuilderRule {
 	 */
 	IAuthRuleBuilderOperation operation();
 
+	/**
+	 * This rule applies to a FHIR patch operation
+	 */
+	IAuthRuleBuilderPatch patch();
+
 	/**
 	 * This rule applies to any FHIR operation involving reading, including
 	 * <code>read</code>, <code>vread</code>, <code>search</code>, and
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/OperationRule.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/OperationRule.java
index e9571bb555d..fcb0f1e8911 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/OperationRule.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/OperationRule.java
@@ -33,7 +33,6 @@ import java.util.Set;
 
 class OperationRule extends BaseRule implements IAuthRule {
 
-	private RuleBuilder.ITenantApplicabilityChecker myTenantApplicabilityChecker;
 	private String myOperationName;
 	private boolean myAppliesToServer;
 	private HashSet<Class<? extends IBaseResource>> myAppliesToTypes;
@@ -43,35 +42,35 @@ class OperationRule extends BaseRule implements IAuthRule {
 	private boolean myAppliesToAnyInstance;
 	private boolean myAppliesAtAnyLevel;
 
-	public OperationRule(String theRuleName) {
+	OperationRule(String theRuleName) {
 		super(theRuleName);
 	}
 
-	public void appliesAtAnyLevel(boolean theAppliesAtAnyLevel) {
+	void appliesAtAnyLevel(boolean theAppliesAtAnyLevel) {
 		myAppliesAtAnyLevel = theAppliesAtAnyLevel;
 	}
 
-	public void appliesToAnyInstance() {
+	void appliesToAnyInstance() {
 		myAppliesToAnyInstance = true;
 	}
 
-	public void appliesToAnyType() {
+	void appliesToAnyType() {
 		myAppliesToAnyType = true;
 	}
 
-	public void appliesToInstances(List<IIdType> theAppliesToIds) {
+	void appliesToInstances(List<IIdType> theAppliesToIds) {
 		myAppliesToIds = theAppliesToIds;
 	}
 
-	public void appliesToInstancesOfType(HashSet<Class<? extends IBaseResource>> theAppliesToTypes) {
+	void appliesToInstancesOfType(HashSet<Class<? extends IBaseResource>> theAppliesToTypes) {
 		myAppliesToInstancesOfType = theAppliesToTypes;
 	}
 
-	public void appliesToServer() {
+	void appliesToServer() {
 		myAppliesToServer = true;
 	}
 
-	public void appliesToTypes(HashSet<Class<? extends IBaseResource>> theAppliesToTypes) {
+	void appliesToTypes(HashSet<Class<? extends IBaseResource>> theAppliesToTypes) {
 		myAppliesToTypes = theAppliesToTypes;
 	}
 
@@ -79,10 +78,8 @@ class OperationRule extends BaseRule implements IAuthRule {
 	public Verdict applyRule(RestOperationTypeEnum theOperation, RequestDetails theRequestDetails, IBaseResource theInputResource, IIdType theInputResourceId, IBaseResource theOutputResource, IRuleApplier theRuleApplier, Set<AuthorizationFlagsEnum> theFlags) {
 		FhirContext ctx = theRequestDetails.getServer().getFhirContext();
 
-		if (myTenantApplicabilityChecker != null) {
-			if (!myTenantApplicabilityChecker.applies(theRequestDetails)) {
-				return null;
-			}
+		if (isOtherTenant(theRequestDetails)) {
+			return null;
 		}
 
 		boolean applies = false;
@@ -203,8 +200,4 @@ class OperationRule extends BaseRule implements IAuthRule {
 		myOperationName = theOperationName;
 	}
 
-	public void setTenantApplicabilityChecker(RuleBuilder.ITenantApplicabilityChecker theTenantApplicabilityChecker) {
-		myTenantApplicabilityChecker = theTenantApplicabilityChecker;
-	}
-
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleBuilder.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleBuilder.java
index 81d523e1e0c..bc0ead08d80 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleBuilder.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleBuilder.java
@@ -33,7 +33,7 @@ import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
 
 public class RuleBuilder implements IAuthRuleBuilder {
 
-	public static final String[] EMPTY_STRING_ARRAY = new String[0];
+	private static final String[] EMPTY_STRING_ARRAY = new String[0];
 	private ArrayList<IAuthRule> myRules;
 
 	public RuleBuilder() {
@@ -95,19 +95,12 @@ public class RuleBuilder implements IAuthRuleBuilder {
 
 	private class RuleBuilderFinished implements IAuthRuleFinished, IAuthRuleBuilderRuleOpClassifierFinished, IAuthRuleBuilderRuleOpClassifierFinishedWithTenantId {
 
-		private final RuleImplOp myOpRule;
-		private final OperationRule myOperationRule;
-		protected ITenantApplicabilityChecker myTenantApplicabilityChecker;
+		private final BaseRule myOpRule;
+		ITenantApplicabilityChecker myTenantApplicabilityChecker;
 		private List<IAuthRuleTester> myTesters;
 
-		RuleBuilderFinished(RuleImplOp theRule) {
+		RuleBuilderFinished(BaseRule theRule) {
 			myOpRule = theRule;
-			myOperationRule = null;
-		}
-
-		public RuleBuilderFinished(OperationRule theRule) {
-			myOpRule = null;
-			myOperationRule = theRule;
 		}
 
 		@Override
@@ -136,16 +129,11 @@ public class RuleBuilder implements IAuthRuleBuilder {
 
 		@Override
 		public IAuthRuleBuilderRuleOpClassifierFinishedWithTenantId forTenantIds(final Collection<String> theTenantIds) {
-			setTenantApplicabilityChecker(new ITenantApplicabilityChecker() {
-				@Override
-				public boolean applies(RequestDetails theRequest) {
-					return theTenantIds.contains(theRequest.getTenantId());
-				}
-			});
+			setTenantApplicabilityChecker(theRequest -> theTenantIds.contains(theRequest.getTenantId()));
 			return this;
 		}
 
-		public List<IAuthRuleTester> getTesters() {
+		List<IAuthRuleTester> getTesters() {
 			if (myTesters == null) {
 				return Collections.emptyList();
 			}
@@ -159,23 +147,13 @@ public class RuleBuilder implements IAuthRuleBuilder {
 
 		@Override
 		public IAuthRuleBuilderRuleOpClassifierFinishedWithTenantId notForTenantIds(final Collection<String> theTenantIds) {
-			setTenantApplicabilityChecker(new ITenantApplicabilityChecker() {
-				@Override
-				public boolean applies(RequestDetails theRequest) {
-					return !theTenantIds.contains(theRequest.getTenantId());
-				}
-			});
+			setTenantApplicabilityChecker(theRequest -> !theTenantIds.contains(theRequest.getTenantId()));
 			return this;
 		}
 
 		private void setTenantApplicabilityChecker(ITenantApplicabilityChecker theTenantApplicabilityChecker) {
 			myTenantApplicabilityChecker = theTenantApplicabilityChecker;
-			if (myOpRule != null) {
 				myOpRule.setTenantApplicabilityChecker(myTenantApplicabilityChecker);
-			}
-			if (myOperationRule != null) {
-				myOperationRule.setTenantApplicabilityChecker(myTenantApplicabilityChecker);
-			}
 		}
 
 		@Override
@@ -184,12 +162,7 @@ public class RuleBuilder implements IAuthRuleBuilder {
 				myTesters = new ArrayList<>();
 			}
 			myTesters.add(theTester);
-			if (myOperationRule != null) {
-				myOperationRule.addTester(theTester);
-			}
-			if (myOpRule != null) {
-				myOpRule.addTester(theTester);
-			}
+			myOpRule.addTester(theTester);
 
 			return this;
 		}
@@ -236,6 +209,12 @@ public class RuleBuilder implements IAuthRuleBuilder {
 			return new RuleBuilderRuleOperation();
 		}
 
+		@Override
+		public IAuthRuleBuilderPatch patch() {
+			myRuleOp = RuleOpEnum.PATCH;
+			return new PatchBuilder();
+		}
+
 		@Override
 		public IAuthRuleBuilderRuleOp read() {
 			myRuleOp = RuleOpEnum.READ;
@@ -286,8 +265,8 @@ public class RuleBuilder implements IAuthRuleBuilder {
 
 			public class RuleBuilderRuleConditionalClassifier extends RuleBuilderFinished implements IAuthRuleBuilderRuleConditionalClassifier {
 
-				public RuleBuilderRuleConditionalClassifier() {
-					super((RuleImplOp) null);
+				RuleBuilderRuleConditionalClassifier() {
+					super(null);
 				}
 
 				@Override
@@ -329,7 +308,7 @@ public class RuleBuilder implements IAuthRuleBuilder {
 				Validate.notBlank(theId.getValue(), "theId.getValue() must not be null or empty");
 				Validate.notBlank(theId.getIdPart(), "theId must contain an ID part");
 
-				return new RuleBuilderRuleOpClassifier(Arrays.asList(theId)).finished();
+				return new RuleBuilderRuleOpClassifier(Collections.singletonList(theId)).finished();
 			}
 
 			@Override
@@ -435,7 +414,7 @@ public class RuleBuilder implements IAuthRuleBuilder {
 
 				private String myOperationName;
 
-				public RuleBuilderRuleOperationNamed(String theOperationName) {
+				RuleBuilderRuleOperationNamed(String theOperationName) {
 					if (theOperationName != null && !theOperationName.startsWith("$")) {
 						myOperationName = '$' + theOperationName;
 					} else {
@@ -553,6 +532,17 @@ public class RuleBuilder implements IAuthRuleBuilder {
 
 		}
 
+		private class PatchBuilder implements IAuthRuleBuilderPatch {
+
+			@Override
+			public IAuthRuleFinished allRequests() {
+				BaseRule rule = new RuleImplPatch(myRuleName)
+					.setAllRequests(true)
+					.setMode(myRuleMode);
+				myRules.add(rule);
+				return new RuleBuilderFinished(rule);
+			}
+		}
 	}
 
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplConditional.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplConditional.java
index 7b9ac8140d6..67ed2b737c3 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplConditional.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplConditional.java
@@ -33,7 +33,6 @@ public class RuleImplConditional extends BaseRule implements IAuthRule {
 	private AppliesTypeEnum myAppliesTo;
 	private Set<?> myAppliesToTypes;
 	private RestOperationTypeEnum myOperationType;
-	private RuleBuilder.ITenantApplicabilityChecker myTenantApplicabilityChecker;
 
 	RuleImplConditional(String theRuleName) {
 		super(theRuleName);
@@ -43,6 +42,10 @@ public class RuleImplConditional extends BaseRule implements IAuthRule {
 	public Verdict applyRule(RestOperationTypeEnum theOperation, RequestDetails theRequestDetails, IBaseResource theInputResource, IIdType theInputResourceId, IBaseResource theOutputResource,
 									 IRuleApplier theRuleApplier, Set<AuthorizationFlagsEnum> theFlags) {
 
+		if (isOtherTenant(theRequestDetails)) {
+			return null;
+		}
+
 		if (theInputResourceId != null) {
 			return null;
 		}
@@ -63,8 +66,8 @@ public class RuleImplConditional extends BaseRule implements IAuthRule {
 				return null;
 			}
 
-			if (myTenantApplicabilityChecker != null) {
-				if (!myTenantApplicabilityChecker.applies(theRequestDetails)) {
+			if (getTenantApplicabilityChecker() != null) {
+				if (!getTenantApplicabilityChecker().applies(theRequestDetails)) {
 					return null;
 				}
 			}
@@ -91,8 +94,4 @@ public class RuleImplConditional extends BaseRule implements IAuthRule {
 		myOperationType = theOperationType;
 	}
 
-	public void setTenantApplicabilityChecker(RuleBuilder.ITenantApplicabilityChecker theTenantApplicabilityChecker) {
-		myTenantApplicabilityChecker = theTenantApplicabilityChecker;
-	}
-
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplOp.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplOp.java
index e89012642e7..2fd32eefcd4 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplOp.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplOp.java
@@ -57,7 +57,6 @@ class RuleImplOp extends BaseRule /* implements IAuthRule */ {
 	private RuleOpEnum myOp;
 	private TransactionAppliesToEnum myTransactionAppliesToOp;
 	private List<IIdType> myAppliesToInstances;
-	private RuleBuilder.ITenantApplicabilityChecker myTenantApplicabilityChecker;
 
 	/**
 	 * Constructor
@@ -70,10 +69,8 @@ class RuleImplOp extends BaseRule /* implements IAuthRule */ {
 	public Verdict applyRule(RestOperationTypeEnum theOperation, RequestDetails theRequestDetails, IBaseResource theInputResource, IIdType theInputResourceId, IBaseResource theOutputResource,
 									 IRuleApplier theRuleApplier, Set<AuthorizationFlagsEnum> theFlags) {
 
-		if (myTenantApplicabilityChecker != null) {
-			if (!myTenantApplicabilityChecker.applies(theRequestDetails)) {
-				return null;
-			}
+		if (isOtherTenant(theRequestDetails)) {
+			return null;
 		}
 
 		FhirContext ctx = theRequestDetails.getServer().getFhirContext();
@@ -161,7 +158,6 @@ class RuleImplOp extends BaseRule /* implements IAuthRule */ {
 					case DELETE_TAGS:
 					case META_ADD:
 					case META_DELETE:
-					case PATCH:
 						appliesToResource = theInputResource;
 						appliesToResourceId = theInputResourceId;
 						break;
@@ -454,6 +450,8 @@ class RuleImplOp extends BaseRule /* implements IAuthRule */ {
 
 		IBaseBundle request = (IBaseBundle) theInputResource;
 		String bundleType = BundleUtil.getBundleType(theContext, request);
+
+		//noinspection EnumSwitchStatementWhichMissesCases
 		switch (theOp) {
 			case TRANSACTION:
 				return "transaction".equals(bundleType);
@@ -493,9 +491,6 @@ class RuleImplOp extends BaseRule /* implements IAuthRule */ {
 		return this;
 	}
 
-	public void setTenantApplicabilityChecker(RuleBuilder.ITenantApplicabilityChecker theTenantApplicabilityChecker) {
-		myTenantApplicabilityChecker = theTenantApplicabilityChecker;
-	}
 
 	@Override
 	public String toString() {
@@ -504,7 +499,7 @@ class RuleImplOp extends BaseRule /* implements IAuthRule */ {
 		builder.append("transactionAppliesToOp", myTransactionAppliesToOp);
 		builder.append("appliesTo", myAppliesTo);
 		builder.append("appliesToTypes", myAppliesToTypes);
-		builder.append("appliesToTenant", myTenantApplicabilityChecker);
+		builder.append("appliesToTenant", getTenantApplicabilityChecker());
 		builder.append("classifierCompartmentName", myClassifierCompartmentName);
 		builder.append("classifierCompartmentOwners", myClassifierCompartmentOwners);
 		builder.append("classifierType", myClassifierType);
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplPatch.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplPatch.java
new file mode 100644
index 00000000000..d3f4235b6ae
--- /dev/null
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleImplPatch.java
@@ -0,0 +1,58 @@
+package ca.uhn.fhir.rest.server.interceptor.auth;
+
+/*-
+ * #%L
+ * HAPI FHIR - Server Framework
+ * %%
+ * Copyright (C) 2014 - 2018 University Health Network
+ * %%
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * #L%
+ */
+
+import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IIdType;
+
+import java.util.Set;
+
+class RuleImplPatch extends BaseRule {
+	private boolean myAllRequests;
+
+	RuleImplPatch(String theRuleName) {
+		super(theRuleName);
+	}
+
+	@Override
+	public AuthorizationInterceptor.Verdict applyRule(RestOperationTypeEnum theOperation, RequestDetails theRequestDetails, IBaseResource theInputResource, IIdType theInputResourceId, IBaseResource theOutputResource, IRuleApplier theRuleApplier, Set<AuthorizationFlagsEnum> theFlags) {
+		if (isOtherTenant(theRequestDetails)) {
+			return null;
+		}
+
+		if (myAllRequests) {
+			if (theOperation == RestOperationTypeEnum.PATCH) {
+				if (theInputResource == null && theOutputResource == null) {
+					return newVerdict();
+				}
+			}
+		}
+
+		return null;
+	}
+
+	RuleImplPatch setAllRequests(boolean theAllRequests) {
+		myAllRequests = theAllRequests;
+		return this;
+	}
+}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleOpEnum.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleOpEnum.java
index 63bce75f93e..6ec6a79a8d6 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleOpEnum.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/interceptor/auth/RuleOpEnum.java
@@ -29,5 +29,6 @@ enum RuleOpEnum {
 	METADATA, 
 	BATCH, 
 	DELETE, 
-	OPERATION
+	OPERATION,
+	PATCH
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseMethodBinding.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseMethodBinding.java
index a177756a7bb..088df536edc 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseMethodBinding.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseMethodBinding.java
@@ -475,10 +475,6 @@ public abstract class BaseMethodBinding<T> {
 		if (read != null) {
 			return new ReadMethodBinding(returnType, theMethod, theContext, theProvider);
 		} else if (search != null) {
-			if (search.dynamic()) {
-				IDynamicSearchResourceProvider provider = (IDynamicSearchResourceProvider) theProvider;
-				return new DynamicSearchMethodBinding(returnType, theMethod, theContext, provider);
-			}
 			return new SearchMethodBinding(returnType, theMethod, theContext, theProvider);
 		} else if (conformance != null) {
 			return new ConformanceMethodBinding(theMethod, theContext, theProvider);
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseOutcomeReturningMethodBinding.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseOutcomeReturningMethodBinding.java
index ea92f5c5b79..3c4d02ee5d6 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseOutcomeReturningMethodBinding.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseOutcomeReturningMethodBinding.java
@@ -20,9 +20,29 @@ package ca.uhn.fhir.rest.server.method;
  * #L%
  */
 
+
+import java.io.IOException;
+import java.lang.reflect.Method;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
+import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IIdType;
+
 import ca.uhn.fhir.context.ConfigurationException;
 import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.api.*;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.MethodOutcome;
+import ca.uhn.fhir.rest.api.PreferReturnEnum;
+import ca.uhn.fhir.rest.api.RequestTypeEnum;
+import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
+import ca.uhn.fhir.rest.api.SummaryEnum;
 import ca.uhn.fhir.rest.api.server.IRestfulResponse;
 import ca.uhn.fhir.rest.api.server.IRestfulServer;
 import ca.uhn.fhir.rest.api.server.RequestDetails;
@@ -32,23 +52,11 @@ import ca.uhn.fhir.rest.server.exceptions.BaseServerResponseException;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
 import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
-import org.apache.commons.lang3.StringUtils;
-import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.instance.model.api.IIdType;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.Set;
 
 abstract class BaseOutcomeReturningMethodBinding extends BaseMethodBinding<MethodOutcome> {
 	static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(BaseOutcomeReturningMethodBinding.class);
 
-	private static EnumSet<RestOperationTypeEnum> ourOperationsWhichAllowPreferHeader = EnumSet.of(RestOperationTypeEnum.CREATE, RestOperationTypeEnum.UPDATE);
+	private static EnumSet<RestOperationTypeEnum> ourOperationsWhichAllowPreferHeader = EnumSet.of(RestOperationTypeEnum.CREATE, RestOperationTypeEnum.UPDATE, RestOperationTypeEnum.PATCH);
 
 	private boolean myReturnVoid;
 
@@ -91,11 +99,11 @@ abstract class BaseOutcomeReturningMethodBinding extends BaseMethodBinding<Metho
 				return Constants.STATUS_HTTP_200_OK;
 
 			case UPDATE:
+			case PATCH:
 				if (response == null || response.getCreated() == null || Boolean.FALSE.equals(response.getCreated())) {
 					return Constants.STATUS_HTTP_200_OK;
 				}
 				return Constants.STATUS_HTTP_201_CREATED;
-
 			case VALIDATE:
 			case DELETE:
 			default:
@@ -189,14 +197,20 @@ abstract class BaseOutcomeReturningMethodBinding extends BaseMethodBinding<Metho
 			allowPrefer = true;
 		}
 
-		if (resource != null && allowPrefer) {
+		if (allowPrefer) {
+			outcome = resource;
 			String prefer = theRequest.getHeader(Constants.HEADER_PREFER);
 			PreferReturnEnum preferReturn = RestfulServerUtils.parsePreferHeader(prefer);
 			if (preferReturn != null) {
-				if (preferReturn == PreferReturnEnum.REPRESENTATION) {
-					outcome = resource;
+				if (preferReturn == PreferReturnEnum.MINIMAL) {
+					outcome = null;
 				}
-			}
+				else {
+					if (preferReturn == PreferReturnEnum.OPERATION_OUTCOME) {
+						outcome = originalOutcome;
+					}
+				}				
+			} 
 		}
 
 		ResponseDetails responseDetails = new ResponseDetails();
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseResourceReturningMethodBinding.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseResourceReturningMethodBinding.java
index 03f0432f859..19b8a282812 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseResourceReturningMethodBinding.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/BaseResourceReturningMethodBinding.java
@@ -123,8 +123,8 @@ public abstract class BaseResourceReturningMethodBinding extends BaseMethodBindi
 
 	}
 
-	protected IBaseResource createBundleFromBundleProvider(IRestfulServer<?> theServer, RequestDetails theRequest, Integer theLimit, String theLinkSelf, Set<Include> theIncludes,
-																			 IBundleProvider theResult, int theOffset, BundleTypeEnum theBundleType, EncodingEnum theLinkEncoding, String theSearchId) {
+	IBaseResource createBundleFromBundleProvider(IRestfulServer<?> theServer, RequestDetails theRequest, Integer theLimit, String theLinkSelf, Set<Include> theIncludes,
+																IBundleProvider theResult, int theOffset, BundleTypeEnum theBundleType, EncodingEnum theLinkEncoding, String theSearchId) {
 		IVersionSpecificBundleFactory bundleFactory = theServer.getFhirContext().newBundleFactory();
 
 		int numToReturn;
@@ -152,7 +152,7 @@ public abstract class BaseResourceReturningMethodBinding extends BaseMethodBindi
 				numToReturn = Math.min(numToReturn, numTotalResults - theOffset);
 			}
 
-			if (numToReturn > 0) {
+			if (numToReturn > 0 || theResult.getCurrentPageId() != null) {
 				resourceList = theResult.getResources(theOffset, numToReturn + theOffset);
 			} else {
 				resourceList = Collections.emptyList();
@@ -166,6 +166,7 @@ public abstract class BaseResourceReturningMethodBinding extends BaseMethodBindi
 					searchId = pagingProvider.storeResultList(theResult);
 					if (isBlank(searchId)) {
 						ourLog.info("Found {} results but paging provider did not provide an ID to use for paging", numTotalResults);
+						searchId = null;
 					}
 				}
 			}
@@ -183,11 +184,7 @@ public abstract class BaseResourceReturningMethodBinding extends BaseMethodBindi
 			}
 		}
 		if (hasNull) {
-			for (Iterator<IBaseResource> iter = resourceList.iterator(); iter.hasNext(); ) {
-				if (iter.next() == null) {
-					iter.remove();
-				}
-			}
+			resourceList.removeIf(Objects::isNull);
 		}
 
 		/*
@@ -207,7 +204,18 @@ public abstract class BaseResourceReturningMethodBinding extends BaseMethodBindi
 
 		String linkPrev = null;
 		String linkNext = null;
-		if (searchId != null) {
+
+		if (isNotBlank(theResult.getCurrentPageId())) {
+			// We're doing named pages
+			searchId = theResult.getUuid();
+			if (isNotBlank(theResult.getNextPageId())) {
+				linkNext = RestfulServerUtils.createPagingLink(theIncludes, serverBase, searchId, theResult.getNextPageId(), theRequest.getParameters(), prettyPrint, theBundleType);
+			}
+			if (isNotBlank(theResult.getPreviousPageId())) {
+				linkPrev = RestfulServerUtils.createPagingLink(theIncludes, serverBase, searchId, theResult.getPreviousPageId(), theRequest.getParameters(), prettyPrint, theBundleType);
+			}
+		} else if (searchId != null) {
+			// We're doing offset pages
 			if (numTotalResults == null || theOffset + numToReturn < numTotalResults) {
 				linkNext = (RestfulServerUtils.createPagingLink(theIncludes, serverBase, searchId, theOffset + numToReturn, numToReturn, theRequest.getParameters(), prettyPrint, theBundleType));
 			}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/DynamicSearchMethodBinding.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/DynamicSearchMethodBinding.java
deleted file mode 100644
index ad62d58450b..00000000000
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/DynamicSearchMethodBinding.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package ca.uhn.fhir.rest.server.method;
-
-/*
- * #%L
- * HAPI FHIR - Server Framework
- * %%
- * Copyright (C) 2014 - 2018 University Health Network
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- * http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-
-import org.hl7.fhir.instance.model.api.IBaseResource;
-
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.context.RuntimeSearchParam;
-import ca.uhn.fhir.model.valueset.BundleTypeEnum;
-import ca.uhn.fhir.rest.api.Constants;
-import ca.uhn.fhir.rest.api.RequestTypeEnum;
-import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
-import ca.uhn.fhir.rest.api.server.IBundleProvider;
-import ca.uhn.fhir.rest.api.server.IRestfulServer;
-import ca.uhn.fhir.rest.api.server.RequestDetails;
-import ca.uhn.fhir.rest.param.ParameterUtil;
-import ca.uhn.fhir.rest.server.IDynamicSearchResourceProvider;
-import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-
-public class DynamicSearchMethodBinding extends BaseResourceReturningMethodBinding {
-
-	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(DynamicSearchMethodBinding.class);
-	private Integer myIdParamIndex;
-	private HashSet<String> myParamNames;
-	private IDynamicSearchResourceProvider myProvider;
-
-	private List<RuntimeSearchParam> mySearchParameters;
-
-	public DynamicSearchMethodBinding(Class<? extends IBaseResource> theReturnResourceType, Method theMethod, FhirContext theContext, IDynamicSearchResourceProvider theProvider) {
-		super(theReturnResourceType, theMethod, theContext, theProvider);
-
-		myProvider = theProvider;
-		mySearchParameters = myProvider.getSearchParameters();
-
-		myParamNames = new HashSet<String>();
-		for (RuntimeSearchParam next : mySearchParameters) {
-			myParamNames.add(next.getName());
-		}
-
-		myIdParamIndex = ParameterUtil.findIdParameterIndex(theMethod, getContext());
-
-	}
-
-	@Override
-	public List<IParameter> getParameters() {
-		List<IParameter> retVal = new ArrayList<IParameter>(super.getParameters());
-
-		for (RuntimeSearchParam next : mySearchParameters) {
-			// TODO: what is this?
-		}
-
-		return retVal;
-	}
-
-	@Override
-	protected BundleTypeEnum getResponseBundleType() {
-		return BundleTypeEnum.SEARCHSET;
-	}
-
-	@Override
-	public RestOperationTypeEnum getRestOperationType() {
-		return RestOperationTypeEnum.SEARCH_TYPE;
-	}
-
-	@Override
-	public ReturnTypeEnum getReturnType() {
-		return ReturnTypeEnum.BUNDLE;
-	}
-
-	public Collection<? extends RuntimeSearchParam> getSearchParams() {
-		return mySearchParameters;
-	}
-
-	@Override
-	public boolean incomingServerRequestMatchesMethod(RequestDetails theRequest) {
-		if (!theRequest.getResourceName().equals(getResourceName())) {
-			ourLog.trace("Method {} doesn't match because resource name {} != {}", new Object[] { getMethod().getName(), theRequest.getResourceName(), getResourceName() });
-			return false;
-		}
-		if (theRequest.getId() != null && myIdParamIndex == null) {
-			ourLog.trace("Method {} doesn't match because ID is not null: {}", theRequest.getId());
-			return false;
-		}
-		if (theRequest.getRequestType() == RequestTypeEnum.GET && theRequest.getOperation() != null && !Constants.PARAM_SEARCH.equals(theRequest.getOperation())) {
-			ourLog.trace("Method {} doesn't match because request type is GET but operation is not null: {}", theRequest.getId(), theRequest.getOperation());
-			return false;
-		}
-		if (theRequest.getRequestType() == RequestTypeEnum.POST && !Constants.PARAM_SEARCH.equals(theRequest.getOperation())) {
-			ourLog.trace("Method {} doesn't match because request type is POST but operation is not _search: {}", theRequest.getId(), theRequest.getOperation());
-			return false;
-		}
-		if (theRequest.getRequestType() != RequestTypeEnum.GET && theRequest.getRequestType() != RequestTypeEnum.POST) {
-			ourLog.trace("Method {} doesn't match because request type is {}", getMethod());
-			return false;
-		}
-		if (theRequest.getCompartmentName() != null) {
-			ourLog.trace("Method {} doesn't match because it is for compartment {}", new Object[] { getMethod(), theRequest.getCompartmentName() });
-			return false;
-		}
-
-		for (String next : theRequest.getParameters().keySet()) {
-			if (next.charAt(0) == '_') {
-				continue;
-			}
-			String nextQualified = next;
-			int colonIndex = next.indexOf(':');
-			int dotIndex = next.indexOf('.');
-			if (colonIndex != -1 || dotIndex != -1) {
-				int index;
-				if (colonIndex != -1 && dotIndex != -1) {
-					index = Math.min(colonIndex, dotIndex);
-				} else {
-					index = (colonIndex != -1) ? colonIndex : dotIndex;
-				}
-				next = next.substring(0, index);
-			}
-			if (!myParamNames.contains(next)) {
-				ourLog.trace("Method {} doesn't match because has parameter {}", new Object[] { getMethod(), nextQualified });
-				return false;
-			}
-		}
-
-		return true;
-	}
-
-	@Override
-	public IBundleProvider invokeServer(IRestfulServer<?> theServer, RequestDetails theRequest, Object[] theMethodParams) throws InvalidRequestException, InternalErrorException {
-		if (myIdParamIndex != null) {
-			theMethodParams[myIdParamIndex] = theRequest.getId();
-		}
-
-		Object response = invokeServerMethod(theServer, theRequest, theMethodParams);
-		return toResourceList(response);
-	}
-
-}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/DynamicSearchParameter.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/DynamicSearchParameter.java
deleted file mode 100644
index 9db8c3ee02b..00000000000
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/DynamicSearchParameter.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package ca.uhn.fhir.rest.server.method;
-
-/*
- * #%L
- * HAPI FHIR - Server Framework
- * %%
- * Copyright (C) 2014 - 2018 University Health Network
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import java.lang.reflect.Method;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.hl7.fhir.instance.model.api.IBaseResource;
-
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.context.RuntimeSearchParam;
-import ca.uhn.fhir.model.api.IQueryParameterType;
-import ca.uhn.fhir.rest.api.QualifiedParamList;
-import ca.uhn.fhir.rest.api.server.RequestDetails;
-import ca.uhn.fhir.rest.param.*;
-import ca.uhn.fhir.rest.server.IDynamicSearchResourceProvider;
-import ca.uhn.fhir.rest.server.SearchParameterMap;
-import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-
-public class DynamicSearchParameter implements IParameter {
-
-	private Map<String, RuntimeSearchParam> myNameToParam = new HashMap<String, RuntimeSearchParam>();
-
-	public DynamicSearchParameter(IDynamicSearchResourceProvider theProvider) {
-		for (RuntimeSearchParam next : theProvider.getSearchParameters()) {
-			myNameToParam.put(next.getName(), next);
-		}
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public Object translateQueryParametersIntoServerArgument(RequestDetails theRequest, BaseMethodBinding<?> theMethodBinding) throws InternalErrorException, InvalidRequestException {
-		SearchParameterMap retVal = new SearchParameterMap();
-
-		for (String next : theRequest.getParameters().keySet()) {
-			String qualifier = null;
-			String qualifiedParamName = next;
-			String unqualifiedParamName = next;
-			RuntimeSearchParam param = myNameToParam.get(next);
-			if (param == null) {
-				int colonIndex = next.indexOf(':');
-				int dotIndex = next.indexOf('.');
-				if (colonIndex != -1 || dotIndex != -1) {
-					int index;
-					if (colonIndex != -1 && dotIndex != -1) {
-						index = Math.min(colonIndex, dotIndex);
-					} else {
-						index = (colonIndex != -1) ? colonIndex : dotIndex;
-					}
-					qualifier = next.substring(index);
-					next = next.substring(0, index);
-					unqualifiedParamName = next;
-					param = myNameToParam.get(next);
-				}
-			}
-
-			if (param != null) {
-
-				for (String nextValue : theRequest.getParameters().get(qualifiedParamName)) {
-					QualifiedParamList paramList = QualifiedParamList.splitQueryStringByCommasIgnoreEscape(qualifier, nextValue);
-
-					FhirContext ctx = theRequest.getServer().getFhirContext();
-					
-					switch (param.getParamType()) {
-					case COMPOSITE:
-						Class<? extends IQueryParameterType> left = toParamType(param.getCompositeOf().get(0));
-						Class<? extends IQueryParameterType> right = toParamType(param.getCompositeOf().get(0));
-						@SuppressWarnings({ "rawtypes" })
-						CompositeOrListParam compositeOrListParam = new CompositeOrListParam(left, right);
-						compositeOrListParam.setValuesAsQueryTokens(ctx, unqualifiedParamName, paramList);
-						retVal.add(next, compositeOrListParam);
-						break;
-					case DATE:
-						DateOrListParam dateOrListParam = new DateOrListParam();
-						dateOrListParam.setValuesAsQueryTokens(ctx, unqualifiedParamName, paramList);
-						retVal.add(next, dateOrListParam);
-						break;
-					case NUMBER:
-						NumberOrListParam numberOrListParam = new NumberOrListParam();
-						numberOrListParam.setValuesAsQueryTokens(ctx, unqualifiedParamName, paramList);
-						retVal.add(next, numberOrListParam);
-						break;
-					case QUANTITY:
-						QuantityOrListParam quantityOrListParam = new QuantityOrListParam();
-						quantityOrListParam.setValuesAsQueryTokens(ctx, unqualifiedParamName, paramList);
-						retVal.add(next, quantityOrListParam);
-						break;
-					case REFERENCE:
-						ReferenceOrListParam referenceOrListParam = new ReferenceOrListParam();
-						referenceOrListParam.setValuesAsQueryTokens(ctx, unqualifiedParamName, paramList);
-						retVal.add(next, referenceOrListParam);
-						break;
-					case STRING:
-						StringOrListParam stringOrListParam = new StringOrListParam();
-						stringOrListParam.setValuesAsQueryTokens(ctx, unqualifiedParamName, paramList);
-						retVal.add(next, stringOrListParam);
-						break;
-					case TOKEN:
-						TokenOrListParam tokenOrListParam = new TokenOrListParam();
-						tokenOrListParam.setValuesAsQueryTokens(ctx, unqualifiedParamName, paramList);
-						retVal.add(next, tokenOrListParam);
-						break;
-					case URI:
-						UriOrListParam uriOrListParam = new UriOrListParam();
-						uriOrListParam.setValuesAsQueryTokens(ctx, unqualifiedParamName, paramList);
-						retVal.add(next, uriOrListParam);
-						break;
-					case HAS:
-						// Should not happen
-						break;
-					}
-				}
-			}
-		}
-
-		return retVal;
-	}
-
-	private Class<? extends IQueryParameterType> toParamType(RuntimeSearchParam theRuntimeSearchParam) {
-		switch (theRuntimeSearchParam.getParamType()) {
-		case COMPOSITE:
-			throw new IllegalStateException("Composite subtype");
-		case DATE:
-			return DateParam.class;
-		case NUMBER:
-			return NumberParam.class;
-		case QUANTITY:
-			return QuantityParam.class;
-		case REFERENCE:
-			return ReferenceParam.class;
-		case STRING:
-			return StringParam.class;
-		case TOKEN:
-			return TokenParam.class;
-		default:
-			throw new IllegalStateException("null type");
-		}
-	}
-
-	@Override
-	public void initializeTypes(Method theMethod, Class<? extends Collection<?>> theOuterCollectionType, Class<? extends Collection<?>> theInnerCollectionType, Class<?> theParameterType) {
-		// nothing
-	}
-
-}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/HistoryMethodBinding.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/HistoryMethodBinding.java
index d10593994e6..929bf8b07ec 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/HistoryMethodBinding.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/HistoryMethodBinding.java
@@ -19,16 +19,6 @@ package ca.uhn.fhir.rest.server.method;
  * limitations under the License.
  * #L%
  */
-import static org.apache.commons.lang3.StringUtils.isBlank;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.Date;
-import java.util.List;
-
-import org.apache.commons.lang3.StringUtils;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.instance.model.api.IPrimitiveType;
 
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.model.api.IResource;
@@ -45,12 +35,22 @@ import ca.uhn.fhir.rest.param.ParameterUtil;
 import ca.uhn.fhir.rest.server.IResourceProvider;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import org.apache.commons.lang3.StringUtils;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.Date;
+import java.util.List;
+
+import static org.apache.commons.lang3.StringUtils.isBlank;
 
 public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 
 	private final Integer myIdParamIndex;
-	private String myResourceName;
 	private final RestOperationTypeEnum myResourceOperationType;
+	private String myResourceName;
 
 	public HistoryMethodBinding(Method theMethod, FhirContext theContext, Object theProvider) {
 		super(toReturnType(theMethod, theProvider), theMethod, theContext, theProvider);
@@ -87,13 +87,13 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 	}
 
 	@Override
-	public RestOperationTypeEnum getRestOperationType() {
-		return myResourceOperationType;
+	protected BundleTypeEnum getResponseBundleType() {
+		return BundleTypeEnum.HISTORY;
 	}
 
 	@Override
-	protected BundleTypeEnum getResponseBundleType() {
-		return BundleTypeEnum.HISTORY;
+	public RestOperationTypeEnum getRestOperationType() {
+		return myResourceOperationType;
 	}
 
 	@Override
@@ -128,7 +128,7 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 
 		return true;
 	}
-	
+
 
 	@Override
 	public IBundleProvider invokeServer(IRestfulServer<?> theServer, RequestDetails theRequest, Object[] theMethodParams) throws InvalidRequestException, InternalErrorException {
@@ -139,18 +139,33 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 		Object response = invokeServerMethod(theServer, theRequest, theMethodParams);
 
 		final IBundleProvider resources = toResourceList(response);
-		
+
 		/*
 		 * We wrap the response so we can verify that it has the ID and version set,
 		 * as is the contract for history
 		 */
 		return new IBundleProvider() {
-			
+
+			@Override
+			public String getCurrentPageId() {
+				return resources.getCurrentPageId();
+			}
+
+			@Override
+			public String getNextPageId() {
+				return resources.getNextPageId();
+			}
+
+			@Override
+			public String getPreviousPageId() {
+				return resources.getPreviousPageId();
+			}
+
 			@Override
 			public IPrimitiveType<Date> getPublished() {
 				return resources.getPublished();
 			}
-			
+
 			@Override
 			public List<IBaseResource> getResources(int theFromIndex, int theToIndex) {
 				List<IBaseResource> retVal = resources.getResources(theFromIndex, theToIndex);
@@ -170,10 +185,10 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 				}
 				return retVal;
 			}
-			
+
 			@Override
-			public Integer size() {
-				return resources.size();
+			public String getUuid() {
+				return resources.getUuid();
 			}
 
 			@Override
@@ -182,8 +197,8 @@ public class HistoryMethodBinding extends BaseResourceReturningMethodBinding {
 			}
 
 			@Override
-			public String getUuid() {
-				return resources.getUuid();
+			public Integer size() {
+				return resources.size();
 			}
 		};
 	}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/MethodUtil.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/MethodUtil.java
index 85b2cb542eb..ab142866edb 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/MethodUtil.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/MethodUtil.java
@@ -20,18 +20,7 @@ package ca.uhn.fhir.rest.server.method;
  * #L%
  */
 
-import static org.apache.commons.lang3.StringUtils.isNotBlank;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.util.*;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-
-import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-
+import ca.uhn.fhir.context.BaseRuntimeElementDefinition;
 import ca.uhn.fhir.context.ConfigurationException;
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.model.api.Include;
@@ -44,11 +33,25 @@ import ca.uhn.fhir.rest.api.server.RequestDetails;
 import ca.uhn.fhir.rest.param.binder.CollectionBinder;
 import ca.uhn.fhir.rest.server.method.OperationParameter.IOperationParamConverter;
 import ca.uhn.fhir.rest.server.method.ResourceParameter.Mode;
+import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
 import ca.uhn.fhir.util.ParametersUtil;
 import ca.uhn.fhir.util.ReflectionUtil;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 public class MethodUtil {
-	
+
 	public static void extractDescription(SearchParameter theParameter, Annotation[] theAnnotations) {
 		for (Annotation annotation : theAnnotations) {
 			if (annotation instanceof Description) {
@@ -62,7 +65,7 @@ public class MethodUtil {
 		}
 	}
 
-	
+
 	@SuppressWarnings("unchecked")
 	public static List<IParameter> getResourceParameters(final FhirContext theContext, Method theMethod, Object theProvider, RestOperationTypeEnum theRestfulOperationTypeEnum) {
 		List<IParameter> parameters = new ArrayList<IParameter>();
@@ -90,7 +93,26 @@ public class MethodUtil {
 				}
 				if (Collection.class.isAssignableFrom(parameterType)) {
 					throw new ConfigurationException("Argument #" + paramIndex + " of Method '" + theMethod.getName() + "' in type '" + theMethod.getDeclaringClass().getCanonicalName()
-							+ "' is of an invalid generic type (can not be a collection of a collection of a collection)");
+						+ "' is of an invalid generic type (can not be a collection of a collection of a collection)");
+				}
+
+				/*
+				 * If the user is trying to bind IPrimitiveType they are probably
+				 * trying to write code that is compatible across versions of FHIR.
+				 * We'll try and come up with an appropriate subtype to give
+				 * them.
+				 *
+				 * This gets tested in HistoryR4Test
+				 */
+				if (IPrimitiveType.class.equals(parameterType)) {
+					Class<?> genericType = ReflectionUtil.getGenericCollectionTypeOfMethodParameter(theMethod, paramIndex);
+					if (Date.class.equals(genericType)) {
+						BaseRuntimeElementDefinition<?> dateTimeDef = theContext.getElementDefinition("dateTime");
+						parameterType = dateTimeDef.getImplementingClass();
+					} else if (String.class.equals(genericType) || genericType == null) {
+						BaseRuntimeElementDefinition<?> dateTimeDef = theContext.getElementDefinition("string");
+						parameterType = dateTimeDef.getImplementingClass();
+					}
 				}
 			}
 
@@ -141,7 +163,7 @@ public class MethodUtil {
 							specType = String.class;
 						} else if ((parameterType != Include.class) || innerCollectionType == null || outerCollectionType != null) {
 							throw new ConfigurationException("Method '" + theMethod.getName() + "' is annotated with @" + IncludeParam.class.getSimpleName() + " but has a type other than Collection<"
-									+ Include.class.getSimpleName() + ">");
+								+ Include.class.getSimpleName() + ">");
 						} else {
 							instantiableCollectionType = (Class<? extends Collection<Include>>) CollectionBinder.getInstantiableCollectionType(innerCollectionType, "Method '" + theMethod.getName() + "'");
 							specType = parameterType;
@@ -198,7 +220,7 @@ public class MethodUtil {
 					} else if (nextAnnotation instanceof Validate.Mode) {
 						if (parameterType.equals(ValidationModeEnum.class) == false) {
 							throw new ConfigurationException(
-									"Parameter annotated with @" + Validate.class.getSimpleName() + "." + Validate.Mode.class.getSimpleName() + " must be of type " + ValidationModeEnum.class.getName());
+								"Parameter annotated with @" + Validate.class.getSimpleName() + "." + Validate.Mode.class.getSimpleName() + " must be of type " + ValidationModeEnum.class.getName());
 						}
 						param = new OperationParameter(theContext, Constants.EXTOP_VALIDATE, Constants.EXTOP_VALIDATE_MODE, 0, 1).setConverter(new IOperationParamConverter() {
 							@Override
@@ -221,7 +243,7 @@ public class MethodUtil {
 					} else if (nextAnnotation instanceof Validate.Profile) {
 						if (parameterType.equals(String.class) == false) {
 							throw new ConfigurationException(
-									"Parameter annotated with @" + Validate.class.getSimpleName() + "." + Validate.Profile.class.getSimpleName() + " must be of type " + String.class.getName());
+								"Parameter annotated with @" + Validate.class.getSimpleName() + "." + Validate.Profile.class.getSimpleName() + " must be of type " + String.class.getName());
 						}
 						param = new OperationParameter(theContext, Constants.EXTOP_VALIDATE, Constants.EXTOP_VALIDATE_PROFILE, 0, 1).setConverter(new IOperationParamConverter() {
 							@Override
@@ -244,8 +266,8 @@ public class MethodUtil {
 
 			if (param == null) {
 				throw new ConfigurationException(
-						"Parameter #" + ((paramIndex + 1)) + "/" + (parameterTypes.length) + " of method '" + theMethod.getName() + "' on type '" + theMethod.getDeclaringClass().getCanonicalName()
-								+ "' has no recognized FHIR interface parameter annotations. Don't know how to handle this parameter");
+					"Parameter #" + ((paramIndex + 1)) + "/" + (parameterTypes.length) + " of method '" + theMethod.getName() + "' on type '" + theMethod.getDeclaringClass().getCanonicalName()
+						+ "' has no recognized FHIR interface parameter annotations. Don't know how to handle this parameter");
 			}
 
 			param.initializeTypes(theMethod, outerCollectionType, innerCollectionType, parameterType);
@@ -256,5 +278,5 @@ public class MethodUtil {
 		return parameters;
 	}
 
-	
+
 }
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/OperationMethodBinding.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/OperationMethodBinding.java
index 5deaa1209e9..a359bede97e 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/OperationMethodBinding.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/OperationMethodBinding.java
@@ -122,7 +122,7 @@ public class OperationMethodBinding extends BaseResourceReturningMethodBinding {
 			myOtherOperatiopnType = RestOperationTypeEnum.EXTENDED_OPERATION_INSTANCE;
 		}
 
-		myReturnParams = new ArrayList<OperationMethodBinding.ReturnType>();
+		myReturnParams = new ArrayList<>();
 		if (theReturnParams != null) {
 			for (OperationParam next : theReturnParams) {
 				ReturnType type = new ReturnType();
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/PageMethodBinding.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/PageMethodBinding.java
index a374fdc9724..d7ce7a2b198 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/PageMethodBinding.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/PageMethodBinding.java
@@ -20,23 +20,30 @@ package ca.uhn.fhir.rest.server.method;
  * #L%
  */
 
-import static org.apache.commons.lang3.StringUtils.isBlank;
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.model.api.Include;
+import ca.uhn.fhir.model.valueset.BundleTypeEnum;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.EncodingEnum;
+import ca.uhn.fhir.rest.api.RequestTypeEnum;
+import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.rest.api.server.IRestfulServer;
+import ca.uhn.fhir.rest.api.server.RequestDetails;
+import ca.uhn.fhir.rest.server.IPagingProvider;
+import ca.uhn.fhir.rest.server.RestfulServerUtils;
+import ca.uhn.fhir.rest.server.RestfulServerUtils.ResponseEncoding;
+import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
+import org.hl7.fhir.instance.model.api.IBaseResource;
 
 import java.lang.reflect.Method;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.hl7.fhir.instance.model.api.IBaseResource;
-
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.model.api.Include;
-import ca.uhn.fhir.model.valueset.BundleTypeEnum;
-import ca.uhn.fhir.rest.api.*;
-import ca.uhn.fhir.rest.api.server.*;
-import ca.uhn.fhir.rest.server.IPagingProvider;
-import ca.uhn.fhir.rest.server.RestfulServerUtils;
-import ca.uhn.fhir.rest.server.RestfulServerUtils.ResponseEncoding;
-import ca.uhn.fhir.rest.server.exceptions.*;
+import static org.apache.commons.lang3.StringUtils.isBlank;
+import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 public class PageMethodBinding extends BaseResourceReturningMethodBinding {
 
@@ -75,34 +82,48 @@ public class PageMethodBinding extends BaseResourceReturningMethodBinding {
 		if (pagingProvider == null) {
 			throw new InvalidRequestException("This server does not support paging");
 		}
-		IBundleProvider resultList = pagingProvider.retrieveResultList(thePagingAction);
-		if (resultList == null) {
-			ourLog.info("Client requested unknown paging ID[{}]", thePagingAction);
-			String msg = getContext().getLocalizer().getMessage(PageMethodBinding.class, "unknownSearchId", thePagingAction);
-			throw new ResourceGoneException(msg);
+
+		Integer offsetI;
+		int start = 0;
+		IBundleProvider resultList;
+
+		String pageId = null;
+		String[] pageIdParams = theRequest.getParameters().get(Constants.PARAM_PAGEID);
+		if (pageIdParams != null) {
+			if (pageIdParams.length > 0) {
+				if (isNotBlank(pageIdParams[0])) {
+					pageId = pageIdParams[0];
+				}
+			}
 		}
 
-		Integer count = RestfulServerUtils.extractCountParameter(theRequest);
-		if (count == null) {
-			count = pagingProvider.getDefaultPageSize();
-		} else if (count > pagingProvider.getMaximumPageSize()) {
-			count = pagingProvider.getMaximumPageSize();
+		if (pageId != null) {
+			// This is a page request by Search ID and Page ID
+
+			resultList = pagingProvider.retrieveResultList(thePagingAction, pageId);
+			validateHaveBundleProvider(thePagingAction, resultList);
+
+		} else {
+			// This is a page request by Search ID and Offset
+
+			resultList = pagingProvider.retrieveResultList(thePagingAction);
+			validateHaveBundleProvider(thePagingAction, resultList);
+
+			offsetI = RestfulServerUtils.tryToExtractNamedParameter(theRequest, Constants.PARAM_PAGINGOFFSET);
+			if (offsetI == null || offsetI < 0) {
+				offsetI = 0;
+			}
+
+			Integer totalNum = resultList.size();
+			start = offsetI;
+			if (totalNum != null) {
+				start = Math.min(start, totalNum - 1);
+			}
 		}
 
-		Integer offsetI = RestfulServerUtils.tryToExtractNamedParameter(theRequest, Constants.PARAM_PAGINGOFFSET);
-		if (offsetI == null || offsetI < 0) {
-			offsetI = 0;
-		}
-
-		Integer totalNum = resultList.size();
-		int start = offsetI;
-		if (totalNum != null) {
-			start = Math.min(start, totalNum - 1);
-		}
-		
 		ResponseEncoding responseEncoding = RestfulServerUtils.determineResponseEncodingNoDefault(theRequest, theServer.getDefaultResponseEncoding());
 
-		Set<Include> includes = new HashSet<Include>();
+		Set<Include> includes = new HashSet<>();
 		String[] reqIncludes = theRequest.getParameters().get(Constants.PARAM_INCLUDE);
 		if (reqIncludes != null) {
 			for (String nextInclude : reqIncludes) {
@@ -125,10 +146,26 @@ public class PageMethodBinding extends BaseResourceReturningMethodBinding {
 		if (responseEncoding != null) {
 			encodingEnum = responseEncoding.getEncoding();
 		}
-		
+
+		Integer count = RestfulServerUtils.extractCountParameter(theRequest);
+		if (count == null) {
+			count = pagingProvider.getDefaultPageSize();
+		} else if (count > pagingProvider.getMaximumPageSize()) {
+			count = pagingProvider.getMaximumPageSize();
+		}
+
 		return createBundleFromBundleProvider(theServer, theRequest, count, linkSelf, includes, resultList, start, bundleType, encodingEnum, thePagingAction);
 	}
 
+	private void validateHaveBundleProvider(String thePagingAction, IBundleProvider theBundleProvider) {
+		// Return an HTTP 410 if the search is not known
+		if (theBundleProvider == null) {
+			ourLog.info("Client requested unknown paging ID[{}]", thePagingAction);
+			String msg = getContext().getLocalizer().getMessage(PageMethodBinding.class, "unknownSearchId", thePagingAction);
+			throw new ResourceGoneException(msg);
+		}
+	}
+
 	@Override
 	public RestOperationTypeEnum getRestOperationType() {
 		return RestOperationTypeEnum.GET_PAGE;
@@ -140,10 +177,7 @@ public class PageMethodBinding extends BaseResourceReturningMethodBinding {
 		if (pageId == null || pageId.length == 0 || isBlank(pageId[0])) {
 			return false;
 		}
-		if (theRequest.getRequestType() != RequestTypeEnum.GET) {
-			return false;
-		}
-		return true;
+		return theRequest.getRequestType() == RequestTypeEnum.GET;
 	}
 
 
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/SearchParameter.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/SearchParameter.java
index 16dade4ee31..da48ecbee2c 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/SearchParameter.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/method/SearchParameter.java
@@ -47,13 +47,13 @@ public class SearchParameter extends BaseQueryParameter {
 	static final String QUALIFIER_ANY_TYPE = ":*";
 
 	static {
-		ourParamTypes = new HashMap<Class<?>, RestSearchParameterTypeEnum>();
-		ourParamQualifiers = new HashMap<RestSearchParameterTypeEnum, Set<String>>();
+		ourParamTypes = new HashMap<>();
+		ourParamQualifiers = new HashMap<>();
 
 		ourParamTypes.put(StringParam.class, RestSearchParameterTypeEnum.STRING);
 		ourParamTypes.put(StringOrListParam.class, RestSearchParameterTypeEnum.STRING);
 		ourParamTypes.put(StringAndListParam.class, RestSearchParameterTypeEnum.STRING);
-		ourParamQualifiers.put(RestSearchParameterTypeEnum.STRING, CollectionUtil.newSet(Constants.PARAMQUALIFIER_STRING_EXACT, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
+		ourParamQualifiers.put(RestSearchParameterTypeEnum.STRING, CollectionUtil.newSet(Constants.PARAMQUALIFIER_STRING_EXACT, Constants.PARAMQUALIFIER_STRING_CONTAINS, Constants.PARAMQUALIFIER_MISSING, EMPTY_STRING));
 
 		ourParamTypes.put(UriParam.class, RestSearchParameterTypeEnum.URI);
 		ourParamTypes.put(UriOrListParam.class, RestSearchParameterTypeEnum.URI);
@@ -124,7 +124,7 @@ public class SearchParameter extends BaseQueryParameter {
 	 */
 	@Override
 	public List<QualifiedParamList> encode(FhirContext theContext, Object theObject) throws InternalErrorException {
-		ArrayList<QualifiedParamList> retVal = new ArrayList<QualifiedParamList>();
+		ArrayList<QualifiedParamList> retVal = new ArrayList<>();
 
 		// TODO: declaring method should probably have a generic type..
 		@SuppressWarnings("rawtypes")
@@ -197,7 +197,7 @@ public class SearchParameter extends BaseQueryParameter {
 	}
 
 	public void setChainlists(String[] theChainWhitelist, String[] theChainBlacklist) {
-		myQualifierWhitelist = new HashSet<String>(theChainWhitelist.length);
+		myQualifierWhitelist = new HashSet<>(theChainWhitelist.length);
 		myQualifierWhitelist.add(QUALIFIER_ANY_TYPE);
 
 		for (int i = 0; i < theChainWhitelist.length; i++) {
@@ -211,7 +211,7 @@ public class SearchParameter extends BaseQueryParameter {
 		}
 
 		if (theChainBlacklist.length > 0) {
-			myQualifierBlacklist = new HashSet<String>(theChainBlacklist.length);
+			myQualifierBlacklist = new HashSet<>(theChainBlacklist.length);
 			for (String next : theChainBlacklist) {
 				if (next.equals(EMPTY_STRING)) {
 					myQualifierBlacklist.add(EMPTY_STRING);
@@ -282,7 +282,7 @@ public class SearchParameter extends BaseQueryParameter {
 			Set<String> builtInQualifiers = ourParamQualifiers.get(typeEnum);
 			if (builtInQualifiers != null) {
 				if (myQualifierWhitelist != null) {
-					HashSet<String> qualifierWhitelist = new HashSet<String>();
+					HashSet<String> qualifierWhitelist = new HashSet<>();
 					qualifierWhitelist.addAll(myQualifierWhitelist);
 					qualifierWhitelist.addAll(builtInQualifiers);
 					myQualifierWhitelist = qualifierWhitelist;
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/provider/AbstractHashMapResourceProvider.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/provider/AbstractHashMapResourceProvider.java
deleted file mode 100644
index 0756072e34b..00000000000
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/provider/AbstractHashMapResourceProvider.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package ca.uhn.fhir.rest.server.provider;
-
-/*-
- * #%L
- * HAPI FHIR - Server Framework
- * %%
- * Copyright (C) 2014 - 2018 University Health Network
- * %%
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * #L%
- */
-
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.annotation.*;
-import ca.uhn.fhir.rest.api.MethodOutcome;
-import ca.uhn.fhir.rest.server.IResourceProvider;
-import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
-import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.instance.model.api.IIdType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.*;
-
-/**
- * This class is a simple implementation of the resource provider
- * interface that uses a HashMap to store all resources in memory.
- * It is essentially a copy of {@link ca.uhn.fhir.rest.server.provider.HashMapResourceProvider}
- * with the {@link Update} and {@link ResourceParam} annotations removed from method
- * {@link ca.uhn.fhir.rest.server.provider.HashMapResourceProvider#update(IBaseResource)}.
- * Non-generic subclasses of this abstract class may implement their own annotated methods (e.g. a conditional
- * update method specifically for ConceptMap resources).
- * <p>
- * This class currently supports the following FHIR operations:
- * </p>
- * <ul>
- * <li>Create</li>
- * <li>Update existing resource</li>
- * <li>Update non-existing resource (e.g. create with client-supplied ID)</li>
- * <li>Delete</li>
- * <li>Search by resource type with no parameters</li>
- * </ul>
- *
- * @param <T> The resource type to support
- */
-public class AbstractHashMapResourceProvider<T extends IBaseResource> implements IResourceProvider {
-	private static final Logger ourLog = LoggerFactory.getLogger(AbstractHashMapResourceProvider.class);
-	private final Class<T> myResourceType;
-	private final FhirContext myFhirContext;
-	private final String myResourceName;
-	protected Map<String, TreeMap<Long, T>> myIdToVersionToResourceMap = new HashMap<>();
-	private long myNextId;
-
-	/**
-	 * Constructor
-	 *
-	 * @param theFhirContext  The FHIR context
-	 * @param theResourceType The resource type to support
-	 */
-	@SuppressWarnings("WeakerAccess")
-	public AbstractHashMapResourceProvider(FhirContext theFhirContext, Class<T> theResourceType) {
-		myFhirContext = theFhirContext;
-		myResourceType = theResourceType;
-		myResourceName = myFhirContext.getResourceDefinition(theResourceType).getName();
-		clear();
-	}
-
-	/**
-	 * Clear all data held in this resource provider
-	 */
-	public void clear() {
-		myNextId = 1;
-		myIdToVersionToResourceMap.clear();
-	}
-
-	@Create
-	public MethodOutcome create(@ResourceParam T theResource) {
-		long idPart = myNextId++;
-		String idPartAsString = Long.toString(idPart);
-		Long versionIdPart = 1L;
-
-		IIdType id = store(theResource, idPartAsString, versionIdPart);
-
-		return new MethodOutcome()
-			.setCreated(true)
-			.setId(id);
-	}
-
-	@Delete
-	public MethodOutcome delete(@IdParam IIdType theId) {
-		TreeMap<Long, T> versions = myIdToVersionToResourceMap.get(theId.getIdPart());
-		if (versions == null || versions.isEmpty()) {
-			throw new ResourceNotFoundException(theId);
-		}
-
-		long nextVersion = versions.lastEntry().getKey() + 1L;
-		IIdType id = store(null, theId.getIdPart(), nextVersion);
-
-		return new MethodOutcome()
-			.setId(id);
-	}
-
-	@Override
-	public Class<? extends IBaseResource> getResourceType() {
-		return myResourceType;
-	}
-
-	private synchronized TreeMap<Long, T> getVersionToResource(String theIdPart) {
-		if (!myIdToVersionToResourceMap.containsKey(theIdPart)) {
-			myIdToVersionToResourceMap.put(theIdPart, new TreeMap<Long, T>());
-		}
-		return myIdToVersionToResourceMap.get(theIdPart);
-	}
-
-	@Read(version = true)
-	public IBaseResource read(@IdParam IIdType theId) {
-		TreeMap<Long, T> versions = myIdToVersionToResourceMap.get(theId.getIdPart());
-		if (versions == null || versions.isEmpty()) {
-			throw new ResourceNotFoundException(theId);
-		}
-
-		if (theId.hasVersionIdPart()) {
-			Long versionId = theId.getVersionIdPartAsLong();
-			if (!versions.containsKey(versionId)) {
-				throw new ResourceNotFoundException(theId);
-			} else {
-				T resource = versions.get(versionId);
-				if (resource == null) {
-					throw new ResourceGoneException(theId);
-				}
-				return resource;
-			}
-
-		} else {
-			return versions.lastEntry().getValue();
-		}
-	}
-
-	@Search
-	public List<IBaseResource> search() {
-		List<IBaseResource> retVal = new ArrayList<>();
-
-		for (TreeMap<Long, T> next : myIdToVersionToResourceMap.values()) {
-			if (next.isEmpty() == false) {
-				retVal.add(next.lastEntry().getValue());
-			}
-		}
-
-		return retVal;
-	}
-
-	private IIdType store(@ResourceParam T theResource, String theIdPart, Long theVersionIdPart) {
-		IIdType id = myFhirContext.getVersion().newIdType();
-		id.setParts(null, myResourceName, theIdPart, Long.toString(theVersionIdPart));
-		if (theResource != null) {
-			theResource.setId(id);
-		}
-
-		TreeMap<Long, T> versionToResource = getVersionToResource(theIdPart);
-		versionToResource.put(theVersionIdPart, theResource);
-
-		ourLog.info("Storing resource with ID: {}", id.getValue());
-
-		return id;
-	}
-
-	public MethodOutcome update(T theResource) {
-		String idPartAsString = theResource.getIdElement().getIdPart();
-		TreeMap<Long, T> versionToResource = getVersionToResource(idPartAsString);
-
-		Long versionIdPart;
-		Boolean created;
-		if (versionToResource.isEmpty()) {
-			versionIdPart = 1L;
-			created = true;
-		} else {
-			versionIdPart = versionToResource.lastKey() + 1L;
-			created = false;
-		}
-
-		IIdType id = store(theResource, idPartAsString, versionIdPart);
-
-		return new MethodOutcome()
-			.setCreated(created)
-			.setId(id);
-	}
-}
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/provider/HashMapResourceProvider.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/provider/HashMapResourceProvider.java
index 50e3db87701..59a14d9f2b7 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/provider/HashMapResourceProvider.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/provider/HashMapResourceProvider.java
@@ -20,7 +20,12 @@ package ca.uhn.fhir.rest.server.provider;
  * #L%
  */
 
+import ca.uhn.fhir.context.BaseRuntimeChildDefinition;
+import ca.uhn.fhir.context.BaseRuntimeElementCompositeDefinition;
 import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.FhirVersionEnum;
+import ca.uhn.fhir.model.api.IResource;
+import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
 import ca.uhn.fhir.rest.annotation.*;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.param.TokenAndListParam;
@@ -29,14 +34,19 @@ import ca.uhn.fhir.rest.param.TokenParam;
 import ca.uhn.fhir.rest.server.IResourceProvider;
 import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
 import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
+import ca.uhn.fhir.util.ValidateUtil;
+import org.hl7.fhir.instance.model.api.IBase;
 import org.hl7.fhir.instance.model.api.IBaseResource;
 import org.hl7.fhir.instance.model.api.IIdType;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
 
+import static org.apache.commons.lang3.StringUtils.isBlank;
+
 /**
  * This class is a simple implementation of the resource provider
  * interface that uses a HashMap to store all resources in memory.
@@ -58,7 +68,9 @@ public class HashMapResourceProvider<T extends IBaseResource> implements IResour
 	private final Class<T> myResourceType;
 	private final FhirContext myFhirContext;
 	private final String myResourceName;
-	protected Map<String, TreeMap<Long, T>> myIdToVersionToResourceMap = new HashMap<>();
+	protected Map<String, TreeMap<Long, T>> myIdToVersionToResourceMap = Collections.synchronizedMap(new LinkedHashMap<>());
+	protected Map<String, LinkedList<T>> myIdToHistory = Collections.synchronizedMap(new LinkedHashMap<>());
+	protected LinkedList<T> myTypeHistory = new LinkedList<>();
 	private long myNextId;
 	private AtomicLong myDeleteCount = new AtomicLong(0);
 	private AtomicLong mySearchCount = new AtomicLong(0);
@@ -86,6 +98,8 @@ public class HashMapResourceProvider<T extends IBaseResource> implements IResour
 	public void clear() {
 		myNextId = 1;
 		myIdToVersionToResourceMap.clear();
+		myIdToHistory.clear();
+		myTypeHistory.clear();
 	}
 
 	/**
@@ -177,12 +191,25 @@ public class HashMapResourceProvider<T extends IBaseResource> implements IResour
 	}
 
 	private synchronized TreeMap<Long, T> getVersionToResource(String theIdPart) {
-		if (!myIdToVersionToResourceMap.containsKey(theIdPart)) {
-			myIdToVersionToResourceMap.put(theIdPart, new TreeMap<>());
-		}
+		myIdToVersionToResourceMap.computeIfAbsent(theIdPart, t -> new TreeMap<>());
 		return myIdToVersionToResourceMap.get(theIdPart);
 	}
 
+	@History
+	public List<T> historyInstance(@IdParam IIdType theId) {
+		LinkedList<T> retVal = myIdToHistory.get(theId.getIdPart());
+		if (retVal == null) {
+			throw new ResourceNotFoundException(theId);
+		}
+
+		return retVal;
+	}
+
+	@History
+	public List<T> historyType() {
+		return myTypeHistory;
+	}
+
 	@Read(version = true)
 	public IBaseResource read(@IdParam IIdType theId) {
 		TreeMap<Long, T> versions = myIdToVersionToResourceMap.get(theId.getIdPart());
@@ -213,8 +240,23 @@ public class HashMapResourceProvider<T extends IBaseResource> implements IResour
 	}
 
 	@Search
-	public List<IBaseResource> search(
-		@OptionalParam(name = "_id") TokenAndListParam theIds) {
+	public List<IBaseResource> searchAll() {
+		List<IBaseResource> retVal = new ArrayList<>();
+
+		for (TreeMap<Long, T> next : myIdToVersionToResourceMap.values()) {
+			if (next.isEmpty() == false) {
+				T nextResource = next.lastEntry().getValue();
+				retVal.add(nextResource);
+			}
+		}
+
+		mySearchCount.incrementAndGet();
+		return retVal;
+	}
+
+	@Search
+	public List<IBaseResource> searchById(
+		@RequiredParam(name = "_id") TokenAndListParam theIds) {
 
 		List<IBaseResource> retVal = new ArrayList<>();
 
@@ -252,21 +294,62 @@ public class HashMapResourceProvider<T extends IBaseResource> implements IResour
 
 	private IIdType store(@ResourceParam T theResource, String theIdPart, Long theVersionIdPart) {
 		IIdType id = myFhirContext.getVersion().newIdType();
-		id.setParts(null, myResourceName, theIdPart, Long.toString(theVersionIdPart));
+		String versionIdPart = Long.toString(theVersionIdPart);
+		id.setParts(null, myResourceName, theIdPart, versionIdPart);
 		if (theResource != null) {
 			theResource.setId(id);
 		}
 
-		TreeMap<Long, T> versionToResource = getVersionToResource(theIdPart);
-		versionToResource.put(theVersionIdPart, theResource);
+		/*
+		 * This is a bit of magic to make sure that the versionId attribute
+		 * in the resource being stored accurately represents the version
+		 * that was assigned by this provider
+		 */
+		if (theResource != null) {
+			if (myFhirContext.getVersion().getVersion() == FhirVersionEnum.DSTU2) {
+				ResourceMetadataKeyEnum.VERSION.put((IResource) theResource, versionIdPart);
+			} else {
+				BaseRuntimeChildDefinition metaChild = myFhirContext.getResourceDefinition(myResourceType).getChildByName("meta");
+				List<IBase> metaValues = metaChild.getAccessor().getValues(theResource);
+				if (metaValues.size() > 0) {
+					IBase meta = metaValues.get(0);
+					BaseRuntimeElementCompositeDefinition<?> metaDef = (BaseRuntimeElementCompositeDefinition<?>) myFhirContext.getElementDefinition(meta.getClass());
+					BaseRuntimeChildDefinition versionIdDef = metaDef.getChildByName("versionId");
+					List<IBase> versionIdValues = versionIdDef.getAccessor().getValues(meta);
+					if (versionIdValues.size() > 0) {
+						IPrimitiveType<?> versionId = (IPrimitiveType<?>) versionIdValues.get(0);
+						versionId.setValueAsString(versionIdPart);
+					}
+				}
+			}
+		}
 
 		ourLog.info("Storing resource with ID: {}", id.getValue());
 
+		// Store to ID->version->resource map
+		TreeMap<Long, T> versionToResource = getVersionToResource(theIdPart);
+		versionToResource.put(theVersionIdPart, theResource);
+
+		// Store to type history map
+		myTypeHistory.addFirst(theResource);
+
+		// Store to ID history map
+		myIdToHistory.computeIfAbsent(theIdPart, t -> new LinkedList<>());
+		myIdToHistory.get(theIdPart).addFirst(theResource);
+
+		// Return the newly assigned ID including the version ID
 		return id;
 	}
 
+	/**
+	 * @param theConditional This is provided only so that subclasses can implement if they want
+	 */
 	@Update
-	public MethodOutcome update(@ResourceParam T theResource) {
+	public MethodOutcome update(
+		@ResourceParam T theResource,
+		@ConditionalUrlParam String theConditional) {
+
+		ValidateUtil.isTrueOrThrowInvalidRequest(isBlank(theConditional), "This server doesn't support conditional update");
 
 		String idPartAsString = theResource.getIdElement().getIdPart();
 		TreeMap<Long, T> versionToResource = getVersionToResource(idPartAsString);
diff --git a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/tenant/UrlBaseTenantIdentificationStrategy.java b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/tenant/UrlBaseTenantIdentificationStrategy.java
index e444bc5d9ac..7887cbd9b8d 100644
--- a/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/tenant/UrlBaseTenantIdentificationStrategy.java
+++ b/hapi-fhir-server/src/main/java/ca/uhn/fhir/rest/server/tenant/UrlBaseTenantIdentificationStrategy.java
@@ -43,7 +43,7 @@ public class UrlBaseTenantIdentificationStrategy implements ITenantIdentificatio
 	public void extractTenant(UrlPathTokenizer theUrlPathTokenizer, RequestDetails theRequestDetails) {
 		String tenantId = null;
 		if (theUrlPathTokenizer.hasMoreTokens()) {
-			tenantId = defaultIfBlank(theUrlPathTokenizer.nextToken(), null);
+			tenantId = defaultIfBlank(theUrlPathTokenizer.nextTokenUnescapedAndSanitized(), null);
 			ourLog.trace("Found tenant ID {} in request string", tenantId);
 			theRequestDetails.setTenantId(tenantId);
 		}
diff --git a/hapi-fhir-server/src/test/java/ca/uhn/fhir/rest/server/SimpleBundleProviderTest.java b/hapi-fhir-server/src/test/java/ca/uhn/fhir/rest/server/SimpleBundleProviderTest.java
new file mode 100644
index 00000000000..1c271b6318e
--- /dev/null
+++ b/hapi-fhir-server/src/test/java/ca/uhn/fhir/rest/server/SimpleBundleProviderTest.java
@@ -0,0 +1,18 @@
+package ca.uhn.fhir.rest.server;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class SimpleBundleProviderTest {
+
+	@Test
+	public void testPreferredPageSize() {
+		SimpleBundleProvider p = new SimpleBundleProvider();
+		assertEquals(null, p.preferredPageSize());
+
+		p.setPreferredPageSize(100);
+		assertEquals(100, p.preferredPageSize().intValue());
+	}
+
+}
diff --git a/hapi-fhir-structures-dstu/src/test/java/ca/uhn/fhir/rest/server/DynamicSearchTest.java b/hapi-fhir-structures-dstu/src/test/java/ca/uhn/fhir/rest/server/DynamicSearchTest.java
deleted file mode 100644
index cb97cd8a079..00000000000
--- a/hapi-fhir-structures-dstu/src/test/java/ca/uhn/fhir/rest/server/DynamicSearchTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package ca.uhn.fhir.rest.server;
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.servlet.ServletHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.context.RuntimeSearchParam;
-import ca.uhn.fhir.context.RuntimeSearchParam.RuntimeSearchParamStatusEnum;
-import ca.uhn.fhir.model.api.Bundle;
-import ca.uhn.fhir.model.api.IResource;
-import ca.uhn.fhir.model.dstu.resource.Conformance;
-import ca.uhn.fhir.model.dstu.resource.Patient;
-import ca.uhn.fhir.narrative.DefaultThymeleafNarrativeGenerator;
-import ca.uhn.fhir.rest.annotation.Search;
-import ca.uhn.fhir.rest.method.RestSearchParameterTypeEnum;
-import ca.uhn.fhir.rest.param.StringAndListParam;
-import ca.uhn.fhir.rest.param.StringOrListParam;
-import ca.uhn.fhir.rest.param.StringParam;
-import ca.uhn.fhir.util.PortUtil;
-import ca.uhn.fhir.util.TestUtil;
-
-/**
- * Created by dsotnikov on 2/25/2014.
- */
-public class DynamicSearchTest {
-
-	private static CloseableHttpClient ourClient;
-	private static FhirContext ourCtx = FhirContext.forDstu1();
-	private static SearchParameterMap ourLastSearchParams;
-	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(DynamicSearchTest.class);
-
-	private static int ourPort;
-
-	private static Server ourServer;
-
-	@Before
-	public void before() {
-		ourLastSearchParams = null;
-	}
-
-	@Test
-	public void testConformance() throws Exception {
-		HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/metadata?_pretty=true");
-		HttpResponse status = ourClient.execute(httpGet);
-		String responseContent = IOUtils.toString(status.getEntity().getContent());
-		IOUtils.closeQuietly(status.getEntity().getContent());
-		assertEquals(200, status.getStatusLine().getStatusCode());
-		Conformance conf = ourCtx.newXmlParser().parseResource(Conformance.class,responseContent);
-		
-		ourLog.info(responseContent);
-	}
-
-
-	@Test
-	public void testSearchOneStringParam() throws Exception {
-		HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?param1=param1value");
-		HttpResponse status = ourClient.execute(httpGet);
-		String responseContent = IOUtils.toString(status.getEntity().getContent());
-		IOUtils.closeQuietly(status.getEntity().getContent());
-		assertEquals(200, status.getStatusLine().getStatusCode());
-		Bundle bundle = ourCtx.newXmlParser().parseBundle(responseContent);
-		assertEquals(1, bundle.getEntries().size());
-
-		assertEquals(1, ourLastSearchParams.size());
-		StringAndListParam andList =(StringAndListParam) ourLastSearchParams.get("param1");
-		assertEquals(1,andList.getValuesAsQueryTokens().size());
-		StringOrListParam orList = andList.getValuesAsQueryTokens().get(0);
-		assertEquals(1,orList.getValuesAsQueryTokens().size());
-		StringParam param1 = orList.getValuesAsQueryTokens().get(0);
-		assertEquals("param1value", param1.getValue());
-	}
-
-	@Test
-	public void testSearchOneStringParamWithAnd() throws Exception {
-		HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?param1=param1value&param1=param1value2");
-		HttpResponse status = ourClient.execute(httpGet);
-		String responseContent = IOUtils.toString(status.getEntity().getContent());
-		IOUtils.closeQuietly(status.getEntity().getContent());
-		assertEquals(200, status.getStatusLine().getStatusCode());
-		Bundle bundle = ourCtx.newXmlParser().parseBundle(responseContent);
-		assertEquals(1, bundle.getEntries().size());
-
-		assertEquals(1, ourLastSearchParams.size());
-		StringAndListParam andList =(StringAndListParam) ourLastSearchParams.get("param1");
-		assertEquals(2,andList.getValuesAsQueryTokens().size());
-		StringOrListParam orList = andList.getValuesAsQueryTokens().get(0);
-		assertEquals(1,orList.getValuesAsQueryTokens().size());
-		StringParam param1 = orList.getValuesAsQueryTokens().get(0);
-		assertEquals("param1value", param1.getValue());
-
-		orList = andList.getValuesAsQueryTokens().get(1);
-		assertEquals(1,orList.getValuesAsQueryTokens().size());
-		StringParam param1b = orList.getValuesAsQueryTokens().get(0);
-		assertEquals("param1value2", param1b.getValue());
-	}
-
-	@Test
-	public void testSearchOneStringParamWithOr() throws Exception {
-		HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?param1=param1value,param1value2");
-		HttpResponse status = ourClient.execute(httpGet);
-		String responseContent = IOUtils.toString(status.getEntity().getContent());
-		IOUtils.closeQuietly(status.getEntity().getContent());
-		assertEquals(200, status.getStatusLine().getStatusCode());
-		Bundle bundle = ourCtx.newXmlParser().parseBundle(responseContent);
-		assertEquals(1, bundle.getEntries().size());
-
-		assertEquals(1, ourLastSearchParams.size());
-		StringAndListParam andList =(StringAndListParam) ourLastSearchParams.get("param1");
-		assertEquals(1,andList.getValuesAsQueryTokens().size());
-		StringOrListParam orList = andList.getValuesAsQueryTokens().get(0);
-		assertEquals(2,orList.getValuesAsQueryTokens().size());
-		StringParam param1 = orList.getValuesAsQueryTokens().get(0);
-		assertEquals("param1value", param1.getValue());
-		StringParam param1b = orList.getValuesAsQueryTokens().get(1);
-		assertEquals("param1value2", param1b.getValue());
-	}
-
-
-	@AfterClass
-	public static void afterClassClearContext() throws Exception {
-		ourServer.stop();
-		TestUtil.clearAllStaticFieldsForUnitTest();
-	}
-
-	@BeforeClass
-	public static void beforeClass() throws Exception {
-		ourPort = PortUtil.findFreePort();
-		ourServer = new Server(ourPort);
-
-		DummyPatientResourceProvider patientProvider = new DummyPatientResourceProvider();
-
-		ServletHandler proxyHandler = new ServletHandler();
-		RestfulServer servlet = new RestfulServer(ourCtx);
-		servlet.getFhirContext().setNarrativeGenerator(new DefaultThymeleafNarrativeGenerator());
-
-		servlet.setResourceProviders(patientProvider);
-		ServletHolder servletHolder = new ServletHolder(servlet);
-		proxyHandler.addServletWithMapping(servletHolder, "/*");
-		ourServer.setHandler(proxyHandler);
-		ourServer.start();
-
-		PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS);
-		HttpClientBuilder builder = HttpClientBuilder.create();
-		builder.setConnectionManager(connectionManager);
-		ourClient = builder.build();
-
-	}
-
-	/**
-	 * Created by dsotnikov on 2/25/2014.
-	 */
-	public static class DummyPatientResourceProvider implements IDynamicSearchResourceProvider {
-
-		@Override
-		public Class<? extends IResource> getResourceType() {
-			return Patient.class;
-		}
-
-		@Override
-		public List<RuntimeSearchParam> getSearchParameters() {
-			ArrayList<RuntimeSearchParam> retVal = new ArrayList<RuntimeSearchParam>();
-			retVal.add(new RuntimeSearchParam("param1", "This is the first parameter", "Patient.param1", RestSearchParameterTypeEnum.STRING, null, null, RuntimeSearchParamStatusEnum.ACTIVE));
-			retVal.add(new RuntimeSearchParam("param2", "This is the second parameter", "Patient.param2", RestSearchParameterTypeEnum.DATE, null, null, RuntimeSearchParamStatusEnum.ACTIVE));
-			return retVal;
-		}
-
-		@Search(dynamic=true)
-		public List<Patient> search(SearchParameterMap theSearchParams) {
-			ourLastSearchParams = theSearchParams;
-
-			ArrayList<Patient> retVal = new ArrayList<Patient>();
-
-			Patient patient = new Patient();
-			patient.setId("Patient/1");
-			patient.addIdentifier("system", "fooCompartment");
-			retVal.add(patient);
-			return retVal;
-		}
-
-	}
-
-
-}
diff --git a/hapi-fhir-structures-dstu2.1/src/main/java/org/hl7/fhir/dstu2016may/hapi/rest/server/ServerConformanceProvider.java b/hapi-fhir-structures-dstu2.1/src/main/java/org/hl7/fhir/dstu2016may/hapi/rest/server/ServerConformanceProvider.java
index efce3ae8560..14aca165f96 100644
--- a/hapi-fhir-structures-dstu2.1/src/main/java/org/hl7/fhir/dstu2016may/hapi/rest/server/ServerConformanceProvider.java
+++ b/hapi-fhir-structures-dstu2.1/src/main/java/org/hl7/fhir/dstu2016may/hapi/rest/server/ServerConformanceProvider.java
@@ -275,8 +275,6 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
 
 					if (nextMethodBinding instanceof SearchMethodBinding) {
 						handleSearchMethodBinding(rest, resource, resourceName, def, includes, (SearchMethodBinding) nextMethodBinding);
-					} else if (nextMethodBinding instanceof DynamicSearchMethodBinding) {
-						handleDynamicSearchMethodBinding(resource, def, includes, (DynamicSearchMethodBinding) nextMethodBinding);
 					} else if (nextMethodBinding instanceof OperationMethodBinding) {
 						OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
 						String opName = myOperationBindingToName.get(methodBinding);
@@ -328,50 +326,6 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
 		return retVal;
 	}
 
-	private void handleDynamicSearchMethodBinding(ConformanceRestResourceComponent resource, RuntimeResourceDefinition def, TreeSet<String> includes, DynamicSearchMethodBinding searchMethodBinding) {
-		includes.addAll(searchMethodBinding.getIncludes());
-
-		List<RuntimeSearchParam> searchParameters = new ArrayList<RuntimeSearchParam>();
-		searchParameters.addAll(searchMethodBinding.getSearchParams());
-		sortRuntimeSearchParameters(searchParameters);
-
-		if (!searchParameters.isEmpty()) {
-
-			for (RuntimeSearchParam nextParameter : searchParameters) {
-
-				String nextParamName = nextParameter.getName();
-
-				// String chain = null;
-				String nextParamUnchainedName = nextParamName;
-				if (nextParamName.contains(".")) {
-					// chain = nextParamName.substring(nextParamName.indexOf('.') + 1);
-					nextParamUnchainedName = nextParamName.substring(0, nextParamName.indexOf('.'));
-				}
-
-				String nextParamDescription = nextParameter.getDescription();
-
-				/*
-				 * If the parameter has no description, default to the one from the resource
-				 */
-				if (StringUtils.isBlank(nextParamDescription)) {
-					RuntimeSearchParam paramDef = def.getSearchParam(nextParamUnchainedName);
-					if (paramDef != null) {
-						nextParamDescription = paramDef.getDescription();
-					}
-				}
-
-				ConformanceRestResourceSearchParamComponent param = resource.addSearchParam();
-
-				param.setName(nextParamName);
-				// if (StringUtils.isNotBlank(chain)) {
-				// param.addChain(chain);
-				// }
-				param.setDocumentation(nextParamDescription);
-				// param.setType(nextParameter.getParamType());
-			}
-		}
-	}
-
 	private void handleSearchMethodBinding(ConformanceRestComponent rest, ConformanceRestResourceComponent resource, String resourceName, RuntimeResourceDefinition def, TreeSet<String> includes,
 			SearchMethodBinding searchMethodBinding) {
 		includes.addAll(searchMethodBinding.getIncludes());
diff --git a/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/CreateDstu2_1Test.java b/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/CreateDstu2_1Test.java
index 4411f697d79..aadfd385615 100644
--- a/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/CreateDstu2_1Test.java
+++ b/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/CreateDstu2_1Test.java
@@ -23,14 +23,24 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.hl7.fhir.dstu2016may.model.*;
+import org.hl7.fhir.dstu2016may.model.DateType;
+import org.hl7.fhir.dstu2016may.model.IdType;
+import org.hl7.fhir.dstu2016may.model.OperationOutcome;
 import org.hl7.fhir.dstu2016may.model.OperationOutcome.OperationOutcomeIssueComponent;
+import org.hl7.fhir.dstu2016may.model.Patient;
 import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
 import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.junit.*;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.annotation.*;
+import ca.uhn.fhir.rest.annotation.Create;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Read;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.annotation.Search;
 import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.client.MyPatientWithExtensions;
@@ -75,12 +85,13 @@ public class CreateDstu2_1Test {
 	}
 
 	@Test
-	public void testCreateReturnsOperationOutcome() throws Exception {
+	public void testCreateReturnsRepresentation() throws Exception {
 		ourReturnOo = new OperationOutcome().addIssue(new OperationOutcomeIssueComponent().setDiagnostics("DIAG"));
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
-		httpPost.setEntity(new StringEntity("{\"resourceType\":\"Patient\", \"status\":\"active\"}", ContentType.parse(Constants.CT_FHIR_JSON+"; charset=utf-8")));
+		httpPost.setEntity(new StringEntity("{\"resourceType\":\"Patient\", \"gender\":\"male\"}", ContentType.parse(Constants.CT_FHIR_JSON+"; charset=utf-8")));
 		HttpResponse status = ourClient.execute(httpPost);
+		String expectedContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"gender\":\"male\"}";
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
 		IOUtils.closeQuietly(status.getEntity().getContent());
@@ -88,8 +99,8 @@ public class CreateDstu2_1Test {
 		ourLog.info("Response was:\n{}", responseContent);
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
+		assertEquals(expectedContent, responseContent);
 
-		assertThat(responseContent, containsString("DIAG"));
 	}
 
 	/**
@@ -232,7 +243,9 @@ public class CreateDstu2_1Test {
 
 		@Create()
 		public MethodOutcome create(@ResourceParam Patient theIdParam) {
-			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(ourReturnOo);
+			theIdParam.setId("1");
+			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(ourReturnOo)
+					.setResource(theIdParam);
 		}
 
 		@Override
diff --git a/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/PatchDstu2_1Test.java b/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/PatchDstu2_1Test.java
index ae25a1c98d9..a1544613622 100644
--- a/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/PatchDstu2_1Test.java
+++ b/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/PatchDstu2_1Test.java
@@ -1,10 +1,13 @@
 package ca.uhn.fhir.rest.server;
 
-import static org.junit.Assert.assertEquals;
-
-import java.nio.charset.StandardCharsets;
-import java.util.concurrent.TimeUnit;
-
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Patch;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.PatchTypeEnum;
+import ca.uhn.fhir.util.PortUtil;
+import ca.uhn.fhir.util.TestUtil;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPatch;
@@ -16,26 +19,61 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.hl7.fhir.dstu2016may.model.*;
+import org.hl7.fhir.dstu2016may.model.IdType;
+import org.hl7.fhir.dstu2016may.model.OperationOutcome;
+import org.hl7.fhir.dstu2016may.model.Patient;
 import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.junit.*;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.annotation.*;
-import ca.uhn.fhir.rest.api.Constants;
-import ca.uhn.fhir.rest.api.PatchTypeEnum;
-import ca.uhn.fhir.util.PortUtil;
-import ca.uhn.fhir.util.TestUtil;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.TimeUnit;
+
+import static org.junit.Assert.assertEquals;
 
 public class PatchDstu2_1Test {
 
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(PatchDstu2_1Test.class);
 	private static CloseableHttpClient ourClient;
 	private static FhirContext ourCtx = FhirContext.forDstu2_1();
-	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(PatchDstu2_1Test.class);
 	private static int ourPort;
 	private static Server ourServer;
 	private static String ourLastMethod;
 	private static PatchTypeEnum ourLastPatchType;
+	private static String ourLastBody;
+	private static IdType ourLastId;
+
+	@AfterClass
+	public static void afterClassClearContext() throws Exception {
+		ourServer.stop();
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	@BeforeClass
+	public static void beforeClass() throws Exception {
+		ourPort = PortUtil.findFreePort();
+		ourServer = new Server(ourPort);
+
+		DummyPatientResourceProvider patientProvider = new DummyPatientResourceProvider();
+
+		ServletHandler proxyHandler = new ServletHandler();
+		RestfulServer servlet = new RestfulServer(ourCtx);
+		servlet.setPagingProvider(new FifoMemoryPagingProvider(10));
+
+		servlet.setResourceProviders(patientProvider);
+		ServletHolder servletHolder = new ServletHolder(servlet);
+		proxyHandler.addServletWithMapping(servletHolder, "/*");
+		ourServer.setHandler(proxyHandler);
+		ourServer.start();
+
+		PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS);
+		HttpClientBuilder builder = HttpClientBuilder.create();
+		builder.setConnectionManager(connectionManager);
+		ourClient = builder.build();
+
+	}
 
 	@Before
 	public void before() {
@@ -49,15 +87,12 @@ public class PatchDstu2_1Test {
 		String requestContents = "[ { \"op\": \"add\", \"path\": \"/a/b/c\", \"value\": [ \"foo\", \"bar\" ] } ]";
 		HttpPatch httpPatch = new HttpPatch("http://localhost:" + ourPort + "/Patient/123");
 		httpPatch.setEntity(new StringEntity(requestContents, ContentType.parse(Constants.CT_JSON_PATCH)));
-		CloseableHttpResponse status = ourClient.execute(httpPatch);
-
-		try {
+		httpPatch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + '=' + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
+		try (CloseableHttpResponse status = ourClient.execute(httpPatch)) {
 			String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
 			ourLog.info(responseContent);
 			assertEquals(200, status.getStatusLine().getStatusCode());
 			assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><text><div xmlns=\"http://www.w3.org/1999/xhtml\">OK</div></text></OperationOutcome>", responseContent);
-		} finally {
-			IOUtils.closeQuietly(status.getEntity().getContent());
 		}
 
 		assertEquals("patientPatch", ourLastMethod);
@@ -70,16 +105,14 @@ public class PatchDstu2_1Test {
 	public void testPatchValidXml() throws Exception {
 		String requestContents = "<root/>";
 		HttpPatch httpPatch = new HttpPatch("http://localhost:" + ourPort + "/Patient/123");
+		httpPatch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		httpPatch.setEntity(new StringEntity(requestContents, ContentType.parse(Constants.CT_XML_PATCH)));
-		CloseableHttpResponse status = ourClient.execute(httpPatch);
 
-		try {
+		try (CloseableHttpResponse status = ourClient.execute(httpPatch)) {
 			String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
 			ourLog.info(responseContent);
 			assertEquals(200, status.getStatusLine().getStatusCode());
 			assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><text><div xmlns=\"http://www.w3.org/1999/xhtml\">OK</div></text></OperationOutcome>", responseContent);
-		} finally {
-			IOUtils.closeQuietly(status.getEntity().getContent());
 		}
 
 		assertEquals("patientPatch", ourLastMethod);
@@ -126,42 +159,9 @@ public class PatchDstu2_1Test {
 
 	}
 
-	@AfterClass
-	public static void afterClassClearContext() throws Exception {
-		ourServer.stop();
-		TestUtil.clearAllStaticFieldsForUnitTest();
-	}
-
-	@BeforeClass
-	public static void beforeClass() throws Exception {
-		ourPort = PortUtil.findFreePort();
-		ourServer = new Server(ourPort);
-
-		DummyPatientResourceProvider patientProvider = new DummyPatientResourceProvider();
-
-		ServletHandler proxyHandler = new ServletHandler();
-		RestfulServer servlet = new RestfulServer(ourCtx);
-		servlet.setPagingProvider(new FifoMemoryPagingProvider(10));
-
-		servlet.setResourceProviders(patientProvider);
-		ServletHolder servletHolder = new ServletHolder(servlet);
-		proxyHandler.addServletWithMapping(servletHolder, "/*");
-		ourServer.setHandler(proxyHandler);
-		ourServer.start();
-
-		PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS);
-		HttpClientBuilder builder = HttpClientBuilder.create();
-		builder.setConnectionManager(connectionManager);
-		ourClient = builder.build();
-
-	}
-
-	private static String ourLastBody;
-	private static IdType ourLastId;
 	public static class DummyPatientResourceProvider implements IResourceProvider {
 
 
-
 		@Override
 		public Class<? extends IBaseResource> getResourceType() {
 			return Patient.class;
diff --git a/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeDstu2_1Test.java b/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeDstu2_1Test.java
index a7e31d78c3d..e8db9d2d4d4 100644
--- a/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeDstu2_1Test.java
+++ b/hapi-fhir-structures-dstu2.1/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeDstu2_1Test.java
@@ -14,7 +14,11 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.*;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.client.methods.HttpTrace;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -23,12 +27,23 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.hl7.fhir.dstu2016may.model.*;
+import org.hl7.fhir.dstu2016may.model.CodeType;
+import org.hl7.fhir.dstu2016may.model.Conformance;
+import org.hl7.fhir.dstu2016may.model.DateType;
+import org.hl7.fhir.dstu2016may.model.IdType;
+import org.hl7.fhir.dstu2016may.model.OperationOutcome;
+import org.hl7.fhir.dstu2016may.model.Patient;
 import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.junit.*;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.annotation.*;
+import ca.uhn.fhir.rest.annotation.Create;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Read;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.annotation.Search;
 import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.client.MyPatientWithExtensions;
@@ -75,6 +90,7 @@ public class ServerMimetypeDstu2_1Test {
 		Patient p = new Patient();
 		p.addName().addFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<Patient xmlns=\"http://hl7.org/fhir\"><id value=\"1\"/><meta><versionId value=\"1\"/></meta><name><family value=\"FAMILY\"/></name></Patient>";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
@@ -87,7 +103,7 @@ public class ServerMimetypeDstu2_1Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -125,6 +141,7 @@ public class ServerMimetypeDstu2_1Test {
 		Patient p = new Patient();
 		p.addName().addFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<Patient xmlns=\"http://hl7.org/fhir\"><id value=\"1\"/><meta><versionId value=\"1\"/></meta><name><family value=\"FAMILY\"/></name></Patient>";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML+ "; charset=utf-8")));
@@ -137,18 +154,20 @@ public class ServerMimetypeDstu2_1Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
-	public void testCreateWithXmlNewWithAcceptHeader() throws Exception {
+	public void testCreateWithXmlNewWithAcceptHeaderReturnsOperationOutcome() throws Exception {
 		Patient p = new Patient();
 		p.addName().addFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
 		httpPost.addHeader(Constants.HEADER_ACCEPT, Constants.CT_FHIR_XML);
+		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		HttpResponse status = ourClient.execute(httpPost);
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
@@ -158,7 +177,7 @@ public class ServerMimetypeDstu2_1Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -166,6 +185,7 @@ public class ServerMimetypeDstu2_1Test {
 		Patient p = new Patient();
 		p.addName().addFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\"},\"name\":[{\"family\":[\"FAMILY\"]}]}";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON + "; charset=utf-8")));
@@ -178,17 +198,19 @@ public class ServerMimetypeDstu2_1Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
-	public void testCreateWithJsonNewNoAcceptHeader() throws Exception {
+	public void testCreateWithJsonNewNoAcceptHeaderReturnsOperationOutcome() throws Exception {
 		Patient p = new Patient();
 		p.addName().addFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON+ "; charset=utf-8")));
+		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		HttpResponse status = ourClient.execute(httpPost);
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
@@ -198,7 +220,7 @@ public class ServerMimetypeDstu2_1Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -206,6 +228,7 @@ public class ServerMimetypeDstu2_1Test {
 		Patient p = new Patient();
 		p.addName().addFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\"},\"name\":[{\"family\":[\"FAMILY\"]}]}";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON + "; charset=utf-8")));
@@ -219,7 +242,7 @@ public class ServerMimetypeDstu2_1Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 	
 	@Test
@@ -358,7 +381,9 @@ public class ServerMimetypeDstu2_1Test {
 		public MethodOutcome create(@ResourceParam Patient theIdParam) {
 			OperationOutcome oo = new OperationOutcome();
 			oo.addIssue().setDiagnostics(theIdParam.getName().get(0).getFamilyAsSingleString());
-			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(oo);
+			theIdParam.setId("1");
+			theIdParam.getMeta().setVersionId("1");
+			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(oo).setResource(theIdParam);
 		}
 
 		@Override
diff --git a/hapi-fhir-structures-dstu2/src/main/java/ca/uhn/fhir/rest/server/provider/dstu2/ServerConformanceProvider.java b/hapi-fhir-structures-dstu2/src/main/java/ca/uhn/fhir/rest/server/provider/dstu2/ServerConformanceProvider.java
index 6e03d0428e5..a1fba069d6c 100644
--- a/hapi-fhir-structures-dstu2/src/main/java/ca/uhn/fhir/rest/server/provider/dstu2/ServerConformanceProvider.java
+++ b/hapi-fhir-structures-dstu2/src/main/java/ca/uhn/fhir/rest/server/provider/dstu2/ServerConformanceProvider.java
@@ -288,8 +288,6 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
 
 					if (nextMethodBinding instanceof SearchMethodBinding) {
 						handleSearchMethodBinding(rest, resource, resourceName, def, includes, (SearchMethodBinding) nextMethodBinding);
-					} else if (nextMethodBinding instanceof DynamicSearchMethodBinding) {
-						handleDynamicSearchMethodBinding(resource, def, includes, (DynamicSearchMethodBinding) nextMethodBinding);
 					} else if (nextMethodBinding instanceof OperationMethodBinding) {
 						OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
 						String opName = myOperationBindingToName.get(methodBinding);
@@ -340,51 +338,6 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
 		return retVal;
 	}
 
-	private void handleDynamicSearchMethodBinding(RestResource resource, RuntimeResourceDefinition def, TreeSet<String> includes, DynamicSearchMethodBinding searchMethodBinding) {
-		includes.addAll(searchMethodBinding.getIncludes());
-
-		List<RuntimeSearchParam> searchParameters = new ArrayList<RuntimeSearchParam>();
-		searchParameters.addAll(searchMethodBinding.getSearchParams());
-		sortRuntimeSearchParameters(searchParameters);
-
-		if (!searchParameters.isEmpty()) {
-
-			for (RuntimeSearchParam nextParameter : searchParameters) {
-
-				String nextParamName = nextParameter.getName();
-
-				// String chain = null;
-				String nextParamUnchainedName = nextParamName;
-				if (nextParamName.contains(".")) {
-					// chain = nextParamName.substring(nextParamName.indexOf('.') + 1);
-					nextParamUnchainedName = nextParamName.substring(0, nextParamName.indexOf('.'));
-				}
-
-				String nextParamDescription = nextParameter.getDescription();
-
-				/*
-				 * If the parameter has no description, default to the one from the resource
-				 */
-				if (StringUtils.isBlank(nextParamDescription)) {
-					RuntimeSearchParam paramDef = def.getSearchParam(nextParamUnchainedName);
-					if (paramDef != null) {
-						nextParamDescription = paramDef.getDescription();
-					}
-				}
-
-				RestResourceSearchParam param;
-				param = resource.addSearchParam();
-
-				param.setName(nextParamName);
-				// if (StringUtils.isNotBlank(chain)) {
-				// param.addChain(chain);
-				// }
-				param.setDocumentation(nextParamDescription);
-				// param.setType(nextParameter.getParamType());
-			}
-		}
-	}
-
 	private void handleSearchMethodBinding(Rest rest, RestResource resource, String resourceName, RuntimeResourceDefinition def, TreeSet<String> includes, SearchMethodBinding searchMethodBinding) {
 		includes.addAll(searchMethodBinding.getIncludes());
 
diff --git a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/PreferTest.java b/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/PreferTest.java
index 891bf2a9110..b7f87f0f2c6 100644
--- a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/PreferTest.java
+++ b/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/PreferTest.java
@@ -21,14 +21,20 @@ import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
-import org.junit.*;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.model.api.IResource;
 import ca.uhn.fhir.model.dstu2.resource.OperationOutcome;
 import ca.uhn.fhir.model.dstu2.resource.Patient;
 import ca.uhn.fhir.model.primitive.IdDt;
-import ca.uhn.fhir.rest.annotation.*;
+import ca.uhn.fhir.rest.annotation.Create;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.annotation.Update;
 import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.util.PortUtil;
@@ -54,6 +60,10 @@ public class PreferTest {
 
 		Patient patient = new Patient();
 		patient.addIdentifier().setValue("002");
+		
+		OperationOutcome oo = new OperationOutcome();
+		oo.addIssue().setDiagnostics("DIAG");
+		ourReturnOperationOutcome = oo;
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_MINIMAL);
@@ -76,7 +86,7 @@ public class PreferTest {
 	}
 
 	@Test
-	public void testCreatePreferMinimalWithOperationOutcome() throws Exception {
+	public void testCreatePreferOperationOutcomeWithOperationOutcome() throws Exception {
 
 		OperationOutcome oo = new OperationOutcome();
 		oo.addIssue().setDiagnostics("DIAG");
@@ -86,7 +96,7 @@ public class PreferTest {
 		patient.addIdentifier().setValue("002");
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
-		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_MINIMAL);
+		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		httpPost.setEntity(new StringEntity(ourCtx.newXmlParser().encodeResourceToString(patient), ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
 
 		HttpResponse status = ourClient.execute(httpPost);
@@ -123,7 +133,7 @@ public class PreferTest {
 
 		assertEquals(Constants.STATUS_HTTP_201_CREATED, status.getStatusLine().getStatusCode());
 		assertThat(status.getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue(), containsString(Constants.CT_FHIR_XML));
-		assertEquals("<Patient xmlns=\"http://hl7.org/fhir\"><id value=\"001\"/><meta><versionId value=\"002\"/></meta></Patient>", responseContent);
+		assertEquals("<Patient xmlns=\"http://hl7.org/fhir\"><id value=\"001\"/><meta><versionId value=\"002\"/></meta><identifier><value value=\"002\"/></identifier></Patient>", responseContent);
 		assertEquals("http://localhost:" + ourPort + "/Patient/001/_history/002", status.getFirstHeader("location").getValue());
 		assertEquals("http://localhost:" + ourPort + "/Patient/001/_history/002", status.getFirstHeader("content-location").getValue());
 
@@ -186,9 +196,8 @@ public class PreferTest {
 			IdDt id = new IdDt("Patient/001/_history/002");
 			MethodOutcome retVal = new MethodOutcome(id);
 
-			Patient pt = new Patient();
-			pt.setId(id);
-			retVal.setResource(pt);
+			thePatient.setId(id);
+			retVal.setResource(thePatient);
 
 			retVal.setOperationOutcome(ourReturnOperationOutcome);
 
@@ -205,9 +214,8 @@ public class PreferTest {
 			IdDt id = new IdDt("Patient/001/_history/002");
 			MethodOutcome retVal = new MethodOutcome(id);
 
-			Patient pt = new Patient();
-			pt.setId(id);
-			retVal.setResource(pt);
+			thePatient.setId(id);
+			retVal.setResource(thePatient);
 
 			return retVal;
 		}
diff --git a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/UpdateDstu2Test.java b/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/UpdateDstu2Test.java
index a689ac321d9..2184c41c48b 100644
--- a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/UpdateDstu2Test.java
+++ b/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/UpdateDstu2Test.java
@@ -1,6 +1,8 @@
 package ca.uhn.fhir.rest.server;
 
-import static org.hamcrest.Matchers.blankOrNullString;
+import static org.hamcrest.core.Is.is;
+import static org.hamcrest.core.IsNot.not;
+import static org.hamcrest.text.IsEmptyString.emptyString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
@@ -22,14 +24,24 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.junit.*;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.model.api.IResource;
 import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
 import ca.uhn.fhir.model.dstu2.resource.Patient;
-import ca.uhn.fhir.model.primitive.*;
-import ca.uhn.fhir.rest.annotation.*;
+import ca.uhn.fhir.model.primitive.IdDt;
+import ca.uhn.fhir.model.primitive.InstantDt;
+import ca.uhn.fhir.model.primitive.StringDt;
+import ca.uhn.fhir.rest.annotation.ConditionalUrlParam;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.OptionalParam;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.annotation.Search;
+import ca.uhn.fhir.rest.annotation.Update;
 import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.util.PortUtil;
@@ -113,7 +125,7 @@ public class UpdateDstu2Test {
 		patient.setId("123");
 		patient.addIdentifier().setValue("002");
 		ourSetLastUpdated = new InstantDt("2002-04-22T11:22:33.022Z");
-		
+				
 		HttpPut httpPost = new HttpPut("http://localhost:" + ourPort + "/Patient/123");
 		httpPost.setEntity(new StringEntity(ourCtx.newXmlParser().encodeResourceToString(patient), ContentType.create(Constants.CT_FHIR_XML, "UTF-8")));
 
@@ -125,7 +137,12 @@ public class UpdateDstu2Test {
 		ourLog.info("Response was:\n{}", responseContent);
 		ourLog.info("Response was:\n{}", status);
 		
-		assertThat(responseContent, blankOrNullString());
+		assertThat(responseContent, is(not(emptyString())));
+		
+		Patient actualPatient = (Patient) ourCtx.newXmlParser().parseResource(responseContent);
+		assertEquals(patient.getId().getIdPart(), actualPatient.getId().getIdPart());
+		assertEquals(patient.getIdentifier().get(0).getValue(), actualPatient.getIdentifier().get(0).getValue());
+		
 		assertEquals(200, status.getStatusLine().getStatusCode());
 		assertEquals(null, status.getFirstHeader("location"));
 		assertEquals("http://localhost:" + ourPort + "/Patient/001/_history/002", status.getFirstHeader("content-location").getValue());
diff --git a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationInterceptorDstu2Test.java b/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationInterceptorDstu2Test.java
index 295fc423344..3fd96f88573 100644
--- a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationInterceptorDstu2Test.java
+++ b/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/interceptor/auth/AuthorizationInterceptorDstu2Test.java
@@ -1769,6 +1769,7 @@ public class AuthorizationInterceptorDstu2Test {
 			@Override
 			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
 				return new RuleBuilder()
+					.allow().patch().allRequests().andThen()
 					.allow("Rule 1").write().instance("Patient/900").andThen()
 					.build();
 			}
@@ -1785,16 +1786,9 @@ public class AuthorizationInterceptorDstu2Test {
 		httpPost.setEntity(new StringEntity(input, ContentType.parse("application/json-patch+json")));
 		status = ourClient.execute(httpPost);
 		response = extractResponseAndClose(status);
-		assertEquals(204, status.getStatusLine().getStatusCode());
+		assertEquals(200, status.getStatusLine().getStatusCode());
 		assertTrue(ourHitMethod);
 
-		ourHitMethod = false;
-		httpPost = new HttpPatch("http://localhost:" + ourPort + "/Patient/999");
-		httpPost.setEntity(new StringEntity(input, ContentType.parse("application/json-patch+json")));
-		status = ourClient.execute(httpPost);
-		response = extractResponseAndClose(status);
-		assertEquals(403, status.getStatusLine().getStatusCode());
-		assertFalse(ourHitMethod);
 	}
 
 	@Test
diff --git a/hapi-fhir-structures-dstu3/pom.xml b/hapi-fhir-structures-dstu3/pom.xml
index 45b430c375a..a0c1baac547 100644
--- a/hapi-fhir-structures-dstu3/pom.xml
+++ b/hapi-fhir-structures-dstu3/pom.xml
@@ -146,7 +146,6 @@
 			<version>1.1</version>
 		</dependency>
 
-
 		<dependency>
 			<groupId>xpp3</groupId>
 			<artifactId>xpp3</artifactId>
@@ -169,6 +168,14 @@
 		</dependency>
 		-->
 
+		<!-- Used by the validator -->
+		<dependency>
+			<groupId>com.github.ben-manes.caffeine</groupId>
+			<artifactId>caffeine</artifactId>
+			<optional>true</optional>
+		</dependency>
+
+
 		<!-- Testing -->
 		<dependency>
 			<groupId>org.xmlunit</groupId>
diff --git a/hapi-fhir-structures-dstu3/src/main/java/org/hl7/fhir/dstu3/hapi/ctx/HapiWorkerContext.java b/hapi-fhir-structures-dstu3/src/main/java/org/hl7/fhir/dstu3/hapi/ctx/HapiWorkerContext.java
index 44838b0a445..4c1f394d465 100644
--- a/hapi-fhir-structures-dstu3/src/main/java/org/hl7/fhir/dstu3/hapi/ctx/HapiWorkerContext.java
+++ b/hapi-fhir-structures-dstu3/src/main/java/org/hl7/fhir/dstu3/hapi/ctx/HapiWorkerContext.java
@@ -1,10 +1,14 @@
 package org.hl7.fhir.dstu3.hapi.ctx;
 
 import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.util.CoverageIgnore;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
 import org.apache.commons.lang3.Validate;
+import org.apache.commons.lang3.time.DateUtils;
 import org.hl7.fhir.dstu3.context.IWorkerContext;
 import org.hl7.fhir.dstu3.formats.IParser;
 import org.hl7.fhir.dstu3.formats.ParserType;
@@ -19,320 +23,322 @@ import org.hl7.fhir.dstu3.terminologies.ValueSetExpanderFactory;
 import org.hl7.fhir.dstu3.terminologies.ValueSetExpanderSimple;
 import org.hl7.fhir.dstu3.utils.INarrativeGenerator;
 import org.hl7.fhir.exceptions.FHIRException;
-import org.hl7.fhir.exceptions.TerminologyServiceException;
 import org.hl7.fhir.utilities.validation.ValidationMessage.IssueSeverity;
 
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 import static org.apache.commons.lang3.StringUtils.isBlank;
 import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander, ValueSetExpanderFactory {
-	private final FhirContext myCtx;
-	private Map<String, Resource> myFetchedResourceCache = new HashMap<String, Resource>();
-	private IValidationSupport myValidationSupport;
-	private ExpansionProfile myExpansionProfile;
+  private final FhirContext myCtx;
+  private final Cache<String, Resource> myFetchedResourceCache;
 
-	public HapiWorkerContext(FhirContext theCtx, IValidationSupport theValidationSupport) {
-		Validate.notNull(theCtx, "theCtx must not be null");
-		Validate.notNull(theValidationSupport, "theValidationSupport must not be null");
-		myCtx = theCtx;
-		myValidationSupport = theValidationSupport;
-	}
+  private IValidationSupport myValidationSupport;
+  private ExpansionProfile myExpansionProfile;
 
-	@Override
-	public List<StructureDefinition> allStructures() {
-		return myValidationSupport.fetchAllStructureDefinitions(myCtx);
-	}
+  public HapiWorkerContext(FhirContext theCtx, IValidationSupport theValidationSupport) {
+    Validate.notNull(theCtx, "theCtx must not be null");
+    Validate.notNull(theValidationSupport, "theValidationSupport must not be null");
+    myCtx = theCtx;
+    myValidationSupport = theValidationSupport;
 
-	@Override
-	public CodeSystem fetchCodeSystem(String theSystem) {
-		if (myValidationSupport == null) {
-			return null;
-		} else {
-			return myValidationSupport.fetchCodeSystem(myCtx, theSystem);
-		}
-	}
+    long timeoutMillis = 10 * DateUtils.MILLIS_PER_SECOND;
+    if (System.getProperties().containsKey(Constants.TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS)) {
+      timeoutMillis = Long.parseLong(System.getProperty(Constants.TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS));
+    }
+    myFetchedResourceCache = Caffeine.newBuilder().expireAfterWrite(timeoutMillis, TimeUnit.MILLISECONDS).build();
+  }
 
-	@Override
-	public <T extends Resource> T fetchResource(Class<T> theClass, String theUri) {
-		if (myValidationSupport == null) {
-			return null;
-		} else {
-			@SuppressWarnings("unchecked")
-			T retVal = (T) myFetchedResourceCache.get(theUri);
-			if (retVal == null) {
-				retVal = myValidationSupport.fetchResource(myCtx, theClass, theUri);
-				if (retVal != null) {
-					myFetchedResourceCache.put(theUri, retVal);
-				}
-			}
-			return retVal;
-		}
-	}
+  @Override
+  @CoverageIgnore
+  public List<MetadataResource> allConformanceResources() {
+    throw new UnsupportedOperationException();
+  }
 
-	@Override
-	public List<ConceptMap> findMapsForSource(String theUrl) {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public List<StructureDefinition> allStructures() {
+    return myValidationSupport.fetchAllStructureDefinitions(myCtx);
+  }
 
-	@Override
-	public String getAbbreviation(String theName) {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public ValueSetExpansionOutcome expand(ValueSet theSource, ExpansionProfile theProfile) {
+    ValueSetExpansionOutcome vso;
+    try {
+      vso = getExpander().expand(theSource, theProfile);
+    } catch (InvalidRequestException e) {
+      throw e;
+    } catch (Exception e) {
+      throw new InternalErrorException(e);
+    }
+    if (vso.getError() != null) {
+      throw new InvalidRequestException(vso.getError());
+    } else {
+      return vso;
+    }
+  }
 
-	@Override
-	public ValueSetExpander getExpander() {
-		ValueSetExpanderSimple retVal = new ValueSetExpanderSimple(this, this);
-		retVal.setMaxExpansionSize(Integer.MAX_VALUE);
-		return retVal;
-	}
+  @Override
+  public ValueSetExpansionOutcome expandVS(ValueSet theSource, boolean theCacheOk, boolean theHeiarchical) {
+    throw new UnsupportedOperationException();
+  }
 
-	@Override
-	public INarrativeGenerator getNarrativeGenerator(String thePrefix, String theBasePath) {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public ValueSetExpansionComponent expandVS(ConceptSetComponent theInc, boolean theHeiarchical) {
+    return myValidationSupport.expandValueSet(myCtx, theInc);
+  }
 
-	@Override
-	public IParser getParser(ParserType theType) {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public CodeSystem fetchCodeSystem(String theSystem) {
+    if (myValidationSupport == null) {
+      return null;
+    } else {
+      return myValidationSupport.fetchCodeSystem(myCtx, theSystem);
+    }
+  }
 
-	@Override
-	public IParser getParser(String theType) {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public <T extends Resource> T fetchResource(Class<T> theClass, String theUri) {
+    if (myValidationSupport == null) {
+      return null;
+    } else {
+      @SuppressWarnings("unchecked")
+      T retVal = (T) myFetchedResourceCache.get(theUri, t->{
+        return myValidationSupport.fetchResource(myCtx, theClass, theUri);
+      });
+      return retVal;
+    }
+  }
 
-	@Override
-	public List<String> getResourceNames() {
-		List<String> result = new ArrayList<String>();
-		for (ResourceType next : ResourceType.values()) {
-			result.add(next.name());
-		}
-		Collections.sort(result);
-		return result;
-	}
+  @Override
+  public <T extends Resource> T fetchResourceWithException(Class<T> theClass_, String theUri) throws FHIRException {
+    T retVal = fetchResource(theClass_, theUri);
+    if (retVal == null) {
+      throw new FHIRException("Unable to fetch " + theUri);
+    }
+    return retVal;
+  }
 
-	@Override
-	public <T extends Resource> boolean hasResource(Class<T> theClass_, String theUri) {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public List<ConceptMap> findMapsForSource(String theUrl) {
+    throw new UnsupportedOperationException();
+  }
 
-	@Override
-	public IParser newJsonParser() {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public String getAbbreviation(String theName) {
+    throw new UnsupportedOperationException();
+  }
 
+  @Override
+  public ValueSetExpander getExpander() {
+    ValueSetExpanderSimple retVal = new ValueSetExpanderSimple(this, this);
+    retVal.setMaxExpansionSize(Integer.MAX_VALUE);
+    return retVal;
+  }
 
-	@Override
-	public IParser newXmlParser() {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public ExpansionProfile getExpansionProfile() {
+    return myExpansionProfile;
+  }
 
-	@Override
-	public String oid2Uri(String theCode) {
-		throw new UnsupportedOperationException();
-	}
+  @Override
+  public void setExpansionProfile(ExpansionProfile theExpProfile) {
+    myExpansionProfile = theExpProfile;
+  }
 
-	@Override
-	public boolean supportsSystem(String theSystem) {
-		if (myValidationSupport == null) {
-			return false;
-		} else {
-			return myValidationSupport.isCodeSystemSupported(myCtx, theSystem);
-		}
-	}
+  @Override
+  public INarrativeGenerator getNarrativeGenerator(String thePrefix, String theBasePath) {
+    throw new UnsupportedOperationException();
+  }
 
-	@Override
-	public Set<String> typeTails() {
-		return new HashSet<String>(Arrays.asList("Integer", "UnsignedInt", "PositiveInt", "Decimal", "DateTime", "Date", "Time", "Instant", "String", "Uri", "Oid", "Uuid", "Id", "Boolean", "Code",
-				"Markdown", "Base64Binary", "Coding", "CodeableConcept", "Attachment", "Identifier", "Quantity", "SampledData", "Range", "Period", "Ratio", "HumanName", "Address", "ContactPoint",
-				"Timing", "Reference", "Annotation", "Signature", "Meta"));
-	}
+  @Override
+  public IParser getParser(ParserType theType) {
+    throw new UnsupportedOperationException();
+  }
 
-	@Override
-	public ValidationResult validateCode(CodeableConcept theCode, ValueSet theVs) {
-		for (Coding next : theCode.getCoding()) {
-			ValidationResult retVal = validateCode(next, theVs);
-			if (retVal != null && retVal.isOk()) {
-				return retVal;
-			}
-		}
+  @Override
+  public IParser getParser(String theType) {
+    throw new UnsupportedOperationException();
+  }
 
-		return new ValidationResult(null, null);
-	}
-
-	@Override
-	public ValidationResult validateCode(Coding theCode, ValueSet theVs) {
-		String system = theCode.getSystem();
-		String code = theCode.getCode();
-		String display = theCode.getDisplay();
-		return validateCode(system, code, display, theVs);
-	}
-
-	@Override
-	public ValidationResult validateCode(String theSystem, String theCode, String theDisplay) {
-		IValidationSupport.CodeValidationResult result = myValidationSupport.validateCode(myCtx, theSystem, theCode, theDisplay);
-		if (result == null) {
-			return null;
-		}
-		return new ValidationResult(result.getSeverity(), result.getMessage(), result.asConceptDefinition());
-	}
-
-	@Override
-	public ValidationResult validateCode(String theSystem, String theCode, String theDisplay, ConceptSetComponent theVsi) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public ValidationResult validateCode(String theSystem, String theCode, String theDisplay, ValueSet theVs) {
-
-		if (theVs != null && isNotBlank(theCode)) {
-			for (ConceptSetComponent next : theVs.getCompose().getInclude()) {
-				if (isBlank(theSystem) || theSystem.equals(next.getSystem())) {
-					for (ConceptReferenceComponent nextCode : next.getConcept()) {
-						if (theCode.equals(nextCode.getCode())) {
-							CodeType code = new CodeType(theCode);
-							return new ValidationResult(new ConceptDefinitionComponent(code));
-						}
-					}
-				}
-			}
-		}
-
-
-		boolean caseSensitive = true;
-		if (isNotBlank(theSystem)) {
-			CodeSystem system = fetchCodeSystem(theSystem);
-			if (system == null) {
-				return new ValidationResult(IssueSeverity.INFORMATION, "Code " + theSystem + "/" + theCode + " was not validated because the code system is not present");
-			}
-
-			if (system.hasCaseSensitive()) {
-				caseSensitive = system.getCaseSensitive();
-			}
-		}
-
-		String wantCode = theCode;
-		if (!caseSensitive) {
-			wantCode = wantCode.toUpperCase();
-		}
-
-		ValueSetExpansionOutcome expandedValueSet = null;
-
-		/*
-		 * The following valueset is a special case, since the BCP codesystem is very difficult to expand
-		 */
-		if (theVs != null && "http://hl7.org/fhir/ValueSet/languages".equals(theVs.getId())) {
-			ValueSet expansion = new ValueSet();
-			for (ConceptSetComponent nextInclude : theVs.getCompose().getInclude()) {
-				for (ConceptReferenceComponent nextConcept : nextInclude.getConcept()) {
-					expansion.getExpansion().addContains().setCode(nextConcept.getCode()).setDisplay(nextConcept.getDisplay());
-				}
-			}
-			expandedValueSet = new ValueSetExpansionOutcome(expansion);
-		}
-
-		if (expandedValueSet == null) {
-			expandedValueSet = expand(theVs, null);
-		}
-
-		for (ValueSetExpansionContainsComponent next : expandedValueSet.getValueset().getExpansion().getContains()) {
-			String nextCode = next.getCode();
-			if (!caseSensitive) {
-				nextCode = nextCode.toUpperCase();
-			}
-
-			if (nextCode.equals(wantCode)) {
-				if (theSystem == null || next.getSystem().equals(theSystem)) {
-					ConceptDefinitionComponent definition = new ConceptDefinitionComponent();
-					definition.setCode(next.getCode());
-					definition.setDisplay(next.getDisplay());
-					ValidationResult retVal = new ValidationResult(definition);
-					return retVal;
-				}
-			}
-		}
-
-		return new ValidationResult(IssueSeverity.ERROR, "Unknown code[" + theCode + "] in system[" + theSystem + "]");
-	}
-
-	@Override
-	@CoverageIgnore
-	public List<MetadataResource> allConformanceResources() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	@CoverageIgnore
-	public boolean hasCache() {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public ValueSetExpansionOutcome expand(ValueSet theSource, ExpansionProfile theProfile) {
-		ValueSetExpansionOutcome vso;
-		try {
-			vso = getExpander().expand(theSource, theProfile);
-		} catch (InvalidRequestException e) {
-			throw e;
-		} catch (Exception e) {
-			throw new InternalErrorException(e);
-		}
-		if (vso.getError() != null) {
-			throw new InvalidRequestException(vso.getError());
-		} else {
-			return vso;
-		}
-	}
-
-	@Override
-	public ExpansionProfile getExpansionProfile() {
-		return myExpansionProfile;
-	}
-
-	@Override
-	public void setExpansionProfile(ExpansionProfile theExpProfile) {
-		myExpansionProfile = theExpProfile;
-	}
-
-	@Override
-	public ValueSetExpansionOutcome expandVS(ValueSet theSource, boolean theCacheOk, boolean theHeiarchical) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public ValueSetExpansionComponent expandVS(ConceptSetComponent theInc, boolean theHeiarchical) throws TerminologyServiceException {
-		return myValidationSupport.expandValueSet(myCtx, theInc);
-	}
-
-	@Override
-	public void setLogger(ILoggingService theLogger) {
-		throw new UnsupportedOperationException();
-	}
-
-	@Override
-	public String getVersion() {
-		return myCtx.getVersion().getVersion().getFhirVersionString();
-	}
-
-	@Override
-	public boolean isNoTerminologyServer() {
-		return false;
-	}
-
-	@Override
-	public <T extends Resource> T fetchResourceWithException(Class<T> theClass_, String theUri) throws FHIRException {
-		T retVal = fetchResource(theClass_, theUri);
-		if (retVal == null) {
-			throw new FHIRException("Unable to fetch " + theUri);
-		}
-		return retVal;
-	}
+  @Override
+  public List<String> getResourceNames() {
+    List<String> result = new ArrayList<String>();
+    for (ResourceType next : ResourceType.values()) {
+      result.add(next.name());
+    }
+    Collections.sort(result);
+    return result;
+  }
 
   @Override
   public List<String> getTypeNames() {
     throw new UnsupportedOperationException();
   }
 
+  @Override
+  public String getVersion() {
+    return myCtx.getVersion().getVersion().getFhirVersionString();
+  }
+
+  @Override
+  @CoverageIgnore
+  public boolean hasCache() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public <T extends Resource> boolean hasResource(Class<T> theClass_, String theUri) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public boolean isNoTerminologyServer() {
+    return false;
+  }
+
+  @Override
+  public IParser newJsonParser() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public IParser newXmlParser() {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public String oid2Uri(String theCode) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public void setLogger(ILoggingService theLogger) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public boolean supportsSystem(String theSystem) {
+    if (myValidationSupport == null) {
+      return false;
+    } else {
+      return myValidationSupport.isCodeSystemSupported(myCtx, theSystem);
+    }
+  }
+
+  @Override
+  public Set<String> typeTails() {
+    return new HashSet<String>(Arrays.asList("Integer", "UnsignedInt", "PositiveInt", "Decimal", "DateTime", "Date", "Time", "Instant", "String", "Uri", "Oid", "Uuid", "Id", "Boolean", "Code",
+      "Markdown", "Base64Binary", "Coding", "CodeableConcept", "Attachment", "Identifier", "Quantity", "SampledData", "Range", "Period", "Ratio", "HumanName", "Address", "ContactPoint",
+      "Timing", "Reference", "Annotation", "Signature", "Meta"));
+  }
+
+  @Override
+  public ValidationResult validateCode(CodeableConcept theCode, ValueSet theVs) {
+    for (Coding next : theCode.getCoding()) {
+      ValidationResult retVal = validateCode(next, theVs);
+      if (retVal != null && retVal.isOk()) {
+        return retVal;
+      }
+    }
+
+    return new ValidationResult(null, null);
+  }
+
+  @Override
+  public ValidationResult validateCode(Coding theCode, ValueSet theVs) {
+    String system = theCode.getSystem();
+    String code = theCode.getCode();
+    String display = theCode.getDisplay();
+    return validateCode(system, code, display, theVs);
+  }
+
+  @Override
+  public ValidationResult validateCode(String theSystem, String theCode, String theDisplay) {
+    IValidationSupport.CodeValidationResult result = myValidationSupport.validateCode(myCtx, theSystem, theCode, theDisplay);
+    if (result == null) {
+      return null;
+    }
+    return new ValidationResult(result.getSeverity(), result.getMessage(), result.asConceptDefinition());
+  }
+
+  @Override
+  public ValidationResult validateCode(String theSystem, String theCode, String theDisplay, ConceptSetComponent theVsi) {
+    throw new UnsupportedOperationException();
+  }
+
+  @Override
+  public ValidationResult validateCode(String theSystem, String theCode, String theDisplay, ValueSet theVs) {
+
+    if (theVs != null && isNotBlank(theCode)) {
+      for (ConceptSetComponent next : theVs.getCompose().getInclude()) {
+        if (isBlank(theSystem) || theSystem.equals(next.getSystem())) {
+          for (ConceptReferenceComponent nextCode : next.getConcept()) {
+            if (theCode.equals(nextCode.getCode())) {
+              CodeType code = new CodeType(theCode);
+              return new ValidationResult(new ConceptDefinitionComponent(code));
+            }
+          }
+        }
+      }
+    }
+
+
+    boolean caseSensitive = true;
+    if (isNotBlank(theSystem)) {
+      CodeSystem system = fetchCodeSystem(theSystem);
+      if (system == null) {
+        return new ValidationResult(IssueSeverity.INFORMATION, "Code " + theSystem + "/" + theCode + " was not validated because the code system is not present");
+      }
+
+      if (system.hasCaseSensitive()) {
+        caseSensitive = system.getCaseSensitive();
+      }
+    }
+
+    String wantCode = theCode;
+    if (!caseSensitive) {
+      wantCode = wantCode.toUpperCase();
+    }
+
+    ValueSetExpansionOutcome expandedValueSet = null;
+
+    /*
+     * The following valueset is a special case, since the BCP codesystem is very difficult to expand
+     */
+    if (theVs != null && "http://hl7.org/fhir/ValueSet/languages".equals(theVs.getId())) {
+      ValueSet expansion = new ValueSet();
+      for (ConceptSetComponent nextInclude : theVs.getCompose().getInclude()) {
+        for (ConceptReferenceComponent nextConcept : nextInclude.getConcept()) {
+          expansion.getExpansion().addContains().setCode(nextConcept.getCode()).setDisplay(nextConcept.getDisplay());
+        }
+      }
+      expandedValueSet = new ValueSetExpansionOutcome(expansion);
+    }
+
+    if (expandedValueSet == null) {
+      expandedValueSet = expand(theVs, null);
+    }
+
+    for (ValueSetExpansionContainsComponent next : expandedValueSet.getValueset().getExpansion().getContains()) {
+      String nextCode = next.getCode();
+      if (!caseSensitive) {
+        nextCode = nextCode.toUpperCase();
+      }
+
+      if (nextCode.equals(wantCode)) {
+        if (theSystem == null || next.getSystem().equals(theSystem)) {
+          ConceptDefinitionComponent definition = new ConceptDefinitionComponent();
+          definition.setCode(next.getCode());
+          definition.setDisplay(next.getDisplay());
+          ValidationResult retVal = new ValidationResult(definition);
+          return retVal;
+        }
+      }
+    }
+
+    return new ValidationResult(IssueSeverity.ERROR, "Unknown code[" + theCode + "] in system[" + theSystem + "]");
+  }
+
 }
diff --git a/hapi-fhir-structures-dstu3/src/main/java/org/hl7/fhir/dstu3/hapi/rest/server/ServerCapabilityStatementProvider.java b/hapi-fhir-structures-dstu3/src/main/java/org/hl7/fhir/dstu3/hapi/rest/server/ServerCapabilityStatementProvider.java
index 85cdf11af2c..9841662fb21 100644
--- a/hapi-fhir-structures-dstu3/src/main/java/org/hl7/fhir/dstu3/hapi/rest/server/ServerCapabilityStatementProvider.java
+++ b/hapi-fhir-structures-dstu3/src/main/java/org/hl7/fhir/dstu3/hapi/rest/server/ServerCapabilityStatementProvider.java
@@ -298,8 +298,6 @@ public class ServerCapabilityStatementProvider implements IServerConformanceProv
 
           if (nextMethodBinding instanceof SearchMethodBinding) {
             handleSearchMethodBinding(rest, resource, resourceName, def, includes, (SearchMethodBinding) nextMethodBinding);
-          } else if (nextMethodBinding instanceof DynamicSearchMethodBinding) {
-            handleDynamicSearchMethodBinding(resource, def, includes, (DynamicSearchMethodBinding) nextMethodBinding);
           } else if (nextMethodBinding instanceof OperationMethodBinding) {
             OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
             String opName = myOperationBindingToName.get(methodBinding);
@@ -351,50 +349,6 @@ public class ServerCapabilityStatementProvider implements IServerConformanceProv
     return retVal;
   }
 
-  private void handleDynamicSearchMethodBinding(CapabilityStatementRestResourceComponent resource, RuntimeResourceDefinition def, TreeSet<String> includes, DynamicSearchMethodBinding searchMethodBinding) {
-    includes.addAll(searchMethodBinding.getIncludes());
-
-    List<RuntimeSearchParam> searchParameters = new ArrayList<>();
-    searchParameters.addAll(searchMethodBinding.getSearchParams());
-    sortRuntimeSearchParameters(searchParameters);
-
-    if (!searchParameters.isEmpty()) {
-
-      for (RuntimeSearchParam nextParameter : searchParameters) {
-
-        String nextParamName = nextParameter.getName();
-
-        // String chain = null;
-        String nextParamUnchainedName = nextParamName;
-        if (nextParamName.contains(".")) {
-          // chain = nextParamName.substring(nextParamName.indexOf('.') + 1);
-          nextParamUnchainedName = nextParamName.substring(0, nextParamName.indexOf('.'));
-        }
-
-        String nextParamDescription = nextParameter.getDescription();
-
-        /*
-         * If the parameter has no description, default to the one from the resource
-         */
-        if (StringUtils.isBlank(nextParamDescription)) {
-          RuntimeSearchParam paramDef = def.getSearchParam(nextParamUnchainedName);
-          if (paramDef != null) {
-            nextParamDescription = paramDef.getDescription();
-          }
-        }
-
-        CapabilityStatementRestResourceSearchParamComponent param = resource.addSearchParam();
-
-        param.setName(nextParamName);
-        // if (StringUtils.isNotBlank(chain)) {
-        // param.addChain(chain);
-        // }
-        param.setDocumentation(nextParamDescription);
-        // param.setType(nextParameter.getParamType());
-      }
-    }
-  }
-
   private void handleSearchMethodBinding(CapabilityStatementRestComponent rest, CapabilityStatementRestResourceComponent resource, String resourceName, RuntimeResourceDefinition def, TreeSet<String> includes,
                                          SearchMethodBinding searchMethodBinding) {
     includes.addAll(searchMethodBinding.getIncludes());
diff --git a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/param/DateRangeParamTest.java b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/param/DateRangeParamTest.java
index 6c42c29cd6c..f832ba8e22a 100644
--- a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/param/DateRangeParamTest.java
+++ b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/param/DateRangeParamTest.java
@@ -1,31 +1,5 @@
 package ca.uhn.fhir.rest.param;
 
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.APPROXIMATE;
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.EQUAL;
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.GREATERTHAN;
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.GREATERTHAN_OR_EQUALS;
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.LESSTHAN;
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.LESSTHAN_OR_EQUALS;
-import static ca.uhn.fhir.rest.param.ParamPrefixEnum.NOT_EQUAL;
-import static com.google.common.collect.Lists.newArrayList;
-import static java.lang.System.currentTimeMillis;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.hamcrest.core.Is.is;
-import static org.hamcrest.core.IsEqual.equalTo;
-import static org.hamcrest.core.IsNot.not;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertThat;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.concurrent.TimeUnit;
-
-import com.google.common.testing.EqualsTester;
-import org.junit.AfterClass;
-import org.junit.Test;
-
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
 import ca.uhn.fhir.model.primitive.DateTimeDt;
@@ -33,18 +7,57 @@ import ca.uhn.fhir.model.primitive.InstantDt;
 import ca.uhn.fhir.rest.api.QualifiedParamList;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.util.TestUtil;
+import com.google.common.testing.EqualsTester;
+import org.junit.AfterClass;
+import org.junit.Test;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import static ca.uhn.fhir.rest.param.ParamPrefixEnum.*;
+import static java.lang.System.currentTimeMillis;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
 public class DateRangeParamTest {
 
-	private static FhirContext ourCtx = FhirContext.forDstu3();
 	private static final SimpleDateFormat ourFmt;
-
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(DateRangeParamTest.class);
+	private static FhirContext ourCtx = FhirContext.forDstu3();
 
 	static {
 		ourFmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSS");
 	}
 
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	private static DateRangeParam create(String theLower, String theUpper) throws InvalidRequestException {
+		DateRangeParam p = new DateRangeParam();
+		List<QualifiedParamList> tokens = new ArrayList<QualifiedParamList>();
+		tokens.add(QualifiedParamList.singleton(null, theLower));
+		if (theUpper != null) {
+			tokens.add(QualifiedParamList.singleton(null, theUpper));
+		}
+		p.setValuesAsQueryTokens(ourCtx, null, tokens);
+		return p;
+	}
+
+	public static Date parse(String theString) throws ParseException {
+		return ourFmt.parse(theString);
+	}
+
+	public static Date parseM1(String theString) throws ParseException {
+		return new Date(ourFmt.parse(theString).getTime() - 1L);
+	}
+
 	private DateRangeParam create(String theString) {
 		return new DateRangeParam(new DateParam(theString));
 	}
@@ -85,7 +98,7 @@ public class DateRangeParamTest {
 		assertEquals(parseM1("2011-01-02 00:00:00.0000"), create(">=2011-01-01", "<2011-01-02").getUpperBoundAsInstant());
 		assertEquals(parse("2011-01-02 00:00:00.0000"), create(">2011-01-01", "<=2011-01-02").getLowerBoundAsInstant());
 		assertEquals(parseM1("2011-01-03 00:00:00.0000"), create(">2011-01-01", "<=2011-01-02").getUpperBoundAsInstant());
-		
+
 		assertEquals(parse("2011-01-01 00:00:00.0000"), create("ge2011-01-01", "lt2011-01-02").getLowerBoundAsInstant());
 		assertEquals(parseM1("2011-01-02 00:00:00.0000"), create("ge2011-01-01", "lt2011-01-02").getUpperBoundAsInstant());
 		assertEquals(parse("2011-01-02 00:00:00.0000"), create("gt2011-01-01", "le2011-01-02").getLowerBoundAsInstant());
@@ -119,6 +132,26 @@ public class DateRangeParamTest {
 		assertEquals(parseM1("2011-01-02 00:00:00.0000"), create("2011-01-01").getUpperBoundAsInstant());
 	}
 
+	@Test
+	public void testSetBoundsWithDatesInclusive() {
+		DateRangeParam range = new DateRangeParam();
+		range.setLowerBoundInclusive(new Date());
+		range.setUpperBoundInclusive(new Date());
+
+		assertEquals(ParamPrefixEnum.GREATERTHAN_OR_EQUALS, range.getLowerBound().getPrefix());
+		assertEquals(ParamPrefixEnum.LESSTHAN_OR_EQUALS, range.getUpperBound().getPrefix());
+	}
+
+	@Test
+	public void testSetBoundsWithDatesExclusive() {
+		DateRangeParam range = new DateRangeParam();
+		range.setLowerBoundExclusive(new Date());
+		range.setUpperBoundExclusive(new Date());
+
+		assertEquals(ParamPrefixEnum.GREATERTHAN, range.getLowerBound().getPrefix());
+		assertEquals(ParamPrefixEnum.LESSTHAN, range.getUpperBound().getPrefix());
+	}
+
 	@Test
 	public void testOrList() {
 		assertNotNull(new DateOrListParam().newInstance());
@@ -195,46 +228,22 @@ public class DateRangeParamTest {
 		assertEquals(parseM1("2014-01-01 00:00:00.0000"), create("gt2011", "le2013").getUpperBoundAsInstant());
 	}
 
-	@AfterClass
-	public static void afterClassClearContext() {
-		TestUtil.clearAllStaticFieldsForUnitTest();
-	}
-
 	@Test()
 	public void testEqualsAndHashCode() {
 		Date lowerBound = new Date(currentTimeMillis());
 		Date upperBound = new Date(lowerBound.getTime() + SECONDS.toMillis(1));
 		new EqualsTester()
 			.addEqualityGroup(new DateRangeParam(),
-				               new DateRangeParam((Date) null, (Date) null))
+				new DateRangeParam((Date) null, (Date) null))
 			.addEqualityGroup(new DateRangeParam(lowerBound, upperBound),
-								   new DateRangeParam(new DateParam(GREATERTHAN_OR_EQUALS, lowerBound), new DateParam(LESSTHAN_OR_EQUALS, upperBound)))
+				new DateRangeParam(new DateParam(GREATERTHAN_OR_EQUALS, lowerBound), new DateParam(LESSTHAN_OR_EQUALS, upperBound)))
 			.addEqualityGroup(new DateRangeParam(new DateParam(EQUAL, lowerBound)),
-				               new DateRangeParam(new DateParam(null, lowerBound)),
-								   new DateRangeParam(new DateParam(EQUAL, lowerBound), new DateParam(EQUAL, lowerBound)))
+				new DateRangeParam(new DateParam(null, lowerBound)),
+				new DateRangeParam(new DateParam(EQUAL, lowerBound), new DateParam(EQUAL, lowerBound)))
 			.addEqualityGroup(new DateRangeParam(lowerBound, null),
-				               new DateRangeParam(new DateParam(GREATERTHAN_OR_EQUALS, lowerBound), null))
+				new DateRangeParam(new DateParam(GREATERTHAN_OR_EQUALS, lowerBound), null))
 			.addEqualityGroup(new DateRangeParam(null, upperBound),
-				               new DateRangeParam(null, new DateParam(LESSTHAN_OR_EQUALS, upperBound)))
+				new DateRangeParam(null, new DateParam(LESSTHAN_OR_EQUALS, upperBound)))
 			.testEquals();
 	}
-
-	private static DateRangeParam create(String theLower, String theUpper) throws InvalidRequestException {
-		DateRangeParam p = new DateRangeParam();
-		List<QualifiedParamList> tokens = new ArrayList<QualifiedParamList>();
-		tokens.add(QualifiedParamList.singleton(null, theLower));
-		if (theUpper != null) {
-			tokens.add(QualifiedParamList.singleton(null, theUpper));
-		}
-		p.setValuesAsQueryTokens(ourCtx, null, tokens);
-		return p;
-	}
-
-	public static Date parse(String theString) throws ParseException {
-		return ourFmt.parse(theString);
-	}
-
-	public static Date parseM1(String theString) throws ParseException {
-		return new Date(ourFmt.parse(theString).getTime() - 1L);
-	}
 }
diff --git a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/CreateDstu3Test.java b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/CreateDstu3Test.java
index 1500193edc2..63913d53572 100644
--- a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/CreateDstu3Test.java
+++ b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/CreateDstu3Test.java
@@ -36,7 +36,11 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.annotation.*;
+import ca.uhn.fhir.rest.annotation.Create;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Read;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.annotation.Search;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.client.MyPatientWithExtensions;
 import ca.uhn.fhir.util.PortUtil;
@@ -80,11 +84,12 @@ public class CreateDstu3Test {
 	}
 
 	@Test
-	public void testCreateReturnsOperationOutcome() throws Exception {
+	public void testCreateReturnsRepresentation() throws Exception {
 		ourReturnOo = new OperationOutcome().addIssue(new OperationOutcomeIssueComponent().setDiagnostics("DIAG"));
+		String expectedResponseContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\"},\"gender\":\"male\"}";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
-		httpPost.setEntity(new StringEntity("{\"resourceType\":\"Patient\", \"status\":\"active\"}", ContentType.parse("application/fhir+json; charset=utf-8")));
+		httpPost.setEntity(new StringEntity("{\"resourceType\":\"Patient\", \"gender\":\"male\"}", ContentType.parse("application/fhir+json; charset=utf-8")));
 		HttpResponse status = ourClient.execute(httpPost);
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
@@ -93,8 +98,8 @@ public class CreateDstu3Test {
 		ourLog.info("Response was:\n{}", responseContent);
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
+		assertEquals(expectedResponseContent, responseContent);
 
-		assertThat(responseContent, containsString("DIAG"));
 	}
 
 	/**
@@ -237,7 +242,10 @@ public class CreateDstu3Test {
 
 		@Create()
 		public MethodOutcome create(@ResourceParam Patient theIdParam) {
-			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(ourReturnOo);
+			theIdParam.setId("1");
+			theIdParam.getMeta().setVersionId("1");
+			
+			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(ourReturnOo).setResource(theIdParam);
 		}
 
 		@Override
diff --git a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/InterceptorDstu3Test.java b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/InterceptorDstu3Test.java
index badc56cfe41..f5cb31acf6b 100644
--- a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/InterceptorDstu3Test.java
+++ b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/InterceptorDstu3Test.java
@@ -156,6 +156,28 @@ public class InterceptorDstu3Test {
 		assertNotNull(arTypeCapt.getValue().getResource());
 	}
 
+	@Test
+	public void testExceptionInProcessingCompletedNormally() throws Exception {
+		ourServlet.setInterceptors(myInterceptor1);
+
+		when(myInterceptor1.incomingRequestPreProcessed(nullable(HttpServletRequest.class), nullable(HttpServletResponse.class))).thenReturn(true);
+		when(myInterceptor1.incomingRequestPostProcessed(nullable(ServletRequestDetails.class), nullable(HttpServletRequest.class), nullable(HttpServletResponse.class))).thenReturn(true);
+		when(myInterceptor1.outgoingResponse(nullable(ServletRequestDetails.class), nullable(OperationOutcome.class))).thenReturn(true);
+		when(myInterceptor1.outgoingResponse(nullable(ServletRequestDetails.class), nullable(ResponseDetails.class), nullable(HttpServletRequest.class), nullable(HttpServletResponse.class))).thenReturn(true);
+		doThrow(new NullPointerException("FOO")).when(myInterceptor1).processingCompletedNormally(any());
+
+		String input = createInput();
+
+		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
+		httpPost.setEntity(new StringEntity(input, ContentType.create(Constants.CT_FHIR_JSON, "UTF-8")));
+		HttpResponse status = ourClient.execute(httpPost);
+		try {
+			assertEquals(201, status.getStatusLine().getStatusCode());
+		} finally {
+			IOUtils.closeQuietly(status.getEntity().getContent());
+		}
+	}
+
 	@Test
 	public void testResponseWithNothing() throws Exception {
 		ourServlet.setInterceptors(myInterceptor1);
@@ -229,34 +251,6 @@ public class InterceptorDstu3Test {
 		i.resourceUpdated(null, null, null);
 	}
 
-	@AfterClass
-	public static void afterClassClearContext() throws Exception {
-		ourServer.stop();
-		TestUtil.clearAllStaticFieldsForUnitTest();
-	}
-
-	@BeforeClass
-	public static void beforeClass() throws Exception {
-		ourPort = PortUtil.findFreePort();
-		ourServer = new Server(ourPort);
-
-		DummyPatientResourceProvider patientProvider = new DummyPatientResourceProvider();
-
-		ServletHandler proxyHandler = new ServletHandler();
-		ourServlet = new RestfulServer(ourCtx);
-		ourServlet.setResourceProviders(patientProvider);
-		ServletHolder servletHolder = new ServletHolder(ourServlet);
-		proxyHandler.addServletWithMapping(servletHolder, "/*");
-		ourServer.setHandler(proxyHandler);
-		ourServer.start();
-
-		PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS);
-		HttpClientBuilder builder = HttpClientBuilder.create();
-		builder.setConnectionManager(connectionManager);
-		ourClient = builder.build();
-
-	}
-
 	public static class DummyPatientResourceProvider implements IResourceProvider {
 
 		@Create()
@@ -285,4 +279,32 @@ public class InterceptorDstu3Test {
 
 	}
 
+	@AfterClass
+	public static void afterClassClearContext() throws Exception {
+		ourServer.stop();
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	@BeforeClass
+	public static void beforeClass() throws Exception {
+		ourPort = PortUtil.findFreePort();
+		ourServer = new Server(ourPort);
+
+		DummyPatientResourceProvider patientProvider = new DummyPatientResourceProvider();
+
+		ServletHandler proxyHandler = new ServletHandler();
+		ourServlet = new RestfulServer(ourCtx);
+		ourServlet.setResourceProviders(patientProvider);
+		ServletHolder servletHolder = new ServletHolder(ourServlet);
+		proxyHandler.addServletWithMapping(servletHolder, "/*");
+		ourServer.setHandler(proxyHandler);
+		ourServer.start();
+
+		PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS);
+		HttpClientBuilder builder = HttpClientBuilder.create();
+		builder.setConnectionManager(connectionManager);
+		ourClient = builder.build();
+
+	}
+
 }
diff --git a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/PatchDstu3Test.java b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/PatchDstu3Test.java
index 526a93a2b71..dffea5cdc41 100644
--- a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/PatchDstu3Test.java
+++ b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/PatchDstu3Test.java
@@ -48,6 +48,7 @@ public class PatchDstu3Test {
 	public void testPatchValidJson() throws Exception {
 		String requestContents = "[ { \"op\": \"add\", \"path\": \"/a/b/c\", \"value\": [ \"foo\", \"bar\" ] } ]";
 		HttpPatch httpPatch = new HttpPatch("http://localhost:" + ourPort + "/Patient/123");
+		httpPatch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		httpPatch.setEntity(new StringEntity(requestContents, ContentType.parse(Constants.CT_JSON_PATCH)));
 		CloseableHttpResponse status = ourClient.execute(httpPatch);
 
@@ -70,6 +71,7 @@ public class PatchDstu3Test {
 	public void testPatchValidXml() throws Exception {
 		String requestContents = "<root/>";
 		HttpPatch httpPatch = new HttpPatch("http://localhost:" + ourPort + "/Patient/123");
+		httpPatch.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		httpPatch.setEntity(new StringEntity(requestContents, ContentType.parse(Constants.CT_XML_PATCH)));
 		CloseableHttpResponse status = ourClient.execute(httpPatch);
 
diff --git a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeDstu3Test.java b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeDstu3Test.java
index 9b8baffc83c..c1b49d09882 100644
--- a/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeDstu3Test.java
+++ b/hapi-fhir-structures-dstu3/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeDstu3Test.java
@@ -14,7 +14,11 @@ import java.util.concurrent.TimeUnit;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.*;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.client.methods.HttpTrace;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -23,12 +27,23 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
-import org.hl7.fhir.dstu3.model.*;
+import org.hl7.fhir.dstu3.model.CapabilityStatement;
+import org.hl7.fhir.dstu3.model.CodeType;
+import org.hl7.fhir.dstu3.model.DateType;
+import org.hl7.fhir.dstu3.model.IdType;
+import org.hl7.fhir.dstu3.model.OperationOutcome;
+import org.hl7.fhir.dstu3.model.Patient;
 import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.junit.*;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.annotation.*;
+import ca.uhn.fhir.rest.annotation.Create;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Read;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.annotation.Search;
 import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.api.MethodOutcome;
 import ca.uhn.fhir.rest.client.MyPatientWithExtensions;
@@ -74,6 +89,7 @@ public class ServerMimetypeDstu3Test {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<Patient xmlns=\"http://hl7.org/fhir\"><id value=\"1\"/><meta><versionId value=\"1\"/></meta><name><family value=\"FAMILY\"/></name></Patient>";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
@@ -86,7 +102,7 @@ public class ServerMimetypeDstu3Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -120,13 +136,15 @@ public class ServerMimetypeDstu3Test {
 	}
 
 	@Test
-	public void testCreateWithXmlNewNoAcceptHeader() throws Exception {
+	public void testCreateWithXmlNewNoAcceptHeaderReturnsOperationOutcome() throws Exception {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML_NEW + "; charset=utf-8")));
+		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		HttpResponse status = ourClient.execute(httpPost);
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
@@ -136,7 +154,7 @@ public class ServerMimetypeDstu3Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML_NEW, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -144,6 +162,7 @@ public class ServerMimetypeDstu3Test {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<Patient xmlns=\"http://hl7.org/fhir\"><id value=\"1\"/><meta><versionId value=\"1\"/></meta><name><family value=\"FAMILY\"/></name></Patient>";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
@@ -157,7 +176,7 @@ public class ServerMimetypeDstu3Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML_NEW, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -165,6 +184,7 @@ public class ServerMimetypeDstu3Test {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\"},\"name\":[{\"family\":\"FAMILY\"}]}";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON + "; charset=utf-8")));
@@ -177,7 +197,7 @@ public class ServerMimetypeDstu3Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -185,6 +205,7 @@ public class ServerMimetypeDstu3Test {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\"},\"name\":[{\"family\":\"FAMILY\"}]}";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON_NEW + "; charset=utf-8")));
@@ -197,18 +218,20 @@ public class ServerMimetypeDstu3Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON_NEW, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
-	public void testCreateWithJsonNewWithAcceptHeader() throws Exception {
+	public void testCreateWithJsonNewWithAcceptHeaderReturnsOperationOutcome() throws Exception {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}";
 		
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON + "; charset=utf-8")));
 		httpPost.addHeader(Constants.HEADER_ACCEPT, Constants.CT_FHIR_JSON_NEW);
+		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		HttpResponse status = ourClient.execute(httpPost);
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
@@ -218,7 +241,7 @@ public class ServerMimetypeDstu3Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON_NEW, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 	
 	@Test
@@ -357,7 +380,9 @@ public class ServerMimetypeDstu3Test {
 		public MethodOutcome create(@ResourceParam Patient theIdParam) {
 			OperationOutcome oo = new OperationOutcome();
 			oo.addIssue().setDiagnostics(theIdParam.getNameFirstRep().getFamily());
-			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(oo);
+			theIdParam.setId("1");
+			theIdParam.getMeta().setVersionId("1");
+			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(oo).setResource(theIdParam);
 		}
 
 		@Override
diff --git a/hapi-fhir-structures-hl7org-dstu2/src/main/java/org/hl7/fhir/instance/conf/ServerConformanceProvider.java b/hapi-fhir-structures-hl7org-dstu2/src/main/java/org/hl7/fhir/instance/conf/ServerConformanceProvider.java
index 895db7121db..773b2dd5d57 100644
--- a/hapi-fhir-structures-hl7org-dstu2/src/main/java/org/hl7/fhir/instance/conf/ServerConformanceProvider.java
+++ b/hapi-fhir-structures-hl7org-dstu2/src/main/java/org/hl7/fhir/instance/conf/ServerConformanceProvider.java
@@ -260,8 +260,6 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
           if (nextMethodBinding instanceof SearchMethodBinding) {
             handleSearchMethodBinding(rest, resource, resourceName, def, includes,
                 (SearchMethodBinding) nextMethodBinding);
-          } else if (nextMethodBinding instanceof DynamicSearchMethodBinding) {
-            handleDynamicSearchMethodBinding(resource, def, includes, (DynamicSearchMethodBinding) nextMethodBinding);
           } else if (nextMethodBinding instanceof OperationMethodBinding) {
             OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
             String opName = myOperationBindingToName.get(methodBinding);
@@ -326,52 +324,6 @@ public class ServerConformanceProvider implements IServerConformanceProvider<Con
     return DateTimeType.now();
   }
 
-  private void handleDynamicSearchMethodBinding(ConformanceRestResourceComponent resource,
-      RuntimeResourceDefinition def, TreeSet<String> includes, DynamicSearchMethodBinding searchMethodBinding) {
-    includes.addAll(searchMethodBinding.getIncludes());
-
-    List<RuntimeSearchParam> searchParameters = new ArrayList<RuntimeSearchParam>();
-    searchParameters.addAll(searchMethodBinding.getSearchParams());
-    sortRuntimeSearchParameters(searchParameters);
-
-    if (!searchParameters.isEmpty()) {
-
-      for (RuntimeSearchParam nextParameter : searchParameters) {
-
-        String nextParamName = nextParameter.getName();
-
-        // String chain = null;
-        String nextParamUnchainedName = nextParamName;
-        if (nextParamName.contains(".")) {
-          // chain = nextParamName.substring(nextParamName.indexOf('.') + 1);
-          nextParamUnchainedName = nextParamName.substring(0, nextParamName.indexOf('.'));
-        }
-
-        String nextParamDescription = nextParameter.getDescription();
-
-        /*
-         * If the parameter has no description, default to the one from the
-         * resource
-         */
-        if (StringUtils.isBlank(nextParamDescription)) {
-          RuntimeSearchParam paramDef = def.getSearchParam(nextParamUnchainedName);
-          if (paramDef != null) {
-            nextParamDescription = paramDef.getDescription();
-          }
-        }
-
-        ConformanceRestResourceSearchParamComponent param = resource.addSearchParam();
-
-        param.setName(nextParamName);
-        // if (StringUtils.isNotBlank(chain)) {
-        // param.addChain(chain);
-        // }
-        param.setDocumentation(nextParamDescription);
-        // param.setType(nextParameter.getParamType());
-      }
-    }
-  }
-
   private void handleSearchMethodBinding(ConformanceRestComponent rest, ConformanceRestResourceComponent resource,
       String resourceName, RuntimeResourceDefinition def, TreeSet<String> includes,
       SearchMethodBinding searchMethodBinding) {
diff --git a/hapi-fhir-structures-r4/pom.xml b/hapi-fhir-structures-r4/pom.xml
index 538acaa1fc8..39a8077b6db 100644
--- a/hapi-fhir-structures-r4/pom.xml
+++ b/hapi-fhir-structures-r4/pom.xml
@@ -50,6 +50,13 @@
 			<optional>true</optional>
 		</dependency>
 
+		<!-- Used by the validator -->
+		<dependency>
+			<groupId>com.github.ben-manes.caffeine</groupId>
+			<artifactId>caffeine</artifactId>
+			<optional>true</optional>
+		</dependency>
+
 		<!--
 		Test dependencies on other optional parts of HAPI 
 		-->
diff --git a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/FhirR4.java b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/FhirR4.java
index 9340fc10bde..641bf794cd7 100644
--- a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/FhirR4.java
+++ b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/FhirR4.java
@@ -49,7 +49,7 @@ public class FhirR4 implements IFhirVersion {
 
 	@Override
 	public IContextValidationSupport<?, ?, ?, ?, ?, ?> createValidationSupport() {
-		return ReflectionUtil.newInstanceOfFhirProfileValidationSupport("org.hl7.fhir.r4.hapi.validation.DefaultProfileValidationSupport");
+		return ReflectionUtil.newInstanceOfFhirProfileValidationSupport("org.hl7.fhir.r4.hapi.ctx.DefaultProfileValidationSupport");
 	}
 
 	@Override
diff --git a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/HapiWorkerContext.java b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/HapiWorkerContext.java
index 7f7a3a975ad..8bbdf87b3a8 100644
--- a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/HapiWorkerContext.java
+++ b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/HapiWorkerContext.java
@@ -1,11 +1,14 @@
 package org.hl7.fhir.r4.hapi.ctx;
 
 import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.context.RuntimeResourceDefinition;
+import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.util.CoverageIgnore;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
 import org.apache.commons.lang3.Validate;
+import org.apache.commons.lang3.time.DateUtils;
 import org.fhir.ucum.UcumService;
 import org.hl7.fhir.exceptions.FHIRException;
 import org.hl7.fhir.exceptions.TerminologyServiceException;
@@ -28,13 +31,14 @@ import org.hl7.fhir.utilities.TranslationServices;
 import org.hl7.fhir.utilities.validation.ValidationMessage.IssueSeverity;
 
 import java.util.*;
+import java.util.concurrent.TimeUnit;
 
 import static org.apache.commons.lang3.StringUtils.isBlank;
 import static org.apache.commons.lang3.StringUtils.isNotBlank;
 
 public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander, ValueSetExpanderFactory {
   private final FhirContext myCtx;
-  private Map<String, Resource> myFetchedResourceCache = new HashMap<String, Resource>();
+  private final Cache<String, Resource> myFetchedResourceCache;
   private IValidationSupport myValidationSupport;
   private ExpansionProfile myExpansionProfile;
 
@@ -43,6 +47,13 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
     Validate.notNull(theValidationSupport, "theValidationSupport must not be null");
     myCtx = theCtx;
     myValidationSupport = theValidationSupport;
+
+    long timeoutMillis = 10 * DateUtils.MILLIS_PER_SECOND;
+    if (System.getProperties().containsKey(ca.uhn.fhir.rest.api.Constants.TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS)) {
+      timeoutMillis = Long.parseLong(System.getProperty(Constants.TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS));
+    }
+
+    myFetchedResourceCache = Caffeine.newBuilder().expireAfterWrite(timeoutMillis, TimeUnit.MILLISECONDS).build();
   }
 
   @Override
@@ -206,9 +217,9 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
 
     ValueSetExpansionOutcome expandedValueSet = null;
 
-		/*
-       * The following valueset is a special case, since the BCP codesystem is very difficult to expand
-		 */
+    /*
+     * The following valueset is a special case, since the BCP codesystem is very difficult to expand
+     */
     if (theVs != null && "http://hl7.org/fhir/ValueSet/languages".equals(theVs.getId())) {
       ValueSet expansion = new ValueSet();
       for (ConceptSetComponent nextInclude : theVs.getCompose().getInclude()) {
@@ -338,13 +349,9 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
       return null;
     } else {
       @SuppressWarnings("unchecked")
-      T retVal = (T) myFetchedResourceCache.get(theUri);
-      if (retVal == null) {
-        retVal = myValidationSupport.fetchResource(myCtx, theClass, theUri);
-        if (retVal != null) {
-          myFetchedResourceCache.put(theUri, (Resource) retVal);
-        }
-      }
+      T retVal = (T) myFetchedResourceCache.get(theUri, t -> {
+        return myValidationSupport.fetchResource(myCtx, theClass, theUri);
+      });
       return retVal;
     }
   }
diff --git a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/R4BundleFactory.java b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/R4BundleFactory.java
index 3ef0a88dd9f..a8b7d150fb3 100644
--- a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/R4BundleFactory.java
+++ b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/R4BundleFactory.java
@@ -9,9 +9,9 @@ package org.hl7.fhir.r4.hapi.rest.server;
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -123,9 +123,9 @@ public class R4BundleFactory implements IVersionSpecificBundleFactory {
       }
     }
 
-		/*
-       * Actually add the resources to the bundle
-		 */
+    /*
+     * Actually add the resources to the bundle
+     */
     for (IBaseResource next : includedResources) {
       BundleEntryComponent entry = myBundle.addEntry();
       entry.setResource((Resource) next).getSearch().setMode(SearchEntryMode.INCLUDE);
@@ -195,7 +195,7 @@ public class R4BundleFactory implements IVersionSpecificBundleFactory {
         includedResources.addAll(addedResourcesThisPass);
 
         // Linked resources may themselves have linked resources
-        references = new ArrayList<ResourceReferenceInfo>();
+        references = new ArrayList<>();
         for (IAnyResource iResource : addedResourcesThisPass) {
           List<ResourceReferenceInfo> newReferences = myContext.newTerser().getAllResourceReferences(iResource);
           references.addAll(newReferences);
@@ -219,9 +219,9 @@ public class R4BundleFactory implements IVersionSpecificBundleFactory {
       }
     }
 
-		/*
-		 * Actually add the resources to the bundle
-		 */
+    /*
+     * Actually add the resources to the bundle
+     */
     for (IAnyResource next : includedResources) {
       BundleEntryComponent entry = myBundle.addEntry();
       entry.setResource((Resource) next).getSearch().setMode(SearchEntryMode.INCLUDE);
diff --git a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/ServerCapabilityStatementProvider.java b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/ServerCapabilityStatementProvider.java
index e0947c9f014..ee9810e47ac 100644
--- a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/ServerCapabilityStatementProvider.java
+++ b/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/rest/server/ServerCapabilityStatementProvider.java
@@ -294,8 +294,6 @@ public class ServerCapabilityStatementProvider implements IServerConformanceProv
 
           if (nextMethodBinding instanceof SearchMethodBinding) {
             handleSearchMethodBinding(rest, resource, resourceName, def, includes, (SearchMethodBinding) nextMethodBinding);
-          } else if (nextMethodBinding instanceof DynamicSearchMethodBinding) {
-            handleDynamicSearchMethodBinding(resource, def, includes, (DynamicSearchMethodBinding) nextMethodBinding);
           } else if (nextMethodBinding instanceof OperationMethodBinding) {
             OperationMethodBinding methodBinding = (OperationMethodBinding) nextMethodBinding;
             String opName = myOperationBindingToName.get(methodBinding);
@@ -346,49 +344,6 @@ public class ServerCapabilityStatementProvider implements IServerConformanceProv
     return retVal;
   }
 
-  private void handleDynamicSearchMethodBinding(CapabilityStatementRestResourceComponent resource, RuntimeResourceDefinition def, TreeSet<String> includes, DynamicSearchMethodBinding searchMethodBinding) {
-    includes.addAll(searchMethodBinding.getIncludes());
-
-    List<RuntimeSearchParam> searchParameters = new ArrayList<>();
-    searchParameters.addAll(searchMethodBinding.getSearchParams());
-    sortRuntimeSearchParameters(searchParameters);
-
-    if (!searchParameters.isEmpty()) {
-
-      for (RuntimeSearchParam nextParameter : searchParameters) {
-
-        String nextParamName = nextParameter.getName();
-
-        // String chain = null;
-        String nextParamUnchainedName = nextParamName;
-        if (nextParamName.contains(".")) {
-          // chain = nextParamName.substring(nextParamName.indexOf('.') + 1);
-          nextParamUnchainedName = nextParamName.substring(0, nextParamName.indexOf('.'));
-        }
-
-        String nextParamDescription = nextParameter.getDescription();
-
-        /*
-         * If the parameter has no description, default to the one from the resource
-         */
-        if (StringUtils.isBlank(nextParamDescription)) {
-          RuntimeSearchParam paramDef = def.getSearchParam(nextParamUnchainedName);
-          if (paramDef != null) {
-            nextParamDescription = paramDef.getDescription();
-          }
-        }
-
-        CapabilityStatementRestResourceSearchParamComponent param = resource.addSearchParam();
-
-        param.setName(nextParamName);
-        // if (StringUtils.isNotBlank(chain)) {
-        // param.addChain(chain);
-        // }
-        param.setDocumentation(nextParamDescription);
-        // param.setType(nextParameter.getParamType());
-      }
-    }
-  }
 
   private void handleSearchMethodBinding(CapabilityStatementRestComponent rest, CapabilityStatementRestResourceComponent resource, String resourceName, RuntimeResourceDefinition def, TreeSet<String> includes,
                                          SearchMethodBinding searchMethodBinding) {
@@ -479,8 +434,8 @@ public class ServerCapabilityStatementProvider implements IServerConformanceProv
 
   @Initialize
   public void initializeOperations() {
-    myOperationBindingToName = new IdentityHashMap<OperationMethodBinding, String>();
-    myOperationNameToBindings = new HashMap<String, List<OperationMethodBinding>>();
+    myOperationBindingToName = new IdentityHashMap<>();
+    myOperationNameToBindings = new HashMap<>();
 
     Map<String, List<BaseMethodBinding<?>>> resourceToMethods = collectMethodBindings();
     for (Entry<String, List<BaseMethodBinding<?>>> nextEntry : resourceToMethods.entrySet()) {
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/JsonParserR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/JsonParserR4Test.java
index c2bead79fa9..7a4870c655b 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/JsonParserR4Test.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/JsonParserR4Test.java
@@ -36,6 +36,20 @@ public class JsonParserR4Test {
 		return b;
 	}
 
+	@Test
+	public void testDontStripVersions() {
+		FhirContext ctx = FhirContext.forR4();
+		ctx.getParserOptions().setDontStripVersionsFromReferencesAtPaths("QuestionnaireResponse.questionnaire");
+
+		QuestionnaireResponse qr = new QuestionnaireResponse();
+		qr.getQuestionnaireElement().setValueAsString("Questionnaire/123/_history/456");
+
+		String output = ctx.newJsonParser().setPrettyPrint(true).encodeResourceToString(qr);
+		ourLog.info(output);
+
+		assertThat(output, containsString("\"Questionnaire/123/_history/456\""));
+	}
+
 	/**
 	 * See #814
 	 */
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/view/ExtPatient.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/view/ExtPatient.java
new file mode 100644
index 00000000000..1bfc7bd8864
--- /dev/null
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/view/ExtPatient.java
@@ -0,0 +1,42 @@
+package ca.uhn.fhir.parser.view;
+
+import ca.uhn.fhir.model.api.annotation.Child;
+import ca.uhn.fhir.model.api.annotation.Extension;
+import ca.uhn.fhir.model.api.annotation.ResourceDef;
+import org.hl7.fhir.r4.model.IntegerType;
+import org.hl7.fhir.r4.model.Patient;
+
+@ResourceDef(name = "Patient")
+public class ExtPatient extends Patient {
+
+	@Extension(url = "urn:ext", isModifier = false, definedLocally = false)
+	@Child(name = "ext")
+	private IntegerType myExt;
+
+	@Extension(url = "urn:modExt", isModifier = false, definedLocally = false)
+	@Child(name = "modExt")
+	private IntegerType myModExt;
+
+	public IntegerType getExt() {
+		if (myExt == null) {
+			myExt = new IntegerType();
+		}
+		return myExt;
+	}
+
+	public void setExt(IntegerType theExt) {
+		myExt = theExt;
+	}
+
+	public IntegerType getModExt() {
+		if (myModExt == null) {
+			myModExt = new IntegerType();
+		}
+		return myModExt;
+	}
+
+	public void setModExt(IntegerType theModExt) {
+		myModExt = theModExt;
+	}
+
+}
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/view/ViewGeneratorTest.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/view/ViewGeneratorTest.java
new file mode 100644
index 00000000000..5f39990f604
--- /dev/null
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/parser/view/ViewGeneratorTest.java
@@ -0,0 +1,116 @@
+package ca.uhn.fhir.parser.view;
+
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.parser.IParser;
+import ca.uhn.fhir.util.TestUtil;
+import org.hl7.fhir.r4.model.Extension;
+import org.hl7.fhir.r4.model.IntegerType;
+import org.hl7.fhir.r4.model.Patient;
+import org.junit.AfterClass;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+public class ViewGeneratorTest {
+
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ViewGeneratorTest.class);
+	private static FhirContext ourCtx = FhirContext.forR4();
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	@Test
+	public void testView() {
+
+		ExtPatient src = new ExtPatient();
+		src.addIdentifier().setSystem("urn:sys").setValue("id1");
+		src.addIdentifier().setSystem("urn:sys").setValue("id2");
+		src.getExt().setValue(100);
+		src.getModExt().setValue(200);
+
+		String enc = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(src);
+
+		ourLog.info(enc);
+
+		IParser parser = ourCtx.newXmlParser();
+		Patient nonExt = parser.parseResource(Patient.class, enc);
+
+		assertEquals(Patient.class, nonExt.getClass());
+		assertEquals("urn:sys", nonExt.getIdentifier().get(0).getSystem());
+		assertEquals("id1", nonExt.getIdentifier().get(0).getValue());
+		assertEquals("urn:sys", nonExt.getIdentifier().get(1).getSystem());
+		assertEquals("id2", nonExt.getIdentifier().get(1).getValue());
+
+		List<Extension> ext = nonExt.getExtensionsByUrl("urn:ext");
+		assertEquals(1, ext.size());
+		assertEquals("urn:ext", ext.get(0).getUrl());
+		assertEquals(IntegerType.class, ext.get(0).getValueAsPrimitive().getClass());
+		assertEquals("100", ext.get(0).getValueAsPrimitive().getValueAsString());
+
+		List<Extension> modExt = nonExt.getExtensionsByUrl("urn:modExt");
+		assertEquals(1, modExt.size());
+		assertEquals("urn:modExt", modExt.get(0).getUrl());
+		assertEquals(IntegerType.class, modExt.get(0).getValueAsPrimitive().getClass());
+		assertEquals("200", modExt.get(0).getValueAsPrimitive().getValueAsString());
+
+		ExtPatient va = ourCtx.newViewGenerator().newView(nonExt, ExtPatient.class);
+		assertEquals("urn:sys", va.getIdentifier().get(0).getSystem());
+		assertEquals("id1", va.getIdentifier().get(0).getValue());
+		assertEquals("urn:sys", va.getIdentifier().get(1).getSystem());
+		assertEquals("id2", va.getIdentifier().get(1).getValue());
+		assertEquals(100, va.getExt().getValue().intValue());
+		assertEquals(200, va.getModExt().getValue().intValue());
+
+		assertEquals(0, va.getExtension().size());
+	}
+
+	@Test
+	public void testViewJson() {
+
+		ExtPatient src = new ExtPatient();
+		src.addIdentifier().setSystem("urn:sys").setValue("id1");
+		src.addIdentifier().setSystem("urn:sys").setValue("id2");
+		src.getExt().setValue(100);
+		src.getModExt().setValue(200);
+
+		String enc = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(src);
+
+		ourLog.info(enc);
+
+		IParser parser = ourCtx.newJsonParser();
+		Patient nonExt = parser.parseResource(Patient.class, enc);
+
+		assertEquals(Patient.class, nonExt.getClass());
+		assertEquals("urn:sys", nonExt.getIdentifier().get(0).getSystem());
+		assertEquals("id1", nonExt.getIdentifier().get(0).getValue());
+		assertEquals("urn:sys", nonExt.getIdentifier().get(1).getSystem());
+		assertEquals("id2", nonExt.getIdentifier().get(1).getValue());
+
+		List<Extension> ext = nonExt.getExtensionsByUrl("urn:ext");
+		assertEquals(1, ext.size());
+		assertEquals("urn:ext", ext.get(0).getUrl());
+		assertEquals(IntegerType.class, ext.get(0).getValueAsPrimitive().getClass());
+		assertEquals("100", ext.get(0).getValueAsPrimitive().getValueAsString());
+
+		List<Extension> modExt = nonExt.getExtensionsByUrl("urn:modExt");
+		assertEquals(1, modExt.size());
+		assertEquals("urn:modExt", modExt.get(0).getUrl());
+		assertEquals(IntegerType.class, modExt.get(0).getValueAsPrimitive().getClass());
+		assertEquals("200", modExt.get(0).getValueAsPrimitive().getValueAsString());
+
+		ExtPatient va = ourCtx.newViewGenerator().newView(nonExt, ExtPatient.class);
+		assertEquals("urn:sys", va.getIdentifier().get(0).getSystem());
+		assertEquals("id1", va.getIdentifier().get(0).getValue());
+		assertEquals("urn:sys", va.getIdentifier().get(1).getSystem());
+		assertEquals("id2", va.getIdentifier().get(1).getValue());
+		assertEquals(100, va.getExt().getValue().intValue());
+		assertEquals(200, va.getModExt().getValue().intValue());
+
+		assertEquals(0, va.getExtension().size());
+	}
+
+}
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/ClientR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/ClientR4Test.java
index 60c788985dd..8ab4dca6ac0 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/ClientR4Test.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/ClientR4Test.java
@@ -958,6 +958,8 @@ public class ClientR4Test {
 
   }
 
+
+
   @Test
   public void testSearchWithStringIncludes() throws Exception {
 
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/GenericClientR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/GenericClientR4Test.java
index e1533df51eb..7dbd141c05d 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/GenericClientR4Test.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/GenericClientR4Test.java
@@ -1,43 +1,5 @@
 package ca.uhn.fhir.rest.client;
 
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.startsWith;
-import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.io.*;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.*;
-
-import com.helger.commons.io.stream.StringInputStream;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.input.ReaderInputStream;
-import org.apache.http.*;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.*;
-import org.apache.http.message.BasicHeader;
-import org.apache.http.message.BasicStatusLine;
-import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.instance.model.api.IPrimitiveType;
-import org.hl7.fhir.r4.model.*;
-import org.hl7.fhir.r4.model.Bundle.BundleType;
-import org.junit.*;
-import org.mockito.ArgumentCaptor;
-import org.mockito.internal.stubbing.defaultanswers.ReturnsDeepStubs;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
-
-import com.google.common.base.Charsets;
-
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.context.FhirVersionEnum;
 import ca.uhn.fhir.model.api.IQueryParameterType;
@@ -47,8 +9,8 @@ import ca.uhn.fhir.model.primitive.StringDt;
 import ca.uhn.fhir.parser.CustomTypeR4Test;
 import ca.uhn.fhir.parser.CustomTypeR4Test.MyCustomPatient;
 import ca.uhn.fhir.parser.IParser;
-import ca.uhn.fhir.rest.api.*;
 import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.*;
 import ca.uhn.fhir.rest.client.api.IGenericClient;
 import ca.uhn.fhir.rest.client.api.ServerValidationModeEnum;
 import ca.uhn.fhir.rest.client.exceptions.FhirClientConnectionException;
@@ -57,177 +19,147 @@ import ca.uhn.fhir.rest.client.impl.BaseClient;
 import ca.uhn.fhir.rest.client.interceptor.CookieInterceptor;
 import ca.uhn.fhir.rest.client.interceptor.UserInfoInterceptor;
 import ca.uhn.fhir.rest.param.DateParam;
+import ca.uhn.fhir.rest.param.DateRangeParam;
 import ca.uhn.fhir.rest.param.ParamPrefixEnum;
 import ca.uhn.fhir.rest.server.exceptions.NotImplementedOperationException;
 import ca.uhn.fhir.rest.server.exceptions.UnclassifiedServerFailureException;
-import ca.uhn.fhir.util.*;
+import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.UrlUtil;
+import ca.uhn.fhir.util.VersionUtil;
+import com.google.common.base.Charsets;
+import com.helger.commons.io.stream.StringInputStream;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.input.ReaderInputStream;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.ProtocolVersion;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.message.BasicStatusLine;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+import org.hl7.fhir.r4.model.*;
+import org.hl7.fhir.r4.model.Bundle.BundleType;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.internal.stubbing.defaultanswers.ReturnsDeepStubs;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.util.*;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.startsWith;
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 public class GenericClientR4Test {
-  private static FhirContext ourCtx;
-  private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(GenericClientR4Test.class);
-  private int myAnswerCount;
-  private HttpClient myHttpClient;
-  private HttpResponse myHttpResponse;
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(GenericClientR4Test.class);
+	private static FhirContext ourCtx;
+	private int myAnswerCount;
+	private HttpClient myHttpClient;
+	private HttpResponse myHttpResponse;
 
-  @Before
-  public void before() {
-    myHttpClient = mock(HttpClient.class, new ReturnsDeepStubs());
-    ourCtx.getRestfulClientFactory().setHttpClient(myHttpClient);
-    ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
-    myHttpResponse = mock(HttpResponse.class, new ReturnsDeepStubs());
-    myAnswerCount = 0;
-    System.setProperty(BaseClient.HAPI_CLIENT_KEEPRESPONSES, "true");
-  }
+	@Before
+	public void before() {
+		myHttpClient = mock(HttpClient.class, new ReturnsDeepStubs());
+		ourCtx.getRestfulClientFactory().setHttpClient(myHttpClient);
+		ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
+		myHttpResponse = mock(HttpResponse.class, new ReturnsDeepStubs());
+		myAnswerCount = 0;
+		System.setProperty(BaseClient.HAPI_CLIENT_KEEPRESPONSES, "true");
+	}
 
-  private String expectedUserAgent() {
-    return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.R4.getFhirVersionString() + "/R4; apache)";
-  }
+	private String expectedUserAgent() {
+		return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.R4.getFhirVersionString() + "/R4; apache)";
+	}
 
-  private byte[] extractBodyAsByteArray(ArgumentCaptor<HttpUriRequest> capt) throws IOException {
-    byte[] body = IOUtils.toByteArray(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(0)).getEntity().getContent());
-    return body;
-  }
+	private byte[] extractBodyAsByteArray(ArgumentCaptor<HttpUriRequest> capt) throws IOException {
+		byte[] body = IOUtils.toByteArray(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(0)).getEntity().getContent());
+		return body;
+	}
 
-  private String extractBodyAsString(ArgumentCaptor<HttpUriRequest> capt) throws IOException {
-    String body = IOUtils.toString(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(0)).getEntity().getContent(), "UTF-8");
-    return body;
-  }
+	private String extractBodyAsString(ArgumentCaptor<HttpUriRequest> capt) throws IOException {
+		String body = IOUtils.toString(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(0)).getEntity().getContent(), "UTF-8");
+		return body;
+	}
 
-  private ArgumentCaptor<HttpUriRequest> prepareClientForSearchResponse() throws IOException {
-    final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-    return capt;
-  }
-
-	@Test
-	public void testSearchWithNoExplicitBundleReturnType() throws Exception {
-
-		String msg = ClientR4Test.getPatientFeedWithOneResult(ourCtx);
+	private ArgumentCaptor<HttpUriRequest> prepareClientForSearchResponse() throws IOException {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
 
 		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-
-		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-		// httpResponse = new BasicHttpResponse(statusline, catalog, locale)
 		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+		return capt;
+	}
 
-		IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
-		Bundle response = (Bundle) client.search().forResource(Patient.class).execute();
+	@Test
+	public void testAcceptHeaderWithEncodingSpecified() throws Exception {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
 
-		assertEquals("http://foo/Patient", capt.getValue().getURI().toString());
-		Patient patient = (Patient) response.getEntry().get(0).getResource();
-		assertEquals("PRP1660", patient.getIdentifier().get(0).getValueElement().getValue());
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client.setEncoding(EncodingEnum.JSON);
+		client.search()
+			.forResource("Device")
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Device?_format=json", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("application/fhir+json;q=1.0, application/json+fhir;q=0.9", capt.getAllValues().get(idx).getFirstHeader(Constants.HEADER_ACCEPT).getValue());
+		idx++;
+
+		client.setEncoding(EncodingEnum.XML);
+		client.search()
+			.forResource("Device")
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Device?_format=xml", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("application/fhir+xml;q=1.0, application/xml+fhir;q=0.9", capt.getAllValues().get(idx).getFirstHeader(Constants.HEADER_ACCEPT).getValue());
+		idx++;
 
 	}
 
-
 	@Test
-  public void testAcceptHeaderWithEncodingSpecified() throws Exception {
-    final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client.setEncoding(EncodingEnum.JSON);
-    client.search()
-        .forResource("Device")
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Device?_format=json", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("application/fhir+json;q=1.0, application/json+fhir;q=0.9", capt.getAllValues().get(idx).getFirstHeader(Constants.HEADER_ACCEPT).getValue());
-    idx++;
-
-    client.setEncoding(EncodingEnum.XML);
-    client.search()
-        .forResource("Device")
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Device?_format=xml", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("application/fhir+xml;q=1.0, application/xml+fhir;q=0.9", capt.getAllValues().get(idx).getFirstHeader(Constants.HEADER_ACCEPT).getValue());
-    idx++;
-
-  }
-
-  @Test
-  public void testBinaryCreateWithFhirContentType() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-
-    final String respString = p.encodeResourceToString(conf);
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient pt = new Patient();
-    pt.getText().setDivAsString("A PATIENT");
-
-    Binary bin = new Binary();
-    bin.setContent(ourCtx.newJsonParser().encodeResourceToString(pt).getBytes("UTF-8"));
-    bin.setContentType(Constants.CT_FHIR_JSON);
-    client.create().resource(bin).execute();
-
-    ourLog.info(Arrays.asList(capt.getAllValues().get(0).getAllHeaders()).toString());
-
-    assertEquals("http://example.com/fhir/Binary", capt.getAllValues().get(0).getURI().toASCIIString());
-    validateUserAgent(capt);
-
-    assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
-    assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
-    Binary output = ourCtx.newXmlParser().parseResource(Binary.class, extractBodyAsString(capt));
-    assertEquals(Constants.CT_FHIR_JSON, output.getContentType());
-
-    Patient outputPt = (Patient) ourCtx.newJsonParser().parseResource(new String(output.getContent(), "UTF-8"));
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">A PATIENT</div>", outputPt.getText().getDivAsString());
-  }
-
-
-	@Test
-	public void testOperationServer() throws Exception {
+	public void testBinaryCreateWithFhirContentType() throws Exception {
 		IParser p = ourCtx.newXmlParser();
 
-		Parameters inputParams = new Parameters();
-		inputParams.addParameter().setName("name").setValue(new BooleanType(true));
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
 
-		Parameters outputParams = new Parameters();
-		outputParams.addParameter().setName("name").setValue(new BooleanType(false));
-
-		final String respString = p.encodeResourceToString(outputParams);
+		final String respString = p.encodeResourceToString(conf);
 		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
 		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
 		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
@@ -241,37 +173,332 @@ public class GenericClientR4Test {
 
 		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-		Parameters result = client
+		Patient pt = new Patient();
+		pt.getText().setDivAsString("A PATIENT");
+
+		Binary bin = new Binary();
+		bin.setContent(ourCtx.newJsonParser().encodeResourceToString(pt).getBytes("UTF-8"));
+		bin.setContentType(Constants.CT_FHIR_JSON);
+		client.create().resource(bin).execute();
+
+		ourLog.info(Arrays.asList(capt.getAllValues().get(0).getAllHeaders()).toString());
+
+		assertEquals("http://example.com/fhir/Binary", capt.getAllValues().get(0).getURI().toASCIIString());
+		validateUserAgent(capt);
+
+		assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
+		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
+		Binary output = ourCtx.newXmlParser().parseResource(Binary.class, extractBodyAsString(capt));
+		assertEquals(Constants.CT_FHIR_JSON, output.getContentType());
+
+		Patient outputPt = (Patient) ourCtx.newJsonParser().parseResource(new String(output.getContent(), "UTF-8"));
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">A PATIENT</div>", outputPt.getText().getDivAsString());
+	}
+
+	@Test
+	public void testBinaryCreateWithNoContentType() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
+
+		final String respString = p.encodeResourceToString(conf);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Binary bin = new Binary();
+		bin.setContent(new byte[] {0, 1, 2, 3, 4});
+		client.create().resource(bin).execute();
+
+		ourLog.info(Arrays.asList(capt.getAllValues().get(0).getAllHeaders()).toString());
+
+		assertEquals("http://example.com/fhir/Binary", capt.getAllValues().get(0).getURI().toASCIIString());
+		validateUserAgent(capt);
+
+		assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
+		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
+		assertArrayEquals(new byte[] {0, 1, 2, 3, 4}, ourCtx.newXmlParser().parseResource(Binary.class, extractBodyAsString(capt)).getContent());
+
+	}
+
+	@SuppressWarnings("unchecked")
+	@Test
+	public void testClientFailures() throws Exception {
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenThrow(IllegalStateException.class, RuntimeException.class, IOException.class);
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		try {
+			client.read().resource(Patient.class).withId("1").execute();
+			fail();
+		} catch (FhirClientConnectionException e) {
+			assertEquals("java.lang.IllegalStateException", e.getMessage());
+		}
+
+		try {
+			client.read().resource(Patient.class).withId("1").execute();
+			fail();
+		} catch (RuntimeException e) {
+			assertEquals("java.lang.RuntimeException", e.toString());
+		}
+
+		try {
+			client.read().resource(Patient.class).withId("1").execute();
+			fail();
+		} catch (FhirClientConnectionException e) {
+			assertThat(e.getMessage(), containsString("java.io.IOException"));
+		}
+	}
+
+	@Test
+	public void testCookieInterceptor() throws Exception {
+		final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		client.registerInterceptor(new CookieInterceptor("foo=bar"));
+
+		Bundle resp = client
+			.history()
+			.onType(Patient.class)
+			.andReturnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("foo=bar", capt.getAllValues().get(0).getFirstHeader("Cookie").getValue());
+	}
+
+	@Test
+	public void testCreateWithPreferRepresentationServerReturnsOO() throws Exception {
+		final IParser p = ourCtx.newXmlParser();
+
+		final OperationOutcome resp0 = new OperationOutcome();
+		resp0.getText().setDivAsString("OK!");
+
+		final Patient resp1 = new Patient();
+		resp1.getText().setDivAsString("FINAL VALUE");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
+			@Override
+			public Header[] answer(InvocationOnMock theInvocation) {
+				return new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3")};
+			}
+		});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				if (myAnswerCount++ == 0) {
+					return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8"));
+				} else {
+					return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
+				}
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient pt = new Patient();
+		pt.getText().setDivAsString("A PATIENT");
+
+		MethodOutcome outcome = client.create().resource(pt).prefer(PreferReturnEnum.REPRESENTATION).execute();
+
+		assertEquals(2, myAnswerCount);
+		assertNotNull(outcome.getOperationOutcome());
+		assertNotNull(outcome.getResource());
+
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", ((OperationOutcome) outcome.getOperationOutcome()).getText().getDivAsString());
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">FINAL VALUE</div>", ((Patient) outcome.getResource()).getText().getDivAsString());
+
+		assertEquals(myAnswerCount, capt.getAllValues().size());
+		assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString());
+		assertEquals(Constants.CT_FHIR_XML_NEW, capt.getAllValues().get(0).getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
+
+		assertEquals("http://foo.com/base/Patient/222/_history/3", capt.getAllValues().get(1).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testCreateWithPreferRepresentationServerReturnsResource() throws Exception {
+		final IParser p = ourCtx.newXmlParser();
+
+		final Patient resp1 = new Patient();
+		resp1.getText().setDivAsString("FINAL VALUE");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
+			@Override
+			public Header[] answer(InvocationOnMock theInvocation) {
+				return new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3")};
+			}
+		});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				myAnswerCount++;
+				return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient pt = new Patient();
+		pt.getText().setDivAsString("A PATIENT");
+
+		MethodOutcome outcome = client.create().resource(pt).prefer(PreferReturnEnum.REPRESENTATION).execute();
+
+		assertEquals(1, myAnswerCount);
+		assertNull(outcome.getOperationOutcome());
+		assertNotNull(outcome.getResource());
+
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">FINAL VALUE</div>", ((Patient) outcome.getResource()).getText().getDivAsString());
+
+		assertEquals(myAnswerCount, capt.getAllValues().size());
+		assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testExplicitCustomTypeHistoryType() throws Exception {
+		final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle resp = client
+			.history()
+			.onType(CustomTypeR4Test.MyCustomPatient.class)
+			.andReturnBundle(Bundle.class)
+			.execute();
+
+		assertEquals(1, resp.getEntry().size());
+		assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getEntry().get(0).getResource().getClass());
+		assertEquals("http://example.com/fhir/Patient/_history", capt.getAllValues().get(0).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testExplicitCustomTypeLoadPage() throws Exception {
+		final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		Bundle bundle = new Bundle();
+		bundle.addLink().setRelation("next").setUrl("http://foo/next");
+
+		Bundle resp = client
+			.loadPage()
+			.next(bundle)
+			.preferResponseType(MyCustomPatient.class)
+			.execute();
+
+		assertEquals(1, resp.getEntry().size());
+		assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getEntry().get(0).getResource().getClass());
+		assertEquals("http://foo/next", capt.getAllValues().get(0).getURI().toASCIIString());
+
+		resp = client
+			.loadPage()
+			.next(bundle)
+			.preferResponseTypes(toTypeList(MyCustomPatient.class))
+			.execute();
+
+		assertEquals(1, resp.getEntry().size());
+		assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getEntry().get(0).getResource().getClass());
+		assertEquals("http://foo/next", capt.getAllValues().get(0).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testExplicitCustomTypeOperation() throws Exception {
+
+		Parameters param = new Parameters();
+		Patient patient = new Patient();
+		patient.addName().setFamily("FOO");
+		param.addParameter().setName("foo").setResource(patient);
+		final String respString = ourCtx.newXmlParser().encodeResourceToString(param);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Parameters resp = client
 			.operation()
 			.onServer()
-			.named("opname")
-			.withParameters(inputParams)
+			.named("foo")
+			.withNoParameters(Parameters.class)
+			.preferResponseType(MyCustomPatient.class)
 			.execute();
 
-		assertEquals("name", result.getParameterFirstRep().getName());
-		assertEquals("false", ((IPrimitiveType<?>)result.getParameterFirstRep().getValue()).getValueAsString());
+		assertEquals(1, resp.getParameter().size());
+		assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getParameter().get(0).getResource().getClass());
+		assertEquals("http://example.com/fhir/$foo", capt.getAllValues().get(0).getURI().toASCIIString());
 
-		assertEquals("http://example.com/fhir/$opname", capt.getAllValues().get(0).getURI().toASCIIString());
-		validateUserAgent(capt);
+		resp = client
+			.operation()
+			.onType(MyCustomPatient.class)
+			.named("foo")
+			.withNoParameters(Parameters.class)
+			.execute();
 
-		assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
-		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
-		Parameters output = ourCtx.newXmlParser().parseResource(Parameters.class, extractBodyAsString(capt));
-		assertEquals("name", output.getParameterFirstRep().getName());
-		assertEquals("true", ((IPrimitiveType<?>)output.getParameterFirstRep().getValue()).getValueAsString());
+		assertEquals(1, resp.getParameter().size());
+		assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getParameter().get(0).getResource().getClass());
+		assertEquals("http://example.com/fhir/Patient/$foo", capt.getAllValues().get(1).getURI().toASCIIString());
 	}
 
 	@Test
-	public void testOperationType() throws Exception {
-		IParser p = ourCtx.newXmlParser();
-
-		Parameters inputParams = new Parameters();
-		inputParams.addParameter().setName("name").setValue(new BooleanType(true));
-
-		Parameters outputParams = new Parameters();
-		outputParams.addParameter().setName("name").setValue(new BooleanType(false));
-
-		final String respString = p.encodeResourceToString(outputParams);
+	public void testExplicitCustomTypeSearch() throws Exception {
+		final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
 		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
 		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
 		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
@@ -285,24 +512,240 @@ public class GenericClientR4Test {
 
 		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-		Parameters result = client
-			.operation()
-			.onType(Patient.class)
-			.named("opname")
-			.withParameters(inputParams)
+		Bundle resp = client
+			.search()
+			.forResource(CustomTypeR4Test.MyCustomPatient.class)
+			.returnBundle(Bundle.class)
 			.execute();
 
-		assertEquals("name", result.getParameterFirstRep().getName());
-		assertEquals("false", ((IPrimitiveType<?>)result.getParameterFirstRep().getValue()).getValueAsString());
+		assertEquals(1, resp.getEntry().size());
+		assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getEntry().get(0).getResource().getClass());
+		assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString());
+	}
 
-		assertEquals("http://example.com/fhir/Patient/$opname", capt.getAllValues().get(0).getURI().toASCIIString());
-		validateUserAgent(capt);
+	@Test
+	public void testFetchCapabilityStatementReceiveCapabilityStatement() throws Exception {
+		final IParser p = ourCtx.newXmlParser();
+
+		final CapabilityStatement conf = new CapabilityStatement();
+		conf.setCopyright("COPY");
+
+		final Patient patient = new Patient();
+		patient.addName().setFamily("FAM");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			private int myCount = 0;
+
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				final String respString;
+				if (myCount == 1 || myCount == 2) {
+					ourLog.info("Encoding patient");
+					respString = p.encodeResourceToString(patient);
+				} else {
+					ourLog.info("Encoding conformance");
+					respString = p.encodeResourceToString(conf);
+				}
+				myCount++;
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.ONCE);
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://testForceConformanceCapabilityStatement.com/fhir");
+
+		client.read().resource("Patient").withId("1").execute();
+		assertEquals(2, capt.getAllValues().size());
+		assertEquals("http://testForceConformanceCapabilityStatement.com/fhir/metadata", capt.getAllValues().get(0).getURI().toASCIIString());
+		assertEquals("http://testForceConformanceCapabilityStatement.com/fhir/Patient/1", capt.getAllValues().get(1).getURI().toASCIIString());
+
+		client.read().resource("Patient").withId("1").execute();
+		assertEquals(3, capt.getAllValues().size());
+		assertEquals("http://testForceConformanceCapabilityStatement.com/fhir/Patient/1", capt.getAllValues().get(2).getURI().toASCIIString());
+
+		client.forceConformanceCheck();
+		assertEquals(4, capt.getAllValues().size());
+		assertEquals("http://testForceConformanceCapabilityStatement.com/fhir/metadata", capt.getAllValues().get(3).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testForceConformance() throws Exception {
+		final IParser p = ourCtx.newXmlParser();
+
+		final CapabilityStatement conf = new CapabilityStatement();
+		conf.setCopyright("COPY");
+
+		final Patient patient = new Patient();
+		patient.addName().setFamily("FAM");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				final String respString;
+				if (myAnswerCount >= 1) {
+					ourLog.info("Encoding patient");
+					respString = p.encodeResourceToString(patient);
+				} else {
+					ourLog.info("Encoding conformance");
+					respString = p.encodeResourceToString(conf);
+				}
+				myAnswerCount++;
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.ONCE);
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://testForceConformance.com/fhir");
+
+		client.read().resource("Patient").withId("1").execute();
+		assertEquals(2, capt.getAllValues().size());
+		assertEquals("http://testForceConformance.com/fhir/metadata", capt.getAllValues().get(0).getURI().toASCIIString());
+		assertEquals("http://testForceConformance.com/fhir/Patient/1", capt.getAllValues().get(1).getURI().toASCIIString());
+
+		client.read().resource("Patient").withId("1").execute();
+		assertEquals(3, capt.getAllValues().size());
+		assertEquals("http://testForceConformance.com/fhir/Patient/1", capt.getAllValues().get(2).getURI().toASCIIString());
+
+		myAnswerCount = 0;
+		client.forceConformanceCheck();
+		assertEquals(4, capt.getAllValues().size());
+		assertEquals("http://testForceConformance.com/fhir/metadata", capt.getAllValues().get(3).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testHistoryTypeWithAt() throws Exception {
+
+		final Bundle resp1 = new Bundle();
+		resp1.setTotal(0);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
+			@Override
+			public Header[] answer(InvocationOnMock theInvocation) {
+				return new Header[0];
+			}
+		});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> {
+			IParser p = ourCtx.newXmlParser();
+			return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle outcome = client
+			.history()
+			.onServer().andReturnBundle(Bundle.class)
+			.at(new DateRangeParam().setLowerBound("2011").setUpperBound("2018"))
+			.execute();
+
+		assertEquals(0, outcome.getTotal());
+		assertEquals("http://example.com/fhir/_history?_at=ge2011&_at=le2018", capt.getAllValues().get(0).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testHttp499() throws Exception {
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 499, "Wacky Message"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
+			@Override
+			public StringInputStream answer(InvocationOnMock theInvocation) {
+				return new StringInputStream("HELLO", Charsets.UTF_8);
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		try {
+			client.read().resource(Patient.class).withId("1").execute();
+			fail();
+		} catch (UnclassifiedServerFailureException e) {
+			assertEquals("ca.uhn.fhir.rest.server.exceptions.UnclassifiedServerFailureException: HTTP 499 Wacky Message", e.toString());
+			assertEquals("HELLO", e.getResponseBody());
+		}
+
+	}
+
+	@Test
+	public void testHttp501() throws Exception {
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 501, "Not Implemented"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
+			@Override
+			public StringInputStream answer(InvocationOnMock theInvocation) {
+				return new StringInputStream("not implemented", Charsets.UTF_8);
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		try {
+			client.read().resource(Patient.class).withId("1").execute();
+			fail();
+		} catch (NotImplementedOperationException e) {
+			assertEquals("HTTP 501 Not Implemented", e.getMessage());
+		}
+
+	}
+
+	/**
+	 * See #150
+	 */
+	@Test
+	public void testNullAndEmptyParamValuesAreIgnored() throws Exception {
+		ArgumentCaptor<HttpUriRequest> capt = prepareClientForSearchResponse();
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client
+			.search()
+			.forResource(Patient.class)
+			.where(Patient.FAMILY.matches().value((String) null))
+			.and(Patient.BIRTHDATE.exactly().day((Date) null))
+			.and(Patient.GENDER.exactly().code(null))
+			.and(Patient.ORGANIZATION.hasId((String) null))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client
+			.search()
+			.forResource(Encounter.class)
+			.where(Encounter.LENGTH.exactly().number(null).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Encounter", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client
+			.search()
+			.forResource(Observation.class)
+			.where(Observation.VALUE_QUANTITY.exactly().number(null).andUnits(null))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Observation", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
 
-		assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
-		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
-		Parameters output = ourCtx.newXmlParser().parseResource(Parameters.class, extractBodyAsString(capt));
-		assertEquals("name", output.getParameterFirstRep().getName());
-		assertEquals("true", ((IPrimitiveType<?>)output.getParameterFirstRep().getValue()).getValueAsString());
 	}
 
 	@Test
@@ -337,7 +780,7 @@ public class GenericClientR4Test {
 			.execute();
 
 		assertEquals("name", result.getParameterFirstRep().getName());
-		assertEquals("false", ((IPrimitiveType<?>)result.getParameterFirstRep().getValue()).getValueAsString());
+		assertEquals("false", ((IPrimitiveType<?>) result.getParameterFirstRep().getValue()).getValueAsString());
 
 		assertEquals("http://example.com/fhir/Patient/123/$opname", capt.getAllValues().get(0).getURI().toASCIIString());
 		validateUserAgent(capt);
@@ -346,7 +789,7 @@ public class GenericClientR4Test {
 		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
 		Parameters output = ourCtx.newXmlParser().parseResource(Parameters.class, extractBodyAsString(capt));
 		assertEquals("name", output.getParameterFirstRep().getName());
-		assertEquals("true", ((IPrimitiveType<?>)output.getParameterFirstRep().getValue()).getValueAsString());
+		assertEquals("true", ((IPrimitiveType<?>) output.getParameterFirstRep().getValue()).getValueAsString());
 	}
 
 	@Test
@@ -381,7 +824,7 @@ public class GenericClientR4Test {
 			.execute();
 
 		assertEquals("name", result.getParameterFirstRep().getName());
-		assertEquals("false", ((IPrimitiveType<?>)result.getParameterFirstRep().getValue()).getValueAsString());
+		assertEquals("false", ((IPrimitiveType<?>) result.getParameterFirstRep().getValue()).getValueAsString());
 
 		assertEquals("http://example.com/fhir/Patient/123/_history/456/$opname", capt.getAllValues().get(0).getURI().toASCIIString());
 		validateUserAgent(capt);
@@ -390,1824 +833,1497 @@ public class GenericClientR4Test {
 		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
 		Parameters output = ourCtx.newXmlParser().parseResource(Parameters.class, extractBodyAsString(capt));
 		assertEquals("name", output.getParameterFirstRep().getName());
-		assertEquals("true", ((IPrimitiveType<?>)output.getParameterFirstRep().getValue()).getValueAsString());
+		assertEquals("true", ((IPrimitiveType<?>) output.getParameterFirstRep().getValue()).getValueAsString());
+	}
+
+	@Test
+	public void testOperationServer() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		Parameters inputParams = new Parameters();
+		inputParams.addParameter().setName("name").setValue(new BooleanType(true));
+
+		Parameters outputParams = new Parameters();
+		outputParams.addParameter().setName("name").setValue(new BooleanType(false));
+
+		final String respString = p.encodeResourceToString(outputParams);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Parameters result = client
+			.operation()
+			.onServer()
+			.named("opname")
+			.withParameters(inputParams)
+			.execute();
+
+		assertEquals("name", result.getParameterFirstRep().getName());
+		assertEquals("false", ((IPrimitiveType<?>) result.getParameterFirstRep().getValue()).getValueAsString());
+
+		assertEquals("http://example.com/fhir/$opname", capt.getAllValues().get(0).getURI().toASCIIString());
+		validateUserAgent(capt);
+
+		assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
+		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
+		Parameters output = ourCtx.newXmlParser().parseResource(Parameters.class, extractBodyAsString(capt));
+		assertEquals("name", output.getParameterFirstRep().getName());
+		assertEquals("true", ((IPrimitiveType<?>) output.getParameterFirstRep().getValue()).getValueAsString());
+	}
+
+	@Test
+	public void testOperationType() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		Parameters inputParams = new Parameters();
+		inputParams.addParameter().setName("name").setValue(new BooleanType(true));
+
+		Parameters outputParams = new Parameters();
+		outputParams.addParameter().setName("name").setValue(new BooleanType(false));
+
+		final String respString = p.encodeResourceToString(outputParams);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Parameters result = client
+			.operation()
+			.onType(Patient.class)
+			.named("opname")
+			.withParameters(inputParams)
+			.execute();
+
+		assertEquals("name", result.getParameterFirstRep().getName());
+		assertEquals("false", ((IPrimitiveType<?>) result.getParameterFirstRep().getValue()).getValueAsString());
+
+		assertEquals("http://example.com/fhir/Patient/$opname", capt.getAllValues().get(0).getURI().toASCIIString());
+		validateUserAgent(capt);
+
+		assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
+		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
+		Parameters output = ourCtx.newXmlParser().parseResource(Parameters.class, extractBodyAsString(capt));
+		assertEquals("name", output.getParameterFirstRep().getName());
+		assertEquals("true", ((IPrimitiveType<?>) output.getParameterFirstRep().getValue()).getValueAsString());
+	}
+
+	@Test
+	public void testPatchInvalid() {
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		try {
+			client
+				.patch()
+				.withBody("AA")
+				.withId("Patient/123")
+				.execute();
+		} catch (IllegalArgumentException e) {
+			assertEquals("Unable to determine encoding of patch", e.getMessage());
+		}
+	}
+
+	@Test
+	public void testPatchJsonByConditionalParam() throws Exception {
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
+		final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
+
+		MethodOutcome outcome = client
+			.patch()
+			.withBody(patch)
+			.conditional("Patient").where(Patient.NAME.matches().value("TEST"))
+			.and(Patient.FAMILY.matches().value("TEST2"))
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name=TEST&family=TEST2", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
+		assertEquals(patch, extractBodyAsString(capt));
+		assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
+		idx++;
+
+		OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
+		assertThat(oo.getText().getDivAsString(), containsString("OK!"));
+	}
+
+	@Test
+	public void testPatchJsonByConditionalParamResourceType() throws Exception {
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
+		final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
+
+		MethodOutcome outcome = client
+			.patch()
+			.withBody(patch)
+			.conditional(Patient.class).where(Patient.NAME.matches().value("TEST"))
+			.and(Patient.FAMILY.matches().value("TEST2"))
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name=TEST&family=TEST2", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
+		assertEquals(patch, extractBodyAsString(capt));
+		assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
+		idx++;
+
+		OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
+		assertThat(oo.getText().getDivAsString(), containsString("OK!"));
+	}
+
+	@Test
+	public void testPatchJsonByConditionalString() throws Exception {
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
+		final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
+
+		MethodOutcome outcome = client
+			.patch()
+			.withBody(patch)
+			.conditionalByUrl("Patient?foo=bar")
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?foo=bar", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
+		assertEquals(patch, extractBodyAsString(capt));
+		assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
+		idx++;
+
+		OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
+		assertThat(oo.getText().getDivAsString(), containsString("OK!"));
+	}
+
+	@Test
+	public void testPatchJsonByIdString() throws Exception {
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
+		final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
+
+		MethodOutcome outcome = client
+			.patch()
+			.withBody(patch)
+			.withId("Patient/123")
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
+		assertEquals(patch, extractBodyAsString(capt));
+		assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
+		idx++;
+
+		OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
+		assertThat(oo.getText().getDivAsString(), containsString("OK!"));
+	}
+
+	@Test
+	public void testPatchJsonByIdType() throws Exception {
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
+		final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
+
+		MethodOutcome outcome = client
+			.patch()
+			.withBody(patch)
+			.withId(new IdType("http://localhost/fhir/Patient/123/_history/234"))
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
+		assertEquals(patch, extractBodyAsString(capt));
+		assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
+		idx++;
+
+		OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
+		assertThat(oo.getText().getDivAsString(), containsString("OK!"));
+	}
+
+	@Test
+	public void testPatchXmlByIdString() throws Exception {
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
+		final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		String patch = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><diff xmlns:fhir=\"http://hl7.org/fhir\"><replace sel=\"fhir:Patient/fhir:active/@value\">false</replace></diff>";
+
+		MethodOutcome outcome = client
+			.patch()
+			.withBody(patch)
+			.withId("Patient/123")
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
+		assertEquals(patch, extractBodyAsString(capt));
+		assertEquals(Constants.CT_XML_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
+		idx++;
+
+		OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
+		assertThat(oo.getText().getDivAsString(), containsString("OK!"));
+	}
+
+	@Test
+	public void testPutDoesntForceAllIdsJson() throws Exception {
+		IParser p = ourCtx.newJsonParser();
+
+		Patient patient = new Patient();
+		patient.setId("PATIENT1");
+		patient.addName().setFamily("PATIENT1");
+
+		Bundle bundle = new Bundle();
+		bundle.setId("BUNDLE1");
+		bundle.addEntry().setResource(patient);
+
+		final String encoded = p.encodeResourceToString(bundle);
+		assertEquals("{\"resourceType\":\"Bundle\",\"id\":\"BUNDLE1\",\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"PATIENT1\",\"name\":[{\"family\":\"PATIENT1\"}]}}]}", encoded);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON_NEW + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(encoded), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client
+			.update()
+			.resource(bundle)
+			.prefer(PreferReturnEnum.REPRESENTATION)
+			.encodedJson()
+			.execute();
+
+		HttpPut httpRequest = (HttpPut) capt.getValue();
+		assertEquals("http://example.com/fhir/Bundle/BUNDLE1", httpRequest.getURI().toASCIIString());
+
+		String requestString = IOUtils.toString(httpRequest.getEntity().getContent(), StandardCharsets.UTF_8);
+		assertEquals(encoded, requestString);
+	}
+
+	@Test
+	public void testPutDoesntForceAllIdsXml() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		Patient patient = new Patient();
+		patient.setId("PATIENT1");
+		patient.addName().setFamily("PATIENT1");
+
+		Bundle bundle = new Bundle();
+		bundle.setId("BUNDLE1");
+		bundle.addEntry().setResource(patient);
+
+		final String encoded = p.encodeResourceToString(bundle);
+		assertEquals(
+			"<Bundle xmlns=\"http://hl7.org/fhir\"><id value=\"BUNDLE1\"/><entry><resource><Patient xmlns=\"http://hl7.org/fhir\"><id value=\"PATIENT1\"/><name><family value=\"PATIENT1\"/></name></Patient></resource></entry></Bundle>",
+			encoded);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(encoded), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client
+			.update()
+			.resource(bundle)
+			.prefer(PreferReturnEnum.REPRESENTATION)
+			.execute();
+
+		HttpPut httpRequest = (HttpPut) capt.getValue();
+		assertEquals("http://example.com/fhir/Bundle/BUNDLE1", httpRequest.getURI().toASCIIString());
+
+		String requestString = IOUtils.toString(httpRequest.getEntity().getContent(), StandardCharsets.UTF_8);
+		assertEquals(encoded, requestString);
+	}
+
+	@Test
+	public void testReadWithUnparseableResponse() throws Exception {
+		String msg = "{\"resourceTypeeeee\":\"Patient\"}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		try {
+			client.read().resource("Patient").withId("123").elementsSubset("name", "identifier").execute();
+			fail();
+		} catch (FhirClientConnectionException e) {
+			assertEquals(
+				"Failed to parse response from server when performing GET to URL http://example.com/fhir/Patient/123?_elements=identifier%2Cname - ca.uhn.fhir.parser.DataFormatException: Invalid JSON content detected, missing required element: 'resourceType'",
+				e.getMessage());
+		}
+	}
+
+	@Test
+	public void testResponseHasContentTypeMissing() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+		Patient patient = new Patient();
+		patient.addName().setFamily("FAM");
+		final String respString = p.encodeResourceToString(patient);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		// when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(null);
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		try {
+			client.read().resource(Patient.class).withId("1").execute();
+			fail();
+		} catch (NonFhirResponseException e) {
+			assertEquals("Response contains no Content-Type", e.getMessage());
+		}
+
+		// Patient resp = client.read().resource(Patient.class).withId("1").execute();
+		// assertEquals("FAM", resp.getNameFirstRep().getFamilyAsSingleString());
+	}
+
+	@Test
+	public void testResponseHasContentTypeNonFhir() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+		Patient patient = new Patient();
+		patient.addName().setFamily("FAM");
+		final String respString = p.encodeResourceToString(patient);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", "text/plain"));
+		// when(myHttpResponse.getEntity().getContentType()).thenReturn(null);
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		try {
+			client.read().resource(Patient.class).withId("1").execute();
+			fail();
+		} catch (NonFhirResponseException e) {
+			assertEquals("Response contains non FHIR Content-Type 'text/plain' : <Patient xmlns=\"http://hl7.org/fhir\"><name><family value=\"FAM\"/></name></Patient>", e.getMessage());
+		}
+
+		// Patient resp = client.read().resource(Patient.class).withId("1").execute();
+		// assertEquals("FAM", resp.getNameFirstRep().getFamilyAsSingleString());
+	}
+
+	@Test
+	public void testRevIncludeRecursive() throws IOException {
+		ArgumentCaptor<HttpUriRequest> capt = prepareClientForSearchResponse();
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client.search()
+			.forResource(EpisodeOfCare.class)
+			.where(EpisodeOfCare.PATIENT.hasId("123"))
+			.revInclude(Encounter.INCLUDE_EPISODEOFCARE)
+			.revInclude(Observation.INCLUDE_ENCOUNTER.asRecursive())
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/EpisodeOfCare?patient=123&_revinclude=Encounter%3Aepisodeofcare&_revinclude%3Arecurse=Observation%3Aencounter",
+			capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+	}
+
+	@Test
+	public void testSearchByDate() throws Exception {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		DateTimeDt now = DateTimeDt.withCurrentTime();
+		String dateString = now.getValueAsString().substring(0, 10);
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.after().day(dateString))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=gt" + dateString, capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.after().day(now.getValue()))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=gt" + dateString, capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.afterOrEquals().day(dateString))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=ge" + dateString, capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.before().day(dateString))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=lt" + dateString, capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.beforeOrEquals().day(dateString))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=le" + dateString, capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.exactly().day(dateString))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=" + dateString, capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.after().second("2011-01-02T22:33:01Z"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=gt2011-01-02T22:33:01Z", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.after().second(now.getValueAsString()))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=gt" + now.getValueAsString(), UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.BIRTHDATE.after().now())
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertThat(capt.getAllValues().get(idx).getURI().toString(), startsWith("http://example.com/fhir/Patient?birthdate=gt2"));
+		dateString = UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()).substring(44);
+		ourLog.info(dateString);
+		assertEquals(TemporalPrecisionEnum.SECOND, new DateTimeDt(dateString).getPrecision());
+		idx++;
+	}
+
+	@SuppressWarnings("deprecation")
+	@Test
+	public void testSearchByQuantity() throws Exception {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.approximately().number(123).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Observation?value-quantity=ap123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.approximately().number("123").andUnits("CODE"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Observation?value-quantity=ap123||CODE", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.approximately().number("123").andUnits("SYSTEM", "CODE"))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=ap123|SYSTEM|CODE", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.exactly().number(123).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.exactly().number("123").andUnits("CODE"))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=123||CODE", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.exactly().number("123").andUnits("SYSTEM", "CODE"))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=123|SYSTEM|CODE", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.greaterThan().number(123).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=gt123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.lessThan().number(123).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=lt123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.greaterThanOrEquals().number(123).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=ge123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.lessThanOrEquals().number(123).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=le123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Observation")
+			.where(Observation.VALUE_QUANTITY.withPrefix(ParamPrefixEnum.GREATERTHAN).number(123).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Observation?value-quantity=gt123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+	}
+
+	@Test
+	public void testSearchByString() throws Exception {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().value("AAA"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name=AAA", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().value(new StringDt("AAA")))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name=AAA", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().values("AAA", "BBB"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name=AAA,BBB", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().values(Arrays.asList("AAA", "BBB")))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name=AAA,BBB", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matchesExactly().value("AAA"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name%3Aexact=AAA", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matchesExactly().value(new StringDt("AAA")))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name%3Aexact=AAA", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matchesExactly().values("AAA", "BBB"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name:exact=AAA,BBB", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matchesExactly().values(Arrays.asList("AAA", "BBB")))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name:exact=AAA,BBB", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+	}
+
+	@Test
+	public void testSearchByUrl() throws Exception {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client.search()
+			.forResource("Device")
+			.where(Device.URL.matches().value("http://foo.com"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Device?url=http://foo.com", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		assertEquals("http://example.com/fhir/Device?url=http%3A%2F%2Ffoo.com", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+
+		client.search()
+			.forResource("Device")
+			.where(Device.URL.matches().value(new StringDt("http://foo.com")))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Device?url=http://foo.com", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+	}
+
+	@Test
+	public void testSearchWithMap() throws Exception {
+		String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		HashMap<String, List<IQueryParameterType>> params = new HashMap<String, List<IQueryParameterType>>();
+		params.put("foo", Arrays.asList((IQueryParameterType) new DateParam("2001")));
+		Bundle response = client
+			.search()
+			.forResource(Patient.class)
+			.where(params)
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?foo=2001", capt.getValue().getURI().toString());
+		assertEquals(Patient.class, response.getEntry().get(0).getResource().getClass());
+
+	}
+
+	@Test
+	public void testSearchWithMultipleTokens() throws Exception {
+		ArgumentCaptor<HttpUriRequest> capt = prepareClientForSearchResponse();
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		Collection<String> values = Arrays.asList("VAL1", "VAL2", "VAL3A,B");
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().systemAndValues("SYS", values))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?identifier=SYS%7CVAL1%2CSYS%7CVAL2%2CSYS%7CVAL3A%5C%2CB", capt.getAllValues().get(idx).getURI().toString());
+		assertEquals("http://example.com/fhir/Patient?identifier=SYS|VAL1,SYS|VAL2,SYS|VAL3A\\,B", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
+		idx++;
+
+	}
+
+	@Test
+	public void testSearchWithNoExplicitBundleReturnType() throws Exception {
+
+		String msg = ClientR4Test.getPatientFeedWithOneResult(ourCtx);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		// httpResponse = new BasicHttpResponse(statusline, catalog, locale)
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
+		Bundle response = (Bundle) client.search().forResource(Patient.class).execute();
+
+		assertEquals("http://foo/Patient", capt.getValue().getURI().toString());
+		Patient patient = (Patient) response.getEntry().get(0).getResource();
+		assertEquals("PRP1660", patient.getIdentifier().get(0).getValueElement().getValue());
+
+	}
+
+	@Test
+	public void testSearchWithNullParameters() throws Exception {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		DateTimeDt now = DateTimeDt.withCurrentTime();
+		String dateString = now.getValueAsString().substring(0, 10);
+
+		client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().value((String) null))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(idx).getURI().toString());
+		idx++;
+	}
+
+	@Test
+	public void testSearchWithParameterMap() throws Exception {
+
+		final Bundle resp1 = new Bundle();
+		resp1.setTotal(0);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
+			@Override
+			public Header[] answer(InvocationOnMock theInvocation) {
+				return new Header[0];
+			}
+		});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> {
+			IParser p = ourCtx.newXmlParser();
+			return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Map<String, List<String>> rawMap = new HashMap<>();
+		rawMap.put("param1", Arrays.asList("val1a,val1b", "<html>"));
+
+		Bundle outcome = client
+			.search()
+			.forResource(Patient.class)
+			.whereMap(rawMap)
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals(0, outcome.getTotal());
+		assertEquals("http://example.com/fhir/Patient?param1=val1a%2Cval1b&param1=%3Chtml%3E", capt.getAllValues().get(0).getURI().toASCIIString());
+		assertEquals("http://example.com/fhir/Patient?param1=val1a,val1b&param1=<html>", UrlUtil.unescape(capt.getAllValues().get(0).getURI().toASCIIString()));
+	}
+
+	/**
+	 * See #371
+	 */
+	@Test
+	public void testSortR4Test() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		Bundle b = new Bundle();
+		b.setType(BundleType.SEARCHSET);
+
+		final String respString = p.encodeResourceToString(b);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		client
+			.search()
+			.forResource(Patient.class)
+			.sort().ascending("address")
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?_sort=address", capt.getAllValues().get(idx++).getURI().toASCIIString());
+
+		client
+			.search()
+			.forResource(Patient.class)
+			.sort().descending("address")
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?_sort=-address", capt.getAllValues().get(idx++).getURI().toASCIIString());
+
+		client
+			.search()
+			.forResource(Patient.class)
+			.sort().descending("address")
+			.sort().ascending("name")
+			.sort().descending(Patient.BIRTHDATE)
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?_sort=-address%2Cname%2C-birthdate", capt.getAllValues().get(idx++).getURI().toASCIIString());
+
+	}
+
+	@Test
+	public void testSortUsingSortSpec() throws Exception {
+
+		final Bundle resp1 = new Bundle();
+		resp1.setTotal(0);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
+			@Override
+			public Header[] answer(InvocationOnMock theInvocation) {
+				return new Header[0];
+			}
+		});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(t -> {
+			IParser p = ourCtx.newXmlParser();
+			return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		SortSpec sortSpec = new SortSpec();
+		sortSpec.setParamName("BDESC");
+		sortSpec.setOrder(SortOrderEnum.DESC);
+		sortSpec.setChain(new SortSpec());
+		sortSpec.getChain().setParamName("CASC");
+		sortSpec.getChain().setOrder(SortOrderEnum.ASC);
+
+		Bundle outcome = client
+			.search()
+			.forResource(Patient.class)
+			.returnBundle(Bundle.class)
+			.sort().ascending("AASC")
+			.sort(sortSpec)
+			.sort().defaultOrder("DDEF")
+			.execute();
+
+		assertEquals(0, outcome.getTotal());
+		assertEquals("http://example.com/fhir/Patient?_sort=AASC%2C-BDESC%2CCASC%2CDDEF", capt.getAllValues().get(0).getURI().toASCIIString());
+		assertEquals("http://example.com/fhir/Patient?_sort=AASC,-BDESC,CASC,DDEF", UrlUtil.unescape(capt.getAllValues().get(0).getURI().toASCIIString()));
+	}
+
+	@Test
+	public void testTransactionWithInvalidBody() {
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		// Transaction
+		try {
+			client.transaction().withBundle("FOO");
+			fail();
+		} catch (IllegalArgumentException e) {
+			assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage());
+		}
+
+		// Create
+		try {
+			client.create().resource("FOO").execute();
+			fail();
+		} catch (IllegalArgumentException e) {
+			assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage());
+		}
+
+		// Update
+		try {
+			client.update().resource("FOO").execute();
+			fail();
+		} catch (IllegalArgumentException e) {
+			assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage());
+		}
+
+		// Validate
+		try {
+			client.validate().resource("FOO").execute();
+			fail();
+		} catch (IllegalArgumentException e) {
+			assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage());
+		}
+
+	}
+
+	@Test
+	public void testUpdateById() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		OperationOutcome conf = new OperationOutcome();
+		conf.getText().setDivAsString("OK!");
+
+		final String respString = p.encodeResourceToString(conf);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient pt = new Patient();
+		pt.setId("222");
+		pt.getText().setDivAsString("A PATIENT");
+
+		client.update().resource(pt).withId("111").execute();
+
+		ourLog.info(Arrays.asList(capt.getAllValues().get(0).getAllHeaders()).toString());
+
+		assertEquals("http://example.com/fhir/Patient/111", capt.getAllValues().get(0).getURI().toASCIIString());
+		validateUserAgent(capt);
+
+		assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
+		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
+		String body = extractBodyAsString(capt);
+		assertThat(body, containsString("<id value=\"111\"/>"));
+	}
+
+	@Test
+	public void testUpdateWithPreferRepresentationServerReturnsOO() throws Exception {
+		final IParser p = ourCtx.newXmlParser();
+
+		final OperationOutcome resp0 = new OperationOutcome();
+		resp0.getText().setDivAsString("OK!");
+
+		final Patient resp1 = new Patient();
+		resp1.getText().setDivAsString("FINAL VALUE");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
+			@Override
+			public Header[] answer(InvocationOnMock theInvocation) {
+				return new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3")};
+			}
+		});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				if (myAnswerCount++ == 0) {
+					return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8"));
+				} else {
+					return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
+				}
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient pt = new Patient();
+		pt.setId("Patient/222");
+		pt.getText().setDivAsString("A PATIENT");
+
+		MethodOutcome outcome = client.update().resource(pt).prefer(PreferReturnEnum.REPRESENTATION).execute();
+
+		assertEquals(2, myAnswerCount);
+		assertNotNull(outcome.getOperationOutcome());
+		assertNotNull(outcome.getResource());
+
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", ((OperationOutcome) outcome.getOperationOutcome()).getText().getDivAsString());
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">FINAL VALUE</div>", ((Patient) outcome.getResource()).getText().getDivAsString());
+
+		assertEquals(myAnswerCount, capt.getAllValues().size());
+		assertEquals("http://example.com/fhir/Patient/222", capt.getAllValues().get(0).getURI().toASCIIString());
+		assertEquals("http://foo.com/base/Patient/222/_history/3", capt.getAllValues().get(1).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testUpdateWithPreferRepresentationServerReturnsResource() throws Exception {
+		final IParser p = ourCtx.newXmlParser();
+
+		final Patient resp1 = new Patient();
+		resp1.getText().setDivAsString("FINAL VALUE");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
+			@Override
+			public Header[] answer(InvocationOnMock theInvocation) {
+				return new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3")};
+			}
+		});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				myAnswerCount++;
+				return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient pt = new Patient();
+		pt.setId("Patient/222");
+		pt.getText().setDivAsString("A PATIENT");
+
+		MethodOutcome outcome = client.update().resource(pt).prefer(PreferReturnEnum.REPRESENTATION).execute();
+
+		assertEquals(1, myAnswerCount);
+		assertNull(outcome.getOperationOutcome());
+		assertNotNull(outcome.getResource());
+
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">FINAL VALUE</div>", ((Patient) outcome.getResource()).getText().getDivAsString());
+
+		assertEquals(myAnswerCount, capt.getAllValues().size());
+		assertEquals("http://example.com/fhir/Patient/222", capt.getAllValues().get(0).getURI().toASCIIString());
+	}
+
+	@Test
+	public void testUserAgentForBinary() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		CapabilityStatement conf = new CapabilityStatement();
+		conf.setCopyright("COPY");
+
+		final String respString = p.encodeResourceToString(conf);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Binary bin = new Binary();
+		bin.setContentType("application/foo");
+		bin.setContent(new byte[] {0, 1, 2, 3, 4});
+		client.create().resource(bin).execute();
+
+		ourLog.info(Arrays.asList(capt.getAllValues().get(0).getAllHeaders()).toString());
+
+		assertEquals("http://example.com/fhir/Binary", capt.getAllValues().get(0).getURI().toASCIIString());
+		validateUserAgent(capt);
+
+		assertEquals("application/foo", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue());
+		assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_OR_JSON_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
+		assertArrayEquals(new byte[] {0, 1, 2, 3, 4}, extractBodyAsByteArray(capt));
+
+	}
+
+	@Test
+	public void testUserAgentForConformance() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		CapabilityStatement conf = new CapabilityStatement();
+		conf.setCopyright("COPY");
+
+		final String respString = p.encodeResourceToString(conf);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		client.fetchConformance().ofType(CapabilityStatement.class).execute();
+		assertEquals("http://example.com/fhir/metadata", capt.getAllValues().get(0).getURI().toASCIIString());
+		validateUserAgent(capt);
+	}
+
+	@Test
+	public void testUserInfoInterceptor() throws Exception {
+		final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		client.registerInterceptor(new UserInfoInterceptor("user_id", "user_name", "app-name"));
+
+		Bundle resp = client
+			.history()
+			.onType(Patient.class)
+			.andReturnBundle(Bundle.class)
+			.execute();
+
+	}
+
+	@Test
+	public void testValidate() throws Exception {
+		final IParser p = ourCtx.newXmlParser();
+
+		final OperationOutcome resp0 = new OperationOutcome();
+		resp0.getText().setDivAsString("OK!");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
+			@Override
+			public Header[] answer(InvocationOnMock theInvocation) {
+				return new Header[] {};
+			}
+		});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient pt = new Patient();
+		pt.setId("Patient/222");
+		pt.getText().setDivAsString("A PATIENT");
+
+		MethodOutcome outcome = client.validate().resource(pt).execute();
+
+		assertNotNull(outcome.getOperationOutcome());
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", ((OperationOutcome) outcome.getOperationOutcome()).getText().getDivAsString());
+
+	}
+
+	@Test
+	public void testValidateCustomTypeFromClientRead() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		MyPatientWithExtensions patient = new MyPatientWithExtensions();
+		patient.setId("123");
+		patient.getText().setDivAsString("OK!");
+
+		final String respString = p.encodeResourceToString(patient);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		MyPatientWithExtensions read = client.read().resource(MyPatientWithExtensions.class).withId(new IdType("1")).execute();
+		assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", read.getText().getDivAsString());
+
+		// Ensure that we haven't overridden the default type for the name
+		assertFalse(MyPatientWithExtensions.class.isAssignableFrom(Patient.class));
+		assertFalse(Patient.class.isAssignableFrom(MyPatientWithExtensions.class));
+		Patient pt = new Patient();
+		pt.getText().setDivAsString("A PATIENT");
+		IParser parser = ourCtx.newXmlParser();
+		String encoded = parser.encodeResourceToString(pt);
+		pt = (Patient) parser.parseResource(encoded);
+
+	}
+
+	@Test
+	public void testValidateCustomTypeFromClientSearch() throws Exception {
+		IParser p = ourCtx.newXmlParser();
+
+		Bundle b = new Bundle();
+
+		MyPatientWithExtensions patient = new MyPatientWithExtensions();
+		patient.setId("123");
+		patient.getText().setDivAsString("OK!");
+		b.addEntry().setResource(patient);
+
+		final String respString = p.encodeResourceToString(b);
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
+			@Override
+			public ReaderInputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		Bundle bundle = client.search().forResource(MyPatientWithExtensions.class).returnBundle(Bundle.class).execute();
+
+		assertEquals(1, bundle.getEntry().size());
+		assertEquals(MyPatientWithExtensions.class, bundle.getEntry().get(0).getResource().getClass());
+	}
+
+	private List<Class<? extends IBaseResource>> toTypeList(Class<? extends IBaseResource> theClass) {
+		ArrayList<Class<? extends IBaseResource>> retVal = new ArrayList<Class<? extends IBaseResource>>();
+		retVal.add(theClass);
+		return retVal;
+	}
+
+	private void validateUserAgent(ArgumentCaptor<HttpUriRequest> capt) {
+		assertEquals(1, capt.getAllValues().get(0).getHeaders("User-Agent").length);
+		assertEquals(expectedUserAgent(), capt.getAllValues().get(0).getHeaders("User-Agent")[0].getValue());
+	}
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	@BeforeClass
+	public static void beforeClass() {
+		ourCtx = FhirContext.forR4();
 	}
 
 
-	@Test
-  public void testBinaryCreateWithNoContentType() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-
-    final String respString = p.encodeResourceToString(conf);
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Binary bin = new Binary();
-    bin.setContent(new byte[] { 0, 1, 2, 3, 4 });
-    client.create().resource(bin).execute();
-
-    ourLog.info(Arrays.asList(capt.getAllValues().get(0).getAllHeaders()).toString());
-
-    assertEquals("http://example.com/fhir/Binary", capt.getAllValues().get(0).getURI().toASCIIString());
-    validateUserAgent(capt);
-
-    assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
-    assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
-    assertArrayEquals(new byte[] { 0, 1, 2, 3, 4 }, ourCtx.newXmlParser().parseResource(Binary.class, extractBodyAsString(capt)).getContent());
-
-  }
-
-  @SuppressWarnings("unchecked")
-  @Test
-  public void testClientFailures() throws Exception {
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenThrow(IllegalStateException.class, RuntimeException.class, IOException.class);
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    try {
-      client.read().resource(Patient.class).withId("1").execute();
-      fail();
-    } catch (FhirClientConnectionException e) {
-      assertEquals("java.lang.IllegalStateException", e.getMessage());
-    }
-
-    try {
-      client.read().resource(Patient.class).withId("1").execute();
-      fail();
-    } catch (RuntimeException e) {
-      assertEquals("java.lang.RuntimeException", e.toString());
-    }
-
-    try {
-      client.read().resource(Patient.class).withId("1").execute();
-      fail();
-    } catch (FhirClientConnectionException e) {
-      assertThat(e.getMessage(), containsString("java.io.IOException"));
-    }
-  }
-
-  @Test
-  public void testCookieInterceptor() throws Exception {
-    final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    client.registerInterceptor(new CookieInterceptor("foo=bar"));
-
-    Bundle resp = client
-        .history()
-        .onType(Patient.class)
-        .andReturnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("foo=bar", capt.getAllValues().get(0).getFirstHeader("Cookie").getValue());
-  }
-
-  @Test
-  public void testCreateWithPreferRepresentationServerReturnsOO() throws Exception {
-    final IParser p = ourCtx.newXmlParser();
-
-    final OperationOutcome resp0 = new OperationOutcome();
-    resp0.getText().setDivAsString("OK!");
-
-    final Patient resp1 = new Patient();
-    resp1.getText().setDivAsString("FINAL VALUE");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
-      @Override
-      public Header[] answer(InvocationOnMock theInvocation) {
-        return new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3") };
-      }
-    });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        if (myAnswerCount++ == 0) {
-          return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8"));
-        } else {
-          return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
-        }
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient pt = new Patient();
-    pt.getText().setDivAsString("A PATIENT");
-
-    MethodOutcome outcome = client.create().resource(pt).prefer(PreferReturnEnum.REPRESENTATION).execute();
-
-    assertEquals(2, myAnswerCount);
-    assertNotNull(outcome.getOperationOutcome());
-    assertNotNull(outcome.getResource());
-
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", ((OperationOutcome) outcome.getOperationOutcome()).getText().getDivAsString());
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">FINAL VALUE</div>", ((Patient) outcome.getResource()).getText().getDivAsString());
-
-    assertEquals(myAnswerCount, capt.getAllValues().size());
-    assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString());
-    assertEquals(Constants.CT_FHIR_XML_NEW, capt.getAllValues().get(0).getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-
-    assertEquals("http://foo.com/base/Patient/222/_history/3", capt.getAllValues().get(1).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testCreateWithPreferRepresentationServerReturnsResource() throws Exception {
-    final IParser p = ourCtx.newXmlParser();
-
-    final Patient resp1 = new Patient();
-    resp1.getText().setDivAsString("FINAL VALUE");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
-      @Override
-      public Header[] answer(InvocationOnMock theInvocation) {
-        return new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3") };
-      }
-    });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        myAnswerCount++;
-        return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient pt = new Patient();
-    pt.getText().setDivAsString("A PATIENT");
-
-    MethodOutcome outcome = client.create().resource(pt).prefer(PreferReturnEnum.REPRESENTATION).execute();
-
-    assertEquals(1, myAnswerCount);
-    assertNull(outcome.getOperationOutcome());
-    assertNotNull(outcome.getResource());
-
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">FINAL VALUE</div>", ((Patient) outcome.getResource()).getText().getDivAsString());
-
-    assertEquals(myAnswerCount, capt.getAllValues().size());
-    assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testExplicitCustomTypeHistoryType() throws Exception {
-    final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle resp = client
-        .history()
-        .onType(CustomTypeR4Test.MyCustomPatient.class)
-        .andReturnBundle(Bundle.class)
-        .execute();
-
-    assertEquals(1, resp.getEntry().size());
-    assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getEntry().get(0).getResource().getClass());
-    assertEquals("http://example.com/fhir/Patient/_history", capt.getAllValues().get(0).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testExplicitCustomTypeLoadPage() throws Exception {
-    final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    Bundle bundle = new Bundle();
-    bundle.addLink().setRelation("next").setUrl("http://foo/next");
-
-    Bundle resp = client
-        .loadPage()
-        .next(bundle)
-        .preferResponseType(MyCustomPatient.class)
-        .execute();
-
-    assertEquals(1, resp.getEntry().size());
-    assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getEntry().get(0).getResource().getClass());
-    assertEquals("http://foo/next", capt.getAllValues().get(0).getURI().toASCIIString());
-
-    resp = client
-        .loadPage()
-        .next(bundle)
-        .preferResponseTypes(toTypeList(MyCustomPatient.class))
-        .execute();
-
-    assertEquals(1, resp.getEntry().size());
-    assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getEntry().get(0).getResource().getClass());
-    assertEquals("http://foo/next", capt.getAllValues().get(0).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testExplicitCustomTypeOperation() throws Exception {
-
-    Parameters param = new Parameters();
-    Patient patient = new Patient();
-    patient.addName().setFamily("FOO");
-    param.addParameter().setName("foo").setResource(patient);
-    final String respString = ourCtx.newXmlParser().encodeResourceToString(param);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Parameters resp = client
-        .operation()
-        .onServer()
-        .named("foo")
-        .withNoParameters(Parameters.class)
-        .preferResponseType(MyCustomPatient.class)
-        .execute();
-
-    assertEquals(1, resp.getParameter().size());
-    assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getParameter().get(0).getResource().getClass());
-    assertEquals("http://example.com/fhir/$foo", capt.getAllValues().get(0).getURI().toASCIIString());
-
-    resp = client
-        .operation()
-        .onType(MyCustomPatient.class)
-        .named("foo")
-        .withNoParameters(Parameters.class)
-        .execute();
-
-    assertEquals(1, resp.getParameter().size());
-    assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getParameter().get(0).getResource().getClass());
-    assertEquals("http://example.com/fhir/Patient/$foo", capt.getAllValues().get(1).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testExplicitCustomTypeSearch() throws Exception {
-    final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle resp = client
-        .search()
-        .forResource(CustomTypeR4Test.MyCustomPatient.class)
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals(1, resp.getEntry().size());
-    assertEquals(CustomTypeR4Test.MyCustomPatient.class, resp.getEntry().get(0).getResource().getClass());
-    assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(0).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testFetchCapabilityStatementReceiveCapabilityStatement() throws Exception {
-    final IParser p = ourCtx.newXmlParser();
-
-    final CapabilityStatement conf = new CapabilityStatement();
-    conf.setCopyright("COPY");
-
-    final Patient patient = new Patient();
-    patient.addName().setFamily("FAM");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      private int myCount = 0;
-
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        final String respString;
-        if (myCount == 1 || myCount == 2) {
-          ourLog.info("Encoding patient");
-          respString = p.encodeResourceToString(patient);
-        } else {
-          ourLog.info("Encoding conformance");
-          respString = p.encodeResourceToString(conf);
-        }
-        myCount++;
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.ONCE);
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://testForceConformanceCapabilityStatement.com/fhir");
-
-    client.read().resource("Patient").withId("1").execute();
-    assertEquals(2, capt.getAllValues().size());
-    assertEquals("http://testForceConformanceCapabilityStatement.com/fhir/metadata", capt.getAllValues().get(0).getURI().toASCIIString());
-    assertEquals("http://testForceConformanceCapabilityStatement.com/fhir/Patient/1", capt.getAllValues().get(1).getURI().toASCIIString());
-
-    client.read().resource("Patient").withId("1").execute();
-    assertEquals(3, capt.getAllValues().size());
-    assertEquals("http://testForceConformanceCapabilityStatement.com/fhir/Patient/1", capt.getAllValues().get(2).getURI().toASCIIString());
-
-    client.forceConformanceCheck();
-    assertEquals(4, capt.getAllValues().size());
-    assertEquals("http://testForceConformanceCapabilityStatement.com/fhir/metadata", capt.getAllValues().get(3).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testForceConformance() throws Exception {
-    final IParser p = ourCtx.newXmlParser();
-
-    final CapabilityStatement conf = new CapabilityStatement();
-    conf.setCopyright("COPY");
-
-    final Patient patient = new Patient();
-    patient.addName().setFamily("FAM");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        final String respString;
-        if (myAnswerCount >= 1) {
-          ourLog.info("Encoding patient");
-          respString = p.encodeResourceToString(patient);
-        } else {
-          ourLog.info("Encoding conformance");
-          respString = p.encodeResourceToString(conf);
-        }
-        myAnswerCount++;
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.ONCE);
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://testForceConformance.com/fhir");
-
-    client.read().resource("Patient").withId("1").execute();
-    assertEquals(2, capt.getAllValues().size());
-    assertEquals("http://testForceConformance.com/fhir/metadata", capt.getAllValues().get(0).getURI().toASCIIString());
-    assertEquals("http://testForceConformance.com/fhir/Patient/1", capt.getAllValues().get(1).getURI().toASCIIString());
-
-    client.read().resource("Patient").withId("1").execute();
-    assertEquals(3, capt.getAllValues().size());
-    assertEquals("http://testForceConformance.com/fhir/Patient/1", capt.getAllValues().get(2).getURI().toASCIIString());
-
-    myAnswerCount = 0;
-    client.forceConformanceCheck();
-    assertEquals(4, capt.getAllValues().size());
-    assertEquals("http://testForceConformance.com/fhir/metadata", capt.getAllValues().get(3).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testHttp499() throws Exception {
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 499, "Wacky Message"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
-      @Override
-      public StringInputStream answer(InvocationOnMock theInvocation) {
-        return new StringInputStream("HELLO", Charsets.UTF_8);
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    try {
-      client.read().resource(Patient.class).withId("1").execute();
-      fail();
-    } catch (UnclassifiedServerFailureException e) {
-      assertEquals("ca.uhn.fhir.rest.server.exceptions.UnclassifiedServerFailureException: HTTP 499 Wacky Message", e.toString());
-      assertEquals("HELLO", e.getResponseBody());
-    }
-
-  }
-
-  @Test
-  public void testHttp501() throws Exception {
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 501, "Not Implemented"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
-      @Override
-      public StringInputStream answer(InvocationOnMock theInvocation) {
-        return new StringInputStream("not implemented", Charsets.UTF_8);
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    try {
-      client.read().resource(Patient.class).withId("1").execute();
-      fail();
-    } catch (NotImplementedOperationException e) {
-      assertEquals("HTTP 501 Not Implemented", e.getMessage());
-    }
-
-  }
-
-  /**
-   * See #150
-   */
-  @Test
-  public void testNullAndEmptyParamValuesAreIgnored() throws Exception {
-    ArgumentCaptor<HttpUriRequest> capt = prepareClientForSearchResponse();
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client
-        .search()
-        .forResource(Patient.class)
-        .where(Patient.FAMILY.matches().value((String) null))
-        .and(Patient.BIRTHDATE.exactly().day((Date) null))
-        .and(Patient.GENDER.exactly().code(null))
-        .and(Patient.ORGANIZATION.hasId((String) null))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client
-        .search()
-        .forResource(Encounter.class)
-        .where(Encounter.LENGTH.exactly().number(null).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Encounter", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client
-        .search()
-        .forResource(Observation.class)
-        .where(Observation.VALUE_QUANTITY.exactly().number(null).andUnits(null))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Observation", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-  }
-
-  @Test
-  public void testPatchInvalid() {
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    try {
-      client
-          .patch()
-          .withBody("AA")
-          .withId("Patient/123")
-          .execute();
-    } catch (IllegalArgumentException e) {
-      assertEquals("Unable to determine encoding of patch", e.getMessage());
-    }
-  }
-
-  @Test
-  public void testPatchJsonByConditionalParam() throws Exception {
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-    final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
-
-    MethodOutcome outcome = client
-        .patch()
-        .withBody(patch)
-        .conditional("Patient").where(Patient.NAME.matches().value("TEST"))
-        .and(Patient.FAMILY.matches().value("TEST2"))
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name=TEST&family=TEST2", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
-    assertEquals(patch, extractBodyAsString(capt));
-    assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
-    idx++;
-
-    OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
-    assertThat(oo.getText().getDivAsString(), containsString("OK!"));
-  }
-
-  @Test
-  public void testPatchJsonByConditionalParamResourceType() throws Exception {
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-    final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
-
-    MethodOutcome outcome = client
-        .patch()
-        .withBody(patch)
-        .conditional(Patient.class).where(Patient.NAME.matches().value("TEST"))
-        .and(Patient.FAMILY.matches().value("TEST2"))
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name=TEST&family=TEST2", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
-    assertEquals(patch, extractBodyAsString(capt));
-    assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
-    idx++;
-
-    OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
-    assertThat(oo.getText().getDivAsString(), containsString("OK!"));
-  }
-
-  @Test
-  public void testPatchJsonByConditionalString() throws Exception {
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-    final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
-
-    MethodOutcome outcome = client
-        .patch()
-        .withBody(patch)
-        .conditionalByUrl("Patient?foo=bar")
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?foo=bar", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
-    assertEquals(patch, extractBodyAsString(capt));
-    assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
-    idx++;
-
-    OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
-    assertThat(oo.getText().getDivAsString(), containsString("OK!"));
-  }
-
-  @Test
-  public void testPatchJsonByIdString() throws Exception {
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-    final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
-
-    MethodOutcome outcome = client
-        .patch()
-        .withBody(patch)
-        .withId("Patient/123")
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
-    assertEquals(patch, extractBodyAsString(capt));
-    assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
-    idx++;
-
-    OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
-    assertThat(oo.getText().getDivAsString(), containsString("OK!"));
-  }
-
-  @Test
-  public void testPatchJsonByIdType() throws Exception {
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-    final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    String patch = "[ { \"op\":\"replace\", \"path\":\"/active\", \"value\":false } ]";
-
-    MethodOutcome outcome = client
-        .patch()
-        .withBody(patch)
-        .withId(new IdType("http://localhost/fhir/Patient/123/_history/234"))
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
-    assertEquals(patch, extractBodyAsString(capt));
-    assertEquals(Constants.CT_JSON_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
-    idx++;
-
-    OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
-    assertThat(oo.getText().getDivAsString(), containsString("OK!"));
-  }
-
-  @Test
-  public void testPatchXmlByIdString() throws Exception {
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-    final String respString = ourCtx.newJsonParser().encodeResourceToString(conf);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    String patch = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><diff xmlns:fhir=\"http://hl7.org/fhir\"><replace sel=\"fhir:Patient/fhir:active/@value\">false</replace></diff>";
-
-    MethodOutcome outcome = client
-        .patch()
-        .withBody(patch)
-        .withId("Patient/123")
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient/123", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("PATCH", capt.getAllValues().get(0).getRequestLine().getMethod());
-    assertEquals(patch, extractBodyAsString(capt));
-    assertEquals(Constants.CT_XML_PATCH, capt.getAllValues().get(idx).getFirstHeader("Content-Type").getValue().replaceAll(";.*", ""));
-    idx++;
-
-    OperationOutcome oo = (OperationOutcome) outcome.getOperationOutcome();
-    assertThat(oo.getText().getDivAsString(), containsString("OK!"));
-  }
-
-  @Test
-  public void testPutDoesntForceAllIdsJson() throws Exception {
-    IParser p = ourCtx.newJsonParser();
-
-    Patient patient = new Patient();
-    patient.setId("PATIENT1");
-    patient.addName().setFamily("PATIENT1");
-
-    Bundle bundle = new Bundle();
-    bundle.setId("BUNDLE1");
-    bundle.addEntry().setResource(patient);
-
-    final String encoded = p.encodeResourceToString(bundle);
-    assertEquals("{\"resourceType\":\"Bundle\",\"id\":\"BUNDLE1\",\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"PATIENT1\",\"name\":[{\"family\":\"PATIENT1\"}]}}]}", encoded);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON_NEW + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(encoded), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client
-        .update()
-        .resource(bundle)
-        .prefer(PreferReturnEnum.REPRESENTATION)
-        .encodedJson()
-        .execute();
-
-    HttpPut httpRequest = (HttpPut) capt.getValue();
-    assertEquals("http://example.com/fhir/Bundle/BUNDLE1", httpRequest.getURI().toASCIIString());
-
-    String requestString = IOUtils.toString(httpRequest.getEntity().getContent(), StandardCharsets.UTF_8);
-    assertEquals(encoded, requestString);
-  }
-
-  @Test
-  public void testPutDoesntForceAllIdsXml() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    Patient patient = new Patient();
-    patient.setId("PATIENT1");
-    patient.addName().setFamily("PATIENT1");
-
-    Bundle bundle = new Bundle();
-    bundle.setId("BUNDLE1");
-    bundle.addEntry().setResource(patient);
-
-    final String encoded = p.encodeResourceToString(bundle);
-    assertEquals(
-        "<Bundle xmlns=\"http://hl7.org/fhir\"><id value=\"BUNDLE1\"/><entry><resource><Patient xmlns=\"http://hl7.org/fhir\"><id value=\"PATIENT1\"/><name><family value=\"PATIENT1\"/></name></Patient></resource></entry></Bundle>",
-        encoded);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(encoded), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client
-        .update()
-        .resource(bundle)
-        .prefer(PreferReturnEnum.REPRESENTATION)
-        .execute();
-
-    HttpPut httpRequest = (HttpPut) capt.getValue();
-    assertEquals("http://example.com/fhir/Bundle/BUNDLE1", httpRequest.getURI().toASCIIString());
-
-    String requestString = IOUtils.toString(httpRequest.getEntity().getContent(), StandardCharsets.UTF_8);
-    assertEquals(encoded, requestString);
-  }
-
-  @Test
-  public void testReadWithUnparseableResponse() throws Exception {
-    String msg = "{\"resourceTypeeeee\":\"Patient\"}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    try {
-      client.read().resource("Patient").withId("123").elementsSubset("name", "identifier").execute();
-      fail();
-    } catch (FhirClientConnectionException e) {
-      assertEquals(
-          "Failed to parse response from server when performing GET to URL http://example.com/fhir/Patient/123?_elements=identifier%2Cname - ca.uhn.fhir.parser.DataFormatException: Invalid JSON content detected, missing required element: 'resourceType'",
-          e.getMessage());
-    }
-  }
-
-  @Test
-  public void testResponseHasContentTypeMissing() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-    Patient patient = new Patient();
-    patient.addName().setFamily("FAM");
-    final String respString = p.encodeResourceToString(patient);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    // when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(null);
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    try {
-      client.read().resource(Patient.class).withId("1").execute();
-      fail();
-    } catch (NonFhirResponseException e) {
-      assertEquals("Response contains no Content-Type", e.getMessage());
-    }
-
-    // Patient resp = client.read().resource(Patient.class).withId("1").execute();
-    // assertEquals("FAM", resp.getNameFirstRep().getFamilyAsSingleString());
-  }
-
-  @Test
-  public void testResponseHasContentTypeNonFhir() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-    Patient patient = new Patient();
-    patient.addName().setFamily("FAM");
-    final String respString = p.encodeResourceToString(patient);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", "text/plain"));
-    // when(myHttpResponse.getEntity().getContentType()).thenReturn(null);
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    try {
-      client.read().resource(Patient.class).withId("1").execute();
-      fail();
-    } catch (NonFhirResponseException e) {
-      assertEquals("Response contains non FHIR Content-Type 'text/plain' : <Patient xmlns=\"http://hl7.org/fhir\"><name><family value=\"FAM\"/></name></Patient>", e.getMessage());
-    }
-
-    // Patient resp = client.read().resource(Patient.class).withId("1").execute();
-    // assertEquals("FAM", resp.getNameFirstRep().getFamilyAsSingleString());
-  }
-
-  @Test
-  public void testRevIncludeRecursive() throws IOException {
-    ArgumentCaptor<HttpUriRequest> capt = prepareClientForSearchResponse();
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client.search()
-        .forResource(EpisodeOfCare.class)
-        .where(EpisodeOfCare.PATIENT.hasId("123"))
-        .revInclude(Encounter.INCLUDE_EPISODEOFCARE)
-        .revInclude(Observation.INCLUDE_ENCOUNTER.asRecursive())
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/EpisodeOfCare?patient=123&_revinclude=Encounter%3Aepisodeofcare&_revinclude%3Arecurse=Observation%3Aencounter",
-        capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-  }
-
-  @Test
-  public void testSearchByDate() throws Exception {
-    final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    DateTimeDt now = DateTimeDt.withCurrentTime();
-    String dateString = now.getValueAsString().substring(0, 10);
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.after().day(dateString))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=gt" + dateString, capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.after().day(now.getValue()))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=gt" + dateString, capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.afterOrEquals().day(dateString))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=ge" + dateString, capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.before().day(dateString))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=lt" + dateString, capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.beforeOrEquals().day(dateString))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=le" + dateString, capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.exactly().day(dateString))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=" + dateString, capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.after().second("2011-01-02T22:33:01Z"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=gt2011-01-02T22:33:01Z", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.after().second(now.getValueAsString()))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=gt" + now.getValueAsString(), UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.BIRTHDATE.after().now())
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertThat(capt.getAllValues().get(idx).getURI().toString(), startsWith("http://example.com/fhir/Patient?birthdate=gt2"));
-    dateString = UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()).substring(44);
-    ourLog.info(dateString);
-    assertEquals(TemporalPrecisionEnum.SECOND, new DateTimeDt(dateString).getPrecision());
-    idx++;
-  }
-
-  @SuppressWarnings("deprecation")
-  @Test
-  public void testSearchByQuantity() throws Exception {
-    final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.approximately().number(123).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Observation?value-quantity=ap123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.approximately().number("123").andUnits("CODE"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Observation?value-quantity=ap123||CODE", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.approximately().number("123").andUnits("SYSTEM", "CODE"))
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=ap123|SYSTEM|CODE", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.exactly().number(123).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.exactly().number("123").andUnits("CODE"))
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=123||CODE", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.exactly().number("123").andUnits("SYSTEM", "CODE"))
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=123|SYSTEM|CODE", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.greaterThan().number(123).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=gt123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.lessThan().number(123).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=lt123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.greaterThanOrEquals().number(123).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=ge123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.lessThanOrEquals().number(123).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=le123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Observation")
-        .where(Observation.VALUE_QUANTITY.withPrefix(ParamPrefixEnum.GREATERTHAN).number(123).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Observation?value-quantity=gt123||", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-  }
-
-  @Test
-  public void testSearchByString() throws Exception {
-    final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().value("AAA"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name=AAA", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().value(new StringDt("AAA")))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name=AAA", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().values("AAA", "BBB"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name=AAA,BBB", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().values(Arrays.asList("AAA", "BBB")))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name=AAA,BBB", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matchesExactly().value("AAA"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name%3Aexact=AAA", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matchesExactly().value(new StringDt("AAA")))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name%3Aexact=AAA", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matchesExactly().values("AAA", "BBB"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name:exact=AAA,BBB", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matchesExactly().values(Arrays.asList("AAA", "BBB")))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?name:exact=AAA,BBB", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-  }
-
-  @Test
-  public void testSearchByUrl() throws Exception {
-    final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client.search()
-        .forResource("Device")
-        .where(Device.URL.matches().value("http://foo.com"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Device?url=http://foo.com", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    assertEquals("http://example.com/fhir/Device?url=http%3A%2F%2Ffoo.com", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-
-    client.search()
-        .forResource("Device")
-        .where(Device.URL.matches().value(new StringDt("http://foo.com")))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Device?url=http://foo.com", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-  }
-
-  @Test
-  public void testSearchWithMap() throws Exception {
-    String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    HashMap<String, List<IQueryParameterType>> params = new HashMap<String, List<IQueryParameterType>>();
-    params.put("foo", Arrays.asList((IQueryParameterType) new DateParam("2001")));
-    Bundle response = client
-        .search()
-        .forResource(Patient.class)
-        .where(params)
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?foo=2001", capt.getValue().getURI().toString());
-    assertEquals(Patient.class, response.getEntry().get(0).getResource().getClass());
-
-  }
-
-  @Test
-  public void testSearchWithMultipleTokens() throws Exception {
-    ArgumentCaptor<HttpUriRequest> capt = prepareClientForSearchResponse();
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    Collection<String> values = Arrays.asList("VAL1", "VAL2", "VAL3A,B");
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.exactly().systemAndValues("SYS", values))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?identifier=SYS%7CVAL1%2CSYS%7CVAL2%2CSYS%7CVAL3A%5C%2CB", capt.getAllValues().get(idx).getURI().toString());
-    assertEquals("http://example.com/fhir/Patient?identifier=SYS|VAL1,SYS|VAL2,SYS|VAL3A\\,B", UrlUtil.unescape(capt.getAllValues().get(idx).getURI().toString()));
-    idx++;
-
-  }
-
-  @Test
-  public void testSearchWithNullParameters() throws Exception {
-    final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    DateTimeDt now = DateTimeDt.withCurrentTime();
-    String dateString = now.getValueAsString().substring(0, 10);
-
-    client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().value((String) null))
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(idx).getURI().toString());
-    idx++;
-  }
-
-  /**
-   * See #371
-   */
-  @Test
-  public void testSortR4Test() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    Bundle b = new Bundle();
-    b.setType(BundleType.SEARCHSET);
-
-    final String respString = p.encodeResourceToString(b);
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    client
-        .search()
-        .forResource(Patient.class)
-        .sort().ascending("address")
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient?_sort=address", capt.getAllValues().get(idx++).getURI().toASCIIString());
-
-    client
-        .search()
-        .forResource(Patient.class)
-        .sort().descending("address")
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient?_sort=-address", capt.getAllValues().get(idx++).getURI().toASCIIString());
-
-    client
-        .search()
-        .forResource(Patient.class)
-        .sort().descending("address")
-        .sort().ascending("name")
-        .sort().descending(Patient.BIRTHDATE)
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient?_sort=-address%2Cname%2C-birthdate", capt.getAllValues().get(idx++).getURI().toASCIIString());
-
-  }
-
-  @Test
-  public void testTransactionWithInvalidBody() {
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    // Transaction
-    try {
-      client.transaction().withBundle("FOO");
-      fail();
-    } catch (IllegalArgumentException e) {
-      assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage());
-    }
-
-    // Create
-    try {
-      client.create().resource("FOO").execute();
-      fail();
-    } catch (IllegalArgumentException e) {
-      assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage());
-    }
-
-    // Update
-    try {
-      client.update().resource("FOO").execute();
-      fail();
-    } catch (IllegalArgumentException e) {
-      assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage());
-    }
-
-    // Validate
-    try {
-      client.validate().resource("FOO").execute();
-      fail();
-    } catch (IllegalArgumentException e) {
-      assertEquals("Unable to determing encoding of request (body does not appear to be valid XML or JSON)", e.getMessage());
-    }
-
-  }
-
-  @Test
-  public void testUpdateById() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    OperationOutcome conf = new OperationOutcome();
-    conf.getText().setDivAsString("OK!");
-
-    final String respString = p.encodeResourceToString(conf);
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient pt = new Patient();
-    pt.setId("222");
-    pt.getText().setDivAsString("A PATIENT");
-
-    client.update().resource(pt).withId("111").execute();
-
-    ourLog.info(Arrays.asList(capt.getAllValues().get(0).getAllHeaders()).toString());
-
-    assertEquals("http://example.com/fhir/Patient/111", capt.getAllValues().get(0).getURI().toASCIIString());
-    validateUserAgent(capt);
-
-    assertEquals("application/fhir+xml;charset=utf-8", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue().toLowerCase().replace(" ", ""));
-    assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
-    String body = extractBodyAsString(capt);
-    assertThat(body, containsString("<id value=\"111\"/>"));
-  }
-
-  @Test
-  public void testUpdateWithPreferRepresentationServerReturnsOO() throws Exception {
-    final IParser p = ourCtx.newXmlParser();
-
-    final OperationOutcome resp0 = new OperationOutcome();
-    resp0.getText().setDivAsString("OK!");
-
-    final Patient resp1 = new Patient();
-    resp1.getText().setDivAsString("FINAL VALUE");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
-      @Override
-      public Header[] answer(InvocationOnMock theInvocation) {
-        return new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3") };
-      }
-    });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        if (myAnswerCount++ == 0) {
-          return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8"));
-        } else {
-          return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
-        }
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient pt = new Patient();
-    pt.setId("Patient/222");
-    pt.getText().setDivAsString("A PATIENT");
-
-    MethodOutcome outcome = client.update().resource(pt).prefer(PreferReturnEnum.REPRESENTATION).execute();
-
-    assertEquals(2, myAnswerCount);
-    assertNotNull(outcome.getOperationOutcome());
-    assertNotNull(outcome.getResource());
-
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", ((OperationOutcome) outcome.getOperationOutcome()).getText().getDivAsString());
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">FINAL VALUE</div>", ((Patient) outcome.getResource()).getText().getDivAsString());
-
-    assertEquals(myAnswerCount, capt.getAllValues().size());
-    assertEquals("http://example.com/fhir/Patient/222", capt.getAllValues().get(0).getURI().toASCIIString());
-    assertEquals("http://foo.com/base/Patient/222/_history/3", capt.getAllValues().get(1).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testUpdateWithPreferRepresentationServerReturnsResource() throws Exception {
-    final IParser p = ourCtx.newXmlParser();
-
-    final Patient resp1 = new Patient();
-    resp1.getText().setDivAsString("FINAL VALUE");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
-      @Override
-      public Header[] answer(InvocationOnMock theInvocation) {
-        return new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "http://foo.com/base/Patient/222/_history/3") };
-      }
-    });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        myAnswerCount++;
-        return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp1)), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient pt = new Patient();
-    pt.setId("Patient/222");
-    pt.getText().setDivAsString("A PATIENT");
-
-    MethodOutcome outcome = client.update().resource(pt).prefer(PreferReturnEnum.REPRESENTATION).execute();
-
-    assertEquals(1, myAnswerCount);
-    assertNull(outcome.getOperationOutcome());
-    assertNotNull(outcome.getResource());
-
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">FINAL VALUE</div>", ((Patient) outcome.getResource()).getText().getDivAsString());
-
-    assertEquals(myAnswerCount, capt.getAllValues().size());
-    assertEquals("http://example.com/fhir/Patient/222", capt.getAllValues().get(0).getURI().toASCIIString());
-  }
-
-  @Test
-  public void testUserAgentForBinary() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    CapabilityStatement conf = new CapabilityStatement();
-    conf.setCopyright("COPY");
-
-    final String respString = p.encodeResourceToString(conf);
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Binary bin = new Binary();
-    bin.setContentType("application/foo");
-    bin.setContent(new byte[] { 0, 1, 2, 3, 4 });
-    client.create().resource(bin).execute();
-
-    ourLog.info(Arrays.asList(capt.getAllValues().get(0).getAllHeaders()).toString());
-
-    assertEquals("http://example.com/fhir/Binary", capt.getAllValues().get(0).getURI().toASCIIString());
-    validateUserAgent(capt);
-
-    assertEquals("application/foo", capt.getAllValues().get(0).getHeaders("Content-Type")[0].getValue());
-    assertEquals(Constants.HEADER_ACCEPT_VALUE_XML_OR_JSON_NON_LEGACY, capt.getAllValues().get(0).getHeaders("Accept")[0].getValue());
-    assertArrayEquals(new byte[] { 0, 1, 2, 3, 4 }, extractBodyAsByteArray(capt));
-
-  }
-
-  @Test
-  public void testUserAgentForConformance() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    CapabilityStatement conf = new CapabilityStatement();
-    conf.setCopyright("COPY");
-
-    final String respString = p.encodeResourceToString(conf);
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    client.fetchConformance().ofType(CapabilityStatement.class).execute();
-    assertEquals("http://example.com/fhir/metadata", capt.getAllValues().get(0).getURI().toASCIIString());
-    validateUserAgent(capt);
-  }
-
-  @Test
-  public void testUserInfoInterceptor() throws Exception {
-    final String respString = CustomTypeR4Test.createBundle(CustomTypeR4Test.createResource(false));
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    client.registerInterceptor(new UserInfoInterceptor("user_id", "user_name", "app-name"));
-
-    Bundle resp = client
-        .history()
-        .onType(Patient.class)
-        .andReturnBundle(Bundle.class)
-        .execute();
-
-  }
-
-  @Test
-  public void testValidate() throws Exception {
-    final IParser p = ourCtx.newXmlParser();
-
-    final OperationOutcome resp0 = new OperationOutcome();
-    resp0.getText().setDivAsString("OK!");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenAnswer(new Answer<Header[]>() {
-      @Override
-      public Header[] answer(InvocationOnMock theInvocation) {
-        return new Header[] {};
-      }
-    });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(p.encodeResourceToString(resp0)), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient pt = new Patient();
-    pt.setId("Patient/222");
-    pt.getText().setDivAsString("A PATIENT");
-
-    MethodOutcome outcome = client.validate().resource(pt).execute();
-
-    assertNotNull(outcome.getOperationOutcome());
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", ((OperationOutcome) outcome.getOperationOutcome()).getText().getDivAsString());
-
-  }
-
-  @Test
-  public void testValidateCustomTypeFromClientRead() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    MyPatientWithExtensions patient = new MyPatientWithExtensions();
-    patient.setId("123");
-    patient.getText().setDivAsString("OK!");
-
-    final String respString = p.encodeResourceToString(patient);
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    MyPatientWithExtensions read = client.read().resource(MyPatientWithExtensions.class).withId(new IdType("1")).execute();
-    assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\">OK!</div>", read.getText().getDivAsString());
-
-    // Ensure that we haven't overridden the default type for the name
-    assertFalse(MyPatientWithExtensions.class.isAssignableFrom(Patient.class));
-    assertFalse(Patient.class.isAssignableFrom(MyPatientWithExtensions.class));
-    Patient pt = new Patient();
-    pt.getText().setDivAsString("A PATIENT");
-    IParser parser = ourCtx.newXmlParser();
-    String encoded = parser.encodeResourceToString(pt);
-    pt = (Patient) parser.parseResource(encoded);
-
-  }
-
-  @Test
-  public void testValidateCustomTypeFromClientSearch() throws Exception {
-    IParser p = ourCtx.newXmlParser();
-
-    Bundle b = new Bundle();
-
-    MyPatientWithExtensions patient = new MyPatientWithExtensions();
-    patient.setId("123");
-    patient.getText().setDivAsString("OK!");
-    b.addEntry().setResource(patient);
-
-    final String respString = p.encodeResourceToString(b);
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<ReaderInputStream>() {
-      @Override
-      public ReaderInputStream answer(InvocationOnMock theInvocation) {
-        return new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    Bundle bundle = client.search().forResource(MyPatientWithExtensions.class).returnBundle(Bundle.class).execute();
-
-    assertEquals(1, bundle.getEntry().size());
-    assertEquals(MyPatientWithExtensions.class, bundle.getEntry().get(0).getResource().getClass());
-  }
-
-  private List<Class<? extends IBaseResource>> toTypeList(Class<? extends IBaseResource> theClass) {
-    ArrayList<Class<? extends IBaseResource>> retVal = new ArrayList<Class<? extends IBaseResource>>();
-    retVal.add(theClass);
-    return retVal;
-  }
-
-  private void validateUserAgent(ArgumentCaptor<HttpUriRequest> capt) {
-    assertEquals(1, capt.getAllValues().get(0).getHeaders("User-Agent").length);
-    assertEquals(expectedUserAgent(), capt.getAllValues().get(0).getHeaders("User-Agent")[0].getValue());
-  }
-
-  @AfterClass
-  public static void afterClassClearContext() {
-    TestUtil.clearAllStaticFieldsForUnitTest();
-  }
-
-  @BeforeClass
-  public static void beforeClass() {
-    ourCtx = FhirContext.forR4();
-  }
-
 }
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/GenericClientTest.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/GenericClientTest.java
index edfd12cb03e..e69852ead58 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/GenericClientTest.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/GenericClientTest.java
@@ -13,6 +13,7 @@ import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
 import ca.uhn.fhir.util.BundleUtil;
 import ca.uhn.fhir.util.TestUtil;
 import ca.uhn.fhir.util.UrlUtil;
+import com.google.common.base.Charsets;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.ReaderInputStream;
 import org.apache.commons.lang3.StringUtils;
@@ -42,68 +43,70 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
 import java.nio.charset.Charset;
+import java.util.Arrays;
 
 import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.startsWith;
 import static org.junit.Assert.*;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 public class GenericClientTest {
 
-  private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(GenericClientTest.class);
-  private static FhirContext ourCtx;
-  private HttpClient myHttpClient;
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(GenericClientTest.class);
+	private static FhirContext ourCtx;
+	private HttpClient myHttpClient;
 
-  private HttpResponse myHttpResponse;
+	private HttpResponse myHttpResponse;
 
-  @Before
-  public void before() {
+	@Before
+	public void before() {
 
-    myHttpClient = mock(HttpClient.class, new ReturnsDeepStubs());
-    ourCtx.getRestfulClientFactory().setHttpClient(myHttpClient);
-    ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
+		myHttpClient = mock(HttpClient.class, new ReturnsDeepStubs());
+		ourCtx.getRestfulClientFactory().setHttpClient(myHttpClient);
+		ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
 
-    myHttpResponse = mock(HttpResponse.class, new ReturnsDeepStubs());
+		myHttpResponse = mock(HttpResponse.class, new ReturnsDeepStubs());
 
-    System.setProperty(BaseClient.HAPI_CLIENT_KEEPRESPONSES, "true");
-  }
+		System.setProperty(BaseClient.HAPI_CLIENT_KEEPRESPONSES, "true");
+	}
 
-  private Patient createPatientP1() {
-    Patient p1 = new Patient();
-    p1.addIdentifier().setSystem("foo:bar").setValue("12345");
-    p1.addName().setFamily("Smith").addGiven("John");
-    return p1;
-  }
+	private Patient createPatientP1() {
+		Patient p1 = new Patient();
+		p1.addIdentifier().setSystem("foo:bar").setValue("12345");
+		p1.addName().setFamily("Smith").addGiven("John");
+		return p1;
+	}
 
-  private Bundle createTransactionBundleInput() {
-    Bundle input = new Bundle();
-    input.setType(BundleType.TRANSACTION);
-    input
-        .addEntry()
-        .setResource(createPatientP1())
-        .getRequest()
-        .setMethod(HTTPVerb.POST);
-    return input;
-  }
+	private Bundle createTransactionBundleInput() {
+		Bundle input = new Bundle();
+		input.setType(BundleType.TRANSACTION);
+		input
+			.addEntry()
+			.setResource(createPatientP1())
+			.getRequest()
+			.setMethod(HTTPVerb.POST);
+		return input;
+	}
 
-  private Bundle createTransactionBundleOutput() {
-    Bundle output = new Bundle();
-    output.setType(BundleType.TRANSACTIONRESPONSE);
-    output
-        .addEntry()
-        .setResource(createPatientP1())
-        .getResponse()
-        .setLocation(createPatientP1().getId());
-    return output;
-  }
+	private Bundle createTransactionBundleOutput() {
+		Bundle output = new Bundle();
+		output.setType(BundleType.TRANSACTIONRESPONSE);
+		output
+			.addEntry()
+			.setResource(createPatientP1())
+			.getResponse()
+			.setLocation(createPatientP1().getId());
+		return output;
+	}
 
-  private String extractBody(ArgumentCaptor<HttpUriRequest> capt, int count) throws IOException {
-    String body = IOUtils.toString(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(count)).getEntity().getContent(), "UTF-8");
-    return body;
-  }
+	private String extractBody(ArgumentCaptor<HttpUriRequest> capt, int count) throws IOException {
+		String body = IOUtils.toString(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(count)).getEntity().getContent(), "UTF-8");
+		return body;
+	}
 
-  private String getPatientFeedWithOneResult() {
-    return ClientR4Test.getPatientFeedWithOneResult(ourCtx);
+	private String getPatientFeedWithOneResult() {
+		return ClientR4Test.getPatientFeedWithOneResult(ourCtx);
 //		//@formatter:off
 //		String msg = "<feed xmlns=\"http://www.w3.org/2005/Atom\">\n" +
 //				"<title/>\n" +
@@ -127,13 +130,13 @@ public class GenericClientTest {
 //				+ "   </entry>\n"
 //				+ "</feed>";
 //		//@formatter:on
-    // return msg;
-  }
+		// return msg;
+	}
 
-  private String getResourceResult() {
-    //@formatter:off
+	private String getResourceResult() {
+		//@formatter:off
 		String msg =
-				"<Patient xmlns=\"http://hl7.org/fhir\">"
+			"<Patient xmlns=\"http://hl7.org/fhir\">"
 				+ "<text><status value=\"generated\" /><div xmlns=\"http://www.w3.org/1999/xhtml\">John Cardinal:            444333333        </div></text>"
 				+ "<identifier><label value=\"SSN\" /><system value=\"http://orionhealth.com/mrn\" /><value value=\"PRP1660\" /></identifier>"
 				+ "<name><use value=\"official\" /><family value=\"Cardinal\" /><given value=\"John\" /></name>"
@@ -143,8 +146,8 @@ public class GenericClientTest {
 				+ "<address><use value=\"home\" /><line value=\"2222 Home Street\" /></address><active value=\"true\" />"
 				+ "</Patient>";
 		//@formatter:on
-    return msg;
-  }
+		return msg;
+	}
 
 	@SuppressWarnings("unused")
 	@Test
@@ -221,1478 +224,1552 @@ public class GenericClientTest {
 		assertEquals("no-cache, no-store", capt.getValue().getHeaders("Cache-Control")[0].getValue());
 	}
 
-  @Test
-  public void testCreatePopulatesIsCreated() throws Exception {
+	@Test
+	public void testCreatePopulatesIsCreated() throws Exception {
 
-    Patient p1 = createPatientP1();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-    MethodOutcome resp = client.create().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).execute();
-    assertTrue(resp.getCreated());
-
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    resp = client.create().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).execute();
-    assertNull(resp.getCreated());
-
-    ourLog.info("lastRequest: {}", ((GenericClient) client).getLastRequest());
-    ourLog.info("lastResponse: {}", ((GenericClient) client).getLastResponse());
-    ourLog.info("lastResponseBody: {}", ((GenericClient) client).getLastResponseBody());
-  }
-
-  @Test
-  public void testCreateWithStringAutoDetectsEncoding() throws Exception {
-
-    Patient p1 = createPatientP1();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    int count = 0;
-    client.create().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).execute();
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("value=\"John\""));
-    count++;
-
-    String resourceAsString = ourCtx.newJsonParser().encodeResourceToString(p1);
-    client
-        .create()
-        .resource(resourceAsString)
-        .execute();
-
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.JSON.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("[\"John\"]"));
-    count++;
-
-    /*
-     * e.g. Now try with reversed encoding (provide a string that's in JSON and ask the client to use XML)
-     */
-
-    client.create().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).encodedJson().execute();
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.JSON.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("[\"John\"]"));
-    count++;
-
-    client.create().resource(ourCtx.newJsonParser().encodeResourceToString(p1)).encodedXml().execute();
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("value=\"John\""));
-    count++;
-
-  }
-
-  @Test
-  public void testCreateWithTag() throws Exception {
-
-    Patient p1 = createPatientP1();
-    p1.getMeta().addTag("http://hl7.org/fhir/tag", "urn:happytag", "This is a happy resource");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    MethodOutcome outcome = client.create().resource(p1).execute();
-    assertEquals("44", outcome.getId().getIdPart());
-    assertEquals("22", outcome.getId().getVersionIdPart());
-
-    int count = 0;
-
-    assertEquals("http://example.com/fhir/Patient", capt.getValue().getURI().toString());
-    assertEquals("POST", capt.getValue().getMethod());
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    count++;
-
-    /*
-     * Try fluent options
-     */
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-    client.create().resource(p1).execute();
-    assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(1).getURI().toString());
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    count++;
-
-    String resourceText = "<Patient xmlns=\"http://hl7.org/fhir\">    </Patient>";
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-    client.create().resource(resourceText).execute();
-    assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(2).getURI().toString());
-    assertEquals(resourceText, IOUtils.toString(((HttpPost) capt.getAllValues().get(2)).getEntity().getContent()));
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    count++;
-  }
-
-  @Test
-  public void testCreateWithTagNonFluent() throws Exception {
-
-    Patient p1 = createPatientP1();
-    p1.getMeta().addTag("http://hl7.org/fhir/tag", "urn:happytag", "This is a happy resource");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    MethodOutcome outcome = client.create().resource(p1).execute();
-    assertEquals("44", outcome.getId().getIdPart());
-    assertEquals("22", outcome.getId().getVersionIdPart());
-
-    assertEquals("http://example.com/fhir/Patient", capt.getValue().getURI().toString());
-    assertEquals("POST", capt.getValue().getMethod());
-    Header catH = capt.getValue().getFirstHeader("Category");
-    assertNull(catH);
-  }
-
-  /**
-   * Test for issue #60
-   */
-  @Test
-  public void testCreateWithUtf8Characters() throws Exception {
-    String name = "測試醫院";
-    Organization org = new Organization();
-    org.setName(name);
-    org.addIdentifier().setSystem("urn:system").setValue("testCreateWithUtf8Characters_01");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    int count = 0;
-    client.create().resource(org).prettyPrint().encodedXml().execute();
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("<name value=\"測試醫院\"/>"));
-    count++;
-
-  }
-
-  @Test
-  public void testDelete() throws Exception {
-    OperationOutcome oo = new OperationOutcome();
-    oo.addIssue().addLocation("testDelete01");
-    String ooStr = ourCtx.newXmlParser().encodeResourceToString(oo);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(ooStr), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    OperationOutcome outcome = (OperationOutcome) client.delete().resourceById("Patient", "123").execute();
-
-    assertEquals("http://example.com/fhir/Patient/123", capt.getValue().getURI().toString());
-    assertEquals("DELETE", capt.getValue().getMethod());
-    assertEquals("testDelete01", outcome.getIssueFirstRep().getLocation().get(0).getValue());
-
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader("LKJHLKJGLKJKLL"), Charset.forName("UTF-8")));
-    outcome = (OperationOutcome) client.delete().resourceById(new IdType("Location", "123", "456")).prettyPrint().encodedJson().execute();
-
-    assertEquals("http://example.com/fhir/Location/123?_pretty=true", capt.getAllValues().get(1).getURI().toString());
-    assertEquals("DELETE", capt.getValue().getMethod());
-    assertEquals(null, outcome);
-
-  }
-
-  @Test
-  public void testHistory() throws Exception {
-
-    final String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    int idx = 0;
-    Bundle response;
-
-    response = client
-        .history()
-        .onServer()
-        .andReturnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/_history", capt.getAllValues().get(idx).getURI().toString());
-    assertEquals(1, response.getEntry().size());
-    idx++;
-
-    response = client
-        .history()
-        .onType(Patient.class)
-        .andReturnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient/_history", capt.getAllValues().get(idx).getURI().toString());
-    assertEquals(1, response.getEntry().size());
-    idx++;
-
-    response = client
-        .history()
-        .onInstance(new IdType("Patient", "123"))
-        .andReturnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient/123/_history", capt.getAllValues().get(idx).getURI().toString());
-    assertEquals(1, response.getEntry().size());
-    idx++;
-  }
-
-  @Test
-  @Ignore
-  public void testInvalidCalls() {
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    try {
-      client.meta();
-      fail();
-    } catch (IllegalStateException e) {
-      assertEquals("Can not call $meta operations on a DSTU1 client", e.getMessage());
-    }
-    try {
-      client.operation();
-      fail();
-    } catch (IllegalStateException e) {
-      assertEquals("Operations are only supported in FHIR DSTU2 and later. This client was created using a context configured for DSTU1", e.getMessage());
-    }
-  }
-
-  @Test
-  public void testLoadPageAndReturnDstu1Bundle() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
-    client
-        .loadPage()
-        .byUrl("http://example.com/page1")
-        .andReturnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/page1", capt.getValue().getURI().toString());
-  }
-
-  @Test
-  public void testMissing() throws Exception {
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
-        return (new ReaderInputStream(new StringReader(getPatientFeedWithOneResult()), Charset.forName("UTF-8")));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-
-    client.search().forResource("Patient").where(Patient.NAME.isMissing(true)).returnBundle(Bundle.class).execute();
-    assertEquals("http://example.com/fhir/Patient?name%3Amissing=true", capt.getValue().getRequestLine().getUri());
-
-    client.search().forResource("Patient").where(Patient.NAME.isMissing(false)).returnBundle(Bundle.class).execute();
-    assertEquals("http://example.com/fhir/Patient?name%3Amissing=false", capt.getValue().getRequestLine().getUri());
-  }
-
-  @Test
-  public void testRead() throws Exception {
-
-    String msg = getResourceResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    Header[] headers = new Header[] {
-        new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08 GMT"),
-        new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
-    };
-    when(myHttpResponse.getAllHeaders()).thenReturn(headers);
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient response = client
-        .read()
-        .resource(Patient.class)
-        .withId(new IdType("Patient/1234"))
-        .execute();
-
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-
-    assertEquals("http://foo.com/Patient/123/_history/2333", response.getIdElement().getValue());
-
-    InstantType lm = response.getMeta().getLastUpdatedElement();
-    lm.setTimeZoneZulu(true);
-    assertEquals("1995-11-15T04:58:08.000Z", lm.getValueAsString());
-
-  }
-
-  @Test
-  public void testReadFluent() throws Exception {
-
-    String msg = getResourceResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    Header[] headers = new Header[] {
-        new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08 GMT"),
-        new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
-    };
-    when(myHttpResponse.getAllHeaders()).thenReturn(headers);
+		Patient p1 = createPatientP1();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+		MethodOutcome resp = client.create().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).execute();
+		assertTrue(resp.getCreated());
+
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		resp = client.create().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).execute();
+		assertNull(resp.getCreated());
+
+		ourLog.info("lastRequest: {}", ((GenericClient) client).getLastRequest());
+		ourLog.info("lastResponse: {}", ((GenericClient) client).getLastResponse());
+		ourLog.info("lastResponseBody: {}", ((GenericClient) client).getLastResponseBody());
+	}
+
+	@Test
+	public void testCreateWithStringAutoDetectsEncoding() throws Exception {
+
+		Patient p1 = createPatientP1();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		int count = 0;
+		client.create().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).execute();
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("value=\"John\""));
+		count++;
+
+		String resourceAsString = ourCtx.newJsonParser().encodeResourceToString(p1);
+		client
+			.create()
+			.resource(resourceAsString)
+			.execute();
+
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.JSON.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("[\"John\"]"));
+		count++;
+
+		/*
+		 * e.g. Now try with reversed encoding (provide a string that's in JSON and ask the client to use XML)
+		 */
+
+		client.create().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).encodedJson().execute();
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.JSON.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("[\"John\"]"));
+		count++;
+
+		client.create().resource(ourCtx.newJsonParser().encodeResourceToString(p1)).encodedXml().execute();
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("value=\"John\""));
+		count++;
+
+	}
+
+	@Test
+	public void testCreateWithTag() throws Exception {
+
+		Patient p1 = createPatientP1();
+		p1.getMeta().addTag("http://hl7.org/fhir/tag", "urn:happytag", "This is a happy resource");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		MethodOutcome outcome = client.create().resource(p1).execute();
+		assertEquals("44", outcome.getId().getIdPart());
+		assertEquals("22", outcome.getId().getVersionIdPart());
+
+		int count = 0;
+
+		assertEquals("http://example.com/fhir/Patient", capt.getValue().getURI().toString());
+		assertEquals("POST", capt.getValue().getMethod());
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		count++;
+
+		/*
+		 * Try fluent options
+		 */
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+		client.create().resource(p1).execute();
+		assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(1).getURI().toString());
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		count++;
+
+		String resourceText = "<Patient xmlns=\"http://hl7.org/fhir\">    </Patient>";
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+		client.create().resource(resourceText).execute();
+		assertEquals("http://example.com/fhir/Patient", capt.getAllValues().get(2).getURI().toString());
+		assertEquals(resourceText, IOUtils.toString(((HttpPost) capt.getAllValues().get(2)).getEntity().getContent()));
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		count++;
+	}
+
+	@Test
+	public void testCreateWithTagNonFluent() throws Exception {
+
+		Patient p1 = createPatientP1();
+		p1.getMeta().addTag("http://hl7.org/fhir/tag", "urn:happytag", "This is a happy resource");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		MethodOutcome outcome = client.create().resource(p1).execute();
+		assertEquals("44", outcome.getId().getIdPart());
+		assertEquals("22", outcome.getId().getVersionIdPart());
+
+		assertEquals("http://example.com/fhir/Patient", capt.getValue().getURI().toString());
+		assertEquals("POST", capt.getValue().getMethod());
+		Header catH = capt.getValue().getFirstHeader("Category");
+		assertNull(catH);
+	}
+
+	/**
+	 * Test for issue #60
+	 */
+	@Test
+	public void testCreateWithUtf8Characters() throws Exception {
+		String name = "測試醫院";
+		Organization org = new Organization();
+		org.setName(name);
+		org.addIdentifier().setSystem("urn:system").setValue("testCreateWithUtf8Characters_01");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		int count = 0;
+		client.create().resource(org).prettyPrint().encodedXml().execute();
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("<name value=\"測試醫院\"/>"));
+		count++;
+
+	}
+
+	@Test
+	public void testDelete() throws Exception {
+		OperationOutcome oo = new OperationOutcome();
+		oo.addIssue().addLocation("testDelete01");
+		String ooStr = ourCtx.newXmlParser().encodeResourceToString(oo);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(ooStr), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		OperationOutcome outcome = (OperationOutcome) client.delete().resourceById("Patient", "123").execute();
+
+		assertEquals("http://example.com/fhir/Patient/123", capt.getValue().getURI().toString());
+		assertEquals("DELETE", capt.getValue().getMethod());
+		assertEquals("testDelete01", outcome.getIssueFirstRep().getLocation().get(0).getValue());
+
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader("LKJHLKJGLKJKLL"), Charset.forName("UTF-8")));
+		outcome = (OperationOutcome) client.delete().resourceById(new IdType("Location", "123", "456")).prettyPrint().encodedJson().execute();
+
+		assertEquals("http://example.com/fhir/Location/123?_pretty=true", capt.getAllValues().get(1).getURI().toString());
+		assertEquals("DELETE", capt.getValue().getMethod());
+		assertEquals(null, outcome);
+
+	}
+
+	@Test
+	public void testHistory() throws Exception {
+
+		final String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		int idx = 0;
+		Bundle response;
+
+		response = client
+			.history()
+			.onServer()
+			.andReturnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/_history", capt.getAllValues().get(idx).getURI().toString());
+		assertEquals(1, response.getEntry().size());
+		idx++;
+
+		response = client
+			.history()
+			.onType(Patient.class)
+			.andReturnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient/_history", capt.getAllValues().get(idx).getURI().toString());
+		assertEquals(1, response.getEntry().size());
+		idx++;
+
+		response = client
+			.history()
+			.onInstance(new IdType("Patient", "123"))
+			.andReturnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient/123/_history", capt.getAllValues().get(idx).getURI().toString());
+		assertEquals(1, response.getEntry().size());
+		idx++;
+	}
+
+	@Test
+	@Ignore
+	public void testInvalidCalls() {
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		try {
+			client.meta();
+			fail();
+		} catch (IllegalStateException e) {
+			assertEquals("Can not call $meta operations on a DSTU1 client", e.getMessage());
+		}
+		try {
+			client.operation();
+			fail();
+		} catch (IllegalStateException e) {
+			assertEquals("Operations are only supported in FHIR DSTU2 and later. This client was created using a context configured for DSTU1", e.getMessage());
+		}
+	}
+
+	@Test
+	public void testLoadPageAndReturnDstu1Bundle() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
+		client
+			.loadPage()
+			.byUrl("http://example.com/page1")
+			.andReturnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/page1", capt.getValue().getURI().toString());
+	}
+
+	@Test
+	public void testMissing() throws Exception {
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
+				return (new ReaderInputStream(new StringReader(getPatientFeedWithOneResult()), Charset.forName("UTF-8")));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+
+		client.search().forResource("Patient").where(Patient.NAME.isMissing(true)).returnBundle(Bundle.class).execute();
+		assertEquals("http://example.com/fhir/Patient?name%3Amissing=true", capt.getValue().getRequestLine().getUri());
+
+		client.search().forResource("Patient").where(Patient.NAME.isMissing(false)).returnBundle(Bundle.class).execute();
+		assertEquals("http://example.com/fhir/Patient?name%3Amissing=false", capt.getValue().getRequestLine().getUri());
+	}
+
+	@Test
+	public void testProcessMessage() throws IOException {
+		Bundle respBundle = new Bundle();
+		respBundle.setType(BundleType.MESSAGE);
+		String respString = ourCtx.newJsonParser().encodeResourceToString(respBundle);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(respString), Charset.forName("UTF-8")));
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[0]);
+
+		Bundle bundle = new Bundle();
+		bundle.setType(BundleType.MESSAGE);
+
+		Parameters parameters = new Parameters();
+		parameters.addParameter()
+			.setName("content")
+			.setResource(bundle);
+
+		int count = 0;
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		client.operation().onType(MessageHeader.class).named("$process-message").withParameters(parameters).execute();
+
+		assertEquals("http://example.com/fhir/MessageHeader/$process-message", capt.getAllValues().get(count).getURI().toString());
+		String requestContent = IOUtils.toString(((HttpPost) capt.getAllValues().get(count)).getEntity().getContent(), Charsets.UTF_8);
+		assertThat(requestContent, startsWith("<Parameters xmlns=\"http://hl7.org/fhir\">"));
+		count++;
+	}
+
+	@Test
+	public void testRead() throws Exception {
+
+		String msg = getResourceResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		Header[] headers = new Header[] {
+			new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08 GMT"),
+			new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
+		};
+		when(myHttpResponse.getAllHeaders()).thenReturn(headers);
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient response = client
+			.read()
+			.resource(Patient.class)
+			.withId(new IdType("Patient/1234"))
+			.execute();
+
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+
+		assertEquals("http://foo.com/Patient/123/_history/2333", response.getIdElement().getValue());
+
+		InstantType lm = response.getMeta().getLastUpdatedElement();
+		lm.setTimeZoneZulu(true);
+		assertEquals("1995-11-15T04:58:08.000Z", lm.getValueAsString());
+
+	}
+
+	@Test
+	public void testReadFluent() throws Exception {
+
+		String msg = getResourceResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		Header[] headers = new Header[] {
+			new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08 GMT"),
+			new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
+		};
+		when(myHttpResponse.getAllHeaders()).thenReturn(headers);
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		int count = 0;
+
+		Patient response = client.read().resource(Patient.class).withId(new IdType("Patient/1234")).execute();
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+		assertEquals("http://example.com/fhir/Patient/1234", capt.getAllValues().get(count++).getURI().toString());
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = (Patient) client.read().resource("Patient").withId("1234").execute();
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+		assertEquals("http://example.com/fhir/Patient/1234", capt.getAllValues().get(count++).getURI().toString());
+
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = (Patient) client.read().resource("Patient").withId(567L).execute();
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+		assertEquals("http://example.com/fhir/Patient/567", capt.getAllValues().get(count++).getURI().toString());
+
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = client.read().resource(Patient.class).withIdAndVersion("1234", "22").execute();
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+		assertEquals("http://example.com/fhir/Patient/1234/_history/22", capt.getAllValues().get(count++).getURI().toString());
+
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = client.read().resource(Patient.class).withUrl("http://foo/Patient/22").execute();
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+		assertEquals("http://foo/Patient/22", capt.getAllValues().get(count++).getURI().toString());
 
-    int count = 0;
+	}
 
-    Patient response = client.read().resource(Patient.class).withId(new IdType("Patient/1234")).execute();
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-    assertEquals("http://example.com/fhir/Patient/1234", capt.getAllValues().get(count++).getURI().toString());
+	@Test
+	public void testReadWithAbsoluteUrl() throws Exception {
 
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    response = (Patient) client.read().resource("Patient").withId("1234").execute();
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-    assertEquals("http://example.com/fhir/Patient/1234", capt.getAllValues().get(count++).getURI().toString());
+		String msg = getResourceResult();
 
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    response = (Patient) client.read().resource("Patient").withId(567L).execute();
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-    assertEquals("http://example.com/fhir/Patient/567", capt.getAllValues().get(count++).getURI().toString());
-
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    response = client.read().resource(Patient.class).withIdAndVersion("1234", "22").execute();
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-    assertEquals("http://example.com/fhir/Patient/1234/_history/22", capt.getAllValues().get(count++).getURI().toString());
-
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    response = client.read().resource(Patient.class).withUrl("http://foo/Patient/22").execute();
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-    assertEquals("http://foo/Patient/22", capt.getAllValues().get(count++).getURI().toString());
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		Header[] headers = new Header[] {new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08 GMT"),
+			new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
+		};
+		when(myHttpResponse.getAllHeaders()).thenReturn(headers);
 
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  @Test
-  public void testReadWithAbsoluteUrl() throws Exception {
+		Patient response = client
+			.read()
+			.resource(Patient.class)
+			.withUrl(new IdType("http://somebase.com/path/to/base/Patient/1234"))
+			.execute();
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+		assertEquals("http://somebase.com/path/to/base/Patient/1234", capt.getAllValues().get(0).getURI().toString());
 
-    String msg = getResourceResult();
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = client
+			.read()
+			.resource(Patient.class)
+			.withUrl(new IdType("http://somebase.com/path/to/base/Patient/1234/_history/222"))
+			.execute();
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+		assertEquals("http://somebase.com/path/to/base/Patient/1234/_history/222", capt.getAllValues().get(1).getURI().toString());
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    Header[] headers = new Header[] { new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08 GMT"),
-        new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
-    };
-    when(myHttpResponse.getAllHeaders()).thenReturn(headers);
+	}
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchAllResources() throws Exception {
 
-    Patient response = client
-        .read()
-        .resource(Patient.class)
-        .withUrl(new IdType("http://somebase.com/path/to/base/Patient/1234"))
-        .execute();
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-    assertEquals("http://somebase.com/path/to/base/Patient/1234", capt.getAllValues().get(0).getURI().toString());
+		String msg = getPatientFeedWithOneResult();
 
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    response = client
-        .read()
-        .resource(Patient.class)
-        .withUrl(new IdType("http://somebase.com/path/to/base/Patient/1234/_history/222"))
-        .execute();
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-    assertEquals("http://somebase.com/path/to/base/Patient/1234/_history/222", capt.getAllValues().get(1).getURI().toString());
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchAllResources() throws Exception {
+		Bundle response = client.search()
+			.forAllResources()
+			.where(Patient.NAME.matches().value("james"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/?name=james", capt.getValue().getURI().toString());
+
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchAutomaticallyUsesPost() throws Exception {
 
-    String msg = getPatientFeedWithOneResult();
+		String msg = getPatientFeedWithOneResult();
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		String longValue = StringUtils.leftPad("", 20000, 'B');
+
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().value(longValue))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient/_search", capt.getValue().getURI().toString());
+
+		HttpEntityEnclosingRequestBase enc = (HttpEntityEnclosingRequestBase) capt.getValue();
+		UrlEncodedFormEntity ent = (UrlEncodedFormEntity) enc.getEntity();
+		String string = IOUtils.toString(ent.getContent());
+		ourLog.info(string);
+		assertEquals("name=" + longValue, string);
+	}
+
+	@Test
+	public void testSearchByCompartment() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
+		Bundle response = client
+			.search()
+			.forResource(Patient.class)
+			.withIdAndCompartment("123", "fooCompartment")
+			.where(Patient.BIRTHDATE.afterOrEquals().day("2011-01-02"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://foo/Patient/123/fooCompartment?birthdate=ge2011-01-02", capt.getValue().getURI().toString());
+
+		ourLog.info(ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(response));
+
+		assertEquals("PRP1660", BundleUtil.toListOfResourcesOfType(ourCtx, response, Patient.class).get(0).getIdentifier().get(0).getValue());
+
+		try {
+			client
+				.search()
+				.forResource(Patient.class)
+				.withIdAndCompartment("", "fooCompartment")
+				.where(Patient.BIRTHDATE.afterOrEquals().day("2011-01-02"))
+				.returnBundle(Bundle.class)
+				.execute();
+			fail();
+		} catch (InvalidRequestException e) {
+			assertThat(e.toString(), containsString("null or empty for compartment"));
+		}
+
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByComposite() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
+
+		Bundle response = client.search()
+			.forResource("Observation")
+			.where(Observation.CODE_VALUE_DATE
+				.withLeft(Observation.CODE.exactly().code("FOO$BAR"))
+				.withRight(Observation.VALUE_DATE.exactly().day("2001-01-01")))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://foo/Observation?" + Observation.SP_CODE_VALUE_DATE + "=" + UrlUtil.escapeUrlParam("FOO\\$BAR$2001-01-01"), capt.getValue().getURI().toString());
+
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByDate() throws Exception {
+
+		final String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		@SuppressWarnings("deprecation")
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.encodedJson()
+			.where(Patient.BIRTHDATE.beforeOrEquals().day("2012-01-22"))
+			.and(Patient.BIRTHDATE.after().day("2011-01-01"))
+			.include(Patient.INCLUDE_ORGANIZATION)
+			.sort().ascending(Patient.BIRTHDATE)
+			.sort().descending(Patient.NAME)
+			.sort().defaultOrder(Patient.ADDRESS)
+			.count(123)
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=le2012-01-22&birthdate=gt2011-01-01&_include=Patient%3Aorganization&_sort=birthdate%2C-name%2Caddress&_count=123&_format=json",
+			capt.getAllValues().get(idx++).getURI().toString());
+
+		response = client.search()
+			.forResource(Patient.class)
+			.encodedJson()
+			.where(Patient.BIRTHDATE.beforeOrEquals().day("2012-01-22"))
+			.and(Patient.BIRTHDATE.after().day("2011-01-01"))
+			.include(Patient.INCLUDE_ORGANIZATION)
+			.sort().ascending(Patient.BIRTHDATE)
+			.sort().descending(Patient.NAME)
+			.sort().defaultOrder(Patient.ADDRESS)
+			.count(123)
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?birthdate=le2012-01-22&birthdate=gt2011-01-01&_include=Patient%3Aorganization&_sort=birthdate%2C-name%2Caddress&_count=123&_format=json",
+			capt.getAllValues().get(idx++).getURI().toString());
+
+		response = client.search()
+			.forResource(Patient.class)
+			.encodedJson()
+			.where(Patient.BIRTHDATE.beforeOrEquals().day("2012-01-22").orAfter().day("2020-01-01"))
+			.and(Patient.BIRTHDATE.after().day("2011-01-01"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		String comma = "%2C";
+		assertEquals("http://example.com/fhir/Patient?birthdate=le2012-01-22" + comma + "gt2020-01-01&birthdate=gt2011-01-01&_format=json", capt.getAllValues().get(idx++).getURI().toString());
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByNumberExact() throws Exception {
+
+		String msg = ourCtx.newXmlParser().encodeResourceToString(new Bundle());
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource(Observation.class)
+			.where(Observation.VALUE_QUANTITY.greaterThan().number(123).andUnits("foo", "bar"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Observation?value-quantity=gt123%7Cfoo%7Cbar", capt.getValue().getURI().toString());
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByProfile() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.withProfile("http://1")
+			.withProfile("http://2")
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?_profile=http%3A%2F%2F1&_profile=http%3A%2F%2F2", capt.getValue().getURI().toString());
+
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByQuantity() throws Exception {
 
-    Bundle response = client.search()
-        .forAllResources()
-        .where(Patient.NAME.matches().value("james"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/?name=james", capt.getValue().getURI().toString());
-
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchAutomaticallyUsesPost() throws Exception {
+		String msg = getPatientFeedWithOneResult();
 
-    String msg = getPatientFeedWithOneResult();
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    String longValue = StringUtils.leftPad("", 20000, 'B');
-
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().value(longValue))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient/_search", capt.getValue().getURI().toString());
-
-    HttpEntityEnclosingRequestBase enc = (HttpEntityEnclosingRequestBase) capt.getValue();
-    UrlEncodedFormEntity ent = (UrlEncodedFormEntity) enc.getEntity();
-    String string = IOUtils.toString(ent.getContent());
-    ourLog.info(string);
-    assertEquals("name=" + longValue, string);
-  }
-
-  @Test
-  public void testSearchByCompartment() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
-    Bundle response = client
-        .search()
-        .forResource(Patient.class)
-        .withIdAndCompartment("123", "fooCompartment")
-        .where(Patient.BIRTHDATE.afterOrEquals().day("2011-01-02"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://foo/Patient/123/fooCompartment?birthdate=ge2011-01-02", capt.getValue().getURI().toString());
-
-    ourLog.info(ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(response));
-
-    assertEquals("PRP1660", BundleUtil.toListOfResourcesOfType(ourCtx, response, Patient.class).get(0).getIdentifier().get(0).getValue());
-
-    try {
-      client
-          .search()
-          .forResource(Patient.class)
-          .withIdAndCompartment("", "fooCompartment")
-          .where(Patient.BIRTHDATE.afterOrEquals().day("2011-01-02"))
-          .returnBundle(Bundle.class)
-          .execute();
-      fail();
-    } catch (InvalidRequestException e) {
-      assertThat(e.toString(), containsString("null or empty for compartment"));
-    }
-
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByComposite() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
-
-    Bundle response = client.search()
-        .forResource("Observation")
-        .where(Observation.CODE_VALUE_DATE
-            .withLeft(Observation.CODE.exactly().code("FOO$BAR"))
-            .withRight(Observation.VALUE_DATE.exactly().day("2001-01-01")))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://foo/Observation?" + Observation.SP_CODE_VALUE_DATE + "=" + UrlUtil.escapeUrlParam("FOO\\$BAR$2001-01-01"), capt.getValue().getURI().toString());
-
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByDate() throws Exception {
-
-    final String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    int idx = 0;
-
-    @SuppressWarnings("deprecation")
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .encodedJson()
-        .where(Patient.BIRTHDATE.beforeOrEquals().day("2012-01-22"))
-        .and(Patient.BIRTHDATE.after().day("2011-01-01"))
-        .include(Patient.INCLUDE_ORGANIZATION)
-        .sort().ascending(Patient.BIRTHDATE)
-        .sort().descending(Patient.NAME)
-        .sort().defaultOrder(Patient.ADDRESS)
-        .count(123)
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=le2012-01-22&birthdate=gt2011-01-01&_include=Patient%3Aorganization&_sort=birthdate%2C-name%2Caddress&_count=123&_format=json",
-        capt.getAllValues().get(idx++).getURI().toString());
-
-    response = client.search()
-        .forResource(Patient.class)
-        .encodedJson()
-        .where(Patient.BIRTHDATE.beforeOrEquals().day("2012-01-22"))
-        .and(Patient.BIRTHDATE.after().day("2011-01-01"))
-        .include(Patient.INCLUDE_ORGANIZATION)
-        .sort().ascending(Patient.BIRTHDATE)
-        .sort().descending(Patient.NAME)
-        .sort().defaultOrder(Patient.ADDRESS)
-        .count(123)
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?birthdate=le2012-01-22&birthdate=gt2011-01-01&_include=Patient%3Aorganization&_sort=birthdate%2C-name%2Caddress&_count=123&_format=json",
-        capt.getAllValues().get(idx++).getURI().toString());
-
-    response = client.search()
-        .forResource(Patient.class)
-        .encodedJson()
-        .where(Patient.BIRTHDATE.beforeOrEquals().day("2012-01-22").orAfter().day("2020-01-01"))
-        .and(Patient.BIRTHDATE.after().day("2011-01-01"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    String comma = "%2C";
-    assertEquals("http://example.com/fhir/Patient?birthdate=le2012-01-22" + comma + "gt2020-01-01&birthdate=gt2011-01-01&_format=json", capt.getAllValues().get(idx++).getURI().toString());
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByNumberExact() throws Exception {
-
-    String msg = ourCtx.newXmlParser().encodeResourceToString(new Bundle());
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.search()
-        .forResource(Observation.class)
-        .where(Observation.VALUE_QUANTITY.greaterThan().number(123).andUnits("foo", "bar"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Observation?value-quantity=gt123%7Cfoo%7Cbar", capt.getValue().getURI().toString());
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByProfile() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .withProfile("http://1")
-        .withProfile("http://2")
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?_profile=http%3A%2F%2F1&_profile=http%3A%2F%2F2", capt.getValue().getURI().toString());
-
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByQuantity() throws Exception {
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.where(Encounter.LENGTH.exactly().number(123).andNoUnits())
+			.returnBundle(Bundle.class)
+			.execute();
 
-    String msg = getPatientFeedWithOneResult();
+		assertEquals("http://example.com/fhir/Patient?length=123%7C%7C", capt.getValue().getURI().toString());
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+	}
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByReferenceProperty() throws Exception {
 
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .where(Encounter.LENGTH.exactly().number(123).andNoUnits())
-        .returnBundle(Bundle.class)
-        .execute();
+		String msg = getPatientFeedWithOneResult();
 
-    assertEquals("http://example.com/fhir/Patient?length=123%7C%7C", capt.getValue().getURI().toString());
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByReferenceProperty() throws Exception {
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.where(Patient.GENERAL_PRACTITIONER.hasChainedProperty(Organization.NAME.matches().value("ORG0")))
+			.returnBundle(Bundle.class)
+			.execute();
 
-    String msg = getPatientFeedWithOneResult();
+		assertEquals("http://example.com/fhir/Patient?general-practitioner.name=ORG0", capt.getValue().getURI().toString());
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+	}
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByReferenceSimple() throws Exception {
 
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .where(Patient.GENERAL_PRACTITIONER.hasChainedProperty(Organization.NAME.matches().value("ORG0")))
-        .returnBundle(Bundle.class)
-        .execute();
+		String msg = getPatientFeedWithOneResult();
 
-    assertEquals("http://example.com/fhir/Patient?general-practitioner.name=ORG0", capt.getValue().getURI().toString());
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByReferenceSimple() throws Exception {
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.GENERAL_PRACTITIONER.hasId("123"))
+			.returnBundle(Bundle.class)
+			.execute();
 
-    String msg = getPatientFeedWithOneResult();
+		assertEquals("http://example.com/fhir/Patient?general-practitioner=123", capt.getValue().getURI().toString());
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+	}
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchBySecurity() throws Exception {
 
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.GENERAL_PRACTITIONER.hasId("123"))
-        .returnBundle(Bundle.class)
-        .execute();
+		String msg = getPatientFeedWithOneResult();
 
-    assertEquals("http://example.com/fhir/Patient?general-practitioner=123", capt.getValue().getURI().toString());
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchBySecurity() throws Exception {
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.withSecurity("urn:foo", "123")
+			.withSecurity("urn:bar", "456")
+			.returnBundle(Bundle.class)
+			.execute();
 
-    String msg = getPatientFeedWithOneResult();
+		assertEquals("http://example.com/fhir/Patient?_security=urn%3Afoo%7C123&_security=urn%3Abar%7C456", capt.getValue().getURI().toString());
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+	}
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByString() throws Exception {
 
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .withSecurity("urn:foo", "123")
-        .withSecurity("urn:bar", "456")
-        .returnBundle(Bundle.class)
-        .execute();
+		String msg = getPatientFeedWithOneResult();
 
-    assertEquals("http://example.com/fhir/Patient?_security=urn%3Afoo%7C123&_security=urn%3Abar%7C456", capt.getValue().getURI().toString());
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByString() throws Exception {
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().value("james"))
+			.returnBundle(Bundle.class)
+			.execute();
 
-    String msg = getPatientFeedWithOneResult();
+		assertEquals("http://example.com/fhir/Patient?name=james", capt.getValue().getURI().toString());
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().values("AAA", "BBB", "C,C"))
+			.returnBundle(Bundle.class)
+			.execute();
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		assertEquals("http://example.com/fhir/Patient?name=" + UrlUtil.escapeUrlParam("AAA,BBB,C\\,C"), capt.getAllValues().get(1).getURI().toString());
 
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().value("james"))
-        .returnBundle(Bundle.class)
-        .execute();
+	}
 
-    assertEquals("http://example.com/fhir/Patient?name=james", capt.getValue().getURI().toString());
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByStringContains() throws Exception {
 
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    response = client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().values("AAA", "BBB", "C,C"))
-        .returnBundle(Bundle.class)
-        .execute();
+		String msg = getPatientFeedWithOneResult();
 
-    assertEquals("http://example.com/fhir/Patient?name=" + UrlUtil.escapeUrlParam("AAA,BBB,C\\,C"), capt.getAllValues().get(1).getURI().toString());
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(t-> new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByStringExact() throws Exception {
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.contains().value("FOO"))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?name%3Acontains=FOO", capt.getValue().getURI().toString());
 
-    String msg = getPatientFeedWithOneResult();
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.contains().values("FOO", "BAR"))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?name%3Acontains=FOO%2CBAR", capt.getValue().getURI().toString());
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.contains().values(Arrays.asList("FOO", "BAR")))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?name%3Acontains=FOO%2CBAR", capt.getValue().getURI().toString());
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.contains().value(new StringType("FOO")))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?name%3Acontains=FOO", capt.getValue().getURI().toString());
+	}
 
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matchesExactly().value("james"))
-        .returnBundle(Bundle.class)
-        .execute();
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByStringExact() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matchesExactly().value("james"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?name%3Aexact=james", capt.getValue().getURI().toString());
+
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByTag() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.withTag("urn:foo", "123")
+			.withTag("urn:bar", "456")
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?_tag=urn%3Afoo%7C123&_tag=urn%3Abar%7C456", capt.getValue().getURI().toString());
+
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByToken() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("http://example.com/fhir", "ZZZ"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?identifier=http%3A%2F%2Fexample.com%2Ffhir%7CZZZ", capt.getValue().getURI().toString());
+
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().code("ZZZ"))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?identifier=ZZZ", capt.getAllValues().get(1).getURI().toString());
+
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().codings(new Coding("A", "B", "ZZZ"), new Coding("C", "D", "ZZZ")))
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient?identifier=" + UrlUtil.escapeUrlParam("A|B,C|D"), capt.getAllValues().get(2).getURI().toString());
+
+	}
+
+	/**
+	 * Test for #192
+	 */
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByTokenWithEscaping() throws Exception {
+		final String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
+		int index = 0;
+		String wantPrefix = "http://foo/Patient?identifier=";
+
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("1", "2"))
+			.returnBundle(Bundle.class)
+			.execute();
+		String wantValue = "1|2";
+		String url = capt.getAllValues().get(index).getURI().toString();
+		assertThat(url, Matchers.startsWith(wantPrefix));
+		assertEquals(wantValue, UrlUtil.unescape(url.substring(wantPrefix.length())));
+		assertEquals(UrlUtil.escapeUrlParam(wantValue), url.substring(wantPrefix.length()));
+		index++;
+
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("1,2", "3,4"))
+			.returnBundle(Bundle.class)
+			.execute();
+		wantValue = "1\\,2|3\\,4";
+		url = capt.getAllValues().get(index).getURI().toString();
+		assertThat(url, Matchers.startsWith(wantPrefix));
+		assertEquals(wantValue, UrlUtil.unescape(url.substring(wantPrefix.length())));
+		assertEquals(UrlUtil.escapeUrlParam(wantValue), url.substring(wantPrefix.length()));
+		index++;
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchByTokenWithSystemAndNoCode() throws Exception {
+
+		final String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		int idx = 0;
+
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.hasSystemWithAnyCode("urn:foo"))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?identifier=urn%3Afoo%7C", capt.getAllValues().get(idx++).getURI().toString());
+
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:foo", null))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?identifier=urn%3Afoo%7C", capt.getAllValues().get(idx++).getURI().toString());
+
+		response = client.search()
+			.forResource("Patient")
+			.where(Patient.IDENTIFIER.exactly().systemAndCode("urn:foo", ""))
+			.returnBundle(Bundle.class)
+			.execute();
+		assertEquals("http://example.com/fhir/Patient?identifier=urn%3Afoo%7C", capt.getAllValues().get(idx++).getURI().toString());
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchIncludeRecursive() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.include(Patient.INCLUDE_ORGANIZATION)
+			.include(Patient.INCLUDE_LINK.asRecursive())
+			.include(Patient.INCLUDE_ALL.asNonRecursive())
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertThat(capt.getValue().getURI().toString(), containsString("http://example.com/fhir/Patient?"));
+		assertThat(capt.getValue().getURI().toString(), containsString("_include=" + UrlUtil.escapeUrlParam(Patient.INCLUDE_ORGANIZATION.getValue())));
+		assertThat(capt.getValue().getURI().toString(), containsString("_include%3Arecurse=" + UrlUtil.escapeUrlParam(Patient.INCLUDE_LINK.getValue())));
+		assertThat(capt.getValue().getURI().toString(), containsString("_include=*"));
+
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchUsingGetSearch() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().value("james"))
+			.usingStyle(SearchStyleEnum.GET_WITH_SEARCH)
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient/_search?name=james", capt.getValue().getURI().toString());
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchUsingPost() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().value("james"))
+			.usingStyle(SearchStyleEnum.POST)
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Patient/_search", capt.getValue().getURI().toString());
+
+		HttpEntityEnclosingRequestBase enc = (HttpEntityEnclosingRequestBase) capt.getValue();
+		UrlEncodedFormEntity ent = (UrlEncodedFormEntity) enc.getEntity();
+		String string = IOUtils.toString(ent.getContent());
+		ourLog.info(string);
+		assertEquals("name=james", string);
+	}
+
+	@Test
+	public void testSearchWithAbsoluteUrl() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client
+			.search()
+			.byUrl("http://example.com/fhir/Patient?birthdate=le2012-01-22&birthdate=gt2011-01-01&_include=Patient%3Aorganization&_sort%3Aasc=birthdate&_sort%3Adesc=name&_count=123&_format=json")
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals(1, response.getEntry().size());
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchWithClientEncodingAndPrettyPrintConfig() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		client.setPrettyPrint(true);
+		client.setEncoding(EncodingEnum.JSON);
 
-    assertEquals("http://example.com/fhir/Patient?name%3Aexact=james", capt.getValue().getURI().toString());
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.returnBundle(Bundle.class)
+			.execute();
 
-  }
+		assertEquals("http://example.com/fhir/Patient?_format=json&_pretty=true", capt.getValue().getURI().toString());
+
+	}
+
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchWithEscapedParameters() throws Exception {
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByTag() throws Exception {
+		String msg = getPatientFeedWithOneResult();
 
-    String msg = getPatientFeedWithOneResult();
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .withTag("urn:foo", "123")
-        .withTag("urn:bar", "456")
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?_tag=urn%3Afoo%7C123&_tag=urn%3Abar%7C456", capt.getValue().getURI().toString());
-
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByToken() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.exactly().systemAndCode("http://example.com/fhir", "ZZZ"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?identifier=http%3A%2F%2Fexample.com%2Ffhir%7CZZZ", capt.getValue().getURI().toString());
-
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    response = client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.exactly().code("ZZZ"))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?identifier=ZZZ", capt.getAllValues().get(1).getURI().toString());
-
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    response = client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.exactly().codings(new Coding("A", "B", "ZZZ"), new Coding("C", "D", "ZZZ")))
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient?identifier=" + UrlUtil.escapeUrlParam("A|B,C|D"), capt.getAllValues().get(2).getURI().toString());
-
-  }
-
-  /**
-   * Test for #192
-   */
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByTokenWithEscaping() throws Exception {
-    final String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://foo");
-    int index = 0;
-    String wantPrefix = "http://foo/Patient?identifier=";
-
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.exactly().systemAndCode("1", "2"))
-        .returnBundle(Bundle.class)
-        .execute();
-    String wantValue = "1|2";
-    String url = capt.getAllValues().get(index).getURI().toString();
-    assertThat(url, Matchers.startsWith(wantPrefix));
-    assertEquals(wantValue, UrlUtil.unescape(url.substring(wantPrefix.length())));
-    assertEquals(UrlUtil.escapeUrlParam(wantValue), url.substring(wantPrefix.length()));
-    index++;
-
-    response = client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.exactly().systemAndCode("1,2", "3,4"))
-        .returnBundle(Bundle.class)
-        .execute();
-    wantValue = "1\\,2|3\\,4";
-    url = capt.getAllValues().get(index).getURI().toString();
-    assertThat(url, Matchers.startsWith(wantPrefix));
-    assertEquals(wantValue, UrlUtil.unescape(url.substring(wantPrefix.length())));
-    assertEquals(UrlUtil.escapeUrlParam(wantValue), url.substring(wantPrefix.length()));
-    index++;
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchByTokenWithSystemAndNoCode() throws Exception {
-
-    final String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenAnswer(new Answer<InputStream>() {
-      @Override
-      public InputStream answer(InvocationOnMock theInvocation) throws Throwable {
-        return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
-      }
-    });
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    int idx = 0;
-
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.hasSystemWithAnyCode("urn:foo"))
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient?identifier=urn%3Afoo%7C", capt.getAllValues().get(idx++).getURI().toString());
-
-    response = client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.exactly().systemAndCode("urn:foo", null))
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient?identifier=urn%3Afoo%7C", capt.getAllValues().get(idx++).getURI().toString());
-
-    response = client.search()
-        .forResource("Patient")
-        .where(Patient.IDENTIFIER.exactly().systemAndCode("urn:foo", ""))
-        .returnBundle(Bundle.class)
-        .execute();
-    assertEquals("http://example.com/fhir/Patient?identifier=urn%3Afoo%7C", capt.getAllValues().get(idx++).getURI().toString());
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchIncludeRecursive() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .include(Patient.INCLUDE_ORGANIZATION)
-        .include(Patient.INCLUDE_LINK.asRecursive())
-        .include(Patient.INCLUDE_ALL.asNonRecursive())
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertThat(capt.getValue().getURI().toString(), containsString("http://example.com/fhir/Patient?"));
-    assertThat(capt.getValue().getURI().toString(), containsString("_include=" + UrlUtil.escapeUrlParam(Patient.INCLUDE_ORGANIZATION.getValue())));
-    assertThat(capt.getValue().getURI().toString(), containsString("_include%3Arecurse=" + UrlUtil.escapeUrlParam(Patient.INCLUDE_LINK.getValue())));
-    assertThat(capt.getValue().getURI().toString(), containsString("_include=*"));
-
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchUsingGetSearch() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().value("james"))
-        .usingStyle(SearchStyleEnum.GET_WITH_SEARCH)
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient/_search?name=james", capt.getValue().getURI().toString());
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchUsingPost() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().value("james"))
-        .usingStyle(SearchStyleEnum.POST)
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals("http://example.com/fhir/Patient/_search", capt.getValue().getURI().toString());
-
-    HttpEntityEnclosingRequestBase enc = (HttpEntityEnclosingRequestBase) capt.getValue();
-    UrlEncodedFormEntity ent = (UrlEncodedFormEntity) enc.getEntity();
-    String string = IOUtils.toString(ent.getContent());
-    ourLog.info(string);
-    assertEquals("name=james", string);
-  }
-
-  @Test
-  public void testSearchWithAbsoluteUrl() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client
-        .search()
-        .byUrl("http://example.com/fhir/Patient?birthdate=le2012-01-22&birthdate=gt2011-01-01&_include=Patient%3Aorganization&_sort%3Aasc=birthdate&_sort%3Adesc=name&_count=123&_format=json")
-        .returnBundle(Bundle.class)
-        .execute();
-
-    assertEquals(1, response.getEntry().size());
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchWithClientEncodingAndPrettyPrintConfig() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-    client.setPrettyPrint(true);
-    client.setEncoding(EncodingEnum.JSON);
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Bundle response = client.search()
+			.forResource("Patient")
+			.where(Patient.NAME.matches().values("NE,NE", "NE,NE"))
+			.where(Patient.NAME.matchesExactly().values("E$E"))
+			.where(Patient.NAME.matches().values("NE\\NE"))
+			.where(Patient.NAME.matchesExactly().values("E|E"))
+			.returnBundle(Bundle.class)
+			.execute();
 
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .returnBundle(Bundle.class)
-        .execute();
+		assertThat(capt.getValue().getURI().toString(), containsString("%3A"));
+		assertEquals("http://example.com/fhir/Patient?name=NE\\,NE,NE\\,NE&name=NE\\\\NE&name:exact=E\\$E&name:exact=E\\|E", UrlUtil.unescape(capt.getValue().getURI().toString()));
+	}
 
-    assertEquals("http://example.com/fhir/Patient?_format=json&_pretty=true", capt.getValue().getURI().toString());
-
-  }
-
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchWithEscapedParameters() throws Exception {
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchWithInternalServerError() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 500, "INTERNAL ERRORS"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_TEXT + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader("Server Issues!"), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		try {
+			client
+				.search()
+				.forResource(Patient.class)
+				.returnBundle(Bundle.class)
+				.execute();
+			fail();
+		} catch (InternalErrorException e) {
+			assertEquals(e.getMessage(), "HTTP 500 INTERNAL ERRORS: Server Issues!");
+			assertEquals(e.getResponseBody(), "Server Issues!");
+		}
 
-    String msg = getPatientFeedWithOneResult();
+	}
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchWithNonFhirResponse() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.search()
-        .forResource("Patient")
-        .where(Patient.NAME.matches().values("NE,NE", "NE,NE"))
-        .where(Patient.NAME.matchesExactly().values("E$E"))
-        .where(Patient.NAME.matches().values("NE\\NE"))
-        .where(Patient.NAME.matchesExactly().values("E|E"))
-        .returnBundle(Bundle.class)
-        .execute();
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_TEXT + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader("Server Issues!"), Charset.forName("UTF-8")));
 
-    assertThat(capt.getValue().getURI().toString(), containsString("%3A"));
-    assertEquals("http://example.com/fhir/Patient?name=NE\\,NE,NE\\,NE&name=NE\\\\NE&name:exact=E\\$E&name:exact=E\\|E", UrlUtil.unescape(capt.getValue().getURI().toString()));
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchWithInternalServerError() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 500, "INTERNAL ERRORS"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_TEXT + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader("Server Issues!"), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    try {
-      client
-          .search()
-          .forResource(Patient.class)
-          .returnBundle(Bundle.class)
-          .execute();
-      fail();
-    } catch (InternalErrorException e) {
-      assertEquals(e.getMessage(), "HTTP 500 INTERNAL ERRORS: Server Issues!");
-      assertEquals(e.getResponseBody(), "Server Issues!");
-    }
+		try {
+			client.search().forResource(Patient.class).returnBundle(Bundle.class).execute();
+			fail();
+		} catch (NonFhirResponseException e) {
+			assertThat(e.getMessage(), StringContains.containsString("Server Issues!"));
+		}
 
-  }
+	}
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchWithNonFhirResponse() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
+	@SuppressWarnings("unused")
+	@Test
+	public void testSearchWithReverseInclude() throws Exception {
+
+		String msg = getPatientFeedWithOneResult();
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_TEXT + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader("Server Issues!"), Charset.forName("UTF-8")));
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-    try {
-      client.search().forResource(Patient.class).returnBundle(Bundle.class).execute();
-      fail();
-    } catch (NonFhirResponseException e) {
-      assertThat(e.getMessage(), StringContains.containsString("Server Issues!"));
-    }
+		Bundle response = client.search()
+			.forResource(Patient.class)
+			.encodedJson()
+			.revInclude(Provenance.INCLUDE_TARGET)
+			.returnBundle(Bundle.class)
+			.execute();
 
-  }
+		assertEquals("http://example.com/fhir/Patient?_revinclude=Provenance%3Atarget&_format=json", capt.getValue().getURI().toString());
 
-  @SuppressWarnings("unused")
-  @Test
-  public void testSearchWithReverseInclude() throws Exception {
-
-    String msg = getPatientFeedWithOneResult();
+	}
 
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+	@Test
+	public void testSetDefaultEncoding() throws Exception {
+
+		String msg = ourCtx.newJsonParser().encodeResourceToString(new Patient());
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		// Header[] headers = new Header[] { new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08
+		// GMT"),
+		// new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
+		// new BasicHeader(Constants.HEADER_CATEGORY, "http://foo/tagdefinition.html; scheme=\"http://hl7.org/fhir/tag\";
+		// label=\"Some tag\"") };
+		// when(myHttpResponse.getAllHeaders()).thenReturn(headers);
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-    Bundle response = client.search()
-        .forResource(Patient.class)
-        .encodedJson()
-        .revInclude(Provenance.INCLUDE_TARGET)
-        .returnBundle(Bundle.class)
-        .execute();
+		(client).setEncoding(EncodingEnum.JSON);
+		int count = 0;
 
-    assertEquals("http://example.com/fhir/Patient?_revinclude=Provenance%3Atarget&_format=json", capt.getValue().getURI().toString());
+		client
+			.read()
+			.resource(Patient.class)
+			.withId(new IdType("Patient/1234"))
+			.execute();
+		assertEquals("http://example.com/fhir/Patient/1234?_format=json", capt.getAllValues().get(count).getURI().toString());
+		count++;
 
-  }
+	}
 
-  @Test
-  public void testSetDefaultEncoding() throws Exception {
-
-    String msg = ourCtx.newJsonParser().encodeResourceToString(new Patient());
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    // Header[] headers = new Header[] { new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08
-    // GMT"),
-    // new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
-    // new BasicHeader(Constants.HEADER_CATEGORY, "http://foo/tagdefinition.html; scheme=\"http://hl7.org/fhir/tag\";
-    // label=\"Some tag\"") };
-    // when(myHttpResponse.getAllHeaders()).thenReturn(headers);
+	@Test
+	public void testTransaction() throws Exception {
+		Bundle input = createTransactionBundleInput();
+		Bundle output = createTransactionBundleOutput();
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		String msg = ourCtx.newJsonParser().encodeResourceToString(output);
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-    (client).setEncoding(EncodingEnum.JSON);
-    int count = 0;
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-    client
-        .read()
-        .resource(Patient.class)
-        .withId(new IdType("Patient/1234"))
-        .execute();
-    assertEquals("http://example.com/fhir/Patient/1234?_format=json", capt.getAllValues().get(count).getURI().toString());
-    count++;
+		Bundle response = client.transaction()
+			.withBundle(input)
+			.execute();
 
-  }
+		assertEquals("http://example.com/fhir", capt.getValue().getURI().toString());
+		assertEquals(input.getEntry().get(0).getResource().getId(), response.getEntry().get(0).getResource().getId());
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(0).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
 
-  @Test
-  public void testTransaction() throws Exception {
-    Bundle input = createTransactionBundleInput();
-    Bundle output = createTransactionBundleOutput();
+	}
 
-    String msg = ourCtx.newJsonParser().encodeResourceToString(output);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+	@Test
+	public void testTransactionXml() throws Exception {
+		Bundle input = createTransactionBundleInput();
+		Bundle output = createTransactionBundleOutput();
 
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		String msg = ourCtx.newXmlParser().encodeResourceToString(output);
 
-    Bundle response = client.transaction()
-        .withBundle(input)
-        .execute();
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
 
-    assertEquals("http://example.com/fhir", capt.getValue().getURI().toString());
-    assertEquals(input.getEntry().get(0).getResource().getId(), response.getEntry().get(0).getResource().getId());
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(0).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
 
-  }
+		Bundle response = client.transaction()
+			.withBundle(input)
+			.execute();
 
-  @Test
-  public void testTransactionXml() throws Exception {
-    Bundle input = createTransactionBundleInput();
-    Bundle output = createTransactionBundleOutput();
+		assertEquals("http://example.com/fhir", capt.getValue().getURI().toString());
+		assertEquals(input.getEntry().get(0).getResource().getId(), response.getEntry().get(0).getResource().getId());
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(0).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+
+	}
+
+	@Test
+	public void testUpdate() throws Exception {
+
+		Patient p1 = new Patient();
+		p1.addIdentifier().setSystem("foo:bar").setValue("12345");
+		p1.addName().setFamily("Smith").addGiven("John");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
 
-    String msg = ourCtx.newXmlParser().encodeResourceToString(output);
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Bundle response = client.transaction()
-        .withBundle(input)
-        .execute();
-
-    assertEquals("http://example.com/fhir", capt.getValue().getURI().toString());
-    assertEquals(input.getEntry().get(0).getResource().getId(), response.getEntry().get(0).getResource().getId());
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(0).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-
-  }
-
-  @Test
-  public void testUpdate() throws Exception {
-
-    Patient p1 = new Patient();
-    p1.addIdentifier().setSystem("foo:bar").setValue("12345");
-    p1.addName().setFamily("Smith").addGiven("John");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    try {
-      client.update().resource(p1).execute();
-      fail();
-    } catch (InvalidRequestException e) {
-      // should happen because no ID set
-    }
-
-    assertEquals(0, capt.getAllValues().size());
-
-    p1.setId("44");
-    client.update().resource(p1).execute();
-
-    int count = 0;
-
-    assertEquals(1, capt.getAllValues().size());
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    count++;
-
-    MethodOutcome outcome = client.update().resource(p1).execute();
-    assertEquals("44", outcome.getId().getIdPart());
-    assertEquals("22", outcome.getId().getVersionIdPart());
-
-    assertEquals(2, capt.getAllValues().size());
-
-    assertEquals("http://example.com/fhir/Patient/44", capt.getValue().getURI().toString());
-    assertEquals("PUT", capt.getValue().getMethod());
-
-    /*
-     * Try fluent options
-     */
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-    client.update().resource(p1).withId("123").execute();
-    assertEquals(3, capt.getAllValues().size());
-    assertEquals("http://example.com/fhir/Patient/123", capt.getAllValues().get(2).getURI().toString());
-
-    String resourceText = "<Patient xmlns=\"http://hl7.org/fhir\">    </Patient>";
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-    client.update().resource(resourceText).withId("123").execute();
-    assertEquals("http://example.com/fhir/Patient/123", capt.getAllValues().get(3).getURI().toString());
-    assertEquals(resourceText, IOUtils.toString(((HttpPut) capt.getAllValues().get(3)).getEntity().getContent()));
-    assertEquals(4, capt.getAllValues().size());
-
-  }
-
-  @Test
-  public void testUpdateWithStringAutoDetectsEncoding() throws Exception {
-
-    Patient p1 = new Patient();
-    p1.addIdentifier().setSystem("foo:bar").setValue("12345");
-    p1.addName().setFamily("Smith").addGiven("John");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] { new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22") });
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    int count = 0;
-    client.update().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).withId("1").execute();
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("value=\"John\""));
-    count++;
-
-    client.update().resource(ourCtx.newJsonParser().encodeResourceToString(p1)).withId("1").execute();
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.JSON.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("[\"John\"]"));
-    count++;
-
-    /*
-     * e.g. Now try with reversed encoding (provide a string that's in JSON and ask the client to use XML)
-     */
-
-    client.update().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).withId("1").encodedJson().execute();
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.JSON.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("[\"John\"]"));
-    count++;
-
-    client.update().resource(ourCtx.newJsonParser().encodeResourceToString(p1)).withId("1").encodedXml().execute();
-    assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
-    assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
-    assertThat(extractBody(capt, count), containsString("value=\"John\""));
-    count++;
-  }
-
-  @Test
-  public void testVReadWithAbsoluteUrl() throws Exception {
-
-    String msg = getResourceResult();
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
-    Header[] headers = new Header[] {
-        new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08 GMT"),
-        new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
-    };
-    when(myHttpResponse.getAllHeaders()).thenReturn(headers);
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient response = client
-        .read()
-        .resource(Patient.class)
-        .withUrl("http://somebase.com/path/to/base/Patient/1234/_history/2222")
-        .execute();
-
-    assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
-    assertEquals("http://somebase.com/path/to/base/Patient/1234/_history/2222", capt.getAllValues().get(0).getURI().toString());
-
-  }
-
-  @Test
-  public void testValidateNonFluent() throws Exception {
-
-    OperationOutcome oo = new OperationOutcome();
-    oo.addIssue().setDiagnostics("OOOK");
-
-    ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
-    when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
-    when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {});
-    when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
-    when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(ourCtx.newXmlParser().encodeResourceToString(oo)), Charset.forName("UTF-8")));
-    when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
-
-    IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
-
-    Patient p1 = new Patient();
-    p1.addIdentifier().setSystem("foo:bar").setValue("12345");
-    p1.addName().setFamily("Smith").addGiven("John");
-
-    MethodOutcome resp = client.validate(p1);
-    assertEquals("http://example.com/fhir/Patient/$validate", capt.getValue().getURI().toString());
-    oo = (OperationOutcome) resp.getOperationOutcome();
-    assertEquals("OOOK", oo.getIssueFirstRep().getDiagnostics());
-
-  }
-
-  @AfterClass
-  public static void afterClassClearContext() {
-    TestUtil.clearAllStaticFieldsForUnitTest();
-  }
-
-  @BeforeClass
-  public static void beforeClass() {
-    ourCtx = FhirContext.forR4();
-  }
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		try {
+			client.update().resource(p1).execute();
+			fail();
+		} catch (InvalidRequestException e) {
+			// should happen because no ID set
+		}
+
+		assertEquals(0, capt.getAllValues().size());
+
+		p1.setId("44");
+		client.update().resource(p1).execute();
+
+		int count = 0;
+
+		assertEquals(1, capt.getAllValues().size());
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		count++;
+
+		MethodOutcome outcome = client.update().resource(p1).execute();
+		assertEquals("44", outcome.getId().getIdPart());
+		assertEquals("22", outcome.getId().getVersionIdPart());
+
+		assertEquals(2, capt.getAllValues().size());
+
+		assertEquals("http://example.com/fhir/Patient/44", capt.getValue().getURI().toString());
+		assertEquals("PUT", capt.getValue().getMethod());
+
+		/*
+		 * Try fluent options
+		 */
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+		client.update().resource(p1).withId("123").execute();
+		assertEquals(3, capt.getAllValues().size());
+		assertEquals("http://example.com/fhir/Patient/123", capt.getAllValues().get(2).getURI().toString());
+
+		String resourceText = "<Patient xmlns=\"http://hl7.org/fhir\">    </Patient>";
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+		client.update().resource(resourceText).withId("123").execute();
+		assertEquals("http://example.com/fhir/Patient/123", capt.getAllValues().get(3).getURI().toString());
+		assertEquals(resourceText, IOUtils.toString(((HttpPut) capt.getAllValues().get(3)).getEntity().getContent()));
+		assertEquals(4, capt.getAllValues().size());
+
+	}
+
+	@Test
+	public void testUpdateWithStringAutoDetectsEncoding() throws Exception {
+
+		Patient p1 = new Patient();
+		p1.addIdentifier().setSystem("foo:bar").setValue("12345");
+		p1.addName().setFamily("Smith").addGiven("John");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 201, "OK"));
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {new BasicHeader(Constants.HEADER_LOCATION, "/Patient/44/_history/22")});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(""), Charset.forName("UTF-8")));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		int count = 0;
+		client.update().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).withId("1").execute();
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("value=\"John\""));
+		count++;
+
+		client.update().resource(ourCtx.newJsonParser().encodeResourceToString(p1)).withId("1").execute();
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.JSON.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("[\"John\"]"));
+		count++;
+
+		/*
+		 * e.g. Now try with reversed encoding (provide a string that's in JSON and ask the client to use XML)
+		 */
+
+		client.update().resource(ourCtx.newXmlParser().encodeResourceToString(p1)).withId("1").encodedJson().execute();
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.JSON.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("[\"John\"]"));
+		count++;
+
+		client.update().resource(ourCtx.newJsonParser().encodeResourceToString(p1)).withId("1").encodedXml().execute();
+		assertEquals(1, capt.getAllValues().get(count).getHeaders(Constants.HEADER_CONTENT_TYPE).length);
+		assertEquals(EncodingEnum.XML.getResourceContentTypeNonLegacy() + Constants.HEADER_SUFFIX_CT_UTF_8, capt.getAllValues().get(count).getFirstHeader(Constants.HEADER_CONTENT_TYPE).getValue());
+		assertThat(extractBody(capt, count), containsString("value=\"John\""));
+		count++;
+	}
+
+	@Test
+	public void testVReadWithAbsoluteUrl() throws Exception {
+
+		String msg = getResourceResult();
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8")));
+		Header[] headers = new Header[] {
+			new BasicHeader(Constants.HEADER_LAST_MODIFIED, "Wed, 15 Nov 1995 04:58:08 GMT"),
+			new BasicHeader(Constants.HEADER_CONTENT_LOCATION, "http://foo.com/Patient/123/_history/2333"),
+		};
+		when(myHttpResponse.getAllHeaders()).thenReturn(headers);
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient response = client
+			.read()
+			.resource(Patient.class)
+			.withUrl("http://somebase.com/path/to/base/Patient/1234/_history/2222")
+			.execute();
+
+		assertThat(response.getNameFirstRep().getFamily(), StringContains.containsString("Cardinal"));
+		assertEquals("http://somebase.com/path/to/base/Patient/1234/_history/2222", capt.getAllValues().get(0).getURI().toString());
+
+	}
+
+	@Test
+	public void testValidateNonFluent() throws Exception {
+
+		OperationOutcome oo = new OperationOutcome();
+		oo.addIssue().setDiagnostics("OOOK");
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getAllHeaders()).thenReturn(new Header[] {});
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_XML + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).thenReturn(new ReaderInputStream(new StringReader(ourCtx.newXmlParser().encodeResourceToString(oo)), Charset.forName("UTF-8")));
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+
+		Patient p1 = new Patient();
+		p1.addIdentifier().setSystem("foo:bar").setValue("12345");
+		p1.addName().setFamily("Smith").addGiven("John");
+
+		MethodOutcome resp = client.validate(p1);
+		assertEquals("http://example.com/fhir/Patient/$validate", capt.getValue().getURI().toString());
+		oo = (OperationOutcome) resp.getOperationOutcome();
+		assertEquals("OOOK", oo.getIssueFirstRep().getDiagnostics());
+
+	}
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	@BeforeClass
+	public static void beforeClass() {
+		ourCtx = FhirContext.forR4();
+	}
 
 }
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/ThreadLocalCapturingInterceptorR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/ThreadLocalCapturingInterceptorR4Test.java
new file mode 100644
index 00000000000..7258e4c8f04
--- /dev/null
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/client/ThreadLocalCapturingInterceptorR4Test.java
@@ -0,0 +1,174 @@
+package ca.uhn.fhir.rest.client;
+
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.context.FhirVersionEnum;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.*;
+import ca.uhn.fhir.rest.client.api.IGenericClient;
+import ca.uhn.fhir.rest.client.api.ServerValidationModeEnum;
+import ca.uhn.fhir.rest.client.impl.BaseClient;
+import ca.uhn.fhir.rest.client.interceptor.ThreadLocalCapturingInterceptor;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.VersionUtil;
+import javassist.tools.web.BadHttpRequest;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.input.ReaderInputStream;
+import org.apache.http.HttpResponse;
+import org.apache.http.ProtocolVersion;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
+import org.apache.http.client.methods.HttpUriRequest;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.message.BasicStatusLine;
+import org.hl7.fhir.r4.model.*;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.internal.stubbing.defaultanswers.ReturnsDeepStubs;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringReader;
+import java.nio.charset.Charset;
+
+import static org.junit.Assert.*;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class ThreadLocalCapturingInterceptorR4Test {
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ThreadLocalCapturingInterceptorR4Test.class);
+	private static FhirContext ourCtx;
+	private int myAnswerCount;
+	private HttpClient myHttpClient;
+	private HttpResponse myHttpResponse;
+
+	@Before
+	public void before() {
+		myHttpClient = mock(HttpClient.class, new ReturnsDeepStubs());
+		ourCtx.getRestfulClientFactory().setHttpClient(myHttpClient);
+		ourCtx.getRestfulClientFactory().setServerValidationMode(ServerValidationModeEnum.NEVER);
+		myHttpResponse = mock(HttpResponse.class, new ReturnsDeepStubs());
+		myAnswerCount = 0;
+		System.setProperty(BaseClient.HAPI_CLIENT_KEEPRESPONSES, "true");
+	}
+
+	private String expectedUserAgent() {
+		return "HAPI-FHIR/" + VersionUtil.getVersion() + " (FHIR Client; FHIR " + FhirVersionEnum.R4.getFhirVersionString() + "/R4; apache)";
+	}
+
+	private byte[] extractBodyAsByteArray(ArgumentCaptor<HttpUriRequest> capt) throws IOException {
+		byte[] body = IOUtils.toByteArray(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(0)).getEntity().getContent());
+		return body;
+	}
+
+	private String extractBodyAsString(ArgumentCaptor<HttpUriRequest> capt) throws IOException {
+		String body = IOUtils.toString(((HttpEntityEnclosingRequestBase) capt.getAllValues().get(0)).getEntity().getContent(), "UTF-8");
+		return body;
+	}
+
+	private ArgumentCaptor<HttpUriRequest> prepareClientForSearchResponse() throws IOException {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+		return capt;
+	}
+
+	@Test
+	public void testSuccessfulSearch() throws Exception {
+		final String msg = "{\"resourceType\":\"Bundle\",\"id\":null,\"base\":\"http://localhost:57931/fhir/contextDev\",\"total\":1,\"link\":[{\"relation\":\"self\",\"url\":\"http://localhost:57931/fhir/contextDev/Patient?identifier=urn%3AMultiFhirVersionTest%7CtestSubmitPatient01&_format=json\"}],\"entry\":[{\"resource\":{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\",\"lastUpdated\":\"2014-12-20T18:41:29.706-05:00\"},\"identifier\":[{\"system\":\"urn:MultiFhirVersionTest\",\"value\":\"testSubmitPatient01\"}]}}]}";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 200, "OK"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_FHIR_JSON + "; charset=UTF-8"));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		ThreadLocalCapturingInterceptor interceptor = new ThreadLocalCapturingInterceptor();
+		interceptor.setBufferResponse(true);
+
+		client.registerInterceptor(interceptor);
+		client.setEncoding(EncodingEnum.JSON);
+		client.search()
+			.forResource("Device")
+			.returnBundle(Bundle.class)
+			.execute();
+
+		assertEquals("http://example.com/fhir/Device?_format=json", interceptor.getRequestForCurrentThread().getUri());
+		assertEquals(200, interceptor.getResponseForCurrentThread().getStatus());
+		assertEquals(msg, IOUtils.toString(interceptor.getResponseForCurrentThread().createReader()));
+	}
+
+
+	@Test
+	public void testFailingSearch() throws Exception {
+		final String msg = "BAD REQUEST";
+
+		ArgumentCaptor<HttpUriRequest> capt = ArgumentCaptor.forClass(HttpUriRequest.class);
+		when(myHttpClient.execute(capt.capture())).thenReturn(myHttpResponse);
+		when(myHttpResponse.getStatusLine()).thenReturn(new BasicStatusLine(new ProtocolVersion("HTTP", 1, 1), 400, "Bad Request"));
+		when(myHttpResponse.getEntity().getContentType()).thenReturn(new BasicHeader("content-type", Constants.CT_TEXT_WITH_UTF8));
+		when(myHttpResponse.getEntity().getContent()).then(new Answer<InputStream>() {
+			@Override
+			public InputStream answer(InvocationOnMock theInvocation) {
+				return new ReaderInputStream(new StringReader(msg), Charset.forName("UTF-8"));
+			}
+		});
+
+		IGenericClient client = ourCtx.newRestfulGenericClient("http://example.com/fhir");
+		int idx = 0;
+
+		ThreadLocalCapturingInterceptor interceptor = new ThreadLocalCapturingInterceptor();
+		interceptor.setBufferResponse(true);
+
+		client.registerInterceptor(interceptor);
+		client.setEncoding(EncodingEnum.JSON);
+		try {
+			client.search()
+				.forResource("Device")
+				.returnBundle(Bundle.class)
+				.execute();
+			fail();
+		} catch (InvalidRequestException e) {
+			// good
+		}
+
+		assertEquals("http://example.com/fhir/Device?_format=json", interceptor.getRequestForCurrentThread().getUri());
+		assertEquals(400, interceptor.getResponseForCurrentThread().getStatus());
+		assertEquals(msg, IOUtils.toString(interceptor.getResponseForCurrentThread().createReader()));
+	}
+
+
+	@AfterClass
+	public static void afterClassClearContext() {
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	@BeforeClass
+	public static void beforeClass() {
+		ourCtx = FhirContext.forR4();
+	}
+
+
+}
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/CreateR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/CreateR4Test.java
index 571e86efdad..20e7129d7af 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/CreateR4Test.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/CreateR4Test.java
@@ -1,11 +1,17 @@
 package ca.uhn.fhir.rest.server;
 
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.annotation.*;
-import ca.uhn.fhir.rest.api.MethodOutcome;
-import ca.uhn.fhir.rest.client.MyPatientWithExtensions;
-import ca.uhn.fhir.util.PortUtil;
-import ca.uhn.fhir.util.TestUtil;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.not;
+import static org.hamcrest.Matchers.stringContainsInOrder;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThat;
+
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
@@ -30,13 +36,17 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.annotation.Create;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Read;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.annotation.Search;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.MethodOutcome;
+import ca.uhn.fhir.rest.client.MyPatientWithExtensions;
+import ca.uhn.fhir.util.PortUtil;
+import ca.uhn.fhir.util.TestUtil;
 
 public class CreateR4Test {
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(CreateR4Test.class);
@@ -100,6 +110,7 @@ public class CreateR4Test {
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity("{\"resourceType\":\"Patient\", \"status\":\"active\"}", ContentType.parse("application/fhir+json; charset=utf-8")));
+		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		HttpResponse status = ourClient.execute(httpPost);
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
@@ -111,6 +122,24 @@ public class CreateR4Test {
 
 		assertThat(responseContent, containsString("DIAG"));
 	}
+	
+	@Test
+	public void testCreateReturnsRepresentation() throws Exception {
+		ourReturnOo = new OperationOutcome().addIssue(new OperationOutcomeIssueComponent().setDiagnostics("DIAG"));
+		String expectedResponseContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\"},\"gender\":\"male\"}";
+		
+		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
+		httpPost.setEntity(new StringEntity("{\"resourceType\":\"Patient\", \"gender\":\"male\"}", ContentType.parse("application/fhir+json; charset=utf-8")));
+		HttpResponse status = ourClient.execute(httpPost);
+
+		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
+		IOUtils.closeQuietly(status.getEntity().getContent());
+
+		ourLog.info("Response was:\n{}", responseContent);
+
+		assertEquals(201, status.getStatusLine().getStatusCode());
+		assertEquals(expectedResponseContent, responseContent);
+	}
 
 	@Test
 	public void testCreateWithIncorrectContent1() throws Exception {
@@ -230,12 +259,14 @@ public class CreateR4Test {
 		ourPort = PortUtil.findFreePort();
 		ourServer = new Server(ourPort);
 
-		PatientProvider patientProvider = new PatientProvider();
+		PatientProviderCreate patientProviderCreate = new PatientProviderCreate();
+		PatientProviderRead patientProviderRead = new PatientProviderRead();
+		PatientProviderSearch patientProviderSearch = new PatientProviderSearch();
 
 		ServletHandler proxyHandler = new ServletHandler();
 		RestfulServer servlet = new RestfulServer(ourCtx);
 
-		servlet.setResourceProviders(patientProvider);
+		servlet.setResourceProviders(patientProviderCreate, patientProviderRead, patientProviderSearch);
 		ServletHolder servletHolder = new ServletHolder(servlet);
 		proxyHandler.addServletWithMapping(servletHolder, "/*");
 		ourServer.setHandler(proxyHandler);
@@ -247,19 +278,7 @@ public class CreateR4Test {
 		ourClient = builder.build();
 
 	}
-
-	public static class PatientProvider implements IResourceProvider {
-
-		@Create()
-		public MethodOutcome create(@ResourceParam Patient theIdParam) {
-			assertNull(theIdParam.getIdElement().getIdPart());
-			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(ourReturnOo);
-		}
-
-		@Override
-		public Class<Patient> getResourceType() {
-			return Patient.class;
-		}
+	public static class PatientProviderRead implements IResourceProvider {
 
 		@Read()
 		public MyPatientWithExtensions read(@IdParam IdType theIdParam) {
@@ -269,6 +288,35 @@ public class CreateR4Test {
 			return p0;
 		}
 
+		@Override
+		public Class<Patient> getResourceType() {
+			return Patient.class;
+		}
+	}
+
+	public static class PatientProviderCreate implements IResourceProvider {
+		@Override
+		public Class<Patient> getResourceType() {
+			return Patient.class;
+		}
+		@Create()
+		public MethodOutcome create(@ResourceParam Patient theIdParam) {
+			assertNull(theIdParam.getIdElement().getIdPart());
+			theIdParam.setId("1");
+			theIdParam.getMeta().setVersionId("1");
+			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(ourReturnOo).setResource(theIdParam);
+		}
+	}
+
+	public static class PatientProviderSearch implements IResourceProvider {
+
+
+		@Override
+		public Class<Patient> getResourceType() {
+			return Patient.class;
+		}
+
+
 		@Search
 		public List<IBaseResource> search() {
 			ArrayList<IBaseResource> retVal = new ArrayList<IBaseResource>();
diff --git a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/HistoryDstu2Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/HistoryR4Test.java
similarity index 57%
rename from hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/HistoryDstu2Test.java
rename to hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/HistoryR4Test.java
index 7728fa3f41c..492375ac3d6 100644
--- a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/HistoryDstu2Test.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/HistoryR4Test.java
@@ -1,13 +1,14 @@
 package ca.uhn.fhir.rest.server;
 
-import static org.junit.Assert.*;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.annotation.*;
+import ca.uhn.fhir.rest.param.DateRangeParam;
+import ca.uhn.fhir.rest.param.ParamPrefixEnum;
+import ca.uhn.fhir.util.PortUtil;
+import ca.uhn.fhir.util.TestUtil;
+import com.google.common.base.Charsets;
 import org.apache.commons.io.IOUtils;
-import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
@@ -15,65 +16,53 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
+import org.hl7.fhir.instance.model.api.IPrimitiveType;
+import org.hl7.fhir.r4.model.*;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.model.dstu2.resource.Bundle;
-import ca.uhn.fhir.model.dstu2.resource.Patient;
-import ca.uhn.fhir.model.primitive.IdDt;
-import ca.uhn.fhir.model.primitive.InstantDt;
-import ca.uhn.fhir.rest.annotation.At;
-import ca.uhn.fhir.rest.annotation.History;
-import ca.uhn.fhir.rest.annotation.IdParam;
-import ca.uhn.fhir.rest.annotation.Read;
-import ca.uhn.fhir.rest.annotation.Since;
-import ca.uhn.fhir.rest.param.DateRangeParam;
-import ca.uhn.fhir.rest.param.ParamPrefixEnum;
-import ca.uhn.fhir.util.PortUtil;
-import ca.uhn.fhir.util.TestUtil;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
 
-public class HistoryDstu2Test {
+import static org.junit.Assert.*;
 
+public class HistoryR4Test {
+
+	private static final Logger ourLog = LoggerFactory.getLogger(HistoryR4Test.class);
 	private static CloseableHttpClient ourClient;
-	private static FhirContext ourCtx = FhirContext.forDstu2();
+	private static FhirContext ourCtx = FhirContext.forR4();
 	private static DateRangeParam ourLastAt;
-
-	private static InstantDt ourLastSince;
+	private static InstantType ourLastSince;
+	private static IPrimitiveType<Date> ourLastSince2;
+	private static IPrimitiveType<String> ourLastSince3;
+	private static IPrimitiveType<?> ourLastSince4;
 	private static int ourPort;
-
 	private static Server ourServer;
 
 	@Before
 	public void before() {
 		ourLastAt = null;
 		ourLastSince = null;
-	}
-
-	@Test
-	public void testSince() throws Exception {
-		{
-			HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/_history?_since=2005");
-			HttpResponse status = ourClient.execute(httpGet);
-			IOUtils.closeQuietly(status.getEntity().getContent());
-
-			assertEquals(200, status.getStatusLine().getStatusCode());
-
-			assertEquals(null, ourLastAt);
-			assertEquals("2005", ourLastSince.getValueAsString());
-		}
+		ourLastSince2 = null;
+		ourLastSince3 = null;
+		ourLastSince4 = null;
 	}
 
 	@Test
 	public void testAt() throws Exception {
 		{
 			HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/_history?_at=gt2001&_at=lt2005");
-			HttpResponse status = ourClient.execute(httpGet);
-			IOUtils.closeQuietly(status.getEntity().getContent());
-
-			assertEquals(200, status.getStatusLine().getStatusCode());
+			try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+				String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+				ourLog.info(responseContent);
+				assertEquals(200, status.getStatusLine().getStatusCode());
+			}
 
 			assertEquals(ParamPrefixEnum.GREATERTHAN, ourLastAt.getLowerBound().getPrefix());
 			assertEquals("2001", ourLastAt.getLowerBound().getValueAsString());
@@ -86,56 +75,79 @@ public class HistoryDstu2Test {
 	public void testInstanceHistory() throws Exception {
 		{
 			HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/123/_history?_pretty=true");
-			HttpResponse status = ourClient.execute(httpGet);
-			String responseContent = IOUtils.toString(status.getEntity().getContent());
-			IOUtils.closeQuietly(status.getEntity().getContent());
-
-			ourLog.info(responseContent);
-			
-			assertEquals(200, status.getStatusLine().getStatusCode());
+			String responseContent;
+			try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+				responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+				ourLog.info(responseContent);
+				assertEquals(200, status.getStatusLine().getStatusCode());
+			}
 
 			Bundle bundle = ourCtx.newXmlParser().parseResource(Bundle.class, responseContent);
 			assertEquals(2, bundle.getEntry().size());
-			assertEquals("http://localhost:" + ourPort + "/Patient/ih1/_history/1", bundle.getEntry().get(0).getResource().getId().getValue());
-			assertEquals("http://localhost:" + ourPort + "/Patient/ih1/_history/2", bundle.getEntry().get(1).getResource().getId().getValue());
+			assertEquals("http://localhost:" + ourPort + "/Patient/ih1/_history/1", bundle.getEntry().get(0).getResource().getId());
+			assertEquals("http://localhost:" + ourPort + "/Patient/ih1/_history/2", bundle.getEntry().get(1).getResource().getId());
 
 		}
-	}private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(HistoryDstu2Test.class);
+	}
 
 	@Test
 	public void testServerHistory() throws Exception {
 		{
 			HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/_history");
-			HttpResponse status = ourClient.execute(httpGet);
-			String responseContent = IOUtils.toString(status.getEntity().getContent());
-			IOUtils.closeQuietly(status.getEntity().getContent());
-
-			assertEquals(200, status.getStatusLine().getStatusCode());
+			String responseContent;
+			try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+				responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+				ourLog.info(responseContent);
+				assertEquals(200, status.getStatusLine().getStatusCode());
+			}
 
 			Bundle bundle = ourCtx.newXmlParser().parseResource(Bundle.class, responseContent);
 			assertEquals(2, bundle.getEntry().size());
-			assertEquals("http://localhost:" + ourPort + "/Patient/h1/_history/1", bundle.getEntry().get(0).getResource().getId().getValue());
-			assertEquals("http://localhost:" + ourPort + "/Patient/h1/_history/2", bundle.getEntry().get(1).getResource().getId().getValue());
+			assertEquals("http://localhost:" + ourPort + "/Patient/h1/_history/1", bundle.getEntry().get(0).getResource().getId());
+			assertEquals("http://localhost:" + ourPort + "/Patient/h1/_history/2", bundle.getEntry().get(1).getResource().getId());
 
 		}
 	}
 
+	@Test
+	public void testSince() throws Exception {
+		{
+			HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/_history?_since=2005");
+			String responseContent;
+			try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+				responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+				ourLog.info(responseContent);
+				assertEquals(200, status.getStatusLine().getStatusCode());
+			}
+
+			assertEquals(null, ourLastAt);
+			assertEquals("2005", ourLastSince.getValueAsString());
+			assertEquals("2005", ourLastSince2.getValueAsString());
+			assertTrue(DateTimeType.class.equals(ourLastSince2.getClass()));
+			assertEquals("2005", ourLastSince3.getValueAsString());
+			assertTrue(StringType.class.equals(ourLastSince3.getClass()));
+			assertEquals("2005", ourLastSince4.getValueAsString());
+			assertTrue(StringType.class.equals(ourLastSince4.getClass()));
+		}
+	}
+
 	@Test
 	public void testTypeHistory() throws Exception {
 		{
 			HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/_history");
-			HttpResponse status = ourClient.execute(httpGet);
-			String responseContent = IOUtils.toString(status.getEntity().getContent());
-			IOUtils.closeQuietly(status.getEntity().getContent());
-
-			assertEquals(200, status.getStatusLine().getStatusCode());
+			String responseContent;
+			try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+				responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+				ourLog.info(responseContent);
+				assertEquals(200, status.getStatusLine().getStatusCode());
+			}
 
 			assertNull(ourLastAt);
 
 			Bundle bundle = ourCtx.newXmlParser().parseResource(Bundle.class, responseContent);
 			assertEquals(2, bundle.getEntry().size());
-			assertEquals("http://localhost:" + ourPort + "/Patient/th1/_history/1", bundle.getEntry().get(0).getResource().getId().getValue());
-			assertEquals("http://localhost:" + ourPort + "/Patient/th1/_history/2", bundle.getEntry().get(1).getResource().getId().getValue());
+			assertEquals("http://localhost:" + ourPort + "/Patient/th1/_history/1", bundle.getEntry().get(0).getResource().getId());
+			assertEquals("http://localhost:" + ourPort + "/Patient/th1/_history/2", bundle.getEntry().get(1).getResource().getId());
 
 		}
 	}
@@ -147,14 +159,15 @@ public class HistoryDstu2Test {
 	public void testVread() throws Exception {
 		{
 			HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/123/_history/456");
-			HttpResponse status = ourClient.execute(httpGet);
-			String responseContent = IOUtils.toString(status.getEntity().getContent());
-			IOUtils.closeQuietly(status.getEntity().getContent());
-
-			assertEquals(200, status.getStatusLine().getStatusCode());
+			String responseContent;
+			try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+				responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+				ourLog.info(responseContent);
+				assertEquals(200, status.getStatusLine().getStatusCode());
+			}
 
 			Patient bundle = ourCtx.newXmlParser().parseResource(Patient.class, responseContent);
-			assertEquals("vread", bundle.getNameFirstRep().getFamilyFirstRep().getValue());
+			assertEquals("vread", bundle.getNameFirstRep().getFamily());
 		}
 	}
 
@@ -191,20 +204,27 @@ public class HistoryDstu2Test {
 	public static class DummyPlainProvider {
 
 		@History
-		public List<Patient> history(@Since InstantDt theSince, @At DateRangeParam theAt) {
+		public List<Patient> history(@Since InstantType theSince,
+											  @Since IPrimitiveType<Date> theSince2,
+											  @Since IPrimitiveType<String> theSince3,
+											  @Since IPrimitiveType theSince4,
+											  @At DateRangeParam theAt) {
 			ourLastAt = theAt;
 			ourLastSince = theSince;
+			ourLastSince2 = theSince2;
+			ourLastSince3 = theSince3;
+			ourLastSince4 = theSince4;
 
-			ArrayList<Patient> retVal = new ArrayList<Patient>();
+			ArrayList<Patient> retVal = new ArrayList<>();
 
 			Patient patient = new Patient();
 			patient.setId("Patient/h1/_history/1");
-			patient.addName().addFamily("history");
+			patient.addName().setFamily("history");
 			retVal.add(patient);
 
 			Patient patient2 = new Patient();
 			patient2.setId("Patient/h1/_history/2");
-			patient2.addName().addFamily("history");
+			patient2.addName().setFamily("history");
 			retVal.add(patient2);
 
 			return retVal;
@@ -220,17 +240,17 @@ public class HistoryDstu2Test {
 		}
 
 		@History
-		public List<Patient> instanceHistory(@IdParam IdDt theId) {
-			ArrayList<Patient> retVal = new ArrayList<Patient>();
+		public List<Patient> instanceHistory(@IdParam IdType theId) {
+			ArrayList<Patient> retVal = new ArrayList<>();
 
 			Patient patient = new Patient();
 			patient.setId("Patient/ih1/_history/1");
-			patient.addName().addFamily("history");
+			patient.addName().setFamily("history");
 			retVal.add(patient);
 
 			Patient patient2 = new Patient();
 			patient2.setId("Patient/ih1/_history/2");
-			patient2.addName().addFamily("history");
+			patient2.addName().setFamily("history");
 			retVal.add(patient2);
 
 			return retVal;
@@ -238,25 +258,25 @@ public class HistoryDstu2Test {
 
 		@History
 		public List<Patient> typeHistory() {
-			ArrayList<Patient> retVal = new ArrayList<Patient>();
+			ArrayList<Patient> retVal = new ArrayList<>();
 
 			Patient patient = new Patient();
 			patient.setId("Patient/th1/_history/1");
-			patient.addName().addFamily("history");
+			patient.addName().setFamily("history");
 			retVal.add(patient);
 
 			Patient patient2 = new Patient();
 			patient2.setId("Patient/th1/_history/2");
-			patient2.addName().addFamily("history");
+			patient2.addName().setFamily("history");
 			retVal.add(patient2);
 
 			return retVal;
 		}
 
 		@Read(version = true)
-		public Patient vread(@IdParam IdDt theId) {
+		public Patient vread(@IdParam IdType theId) {
 			Patient retVal = new Patient();
-			retVal.addName().addFamily("vread");
+			retVal.addName().setFamily("vread");
 			retVal.setId(theId);
 			return retVal;
 		}
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/PagingUsingNamedPagesR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/PagingUsingNamedPagesR4Test.java
new file mode 100644
index 00000000000..2249738da8e
--- /dev/null
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/PagingUsingNamedPagesR4Test.java
@@ -0,0 +1,246 @@
+package ca.uhn.fhir.rest.server;
+
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.annotation.Search;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.EncodingEnum;
+import ca.uhn.fhir.rest.api.server.IBundleProvider;
+import ca.uhn.fhir.util.PortUtil;
+import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.UrlUtil;
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.Validate;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.config.SocketConfig;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.r4.model.Bundle;
+import org.hl7.fhir.r4.model.Patient;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.ArgumentMatchers.nullable;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class PagingUsingNamedPagesR4Test {
+
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(PagingUsingNamedPagesR4Test.class);
+	private static CloseableHttpClient ourClient;
+	private static FhirContext ourCtx = FhirContext.forR4();
+	private static int ourPort;
+
+	private static Server ourServer;
+	private static RestfulServer servlet;
+	private static IBundleProvider ourNextBundleProvider;
+	private IPagingProvider myPagingProvider;
+
+	@Before
+	public void before() {
+		myPagingProvider = mock(IPagingProvider.class);
+		servlet.setPagingProvider(myPagingProvider);
+		ourNextBundleProvider = null;
+	}
+
+	private List<IBaseResource> createPatients(int theLow, int theHigh) {
+		List<IBaseResource> patients = new ArrayList<>();
+		for (int id = theLow; id <= theHigh; id++) {
+			Patient pt = new Patient();
+			pt.setId("Patient/" + id);
+			pt.addName().setFamily("FAM" + id);
+			patients.add(pt);
+		}
+		return patients;
+	}
+
+	private Bundle executeAndReturnBundle(HttpGet httpGet, EncodingEnum theExpectEncoding) throws IOException {
+		Bundle bundle;
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
+			ourLog.info(responseContent);
+			assertEquals(200, status.getStatusLine().getStatusCode());
+			EncodingEnum ct = EncodingEnum.forContentType(status.getEntity().getContentType().getValue().replaceAll(";.*", "").trim());
+			assertEquals(theExpectEncoding, ct);
+			assert ct != null;
+			bundle = ct.newParser(ourCtx).parseResource(Bundle.class, responseContent);
+			assertEquals(10, bundle.getEntry().size());
+		}
+		return bundle;
+	}
+
+	@Test
+	public void testPaging() throws Exception {
+
+		List<IBaseResource> patients0 = createPatients(0, 9);
+		BundleProviderWithNamedPages provider0 = new BundleProviderWithNamedPages(patients0, "SEARCHID0", "PAGEID0", 1000);
+		provider0.setNextPageId("PAGEID1");
+		when(myPagingProvider.retrieveResultList(eq("SEARCHID0"), eq("PAGEID0"))).thenReturn(provider0);
+
+		List<IBaseResource> patients1 = createPatients(10, 19);
+		BundleProviderWithNamedPages provider1 = new BundleProviderWithNamedPages(patients1, "SEARCHID0", "PAGEID1", 1000);
+		provider1.setPreviousPageId("PAGEID0");
+		provider1.setNextPageId("PAGEID2");
+		when(myPagingProvider.retrieveResultList(eq("SEARCHID0"), eq("PAGEID1"))).thenReturn(provider1);
+
+		List<IBaseResource> patients2 = createPatients(20, 29);
+		BundleProviderWithNamedPages provider2 = new BundleProviderWithNamedPages(patients2, "SEARCHID0", "PAGEID2", 1000);
+		provider2.setPreviousPageId("PAGEID1");
+		when(myPagingProvider.retrieveResultList(eq("SEARCHID0"), eq("PAGEID2"))).thenReturn(provider2);
+
+		ourNextBundleProvider = provider0;
+
+		HttpGet httpGet;
+		String linkSelf;
+		String linkNext;
+		String linkPrev;
+		Bundle bundle;
+
+		// Initial search
+		httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?_format=xml");
+		bundle = executeAndReturnBundle(httpGet, EncodingEnum.XML);
+		linkSelf = bundle.getLink(Constants.LINK_SELF).getUrl();
+		assertEquals("http://localhost:" + ourPort + "/Patient?_format=xml", linkSelf);
+		linkNext = bundle.getLink(Constants.LINK_NEXT).getUrl();
+		assertEquals("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_pageId=PAGEID1&_format=xml&_bundletype=searchset", linkNext);
+		assertNull(bundle.getLink(Constants.LINK_PREVIOUS));
+
+		// Fetch the next page
+		httpGet = new HttpGet(linkNext);
+		bundle = executeAndReturnBundle(httpGet, EncodingEnum.XML);
+		linkSelf = bundle.getLink(Constants.LINK_SELF).getUrl();
+		assertEquals("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_pageId=PAGEID1&_format=xml&_bundletype=searchset", linkSelf);
+		linkNext = bundle.getLink(Constants.LINK_NEXT).getUrl();
+		assertEquals("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_pageId=PAGEID2&_format=xml&_bundletype=searchset", linkNext);
+		linkPrev = bundle.getLink(Constants.LINK_PREVIOUS).getUrl();
+		assertEquals("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_pageId=PAGEID0&_format=xml&_bundletype=searchset", linkPrev);
+
+		// Fetch the next page
+		httpGet = new HttpGet(linkNext);
+		bundle = executeAndReturnBundle(httpGet, EncodingEnum.XML);
+		linkSelf = bundle.getLink(Constants.LINK_SELF).getUrl();
+		assertEquals("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_pageId=PAGEID2&_format=xml&_bundletype=searchset", linkSelf);
+		assertNull(bundle.getLink(Constants.LINK_NEXT));
+		linkPrev = bundle.getLink(Constants.LINK_PREVIOUS).getUrl();
+		assertEquals("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_pageId=PAGEID1&_format=xml&_bundletype=searchset", linkPrev);
+	}
+
+	@Test
+	public void testPagingLinkUnknownPage() throws Exception {
+
+		when(myPagingProvider.retrieveResultList(nullable(String.class))).thenReturn(null);
+		when(myPagingProvider.retrieveResultList(nullable(String.class), nullable(String.class))).thenReturn(null);
+
+		// With ID
+		HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_pageId=PAGEID0&_format=xml&_bundletype=FOO" + UrlUtil.escapeUrlParam("\""));
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
+			ourLog.info(responseContent);
+			assertThat(responseContent, not(containsString("FOO\"")));
+			assertEquals(410, status.getStatusLine().getStatusCode());
+		}
+
+		// Without ID
+		httpGet = new HttpGet("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_format=xml&_bundletype=FOO" + UrlUtil.escapeUrlParam("\""));
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
+			ourLog.info(responseContent);
+			assertThat(responseContent, not(containsString("FOO\"")));
+			assertEquals(410, status.getStatusLine().getStatusCode());
+		}
+
+	}
+
+	@Test
+	public void testPagingLinksSanitizeBundleType() throws Exception {
+
+		List<IBaseResource> patients0 = createPatients(0, 9);
+		BundleProviderWithNamedPages provider0 = new BundleProviderWithNamedPages(patients0, "SEARCHID0", "PAGEID0", 1000);
+		provider0.setNextPageId("PAGEID1");
+		when(myPagingProvider.retrieveResultList(eq("SEARCHID0"), eq("PAGEID0"))).thenReturn(provider0);
+
+		// Initial search
+		HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "?_getpages=SEARCHID0&_pageId=PAGEID0&_format=xml&_bundletype=FOO" + UrlUtil.escapeUrlParam("\""));
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
+			ourLog.info(responseContent);
+			assertThat(responseContent, not(containsString("FOO\"")));
+			assertEquals(200, status.getStatusLine().getStatusCode());
+			EncodingEnum ct = EncodingEnum.forContentType(status.getEntity().getContentType().getValue().replaceAll(";.*", "").trim());
+			assert ct != null;
+			Bundle bundle = EncodingEnum.XML.newParser(ourCtx).parseResource(Bundle.class, responseContent);
+			assertEquals(10, bundle.getEntry().size());
+		}
+
+	}
+
+	@AfterClass
+	public static void afterClassClearContext() throws Exception {
+		ourServer.stop();
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	@BeforeClass
+	public static void beforeClass() throws Exception {
+		ourPort = PortUtil.findFreePort();
+		ourServer = new Server(ourPort);
+
+		DummyPatientResourceProvider patientProvider = new DummyPatientResourceProvider();
+
+		ServletHandler proxyHandler = new ServletHandler();
+		servlet = new RestfulServer(ourCtx);
+		servlet.setDefaultResponseEncoding(EncodingEnum.JSON);
+		servlet.setPagingProvider(new FifoMemoryPagingProvider(10));
+
+		servlet.setResourceProviders(patientProvider);
+		ServletHolder servletHolder = new ServletHolder(servlet);
+		proxyHandler.addServletWithMapping(servletHolder, "/*");
+		ourServer.setHandler(proxyHandler);
+		ourServer.start();
+
+		PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS);
+		HttpClientBuilder builder = HttpClientBuilder.create();
+		builder.setConnectionManager(connectionManager);
+		builder.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(600000).build());
+		ourClient = builder.build();
+
+	}
+
+	public static class DummyPatientResourceProvider implements IResourceProvider {
+
+
+		@Override
+		public Class<? extends IBaseResource> getResourceType() {
+			return Patient.class;
+		}
+
+		@SuppressWarnings("rawtypes")
+		@Search()
+		public IBundleProvider search() {
+			IBundleProvider retVal = ourNextBundleProvider;
+			Validate.notNull(retVal);
+			ourNextBundleProvider = null;
+			return retVal;
+		}
+
+	}
+
+
+}
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeR4Test.java
index 98768af1279..f7f3edc2168 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeR4Test.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/ServerMimetypeR4Test.java
@@ -1,16 +1,25 @@
 package ca.uhn.fhir.rest.server;
 
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.rest.annotation.*;
-import ca.uhn.fhir.rest.api.Constants;
-import ca.uhn.fhir.rest.api.EncodingEnum;
-import ca.uhn.fhir.rest.api.MethodOutcome;
-import ca.uhn.fhir.rest.client.MyPatientWithExtensions;
-import ca.uhn.fhir.util.PortUtil;
-import ca.uhn.fhir.util.TestUtil;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpResponse;
-import org.apache.http.client.methods.*;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpRequestBase;
+import org.apache.http.client.methods.HttpTrace;
 import org.apache.http.entity.ContentType;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
@@ -20,21 +29,29 @@ import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.hl7.fhir.instance.model.api.IBaseResource;
-import org.hl7.fhir.r4.model.*;
+import org.hl7.fhir.r4.model.CapabilityStatement;
+import org.hl7.fhir.r4.model.CodeType;
+import org.hl7.fhir.r4.model.DateType;
+import org.hl7.fhir.r4.model.IdType;
+import org.hl7.fhir.r4.model.OperationOutcome;
+import org.hl7.fhir.r4.model.Patient;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.io.IOException;
-import java.net.URI;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.annotation.Create;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Read;
+import ca.uhn.fhir.rest.annotation.ResourceParam;
+import ca.uhn.fhir.rest.annotation.Search;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.api.EncodingEnum;
+import ca.uhn.fhir.rest.api.MethodOutcome;
+import ca.uhn.fhir.rest.client.MyPatientWithExtensions;
+import ca.uhn.fhir.util.PortUtil;
+import ca.uhn.fhir.util.TestUtil;
 
 public class ServerMimetypeR4Test {
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ServerMimetypeR4Test.class);
@@ -80,6 +97,7 @@ public class ServerMimetypeR4Test {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\"},\"name\":[{\"family\":\"FAMILY\"}]}";
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON + "; charset=utf-8")));
@@ -92,17 +110,19 @@ public class ServerMimetypeR4Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
-	public void testCreateWithJsonNewNoAcceptHeader() throws Exception {
+	public void testCreateWithJsonNewNoAcceptHeaderReturnsOperationOutcome() throws Exception {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}";
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON_NEW + "; charset=utf-8")));
+		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		HttpResponse status = ourClient.execute(httpPost);
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
@@ -112,7 +132,7 @@ public class ServerMimetypeR4Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON_NEW, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -120,6 +140,7 @@ public class ServerMimetypeR4Test {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newJsonParser().encodeResourceToString(p);
+		String expectedResponseContent = "{\"resourceType\":\"Patient\",\"id\":\"1\",\"meta\":{\"versionId\":\"1\"},\"name\":[{\"family\":\"FAMILY\"}]}";
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_JSON + "; charset=utf-8")));
@@ -133,17 +154,19 @@ public class ServerMimetypeR4Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_JSON_NEW, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("{\"resourceType\":\"OperationOutcome\",\"issue\":[{\"diagnostics\":\"FAMILY\"}]}", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
-	public void testCreateWithXmlLegacyNoAcceptHeader() throws Exception {
+	public void testCreateWithXmlLegacyNoAcceptHeaderReturnsOperationOutcome() throws Exception {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>";
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
+		httpPost.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RETURN + "=" + Constants.HEADER_PREFER_RETURN_OPERATION_OUTCOME);
 		HttpResponse status = ourClient.execute(httpPost);
 
 		String responseContent = IOUtils.toString(status.getEntity().getContent(), StandardCharsets.UTF_8);
@@ -153,7 +176,7 @@ public class ServerMimetypeR4Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -161,6 +184,7 @@ public class ServerMimetypeR4Test {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<Patient xmlns=\"http://hl7.org/fhir\"><id value=\"1\"/><meta><versionId value=\"1\"/></meta><name><family value=\"FAMILY\"/></name></Patient>";
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML_NEW + "; charset=utf-8")));
@@ -173,7 +197,7 @@ public class ServerMimetypeR4Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML_NEW, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -181,6 +205,7 @@ public class ServerMimetypeR4Test {
 		Patient p = new Patient();
 		p.addName().setFamily("FAMILY");
 		String enc = ourCtx.newXmlParser().encodeResourceToString(p);
+		String expectedResponseContent = "<Patient xmlns=\"http://hl7.org/fhir\"><id value=\"1\"/><meta><versionId value=\"1\"/></meta><name><family value=\"FAMILY\"/></name></Patient>";
 
 		HttpPost httpPost = new HttpPost("http://localhost:" + ourPort + "/Patient");
 		httpPost.setEntity(new StringEntity(enc, ContentType.parse(Constants.CT_FHIR_XML + "; charset=utf-8")));
@@ -194,7 +219,7 @@ public class ServerMimetypeR4Test {
 
 		assertEquals(201, status.getStatusLine().getStatusCode());
 		assertEquals(Constants.CT_FHIR_XML_NEW, status.getFirstHeader("content-type").getValue().replaceAll(";.*", ""));
-		assertEquals("<OperationOutcome xmlns=\"http://hl7.org/fhir\"><issue><diagnostics value=\"FAMILY\"/></issue></OperationOutcome>", responseContent);
+		assertEquals(expectedResponseContent, responseContent);
 	}
 
 	@Test
@@ -416,7 +441,11 @@ public class ServerMimetypeR4Test {
 		public MethodOutcome create(@ResourceParam Patient theIdParam) {
 			OperationOutcome oo = new OperationOutcome();
 			oo.addIssue().setDiagnostics(theIdParam.getNameFirstRep().getFamily());
-			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(oo);
+			
+			theIdParam.setId("1");
+			theIdParam.getMeta().setVersionId("1");
+			
+			return new MethodOutcome(new IdType("Patient", "1"), true).setOperationOutcome(oo).setResource(theIdParam);
 		}
 
 		@Override
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/AuthorizationInterceptorR4Test.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/AuthorizationInterceptorR4Test.java
index 2809a3d7d7f..152c8b86fb0 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/AuthorizationInterceptorR4Test.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/AuthorizationInterceptorR4Test.java
@@ -18,6 +18,7 @@ import ca.uhn.fhir.rest.server.interceptor.auth.*;
 import ca.uhn.fhir.rest.server.tenant.UrlBaseTenantIdentificationStrategy;
 import ca.uhn.fhir.util.PortUtil;
 import ca.uhn.fhir.util.TestUtil;
+import com.google.common.base.Charsets;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
@@ -49,6 +50,9 @@ import java.util.concurrent.TimeUnit;
 import static org.apache.commons.lang3.StringUtils.isNotBlank;
 import static org.hamcrest.Matchers.containsString;
 import static org.junit.Assert.*;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 public class AuthorizationInterceptorR4Test {
 
@@ -84,6 +88,16 @@ public class AuthorizationInterceptorR4Test {
 		return retVal;
 	}
 
+	private Resource createDiagnosticReport(Integer theId, String theSubjectId) {
+		DiagnosticReport retVal = new DiagnosticReport();
+		if (theId != null) {
+			retVal.setId(new IdType("DiagnosticReport", (long) theId));
+		}
+		retVal.getCode().setText("OBS");
+		retVal.setSubject(new Reference(theSubjectId));
+		return retVal;
+	}
+
 	private HttpEntity createFhirResourceEntity(IBaseResource theResource) {
 		String out = ourCtx.newJsonParser().encodeResourceToString(theResource);
 		return new StringEntity(out, ContentType.create(Constants.CT_FHIR_JSON, "UTF-8"));
@@ -99,16 +113,6 @@ public class AuthorizationInterceptorR4Test {
 		return retVal;
 	}
 
-	private Resource createDiagnosticReport(Integer theId, String theSubjectId) {
-		DiagnosticReport retVal = new DiagnosticReport();
-		if (theId != null) {
-			retVal.setId(new IdType("DiagnosticReport", (long) theId));
-		}
-		retVal.getCode().setText("OBS");
-		retVal.setSubject(new Reference(theSubjectId));
-		return retVal;
-	}
-
 	private Organization createOrganization(int theIndex) {
 		Organization retVal = new Organization();
 		retVal.setId("" + theIndex);
@@ -1583,6 +1587,46 @@ public class AuthorizationInterceptorR4Test {
 		assertFalse(ourHitMethod);
 	}
 
+
+	@Test
+	public void testOperationTypeLevelDifferentBodyType() throws Exception {
+		ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
+			@Override
+			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
+				return new RuleBuilder()
+					.allow("RULE 1").operation().named("process-message").onType(MessageHeader.class).andThen()
+					.build();
+			}
+		});
+
+		HttpPost httpPost;
+		HttpResponse status;
+		String response;
+
+		Bundle input = new Bundle();
+		input.setType(Bundle.BundleType.MESSAGE);
+		String inputString = ourCtx.newJsonParser().encodeResourceToString(input);
+
+		// With body
+		ourHitMethod = false;
+		httpPost = new HttpPost("http://localhost:" + ourPort + "/MessageHeader/$process-message");
+		httpPost.setEntity(new StringEntity(inputString, ContentType.create(Constants.CT_FHIR_JSON_NEW, Charsets.UTF_8)));
+		status = ourClient.execute(httpPost);
+		response = extractResponseAndClose(status);
+		ourLog.info(response);
+		assertEquals(200, status.getStatusLine().getStatusCode());
+		assertTrue(ourHitMethod);
+
+		// With body
+		ourHitMethod = false;
+		HttpGet httpGet = new HttpGet("http://localhost:" + ourPort + "/MessageHeader/$process-message");
+		status = ourClient.execute(httpGet);
+		response = extractResponseAndClose(status);
+		ourLog.info(response);
+		assertEquals(200, status.getStatusLine().getStatusCode());
+		assertTrue(ourHitMethod);
+	}
+
 	@Test
 	public void testOperationWithTester() throws Exception {
 		ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
@@ -1622,6 +1666,56 @@ public class AuthorizationInterceptorR4Test {
 		assertEquals(false, ourHitMethod);
 	}
 
+	@Test
+	public void testPatchAllowed() throws IOException {
+		Observation obs = new Observation();
+		obs.setSubject(new Reference("Patient/999"));
+
+		ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
+			@Override
+			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
+				return new RuleBuilder()
+					.allow().patch().allRequests().andThen()
+					.build();
+			}
+		});
+
+		String patchBody = "[\n" +
+			"     { \"op\": \"replace\", \"path\": \"Observation/status\", \"value\": \"amended\" }\n" +
+			"     ]";
+		HttpPatch patch = new HttpPatch("http://localhost:" + ourPort + "/Observation/123");
+		patch.setEntity(new StringEntity(patchBody, ContentType.create(Constants.CT_JSON_PATCH, Charsets.UTF_8)));
+		CloseableHttpResponse status = ourClient.execute(patch);
+		extractResponseAndClose(status);
+		assertEquals(200, status.getStatusLine().getStatusCode());
+		assertTrue(ourHitMethod);
+	}
+
+	@Test
+	public void testPatchNotAllowed() throws IOException {
+		Observation obs = new Observation();
+		obs.setSubject(new Reference("Patient/999"));
+
+		ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
+			@Override
+			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
+				return new RuleBuilder()
+					.allow().metadata().andThen()
+					.build();
+			}
+		});
+
+		String patchBody = "[\n" +
+			"     { \"op\": \"replace\", \"path\": \"Observation/status\", \"value\": \"amended\" }\n" +
+			"     ]";
+		HttpPatch patch = new HttpPatch("http://localhost:" + ourPort + "/Observation/123");
+		patch.setEntity(new StringEntity(patchBody, ContentType.create(Constants.CT_JSON_PATCH, Charsets.UTF_8)));
+		CloseableHttpResponse status = ourClient.execute(patch);
+		extractResponseAndClose(status);
+		assertEquals(403, status.getStatusLine().getStatusCode());
+		assertFalse(ourHitMethod);
+	}
+
 	@Test
 	public void testReadByAnyId() throws Exception {
 		ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
@@ -1816,6 +1910,43 @@ public class AuthorizationInterceptorR4Test {
 
 	}
 
+	@Test
+	public void testReadByCompartmentReadByIdParam() throws Exception {
+		ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
+			@Override
+			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
+				return new RuleBuilder()
+					.allow("Rule 1").read().allResources().inCompartment("Patient", new IdType("Patient/1")).andThen()
+					.build();
+			}
+		});
+
+		HttpGet httpGet;
+		HttpResponse status;
+
+		ourReturn = Collections.singletonList(createPatient(1));
+		ourHitMethod = false;
+		httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?_id=Patient/1");
+		status = ourClient.execute(httpGet);
+		extractResponseAndClose(status);
+		assertEquals(200, status.getStatusLine().getStatusCode());
+		assertTrue(ourHitMethod);
+
+		ourReturn = Collections.singletonList(createPatient(1));
+		ourHitMethod = false;
+		httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?_id=1");
+		status = ourClient.execute(httpGet);
+		extractResponseAndClose(status);
+		assertEquals(200, status.getStatusLine().getStatusCode());
+		assertTrue(ourHitMethod);
+
+		ourHitMethod = false;
+		httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?_id=Patient/2");
+		status = ourClient.execute(httpGet);
+		extractResponseAndClose(status);
+		assertEquals(403, status.getStatusLine().getStatusCode());
+		assertFalse(ourHitMethod);
+	}
 
 	@Test
 	public void testReadByCompartmentReadByPatientParam() throws Exception {
@@ -1856,45 +1987,6 @@ public class AuthorizationInterceptorR4Test {
 		assertFalse(ourHitMethod);
 	}
 
-		@Test
-	public void testReadByCompartmentReadByIdParam() throws Exception {
-		ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
-			@Override
-			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
-				return new RuleBuilder()
-					.allow("Rule 1").read().allResources().inCompartment("Patient", new IdType("Patient/1")).andThen()
-					.build();
-			}
-		});
-
-		HttpGet httpGet;
-		HttpResponse status;
-
-		ourReturn = Collections.singletonList(createPatient(1));
-		ourHitMethod = false;
-		httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?_id=Patient/1");
-		status = ourClient.execute(httpGet);
-		extractResponseAndClose(status);
-		assertEquals(200, status.getStatusLine().getStatusCode());
-		assertTrue(ourHitMethod);
-
-		ourReturn = Collections.singletonList(createPatient(1));
-		ourHitMethod = false;
-		httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?_id=1");
-		status = ourClient.execute(httpGet);
-		extractResponseAndClose(status);
-		assertEquals(200, status.getStatusLine().getStatusCode());
-		assertTrue(ourHitMethod);
-
-		ourHitMethod = false;
-		httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient?_id=Patient/2");
-		status = ourClient.execute(httpGet);
-		extractResponseAndClose(status);
-		assertEquals(403, status.getStatusLine().getStatusCode());
-		assertFalse(ourHitMethod);
-	}
-
-
 	@Test
 	public void testReadByCompartmentRight() throws Exception {
 		ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
@@ -2856,6 +2948,7 @@ public class AuthorizationInterceptorR4Test {
 			@Override
 			public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
 				return new RuleBuilder()
+					.allow("Rule 1").patch().allRequests().andThen()
 					.allow("Rule 1").write().instance("Patient/900").andThen()
 					.build();
 			}
@@ -2871,16 +2964,8 @@ public class AuthorizationInterceptorR4Test {
 		httpPost.setEntity(new StringEntity(input, ContentType.parse("application/json-patch+json")));
 		status = ourClient.execute(httpPost);
 		extractResponseAndClose(status);
-		assertEquals(204, status.getStatusLine().getStatusCode());
+		assertEquals(200, status.getStatusLine().getStatusCode());
 		assertTrue(ourHitMethod);
-
-		ourHitMethod = false;
-		httpPost = new HttpPatch("http://localhost:" + ourPort + "/Patient/999");
-		httpPost.setEntity(new StringEntity(input, ContentType.parse("application/json-patch+json")));
-		status = ourClient.execute(httpPost);
-		extractResponseAndClose(status);
-		assertEquals(403, status.getStatusLine().getStatusCode());
-		assertFalse(ourHitMethod);
 	}
 
 	@AfterClass
@@ -2901,12 +2986,13 @@ public class AuthorizationInterceptorR4Test {
 		DummyEncounterResourceProvider encProv = new DummyEncounterResourceProvider();
 		DummyCarePlanResourceProvider cpProv = new DummyCarePlanResourceProvider();
 		DummyDiagnosticReportResourceProvider drProv = new DummyDiagnosticReportResourceProvider();
+		DummyMessageHeaderResourceProvider mshProv = new DummyMessageHeaderResourceProvider();
 		PlainProvider plainProvider = new PlainProvider();
 
 		ServletHandler proxyHandler = new ServletHandler();
 		ourServlet = new RestfulServer(ourCtx);
 		ourServlet.setFhirContext(ourCtx);
-		ourServlet.setResourceProviders(patProvider, obsProv, encProv, cpProv, orgProv, drProv);
+		ourServlet.setResourceProviders(patProvider, obsProv, encProv, cpProv, orgProv, drProv, mshProv);
 		ourServlet.setPlainProviders(plainProvider);
 		ourServlet.setPagingProvider(new FifoMemoryPagingProvider(100));
 		ServletHolder servletHolder = new ServletHolder(ourServlet);
@@ -2982,6 +3068,22 @@ public class AuthorizationInterceptorR4Test {
 
 	}
 
+	public static class DummyMessageHeaderResourceProvider implements IResourceProvider {
+
+
+		@Override
+		public Class<? extends IBaseResource> getResourceType() {
+			return MessageHeader.class;
+		}
+
+		@Operation(name = "process-message", idempotent = true)
+		public Parameters operation0(@OperationParam(name="content") Bundle theInput) {
+			ourHitMethod = true;
+			return (Parameters) new Parameters().setId("1");
+		}
+
+	}
+
 	public static class DummyDiagnosticReportResourceProvider implements IResourceProvider {
 
 
@@ -2989,11 +3091,12 @@ public class AuthorizationInterceptorR4Test {
 		public Class<? extends IBaseResource> getResourceType() {
 			return DiagnosticReport.class;
 		}
+
 		@Search()
 		public List<Resource> search(
 			@OptionalParam(name = "subject") ReferenceParam theSubject,
 			@OptionalParam(name = "patient") ReferenceParam thePatient
-			) {
+		) {
 			ourHitMethod = true;
 			return ourReturn;
 		}
@@ -3041,6 +3144,12 @@ public class AuthorizationInterceptorR4Test {
 			return (Parameters) new Parameters().setId("1");
 		}
 
+		@Patch
+		public MethodOutcome patch(@IdParam IdType theId, PatchTypeEnum thePatchType, @ResourceParam String theBody) {
+			ourHitMethod = true;
+			return new MethodOutcome().setId(theId.withVersion("2"));
+		}
+
 		@Read(version = true)
 		public Observation read(@IdParam IdType theId) {
 			ourHitMethod = true;
@@ -3183,7 +3292,7 @@ public class AuthorizationInterceptorR4Test {
 		}
 
 		@Search()
-		public List<Resource> search(@OptionalParam(name="_id") IdType theIdParam) {
+		public List<Resource> search(@OptionalParam(name = "_id") IdType theIdParam) {
 			ourHitMethod = true;
 			return ourReturn;
 		}
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/InjectionAttackTest.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/InjectionAttackTest.java
new file mode 100644
index 00000000000..4d0c63f3727
--- /dev/null
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/InjectionAttackTest.java
@@ -0,0 +1,251 @@
+package ca.uhn.fhir.rest.server.interceptor;
+
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.OptionalParam;
+import ca.uhn.fhir.rest.annotation.Read;
+import ca.uhn.fhir.rest.annotation.Search;
+import ca.uhn.fhir.rest.api.Constants;
+import ca.uhn.fhir.rest.param.TokenParam;
+import ca.uhn.fhir.rest.server.IResourceProvider;
+import ca.uhn.fhir.rest.server.RestfulServer;
+import ca.uhn.fhir.util.PortUtil;
+import ca.uhn.fhir.util.TestUtil;
+import ca.uhn.fhir.util.UrlUtil;
+import com.google.common.base.Charsets;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+import org.hl7.fhir.r4.model.IdType;
+import org.hl7.fhir.r4.model.Patient;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.not;
+import static org.junit.Assert.*;
+
+public class InjectionAttackTest {
+	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(InjectionAttackTest.class);
+	private static CloseableHttpClient ourClient;
+	private static FhirContext ourCtx = FhirContext.forR4();
+	private static int ourPort;
+	private static Server ourServer;
+	private static RestfulServer ourServlet;
+
+	@Test
+	public void testPreventHtmlInjectionViaInvalidContentType() throws Exception {
+		String requestUrl = "http://localhost:" +
+			ourPort +
+			"/Patient/123";
+
+		// XML HTML
+		HttpGet httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, "application/<script>");
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(200, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+		}
+	}
+
+	@Test
+	public void testPreventHtmlInjectionViaInvalidParameterName() throws Exception {
+		String requestUrl = "http://localhost:" +
+			ourPort +
+			"/Patient?a" +
+			UrlUtil.escapeUrlParam("<script>") +
+			"=123";
+
+		// XML HTML
+		HttpGet httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, Constants.CT_HTML + ", " + Constants.CT_FHIR_XML_NEW);
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(400, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+			assertEquals("text/html", status.getFirstHeader("Content-Type").getValue().toLowerCase().replaceAll(";.*", "").trim());
+		}
+
+		// JSON HTML
+		httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, Constants.CT_HTML + ", " + Constants.CT_FHIR_JSON_NEW);
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(400, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+			assertEquals("text/html", status.getFirstHeader("Content-Type").getValue().toLowerCase().replaceAll(";.*", "").trim());
+		}
+
+		// XML HTML
+		httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, Constants.CT_FHIR_XML_NEW);
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(400, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+			assertEquals(Constants.CT_FHIR_XML_NEW, status.getFirstHeader("Content-Type").getValue().toLowerCase().replaceAll(";.*", "").trim());
+		}
+
+		// JSON Plain
+		httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, Constants.CT_FHIR_JSON_NEW);
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(400, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+			assertEquals(Constants.CT_FHIR_JSON_NEW, status.getFirstHeader("Content-Type").getValue().toLowerCase().replaceAll(";.*", "").trim());
+		}
+	}
+
+	@Test
+	public void testPreventHtmlInjectionViaInvalidResourceType() throws Exception {
+		String requestUrl = "http://localhost:" +
+			ourPort +
+			"/AA" +
+			UrlUtil.escapeUrlParam("<script>");
+
+		// XML HTML
+		HttpGet httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, Constants.CT_HTML + ", " + Constants.CT_FHIR_XML_NEW);
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(404, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+			assertEquals("text/html", status.getFirstHeader("Content-Type").getValue().toLowerCase().replaceAll(";.*", "").trim());
+		}
+
+		// JSON HTML
+		httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, Constants.CT_HTML + ", " + Constants.CT_FHIR_JSON_NEW);
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(404, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+			assertEquals("text/html", status.getFirstHeader("Content-Type").getValue().toLowerCase().replaceAll(";.*", "").trim());
+		}
+
+		// XML HTML
+		httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, Constants.CT_FHIR_XML_NEW);
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(404, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+			assertEquals(Constants.CT_FHIR_XML_NEW, status.getFirstHeader("Content-Type").getValue().toLowerCase().replaceAll(";.*", "").trim());
+		}
+
+		// JSON Plain
+		httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, Constants.CT_FHIR_JSON_NEW);
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(404, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+			assertEquals(Constants.CT_FHIR_JSON_NEW, status.getFirstHeader("Content-Type").getValue().toLowerCase().replaceAll(";.*", "").trim());
+		}
+	}
+
+	@Test
+	public void testPreventHtmlInjectionViaInvalidTokenParamModifier() throws Exception {
+		String requestUrl = "http://localhost:" +
+			ourPort +
+			"/Patient?identifier:" +
+			UrlUtil.escapeUrlParam("<script>") +
+			"=123";
+		HttpGet httpGet = new HttpGet(requestUrl);
+		httpGet.addHeader(Constants.HEADER_ACCEPT, "application/<script>");
+		try (CloseableHttpResponse status = ourClient.execute(httpGet)) {
+			String responseContent = IOUtils.toString(status.getEntity().getContent(), Charsets.UTF_8);
+			ourLog.info(responseContent);
+
+			assertEquals(200, status.getStatusLine().getStatusCode());
+			assertThat(responseContent, not(containsString("<script>")));
+		}
+
+	}
+
+	@AfterClass
+	public static void afterClassClearContext() throws Exception {
+		ourServer.stop();
+		TestUtil.clearAllStaticFieldsForUnitTest();
+	}
+
+	@BeforeClass
+	public static void beforeClass() throws Exception {
+
+		ourPort = PortUtil.findFreePort();
+		ourServer = new Server(ourPort);
+
+		DummyPatientResourceProvider patientProvider = new DummyPatientResourceProvider();
+
+		ServletHandler proxyHandler = new ServletHandler();
+		ourServlet = new RestfulServer(ourCtx);
+		ourServlet.setFhirContext(ourCtx);
+		ourServlet.setResourceProviders(patientProvider);
+		ourServlet.registerInterceptor(new ResponseHighlighterInterceptor());
+		ServletHolder servletHolder = new ServletHolder(ourServlet);
+		proxyHandler.addServletWithMapping(servletHolder, "/*");
+		ourServer.setHandler(proxyHandler);
+		ourServer.start();
+
+		PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS);
+		HttpClientBuilder builder = HttpClientBuilder.create();
+		builder.setConnectionManager(connectionManager);
+		ourClient = builder.build();
+
+	}
+
+	public static class DummyPatientResourceProvider implements IResourceProvider {
+
+		@Override
+		public Class<? extends Patient> getResourceType() {
+			return Patient.class;
+		}
+
+		@Read
+		public Patient read(@IdParam IdType theId) {
+			Patient patient = new Patient();
+			patient.setId(theId);
+			patient.setActive(true);
+			return patient;
+		}
+
+		@Search
+		public List<Patient> search(@OptionalParam(name = "identifier") TokenParam theToken) {
+			return new ArrayList<>();
+		}
+
+
+	}
+
+}
diff --git a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/ServerWithResponseHighlightingInterceptorExceptionTest.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/ServerWithResponseHighlightingInterceptorExceptionTest.java
similarity index 86%
rename from hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/ServerWithResponseHighlightingInterceptorExceptionTest.java
rename to hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/ServerWithResponseHighlightingInterceptorExceptionTest.java
index 72fb556250d..0a8f2f0dd5e 100644
--- a/hapi-fhir-structures-dstu2/src/test/java/ca/uhn/fhir/rest/server/ServerWithResponseHighlightingInterceptorExceptionTest.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/interceptor/ServerWithResponseHighlightingInterceptorExceptionTest.java
@@ -1,11 +1,16 @@
-package ca.uhn.fhir.rest.server;
-
-import static org.hamcrest.Matchers.containsString;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-import java.util.concurrent.TimeUnit;
+package ca.uhn.fhir.rest.server.interceptor;
 
+import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.annotation.IdParam;
+import ca.uhn.fhir.rest.annotation.Read;
+import ca.uhn.fhir.rest.annotation.RequiredParam;
+import ca.uhn.fhir.rest.annotation.Search;
+import ca.uhn.fhir.rest.param.TokenParam;
+import ca.uhn.fhir.rest.server.IResourceProvider;
+import ca.uhn.fhir.rest.server.RestfulServer;
+import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
+import ca.uhn.fhir.util.PortUtil;
+import ca.uhn.fhir.util.TestUtil;
 import org.apache.commons.io.IOUtils;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.methods.HttpGet;
@@ -15,29 +20,21 @@ import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
+import org.hl7.fhir.r4.model.IdType;
+import org.hl7.fhir.r4.model.Patient;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.model.api.IResource;
-import ca.uhn.fhir.model.dstu2.resource.Patient;
-import ca.uhn.fhir.model.primitive.IdDt;
-import ca.uhn.fhir.rest.annotation.IdParam;
-import ca.uhn.fhir.rest.annotation.Read;
-import ca.uhn.fhir.rest.annotation.RequiredParam;
-import ca.uhn.fhir.rest.annotation.Search;
-import ca.uhn.fhir.rest.param.TokenParam;
-import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
-import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor;
-import ca.uhn.fhir.util.PortUtil;
-import ca.uhn.fhir.util.TestUtil;
+import java.util.concurrent.TimeUnit;
+
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.Assert.*;
 
 public class ServerWithResponseHighlightingInterceptorExceptionTest {
-	private static CloseableHttpClient ourClient;
-
-	private static FhirContext ourCtx = FhirContext.forDstu2();
 	private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ServerWithResponseHighlightingInterceptorExceptionTest.class);
+	private static CloseableHttpClient ourClient;
+	private static FhirContext ourCtx = FhirContext.forR4();
 	private static int ourPort;
 	private static Server ourServer;
 	private static RestfulServer ourServlet;
@@ -49,7 +46,7 @@ public class ServerWithResponseHighlightingInterceptorExceptionTest {
 		String responseContent = IOUtils.toString(status.getEntity().getContent());
 		IOUtils.closeQuietly(status.getEntity().getContent());
 		ourLog.info(responseContent);
-		
+
 		assertEquals(400, status.getStatusLine().getStatusCode());
 		assertThat(responseContent, containsString("<diagnostics value=\"AAABBB\"/>"));
 	}
@@ -62,12 +59,11 @@ public class ServerWithResponseHighlightingInterceptorExceptionTest {
 		String responseContent = IOUtils.toString(status.getEntity().getContent());
 		IOUtils.closeQuietly(status.getEntity().getContent());
 		ourLog.info(responseContent);
-		
+
 		assertEquals(500, status.getStatusLine().getStatusCode());
 		assertThat(responseContent, containsString("<diagnostics value=\"Failed to call access method: java.lang.Error: AAABBB\"/>"));
 	}
 
-
 	@AfterClass
 	public static void afterClassClearContext() throws Exception {
 		ourServer.stop();
@@ -102,20 +98,21 @@ public class ServerWithResponseHighlightingInterceptorExceptionTest {
 	public static class DummyPatientResourceProvider implements IResourceProvider {
 
 		@Override
-		public Class<? extends IResource> getResourceType() {
+		public Class<? extends Patient> getResourceType() {
 			return Patient.class;
 		}
 
 		@Read
-		public Patient read(@IdParam IdDt theId) {
+		public Patient read(@IdParam IdType theId) {
 			throw new InvalidRequestException("AAABBB");
 		}
 
 		@Search
-		public Patient search(@RequiredParam(name="identifier") TokenParam theToken) {
+		public Patient search(@RequiredParam(name = "identifier") TokenParam theToken) {
 			throw new Error("AAABBB");
 		}
 
+
 	}
 
 }
diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/provider/HashMapResourceProviderTest.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/provider/HashMapResourceProviderTest.java
index 256ef238ae4..eadbc300546 100644
--- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/provider/HashMapResourceProviderTest.java
+++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/server/provider/HashMapResourceProviderTest.java
@@ -2,6 +2,7 @@ package ca.uhn.fhir.rest.server.provider;
 
 import ca.uhn.fhir.context.FhirContext;
 import ca.uhn.fhir.rest.client.api.IGenericClient;
+import ca.uhn.fhir.rest.client.interceptor.LoggingInterceptor;
 import ca.uhn.fhir.rest.server.IResourceProvider;
 import ca.uhn.fhir.rest.server.RestfulServer;
 import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
@@ -19,17 +20,19 @@ import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.servlet.ServletException;
 import java.util.List;
 import java.util.stream.Collectors;
 
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.matchesPattern;
+import static org.hamcrest.Matchers.*;
 import static org.junit.Assert.*;
 
 public class HashMapResourceProviderTest {
 
+	private static final Logger ourLog = LoggerFactory.getLogger(HashMapResourceProviderTest.class);
 	private static MyRestfulServer ourRestServer;
 	private static Server ourListenerServer;
 	private static IGenericClient ourClient;
@@ -100,6 +103,93 @@ public class HashMapResourceProviderTest {
 		}
 	}
 
+	@Test
+	public void testHistoryInstance() {
+		// Create Res 1
+		Patient p = new Patient();
+		p.setActive(true);
+		IIdType id1 = ourClient.create().resource(p).execute().getId();
+		assertThat(id1.getIdPart(), matchesPattern("[0-9]+"));
+		assertEquals("1", id1.getVersionIdPart());
+
+		// Create Res 2
+		p = new Patient();
+		p.setActive(true);
+		IIdType id2 = ourClient.create().resource(p).execute().getId();
+		assertThat(id2.getIdPart(), matchesPattern("[0-9]+"));
+		assertEquals("1", id2.getVersionIdPart());
+
+		// Update Res 2
+		p = new Patient();
+		p.setId(id2);
+		p.setActive(false);
+		id2 = ourClient.update().resource(p).execute().getId();
+		assertThat(id2.getIdPart(), matchesPattern("[0-9]+"));
+		assertEquals("2", id2.getVersionIdPart());
+
+		Bundle history = ourClient
+			.history()
+			.onInstance(id2.toUnqualifiedVersionless())
+			.andReturnBundle(Bundle.class)
+			.encodedJson()
+			.prettyPrint()
+			.execute();
+		ourLog.debug(ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(history));
+		List<String> ids = history
+			.getEntry()
+			.stream()
+			.map(t -> t.getResource().getIdElement().toUnqualified().getValue())
+			.collect(Collectors.toList());
+		assertThat(ids, contains(
+			id2.toUnqualified().withVersion("2").getValue(),
+			id2.toUnqualified().withVersion("1").getValue()
+		));
+
+	}
+
+	@Test
+	public void testHistoryType() {
+		// Create Res 1
+		Patient p = new Patient();
+		p.setActive(true);
+		IIdType id1 = ourClient.create().resource(p).execute().getId();
+		assertThat(id1.getIdPart(), matchesPattern("[0-9]+"));
+		assertEquals("1", id1.getVersionIdPart());
+
+		// Create Res 2
+		p = new Patient();
+		p.setActive(true);
+		IIdType id2 = ourClient.create().resource(p).execute().getId();
+		assertThat(id2.getIdPart(), matchesPattern("[0-9]+"));
+		assertEquals("1", id2.getVersionIdPart());
+
+		// Update Res 2
+		p = new Patient();
+		p.setId(id2);
+		p.setActive(false);
+		id2 = ourClient.update().resource(p).execute().getId();
+		assertThat(id2.getIdPart(), matchesPattern("[0-9]+"));
+		assertEquals("2", id2.getVersionIdPart());
+
+		Bundle history = ourClient
+			.history()
+			.onType(Patient.class)
+			.andReturnBundle(Bundle.class)
+			.execute();
+		List<String> ids = history
+			.getEntry()
+			.stream()
+			.map(t -> t.getResource().getIdElement().toUnqualified().getValue())
+			.collect(Collectors.toList());
+		ourLog.info("Received IDs: {}", ids);
+		assertThat(ids, contains(
+			id2.toUnqualified().withVersion("2").getValue(),
+			id2.toUnqualified().withVersion("1").getValue(),
+			id1.toUnqualified().withVersion("1").getValue()
+		));
+
+	}
+
 	@Test
 	public void testSearchAll() {
 		// Create
@@ -112,7 +202,11 @@ public class HashMapResourceProviderTest {
 		}
 
 		// Search
-		Bundle resp = ourClient.search().forResource("Patient").returnBundle(Bundle.class).execute();
+		Bundle resp = ourClient
+			.search()
+			.forResource("Patient")
+			.returnBundle(Bundle.class)
+			.execute();
 		assertEquals(100, resp.getTotal());
 		assertEquals(100, resp.getEntry().size());
 
diff --git a/hapi-fhir-validation/src/main/java/org/hl7/fhir/dstu3/hapi/validation/CachingValidationSupport.java b/hapi-fhir-validation/src/main/java/org/hl7/fhir/dstu3/hapi/validation/CachingValidationSupport.java
new file mode 100644
index 00000000000..59c6ea38d42
--- /dev/null
+++ b/hapi-fhir-validation/src/main/java/org/hl7/fhir/dstu3/hapi/validation/CachingValidationSupport.java
@@ -0,0 +1,67 @@
+package org.hl7.fhir.dstu3.hapi.validation;
+
+import ca.uhn.fhir.context.FhirContext;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
+import org.hl7.fhir.dstu3.model.CodeSystem;
+import org.hl7.fhir.dstu3.model.StructureDefinition;
+import org.hl7.fhir.dstu3.model.ValueSet;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@SuppressWarnings("unchecked")
+public class CachingValidationSupport implements IValidationSupport {
+
+	private final IValidationSupport myWrap;
+	private final Cache<String, Object> myCache;
+
+	public CachingValidationSupport(IValidationSupport theWrap) {
+		myWrap = theWrap;
+		myCache = Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS).build();
+	}
+
+	@Override
+	public ValueSet.ValueSetExpansionComponent expandValueSet(FhirContext theContext, ValueSet.ConceptSetComponent theInclude) {
+		return myWrap.expandValueSet(theContext, theInclude);
+	}
+
+	@Override
+	public List<IBaseResource> fetchAllConformanceResources(FhirContext theContext) {
+		return (List<IBaseResource>) myCache.get("fetchAllConformanceResources",
+			t -> myWrap.fetchAllConformanceResources(theContext));
+	}
+
+	@Override
+	public List<StructureDefinition> fetchAllStructureDefinitions(FhirContext theContext) {
+		return (List<StructureDefinition>) myCache.get("fetchAllStructureDefinitions",
+			t -> myWrap.fetchAllStructureDefinitions(theContext));
+	}
+
+	@Override
+	public CodeSystem fetchCodeSystem(FhirContext theContext, String theSystem) {
+		return myWrap.fetchCodeSystem(theContext, theSystem);
+	}
+
+	@Override
+	public <T extends IBaseResource> T fetchResource(FhirContext theContext, Class<T> theClass, String theUri) {
+		return myWrap.fetchResource(theContext, theClass, theUri);
+	}
+
+	@Override
+	public StructureDefinition fetchStructureDefinition(FhirContext theCtx, String theUrl) {
+		return myWrap.fetchStructureDefinition(theCtx, theUrl);
+	}
+
+	@Override
+	public boolean isCodeSystemSupported(FhirContext theContext, String theSystem) {
+		return myWrap.isCodeSystemSupported(theContext, theSystem);
+	}
+
+	@Override
+	public CodeValidationResult validateCode(FhirContext theContext, String theCodeSystem, String theCode, String theDisplay) {
+		return myWrap.validateCode(theContext, theCodeSystem, theCode, theDisplay);
+	}
+}
diff --git a/hapi-fhir-validation/src/main/java/org/hl7/fhir/dstu3/hapi/validation/FhirInstanceValidator.java b/hapi-fhir-validation/src/main/java/org/hl7/fhir/dstu3/hapi/validation/FhirInstanceValidator.java
index 8545e6dd3ab..f0eb3717bfa 100644
--- a/hapi-fhir-validation/src/main/java/org/hl7/fhir/dstu3/hapi/validation/FhirInstanceValidator.java
+++ b/hapi-fhir-validation/src/main/java/org/hl7/fhir/dstu3/hapi/validation/FhirInstanceValidator.java
@@ -2,6 +2,7 @@ package org.hl7.fhir.dstu3.hapi.validation;
 
 import ca.uhn.fhir.context.ConfigurationException;
 import ca.uhn.fhir.context.FhirContext;
+import ca.uhn.fhir.rest.api.Constants;
 import ca.uhn.fhir.rest.api.EncodingEnum;
 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
 import ca.uhn.fhir.validation.IValidationContext;
@@ -17,6 +18,7 @@ import com.google.gson.JsonObject;
 import org.apache.commons.lang3.Validate;
 import org.apache.commons.lang3.builder.EqualsBuilder;
 import org.apache.commons.lang3.builder.HashCodeBuilder;
+import org.apache.commons.lang3.time.DateUtils;
 import org.fhir.ucum.UcumService;
 import org.hl7.fhir.convertors.VersionConvertor_30_40;
 import org.hl7.fhir.dstu3.hapi.ctx.HapiWorkerContext;
@@ -371,14 +373,24 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
 		private final HapiWorkerContext myWrap;
 		private final VersionConvertor_30_40 myConverter;
 		private volatile List<org.hl7.fhir.r4.model.StructureDefinition> myAllStructures;
-		private LoadingCache<ResourceKey, org.hl7.fhir.r4.model.Resource> myFetchResourceCache
-			= Caffeine.newBuilder()
-			.expireAfterWrite(10, TimeUnit.SECONDS)
+		private LoadingCache<ResourceKey, org.hl7.fhir.r4.model.Resource> myFetchResourceCache;
+
+		public WorkerContextWrapper(HapiWorkerContext theWorkerContext) {
+			myWrap = theWorkerContext;
+			myConverter = new VersionConvertor_30_40();
+
+			long timeoutMillis = 10 * DateUtils.MILLIS_PER_SECOND;
+			if (System.getProperties().containsKey(ca.uhn.fhir.rest.api.Constants.TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS)) {
+				timeoutMillis = Long.parseLong(System.getProperty(Constants.TEST_SYSTEM_PROP_VALIDATION_RESOURCE_CACHES_MS));
+			}
+
+			myFetchResourceCache = Caffeine.newBuilder()
+			.expireAfterWrite(timeoutMillis, TimeUnit.MILLISECONDS)
 			.maximumSize(10000)
 			.build(new CacheLoader<ResourceKey, org.hl7.fhir.r4.model.Resource>() {
 				@Override
-				public org.hl7.fhir.r4.model.Resource load(FhirInstanceValidator.ResourceKey key) throws Exception {
-					org.hl7.fhir.dstu3.model.Resource fetched;
+				public org.hl7.fhir.r4.model.Resource load(ResourceKey key) throws Exception {
+					Resource fetched;
 					switch (key.getResourceName()) {
 						case "StructureDefinition":
 							fetched = myWrap.fetchResource(StructureDefinition.class, key.getUri());
@@ -407,10 +419,6 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
 					}
 				}
 			});
-
-		public WorkerContextWrapper(HapiWorkerContext theWorkerContext) {
-			myWrap = theWorkerContext;
-			myConverter = new VersionConvertor_30_40();
 		}
 
 		@Override
diff --git a/hapi-fhir-validation/src/main/java/org/hl7/fhir/instance/hapi/validation/CachingValidationSupport.java b/hapi-fhir-validation/src/main/java/org/hl7/fhir/instance/hapi/validation/CachingValidationSupport.java
new file mode 100644
index 00000000000..3587b622d97
--- /dev/null
+++ b/hapi-fhir-validation/src/main/java/org/hl7/fhir/instance/hapi/validation/CachingValidationSupport.java
@@ -0,0 +1,56 @@
+package org.hl7.fhir.instance.hapi.validation;
+
+import ca.uhn.fhir.context.FhirContext;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import org.hl7.fhir.instance.model.StructureDefinition;
+import org.hl7.fhir.instance.model.ValueSet;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@SuppressWarnings("unchecked")
+public class CachingValidationSupport implements IValidationSupport {
+
+	private final IValidationSupport myWrap;
+	private final Cache<String, Object> myCache;
+
+	public CachingValidationSupport(IValidationSupport theWrap) {
+		myWrap = theWrap;
+		myCache = Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS).build();
+	}
+
+
+	@Override
+	public List<StructureDefinition> allStructures() {
+		return (List<StructureDefinition>) myCache.get("fetchAllStructureDefinitions",
+			t -> myWrap.allStructures());
+	}
+
+	@Override
+	public ValueSet.ValueSetExpansionComponent expandValueSet(FhirContext theContext, ValueSet.ConceptSetComponent theInclude) {
+		return myWrap.expandValueSet(theContext, theInclude);
+	}
+
+	@Override
+	public ValueSet fetchCodeSystem(FhirContext theContext, String theSystem) {
+		return myWrap.fetchCodeSystem(theContext, theSystem);
+	}
+
+	@Override
+	public <T extends IBaseResource> T fetchResource(FhirContext theContext, Class<T> theClass, String theUri) {
+		return myWrap.fetchResource(theContext, theClass, theUri);
+	}
+
+	@Override
+	public boolean isCodeSystemSupported(FhirContext theContext, String theSystem) {
+		return myWrap.isCodeSystemSupported(theContext, theSystem);
+	}
+
+	@Override
+	public CodeValidationResult validateCode(FhirContext theContext, String theCodeSystem, String theCode, String theDisplay) {
+		return myWrap.validateCode(theContext, theCodeSystem, theCode, theDisplay);
+	}
+
+}
diff --git a/hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/CachingValidationSupport.java b/hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/CachingValidationSupport.java
new file mode 100644
index 00000000000..4663b0149da
--- /dev/null
+++ b/hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/CachingValidationSupport.java
@@ -0,0 +1,67 @@
+package org.hl7.fhir.r4.hapi.validation;
+
+import ca.uhn.fhir.context.FhirContext;
+import com.github.benmanes.caffeine.cache.Cache;
+import com.github.benmanes.caffeine.cache.Caffeine;
+import org.hl7.fhir.r4.hapi.ctx.IValidationSupport;
+import org.hl7.fhir.r4.model.CodeSystem;
+import org.hl7.fhir.r4.model.StructureDefinition;
+import org.hl7.fhir.r4.model.ValueSet;
+import org.hl7.fhir.instance.model.api.IBaseResource;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@SuppressWarnings("unchecked")
+public class CachingValidationSupport implements IValidationSupport {
+
+	private final IValidationSupport myWrap;
+	private final Cache<String, Object> myCache;
+
+	public CachingValidationSupport(IValidationSupport theWrap) {
+		myWrap = theWrap;
+		myCache = Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.SECONDS).build();
+	}
+
+	@Override
+	public ValueSet.ValueSetExpansionComponent expandValueSet(FhirContext theContext, ValueSet.ConceptSetComponent theInclude) {
+		return myWrap.expandValueSet(theContext, theInclude);
+	}
+
+	@Override
+	public List<IBaseResource> fetchAllConformanceResources(FhirContext theContext) {
+		return (List<IBaseResource>) myCache.get("fetchAllConformanceResources",
+			t -> myWrap.fetchAllConformanceResources(theContext));
+	}
+
+	@Override
+	public List<StructureDefinition> fetchAllStructureDefinitions(FhirContext theContext) {
+		return (List<StructureDefinition>) myCache.get("fetchAllStructureDefinitions",
+			t -> myWrap.fetchAllStructureDefinitions(theContext));
+	}
+
+	@Override
+	public CodeSystem fetchCodeSystem(FhirContext theContext, String theSystem) {
+		return myWrap.fetchCodeSystem(theContext, theSystem);
+	}
+
+	@Override
+	public <T extends IBaseResource> T fetchResource(FhirContext theContext, Class<T> theClass, String theUri) {
+		return myWrap.fetchResource(theContext, theClass, theUri);
+	}
+
+	@Override
+	public StructureDefinition fetchStructureDefinition(FhirContext theCtx, String theUrl) {
+		return myWrap.fetchStructureDefinition(theCtx, theUrl);
+	}
+
+	@Override
+	public boolean isCodeSystemSupported(FhirContext theContext, String theSystem) {
+		return myWrap.isCodeSystemSupported(theContext, theSystem);
+	}
+
+	@Override
+	public CodeValidationResult validateCode(FhirContext theContext, String theCodeSystem, String theCode, String theDisplay) {
+		return myWrap.validateCode(theContext, theCodeSystem, theCode, theDisplay);
+	}
+}
diff --git a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/PrePopulatedValidationSupport.java b/hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/PrePopulatedValidationSupport.java
similarity index 98%
rename from hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/PrePopulatedValidationSupport.java
rename to hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/PrePopulatedValidationSupport.java
index 92807c4f6c3..71ff11ed74d 100644
--- a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/PrePopulatedValidationSupport.java
+++ b/hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/PrePopulatedValidationSupport.java
@@ -1,8 +1,9 @@
-package org.hl7.fhir.r4.hapi.ctx;
+package org.hl7.fhir.r4.hapi.validation;
 
 import ca.uhn.fhir.context.FhirContext;
 import org.apache.commons.lang3.Validate;
 import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.r4.hapi.ctx.IValidationSupport;
 import org.hl7.fhir.r4.model.CodeSystem;
 import org.hl7.fhir.r4.model.MetadataResource;
 import org.hl7.fhir.r4.model.StructureDefinition;
diff --git a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/ValidationSupportChain.java b/hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/ValidationSupportChain.java
similarity index 97%
rename from hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/ValidationSupportChain.java
rename to hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/ValidationSupportChain.java
index 9d63c85bdb2..7fd2de1e42f 100644
--- a/hapi-fhir-structures-r4/src/main/java/org/hl7/fhir/r4/hapi/ctx/ValidationSupportChain.java
+++ b/hapi-fhir-validation/src/main/java/org/hl7/fhir/r4/hapi/validation/ValidationSupportChain.java
@@ -1,7 +1,8 @@
-package org.hl7.fhir.r4.hapi.ctx;
+package org.hl7.fhir.r4.hapi.validation;
 
 import ca.uhn.fhir.context.FhirContext;
 import org.hl7.fhir.instance.model.api.IBaseResource;
+import org.hl7.fhir.r4.hapi.ctx.IValidationSupport;
 import org.hl7.fhir.r4.model.CodeSystem;
 import org.hl7.fhir.r4.model.StructureDefinition;
 import org.hl7.fhir.r4.model.ValueSet.ConceptSetComponent;
diff --git a/hapi-fhir-validation/src/test/java/org/hl7/fhir/dstu3/hapi/validation/FhirInstanceValidatorDstu3Test.java b/hapi-fhir-validation/src/test/java/org/hl7/fhir/dstu3/hapi/validation/FhirInstanceValidatorDstu3Test.java
index 0313a4208dc..d368d65fe0e 100644
--- a/hapi-fhir-validation/src/test/java/org/hl7/fhir/dstu3/hapi/validation/FhirInstanceValidatorDstu3Test.java
+++ b/hapi-fhir-validation/src/test/java/org/hl7/fhir/dstu3/hapi/validation/FhirInstanceValidatorDstu3Test.java
@@ -116,7 +116,7 @@ public class FhirInstanceValidatorDstu3Test {
 		myVal.setValidateAgainstStandardSchematron(false);
 
 		myMockSupport = mock(IValidationSupport.class);
-		ValidationSupportChain validationSupport = new ValidationSupportChain(myMockSupport, myDefaultValidationSupport);
+		CachingValidationSupport validationSupport = new CachingValidationSupport(new ValidationSupportChain(myMockSupport, myDefaultValidationSupport));
 		myInstanceVal = new FhirInstanceValidator(validationSupport);
 
 		myVal.registerValidatorModule(myInstanceVal);
diff --git a/hapi-fhir-validation/src/test/java/org/hl7/fhir/r4/validation/FhirInstanceValidatorR4Test.java b/hapi-fhir-validation/src/test/java/org/hl7/fhir/r4/validation/FhirInstanceValidatorR4Test.java
index 36fd0b3eeef..8dd5f5e0867 100644
--- a/hapi-fhir-validation/src/test/java/org/hl7/fhir/r4/validation/FhirInstanceValidatorR4Test.java
+++ b/hapi-fhir-validation/src/test/java/org/hl7/fhir/r4/validation/FhirInstanceValidatorR4Test.java
@@ -41,6 +41,11 @@ import org.hl7.fhir.r4.model.Base;
 import org.hl7.fhir.r4.model.Base64BinaryType;
 import org.hl7.fhir.r4.model.BooleanType;
 import org.hl7.fhir.r4.model.Bundle;
+import org.hl7.fhir.r4.hapi.validation.CachingValidationSupport;
+import org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator;
+import org.hl7.fhir.r4.hapi.validation.PrePopulatedValidationSupport;
+import org.hl7.fhir.r4.hapi.validation.ValidationSupportChain;
+import org.hl7.fhir.r4.model.*;
 import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent;
 import org.hl7.fhir.r4.model.CodeSystem;
 import org.hl7.fhir.r4.model.CodeSystem.ConceptDefinitionComponent;
@@ -136,7 +141,7 @@ public class FhirInstanceValidatorR4Test {
 		myVal.setValidateAgainstStandardSchematron(false);
 
 		myMockSupport = mock(IValidationSupport.class);
-		ValidationSupportChain validationSupport = new ValidationSupportChain(myMockSupport, myDefaultValidationSupport);
+		CachingValidationSupport validationSupport = new CachingValidationSupport(new ValidationSupportChain(myMockSupport, myDefaultValidationSupport));
 		myInstanceVal = new FhirInstanceValidator(validationSupport);
 
 		myVal.registerValidatorModule(myInstanceVal);
@@ -581,7 +586,7 @@ public class FhirInstanceValidatorR4Test {
 	public void testValidateProfileWithExtension() throws IOException, FHIRException {
 		PrePopulatedValidationSupport valSupport = new PrePopulatedValidationSupport();
 		DefaultProfileValidationSupport defaultSupport = new DefaultProfileValidationSupport();
-		ValidationSupportChain support = new ValidationSupportChain(valSupport, defaultSupport);
+		CachingValidationSupport support = new CachingValidationSupport(new ValidationSupportChain(valSupport, defaultSupport));
 
 		// Prepopulate SDs
 		valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/dstu3/myconsent-profile.xml"));
diff --git a/hapi-fhir-validation/src/test/java/org/hl7/fhir/r4/validation/QuestionnaireResponseValidatorR4Test.java b/hapi-fhir-validation/src/test/java/org/hl7/fhir/r4/validation/QuestionnaireResponseValidatorR4Test.java
index 11c23a34400..c7db3707012 100644
--- a/hapi-fhir-validation/src/test/java/org/hl7/fhir/r4/validation/QuestionnaireResponseValidatorR4Test.java
+++ b/hapi-fhir-validation/src/test/java/org/hl7/fhir/r4/validation/QuestionnaireResponseValidatorR4Test.java
@@ -7,13 +7,12 @@ import ca.uhn.fhir.validation.FhirValidator;
 import ca.uhn.fhir.validation.ResultSeverityEnum;
 import ca.uhn.fhir.validation.SingleValidationMessage;
 import ca.uhn.fhir.validation.ValidationResult;
-import org.apache.commons.io.IOUtils;
 import org.hl7.fhir.r4.context.IWorkerContext;
 import org.hl7.fhir.r4.hapi.ctx.DefaultProfileValidationSupport;
 import org.hl7.fhir.r4.hapi.ctx.HapiWorkerContext;
 import org.hl7.fhir.r4.hapi.ctx.IValidationSupport;
 import org.hl7.fhir.r4.hapi.ctx.IValidationSupport.CodeValidationResult;
-import org.hl7.fhir.r4.hapi.ctx.ValidationSupportChain;
+import org.hl7.fhir.r4.hapi.validation.ValidationSupportChain;
 import org.hl7.fhir.r4.hapi.validation.FhirInstanceValidator;
 import org.hl7.fhir.r4.model.*;
 import org.hl7.fhir.r4.model.CodeSystem.CodeSystemContentMode;
@@ -23,7 +22,6 @@ import org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemOptionComponent;
 import org.hl7.fhir.r4.model.Questionnaire.QuestionnaireItemType;
 import org.hl7.fhir.r4.model.QuestionnaireResponse.QuestionnaireResponseItemComponent;
 import org.hl7.fhir.r4.model.QuestionnaireResponse.QuestionnaireResponseStatus;
-import org.hl7.fhir.r4.model.IdType;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/hapi-tinder-plugin/src/main/resources/vm/jpa_resource_provider.vm b/hapi-tinder-plugin/src/main/resources/vm/jpa_resource_provider.vm
index 284871ebda7..9011383ae8e 100644
--- a/hapi-tinder-plugin/src/main/resources/vm/jpa_resource_provider.vm
+++ b/hapi-tinder-plugin/src/main/resources/vm/jpa_resource_provider.vm
@@ -22,7 +22,7 @@ import ca.uhn.fhir.rest.api.SortSpec;
 public class ${className}ResourceProvider extends 
 ## We have specialized base classes for RPs that handle certain resource types. These
 ## RPs implement type specific operations 
-#if ( $version != 'dstu' && (${className} == 'Encounter' || ${className} == 'Patient' || ${className} == 'ValueSet' || ${className} == 'QuestionnaireAnswers' || ${className} == 'CodeSystem' || ($version != 'dstu2' && ${className} == 'ConceptMap')))
+#if ( $version != 'dstu' && (${className} == 'Encounter' || ${className} == 'Patient' || ${className} == 'ValueSet' || ${className} == 'QuestionnaireAnswers' || ${className} == 'CodeSystem' || ($version != 'dstu2' && ${className} == 'ConceptMap') || ${className} == 'MessageHeader' || ${className} == 'Composition'))
 	BaseJpaResourceProvider${className}${versionCapitalized}
 #else
 	JpaResourceProvider${versionCapitalized}<${className}>
diff --git a/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans.vm b/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans.vm
index c5fd9c91777..b67693d3fb9 100644
--- a/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans.vm
+++ b/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans.vm
@@ -48,7 +48,7 @@
 		class="ca.uhn.fhir.jpa.dao.FhirResourceDao${res.name}${versionCapitalized}">
 #elseif ( ${versionCapitalized} == 'R4' && ${res.name} == 'ConceptMap')
 		class="ca.uhn.fhir.jpa.dao.FhirResourceDao${res.name}${versionCapitalized}">
-#elseif ( ${versionCapitalized} != 'Dstu1' && ( ${res.name} == 'Bundle' || ${res.name} == 'Encounter' || ${res.name} == 'Everything' || ${res.name} == 'Patient' || ${res.name} == 'Subscription' || ${res.name} == 'ValueSet' || ${res.name} == 'QuestionnaireResponse' || ${res.name} == 'SearchParameter'))
+#elseif ( ${versionCapitalized} != 'Dstu1' && ( ${res.name} == 'Bundle' || ${res.name} == 'Encounter' || ${res.name} == 'Composition' || ${res.name} == 'Everything' || ${res.name} == 'Patient' || ${res.name} == 'Subscription' || ${res.name} == 'ValueSet' || ${res.name} == 'QuestionnaireResponse' || ${res.name} == 'SearchParameter'))
 		class="ca.uhn.fhir.jpa.dao.FhirResourceDao${res.name}${versionCapitalized}">
 #else
 		class="ca.uhn.fhir.jpa.dao.FhirResourceDao${versionCapitalized}">
diff --git a/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans_java.vm b/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans_java.vm
index 2cad6d3e9c5..bad24d8db58 100644
--- a/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans_java.vm
+++ b/hapi-tinder-plugin/src/main/resources/vm/jpa_spring_beans_java.vm
@@ -26,11 +26,20 @@ import ca.uhn.fhir.jpa.dao.*;
 @Configuration
 public abstract class BaseJavaConfig${versionCapitalized} extends ca.uhn.fhir.jpa.config${package_suffix}.Base${versionCapitalized}Config {
 
+	/**
+	 * Subclasses may override
+	 */
+	protected boolean isSupported(String theResourceType) {
+		return true;
+	}
+
 	@Bean(name="myResourceProviders${versionCapitalized}")
 	public List<IResourceProvider> resourceProviders${versionCapitalized}() {
 		List<IResourceProvider> retVal = new ArrayList<IResourceProvider>();
 #foreach ( $res in $resources )
-		retVal.add(rp${res.declaringClassNameComplete}${versionCapitalized}());
+		if (isSupported("${res.name}")) {
+			retVal.add(rp${res.declaringClassNameComplete}${versionCapitalized}());
+		}
 #end
 		return retVal;
 	}
@@ -39,7 +48,9 @@ public abstract class BaseJavaConfig${versionCapitalized} extends ca.uhn.fhir.jp
 	public List<IFhirResourceDao<?>> resourceDaos${versionCapitalized}() {
 		List<IFhirResourceDao<?>> retVal = new ArrayList<IFhirResourceDao<?>>();
 #foreach ( $res in $resources )
-		retVal.add(dao${res.declaringClassNameComplete}${versionCapitalized}());
+		if (isSupported("${res.name}")) {
+			retVal.add(dao${res.declaringClassNameComplete}${versionCapitalized}());
+		}
 #end
 		return retVal;
 	}
@@ -62,7 +73,7 @@ public abstract class BaseJavaConfig${versionCapitalized} extends ca.uhn.fhir.jp
 		IFhirResourceDaoConceptMap<org.hl7.fhir.dstu3.model.ConceptMap>
 #elseif ( ${versionCapitalized} == 'R4' && ${res.name} == 'ConceptMap' )
 		IFhirResourceDaoConceptMap<org.hl7.fhir.r4.model.ConceptMap>
-#elseif ( ${versionCapitalized} != 'Dstu1' && ( ${res.name} == 'Encounter' || ${res.name} == 'Everything' || ${res.name} == 'Patient' || ${res.name} == 'Subscription' || ${res.name} == 'SearchParameter'))
+#elseif ( ${versionCapitalized} != 'Dstu1' && (${res.name} == 'Composition' ||  ${res.name} == 'Encounter' || ${res.name} == 'Everything' || ${res.name} == 'Patient' || ${res.name} == 'Subscription' || ${res.name} == 'SearchParameter' || ${res.name} == 'MessageHeader'))
 		IFhirResourceDao${res.name}<${resourcePackage}.${res.declaringClassNameComplete}>
 #else
 		IFhirResourceDao<${resourcePackage}.${res.declaringClassNameComplete}>
@@ -72,7 +83,7 @@ public abstract class BaseJavaConfig${versionCapitalized} extends ca.uhn.fhir.jp
 		ca.uhn.fhir.jpa.dao${package_suffix}.FhirResourceDao${res.name}${versionCapitalized} retVal = new ca.uhn.fhir.jpa.dao${package_suffix}.FhirResourceDao${res.name}${versionCapitalized}();
 #elseif ( ${versionCapitalized} == 'R4' && ${res.name} == 'ConceptMap' )
 		ca.uhn.fhir.jpa.dao${package_suffix}.FhirResourceDao${res.name}${versionCapitalized} retVal = new ca.uhn.fhir.jpa.dao${package_suffix}.FhirResourceDao${res.name}${versionCapitalized}();
-#elseif ( ${versionCapitalized} != 'Dstu1' && ( ${res.name} == 'Bundle' || ${res.name} == 'Encounter' || ${res.name} == 'Everything' || ${res.name} == 'Patient' || ${res.name} == 'Subscription' || ${res.name} == 'ValueSet' || ${res.name} == 'QuestionnaireResponse' || ${res.name} == 'SearchParameter' || ${res.name} == 'CodeSystem'))
+#elseif ( ${res.name} == 'Bundle' || ${res.name} == 'Encounter' || ${res.name} == 'Everything' || ${res.name} == 'Patient' || ${res.name} == 'Subscription' || ${res.name} == 'ValueSet' || ${res.name} == 'QuestionnaireResponse' || ${res.name} == 'SearchParameter' || ${res.name} == 'CodeSystem'  || ${res.name} == 'MessageHeader' || ${res.name} == 'Composition')
 		ca.uhn.fhir.jpa.dao${package_suffix}.FhirResourceDao${res.name}${versionCapitalized} retVal = new ca.uhn.fhir.jpa.dao${package_suffix}.FhirResourceDao${res.name}${versionCapitalized}();
 #else
 		ca.uhn.fhir.jpa.dao${package_suffix}.FhirResourceDao${versionCapitalized}<${resourcePackage}.${res.declaringClassNameComplete}> retVal = new ca.uhn.fhir.jpa.dao${package_suffix}.FhirResourceDao${versionCapitalized}<${resourcePackage}.${res.declaringClassNameComplete}>();
diff --git a/pom.xml b/pom.xml
index 4e4402a2b77..05412d538cb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -96,10 +96,6 @@
 		</dependency>
 	</dependencies>
 
-	<prerequisites>
-		<maven>3.2</maven>
-	</prerequisites>
-
 	<developers>
 		<developer>
 			<id>jamesagnew</id>
@@ -464,6 +460,19 @@
 			<name>Frank Tao</name>
 			<organization>Smile CDR</organization>
 		</developer>
+		<developer>
+			<id>anamariaradu10</id>
+			<name>Ana Maria Radu</name>
+			<organization>Cerner Corporation</organization>
+		</developer>
+		<developer>
+			<id>alinleonard</id>
+			<name>Alin Leonard</name>
+			<organization>Cerner Corporation</organization>
+		</developer>
+		<developer>
+			<id>jbalbien</id>
+		</developer>
 	</developers>
 
 	<licenses>
@@ -814,7 +823,7 @@
 			<dependency>
 				<groupId>org.apache.commons</groupId>
 				<artifactId>commons-dbcp2</artifactId>
-				<version>2.1.1</version>
+				<version>2.5.0</version>
 			</dependency>
 			<dependency>
 				<groupId>org.apache.commons</groupId>
@@ -1290,7 +1299,7 @@
 				<plugin>
 					<groupId>org.apache.maven.plugins</groupId>
 					<artifactId>maven-compiler-plugin</artifactId>
-					<version>3.7.0</version>
+					<version>3.8.0</version>
 					<configuration>
 						<source>1.8</source>
 						<target>1.8</target>
@@ -1346,7 +1355,7 @@
 				<plugin>
 					<groupId>org.apache.maven.plugins</groupId>
 					<artifactId>maven-javadoc-plugin</artifactId>
-					<version>2.10.4</version>
+					<version>3.0.1</version>
 				</plugin>
 				<plugin>
 					<groupId>org.apache.maven.plugins</groupId>
@@ -1427,7 +1436,7 @@
 				<plugin>
 					<groupId>org.codehaus.mojo</groupId>
 					<artifactId>versions-maven-plugin</artifactId>
-					<version>2.5</version>
+					<version>2.6-SNAPSHOT</version>
 					<configuration>
 						<processDependencyManagementTransitive>false</processDependencyManagementTransitive>
 					</configuration>
@@ -1615,29 +1624,28 @@
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-enforcer-plugin</artifactId>
-				<version>1.4.1</version>
+				<version>3.0.0-M2</version>
 				<executions>
 					<execution>
-						<id>enforce-java</id>
+						<id>enforce-maven</id>
 						<goals>
 							<goal>enforce</goal>
 						</goals>
+						<configuration>
+							<rules>
+								<requireMavenVersion>
+									<version>3.3.1</version>
+								</requireMavenVersion>
+								<requireJavaVersion>
+									<version>1.8</version>
+									<message>
+										The hapi-fhir Maven build requires JDK version 1.8.x.
+									</message>
+								</requireJavaVersion>
+							</rules>
+						</configuration>
 					</execution>
 				</executions>
-				<configuration>
-					<rules>
-						<requireMavenVersion>
-							<version>3.3</version>
-						</requireMavenVersion>
-						<requireJavaVersion>
-							<!--<version>[1.8,)</version>-->
-							<version>1.8</version>
-							<message>
-								The hapi-fhir Maven build requires JDK version 1.8.x.
-							</message>
-						</requireJavaVersion>
-					</rules>
-				</configuration>
 			</plugin>
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 62fd7417976..f0f54a83f09 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -86,9 +86,222 @@
 				Resource loading logic for the JPA server has been optimized to
 				reduce the number of database round trips required when loading
 				search results where many of the entries have a "forced ID" (an alphanumeric
-				client-assigned reosurce ID). Thanks to Frank Tao for the pull
+				client-assigned resource ID). Thanks to Frank Tao for the pull
 				request!
 			</action>
+			<action type="add">
+				A new IValidationSupport implementation has been added, named CachingValidationSupport. This
+				module wraps another implementation and provides short-term caching. This can have a dramatic
+				performance improvement on servers that are validating or executing FHIRPath repeatedly
+				under load. This module is used by default in the JPA server.
+			</action>
+			<action type="fix">
+				An index in the JPA server on the HFJ_FORCED_ID table was incorrectly
+				not marked as unique. This meant that under heavy load it was possible to
+				create two resources with the same client-assigned ID.
+			</action>
+			<action type="fix">
+				The JPA server 
+				<![CDATA[<code>$expunge</code>]]>
+				operation deleted components of an individual resource record in 
+				separate database transactions, meaning that if an operation failed 
+				unexpectedly resources could be left in a weird state. This has been
+				corrected.
+			</action>
+			<action type="fix" issue="1015">
+				A bug was fixed in the JPA terminology uploader, where it was possible
+				in some cases for some ValueSets and ConceptMaps to not be saved because
+				of a premature short circuit during deferred uploading. Thanks to 
+				Joel Schneider for the pull request!
+			</action>
+			<action type="fix" issue="969">
+				A bug in the HAPI FHIR CLI was fixed, where uploading terminology for R4
+				could cause an error about the incorrect FHIR version. Thanks to 
+				Rob Hausam for the pull request!
+			</action>
+			<action type="add">
+				A new method has been added to AuthorizationInterceptor that can be used to
+				create rules allowing FHIR patch operations. See
+				<![CDATA[<a href="http://hapifhir.io/doc_rest_server_security.html#Authorizing_Patch_Operations">Authorizing Patch Operations</a>]]>
+				for more information.
+			</action>
+			<action type="add" issue="1018">
+				A new view has been added to the JPA server, reducing the number of database
+				calls required when reading resources back. This causes an improvement in performance.
+				Thanks to Frank Tao for the pull request!
+			</action>
+			<action type="fix">
+				A crash was fixed when deleting a ConceptMap resource in the
+				JPA server. This crash was a regression in HAPI FHIR 3.4.0.
+			</action>
+			<action type="fix">
+				A crash in the JPA server when performing a manual reindex of a deleted resource
+				was fixed.
+			</action>
+			<action type="fix">
+				Using the generic/fluent client, it is now possible to
+				invoke the $process-message method using a standard
+				client.operation() call. Previously this caused a strange
+				NullPointerException.
+			</action>
+			<action type="fix">
+				The REST Server now sanitizes URL path components and query parameter
+				names to escape several reserved characters (e.g. &quot; and &lt;)
+				in order to prevent HTML injection attacks via maliciously
+				crafted URLs.
+			</action>
+			<action type="add" issue="912">
+				The generic/fluent client now supports the :contains modifier on
+				string search params. Thanks to Clayton Bodendein for the pull
+				request!
+			</action>
+			<action type="fix" issue="996">
+				The HAPI FHIR Server has been updated to correctly reflect the current
+				FHIR specification behaviour for the Prefer header. This means that
+				the server will no longer return an OperationOutcome by default, but
+				that one may be requested via a Prefer header, using the newly implemented
+				"Repreentation: OperationOutcome" value.
+				Thanks to Ana Maria Radu for the pul request!
+			</action>
+			<action type="add">
+				The REST Server module now allows more than one Resource Provider
+				(i.e. more than one implementation of IResourceProvider) to be registered
+				to the RestfulServer for the same resource type. Previous versions of
+				HAPI FHIR have always limited support to a single resource provider, but
+				this limitation did not serve any purpose so it has been removed.
+			</action>
+			<action type="add">
+				The HashMapResourceProvider now supports the type and
+				instance history operations. In addition, the search method
+				for the
+				<![CDATA[<code>_id</code>]]> search parameter now has the
+				search parameter marked as "required". This means that additional
+				search methods can be added in subclasses without their intended
+				searches being routed to the searchById method. Also, the resource
+				map now uses a LinkedHashMap, so searches return a predictable
+				order for unit tests.
+			</action>
+			<action type="fix">
+				Fixed a bug when creating a custom search parameter in the JPA
+				server: if the	SearchParameter resource contained an invalid
+				expression, create/update operations for the given resource would
+				fail with a cryptic error. SearchParameter expressions are now
+				validated upon storage, and the SearchParameter will be rejected
+				if the expression can not be processed.
+			</action>
+			<action type="add">
+				The generic client history operations (history-instance, history-type,
+				and history-server) now support the
+				<![CDATA[<code>_at</code>]]> parameter.
+			</action>
+			<action type="add">
+				In the plain server, many resource provider method parameters may now
+				use a generic
+				<![CDATA[<code>IPrimitiveType&lt;String&gt;</code>]]>
+				or
+				<![CDATA[<code>IPrimitiveType&lt;Date&gt;</code>]]> at the
+				parameter type. This is handy if you are trying to write code
+				that works across versions of FHIR.
+			</action>
+			<action type="add">
+				Several convenience methods have been added to the fluent/generic
+				client interfaces. These methods allow the adding of a sort via a
+				SortSpec object, as well as specifying search parameters via a plain
+				Map of Strings.
+			</action>
+			<action type="add">
+				A new client interceptor called ThreadLocalCapturingInterceptor has been
+				added. This interceptor works the same way as CapturingInterceptor in that
+				it captures requests and responses for later processing, but it uses
+				a ThreadLocal object to store them in order to facilitate
+				use in multithreaded environments.
+			</action>
+			<action type="add">
+				A new constructor has been added to the client BasicAuthInterceptor
+				allowing credentials to be specified in the form
+				"username:password" as an alternate to specifying them as two
+				discrete strings.
+			</action>
+			<action type="add">
+				SimpleBundleProvider has been modified to optionally allow calling
+				code to specify a search UUID, and a field to allow the preferred
+				page size to be configured.
+			</action>
+			<action type="add">
+				The JPA server search UUID column has been reduced in length from
+				40 chars to 36, in order to align with the actual length of the
+				generated UUIDs.
+			</action>
+			<action type="add">
+				Plain servers using paging may now specify an ID/name for
+				individual pages being returned, avoiding the need to
+				respond to arbitrary offset/index requests from the server.
+				In this mode, page links in search result bundles simply
+				include the ID to the next page.
+			</action>
+			<action type="fix" issue="965">
+				An issue was fixed in BundleUtil#toListOfEntries, where sometimes
+				a resource could be associated with the wrong entry in the response.
+				Thanks to GitHub user @jbalbien for the pull request!
+			</action>
+			<action type="add">
+				JPA subscription delivery queues no longer store the resource body in the
+				queue (only the ID), which should reduce the memory/disk footprint of the queue
+				when it grows long.
+			</action>
+			<action type="fix" issue="1053">
+				A bug was fixed in JPA server searches: When performing a search with a _lastUpdate 
+				filter, the filter was applied to any _include values, which it should not have been.
+				Thanks to Deepak Garg for reporting!
+			<action type="add">
+				When performing a ConceptMap/$translate operation with reverse="true" in the arguments,
+				the equivalency flag is now set on the response just as it is for a non-reverse lookup.
+			</action>
+			<action type="add">
+				When executing a FHIR transaction in JPA server, if the request bundle contains
+				placeholder IDs references (i.e. "urn:uuid:*" references) that can not be resolved
+				anywhere else in the bundle, a user friendly error is now returned. Previously,
+				a cryptic error containing only the UUID was returned. As a part of this change,
+				transaction processing has now been consolidated into a single codebase for DSTU3
+				/ R4 (and future) versions of FHIR. This should greatly improve maintainability
+				and consistency for transaction processing.
+			</action>
+			<action type="add">
+				ResponseHighlighterInterceptor now displays the total size of the output and
+				an estimate of the transfer time at the bottom of the response.
+			</action>
+			<action type="add" issue="1022">
+				The Prefer header is now honoured for HTTP PATCH requests. Thanks to
+				Alin Leonard for the Pull Request!
+			</action>
+			<action type="add">
+				The <![CDATA[<code>Composition</code>]]> operation <![CDATA[<code>$document</code>]]> has been
+				implemented. Thanks to Patrick Werner for the Pull Request!
+			</action>
+			<action type="add">
+				HAPI FHIR CLI commands that allow Basic Auth credentials or a Bearer Token may now use 
+				a value of "PROMPT" to cause the CLI to prompt the user for credentials using an
+				interactive prompt.
+			</action>
+			<action type="remove">
+				The experimental "dynamic mode" for search parameter registration has been removed. This
+				mode was never published or documented and was labelled as experimental, so I am hoping it
+				was never depended on by anyone. Please post on the HAPI FHIR mailing list if this
+				change affects you.
+			</action>
+			<action type="fix">
+				A crash was fixed when using the ConceptMap/$translate operation to translate a mapping
+				where the equivalence was not specified.
+			</action>
+			<action type="add">
+				The maximum length for codes in the JPA server terminology service have been increased
+				to 500 in order to better accomodate code systems with very long codes.
+			</action>
+			<action type="fix">
+				A bug in the DSTU3 validator was fixed where validation resources such as StructureDefinitions
+				and Questionnaires were cached in a cache that never expired, leading to validations against
+				stale versions of resources.
+			</action>
 		</release>
 		<release version="3.4.0" date="2018-05-28">
 			<action type="add">
diff --git a/src/site/xdoc/doc_rest_server.xml b/src/site/xdoc/doc_rest_server.xml
index d0a535afdf1..08febfedbb2 100644
--- a/src/site/xdoc/doc_rest_server.xml
+++ b/src/site/xdoc/doc_rest_server.xml
@@ -336,7 +336,34 @@
 				</macro>
 			
 			</subsection>
-			
+
+			<subsection name="Using Named Pages">
+
+				<p>
+					By default, the paging system uses parameters that are embedded into the
+					page links for the start index and the page size. This is useful for servers that
+					can retrieve arbitrary offsets within a search result. For example,
+					if a given search can easily retrieve "items 5-10 from the given search", then
+					the mechanism above works well.
+				</p>
+				<p>
+					Another option is to use "named pages", meaning that each
+					page is simply assigned an ID by the server, and the next/previous
+					page is requested using this ID.
+				</p>
+				<p>
+					In order to support named pages, the IPagingProvider must
+					implement the
+					<code>retrieveResultList(String theSearchId, String thePageId)</code>
+					method.
+				</p>
+				<p>
+					Then, individual search/history methods may return a
+					<code>BundleProviderWithNamedPages</code> instead of a simple
+					<code>IBundleProvider</code>.
+				</p>
+			</subsection>
+
 		</section>
 			
 
diff --git a/src/site/xdoc/doc_rest_server_security.xml b/src/site/xdoc/doc_rest_server_security.xml
index 1b02bbaba98..111ba9186ea 100644
--- a/src/site/xdoc/doc_rest_server_security.xml
+++ b/src/site/xdoc/doc_rest_server_security.xml
@@ -215,6 +215,29 @@
 				
 			</subsection>
 
+			<subsection name="Authorizing Patch Operations">
+				<p>
+					The FHIR <a href="http://hl7.org/fhir/http.html#patch">patch</a> operation
+					presents a challenge for authorization, as the incoming request often contains
+					very little detail about what is being modified.
+				</p>
+				<p>
+					In order to properly enforce authorization on a server that
+					allows the patch operation, a rule may be added that allows all
+					patch requests, as shown below.
+				</p>
+				<p>
+					This should be combined with server support for
+					<a href="http://hapifhir.io/doc_rest_server_security.html#Authorizing_Sub-Operations">Authorizing Sub-Operations</a>
+					as shown above.
+				</p>
+				<macro name="snippet">
+					<param name="id" value="patchAll" />
+					<param name="file" value="examples/src/main/java/example/AuthorizationInterceptors.java" />
+				</macro>
+
+			</subsection>
+
 			<subsection name="Authorizing Multitenant Servers">
 
 				<p>