Package org.apache.catalina.connector
Class Connector
- java.lang.Object
- 
- org.apache.catalina.util.LifecycleBase
- 
- org.apache.catalina.util.LifecycleMBeanBase
- 
- org.apache.catalina.connector.Connector
 
 
 
- 
- All Implemented Interfaces:
- javax.management.MBeanRegistration,- JmxEnabled,- Lifecycle
 
 public class Connector extends LifecycleMBeanBase Implementation of a Coyote connector.- Author:
- Craig R. McClanahan, Remy Maucherat
 
- 
- 
Nested Class Summary- 
Nested classes/interfaces inherited from interface org.apache.catalina.LifecycleLifecycle.SingleUse
 
- 
 - 
Field SummaryFields Modifier and Type Field Description protected AdapteradapterCoyote adapter.protected booleanallowTraceDo we allow TRACE ?protected longasyncTimeoutDefault timeout for asynchronous requests (ms).protected booleandiscardFacadesThe flag that controls recycling of the facades of the request processing objects.protected booleanenableLookupsThe "enable DNS lookups" flag for this Connector.static java.lang.StringINTERNAL_EXECUTOR_NAMEprotected intmaxParameterCountThe maximum number of parameters (GET plus POST) which will be automatically parsed by the container. 10000 by default.protected intmaxPostSizeMaximum size of a POST which will be automatically parsed by the container. 2 MiB by default.protected intmaxSavePostSizeMaximum size of a POST which will be saved by the container during authentication. 4 KiB by defaultprotected java.lang.StringparseBodyMethodsComma-separated list of HTTP methods that will be parsed according to POST-style rules for application/x-www-form-urlencoded request bodies.protected java.util.HashSet<java.lang.String>parseBodyMethodsSetA Set of methods determined byparseBodyMethods.protected ProtocolHandlerprotocolHandlerCoyote protocol handler.protected java.lang.StringprotocolHandlerClassNameCoyote Protocol handler class name.protected java.lang.StringproxyNameThe server name to which we should pretend requests to this Connector were directed.protected intproxyPortThe server port to which we should pretend requests to this Connector were directed.static booleanRECYCLE_FACADESAlternate flag to enable recycling of facades.protected intredirectPortThe redirect port for non-SSL to SSL redirects.protected java.lang.StringschemeThe request scheme that will be set on all requests received through this connector.protected booleansecureThe secure connection flag that will be set on all requests received through this connector.protected ServiceserviceTheServicewe are associated with (if any).protected static StringManagersmThe string manager for this package.protected booleanuseBodyEncodingForURIURI encoding as body.protected booleanuseIPVHostsFlag to use IP-based virtual hosting.protected booleanxpoweredByIs generation of X-Powered-By response header enabled/disabled?- 
Fields inherited from class org.apache.catalina.util.LifecycleMBeanBasemserver
 - 
Fields inherited from interface org.apache.catalina.LifecycleAFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT
 
- 
 - 
Constructor SummaryConstructors Constructor Description Connector()Defaults to using HTTP/1.1 NIO implementation.Connector(java.lang.String protocol)Connector(ProtocolHandler protocolHandler)
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description voidaddSslHostConfig(SSLHostConfig sslHostConfig)voidaddUpgradeProtocol(UpgradeProtocol upgradeProtocol)protected java.lang.StringcreateObjectNameKeyProperties(java.lang.String type)RequestcreateRequest()Create (or allocate) and return a Request object suitable for specifying the contents of a Request to the responsible Container.ResponsecreateResponse()Create (or allocate) and return a Response object suitable for receiving the contents of a Response from the responsible Container.protected voiddestroyInternal()Sub-classes wishing to perform additional clean-up should override this method, ensuring that super.destroyInternal() is the last call in the overriding method.SSLHostConfig[]findSslHostConfigs()UpgradeProtocol[]findUpgradeProtocols()booleangetAllowTrace()longgetAsyncTimeout()java.lang.ObjectgetAttribute(java.lang.String name)Deprecated.UsegetProperty(String).booleangetDiscardFacades()protected java.lang.StringgetDomainInternal()Method implemented by sub-classes to identify the domain in which MBeans should be registered.booleangetEnableLookups()java.lang.StringgetEncodedSolidusHandling()EncodedSolidusHandlinggetEncodedSolidusHandlingInternal()java.lang.StringgetExecutorName()intgetLocalPort()intgetMaxCookieCount()intgetMaxParameterCount()intgetMaxPostSize()intgetMaxSavePostSize()protected java.lang.StringgetObjectNameKeyProperties()Allow sub-classes to specify the key properties component of theObjectNamethat will be used to register this component.java.lang.StringgetParseBodyMethods()intgetPort()intgetPortOffset()intgetPortWithOffset()java.lang.ObjectgetProperty(java.lang.String name)Return a property from the protocol handler.java.lang.StringgetProtocol()ProtocolHandlergetProtocolHandler()java.lang.StringgetProtocolHandlerClassName()java.lang.StringgetProxyName()intgetProxyPort()intgetRedirectPort()intgetRedirectPortWithOffset()java.lang.StringgetScheme()booleangetSecure()ServicegetService()java.nio.charset.CharsetgetURICharset()java.lang.StringgetURIEncoding()booleangetUseBodyEncodingForURI()booleangetUseIPVHosts()Test if IP-based virtual hosting is enabled.booleangetXpoweredBy()Indicates whether the generation of an X-Powered-By response header for Servlet-generated responses is enabled or disabled for this Connector.protected voidinitInternal()Sub-classes wishing to perform additional initialization should override this method, ensuring that super.initInternal() is the first call in the overriding method.protected booleanisParseBodyMethod(java.lang.String method)voidpause()Pause the connector.voidresume()Resume the connector.voidsetAllowTrace(boolean allowTrace)Set the allowTrace flag, to disable or enable the TRACE HTTP method.voidsetAsyncTimeout(long asyncTimeout)Set the default timeout for async requests.voidsetAttribute(java.lang.String name, java.lang.Object value)Deprecated.voidsetDiscardFacades(boolean discardFacades)Set the recycling strategy for the object facades.voidsetEnableLookups(boolean enableLookups)Set the "enable DNS lookups" flag.voidsetEncodedSolidusHandling(java.lang.String encodedSolidusHandling)voidsetMaxCookieCount(int maxCookieCount)voidsetMaxParameterCount(int maxParameterCount)Set the maximum number of parameters (GET plus POST) that will be automatically parsed by the container.voidsetMaxPostSize(int maxPostSize)Set the maximum size of a POST which will be automatically parsed by the container.voidsetMaxSavePostSize(int maxSavePostSize)Set the maximum size of a POST which will be saved by the container during authentication.voidsetParseBodyMethods(java.lang.String methods)Set list of HTTP methods which should allow body parameter parsing.voidsetPort(int port)Set the port number on which we listen for requests.voidsetPortOffset(int portOffset)booleansetProperty(java.lang.String name, java.lang.String value)Set a property on the protocol handler.voidsetProxyName(java.lang.String proxyName)Set the proxy server name for this Connector.voidsetProxyPort(int proxyPort)Set the proxy server port for this Connector.voidsetRedirectPort(int redirectPort)Set the redirect port number.voidsetScheme(java.lang.String scheme)Set the scheme that will be assigned to requests received through this connector.voidsetSecure(boolean secure)Set the secure connection flag that will be assigned to requests received through this connector.voidsetService(Service service)Set theServicewith which we are associated (if any).voidsetURIEncoding(java.lang.String URIEncoding)Set the URI encoding to be used for the URI.voidsetUseBodyEncodingForURI(boolean useBodyEncodingForURI)Set if the entity body encoding should be used for the URI.voidsetUseIPVHosts(boolean useIPVHosts)Enable the use of IP-based virtual hosting.voidsetXpoweredBy(boolean xpoweredBy)Enables or disables the generation of an X-Powered-By header (with value Servlet/2.5) for all servlet-generated responses returned by this Connector.protected voidstartInternal()Begin processing requests via this Connector.protected voidstopInternal()Terminate processing requests via this Connector.java.lang.StringtoString()Provide a useful toString() implementation as it may be used when logging Lifecycle errors to identify the component.- 
Methods inherited from class org.apache.catalina.util.LifecycleMBeanBasegetDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister
 - 
Methods inherited from class org.apache.catalina.util.LifecycleBaseaddLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop
 
- 
 
- 
- 
- 
Field Detail- 
RECYCLE_FACADESpublic static final boolean RECYCLE_FACADES Alternate flag to enable recycling of facades.
 - 
INTERNAL_EXECUTOR_NAMEpublic static final java.lang.String INTERNAL_EXECUTOR_NAME - See Also:
- Constant Field Values
 
 - 
serviceprotected Service service TheServicewe are associated with (if any).
 - 
allowTraceprotected boolean allowTrace Do we allow TRACE ?
 - 
asyncTimeoutprotected long asyncTimeout Default timeout for asynchronous requests (ms).
 - 
enableLookupsprotected boolean enableLookups The "enable DNS lookups" flag for this Connector.
 - 
xpoweredByprotected boolean xpoweredBy Is generation of X-Powered-By response header enabled/disabled?
 - 
proxyNameprotected java.lang.String proxyName The server name to which we should pretend requests to this Connector were directed. This is useful when operating Tomcat behind a proxy server, so that redirects get constructed accurately. If not specified, the server name included in theHostheader is used.
 - 
proxyPortprotected int proxyPort The server port to which we should pretend requests to this Connector were directed. This is useful when operating Tomcat behind a proxy server, so that redirects get constructed accurately. If not specified, the port number specified by theportproperty is used.
 - 
discardFacadesprotected boolean discardFacades The flag that controls recycling of the facades of the request processing objects. If set totruethe object facades will be discarded when the request is recycled. If the security manager is enabled, this setting is ignored and object facades are always discarded.
 - 
redirectPortprotected int redirectPort The redirect port for non-SSL to SSL redirects.
 - 
schemeprotected java.lang.String scheme The request scheme that will be set on all requests received through this connector.
 - 
secureprotected boolean secure The secure connection flag that will be set on all requests received through this connector.
 - 
smprotected static final StringManager sm The string manager for this package.
 - 
maxParameterCountprotected int maxParameterCount The maximum number of parameters (GET plus POST) which will be automatically parsed by the container. 10000 by default. The default Tomcat server.xml configures a lower default of 1000. A value of less than 0 means no limit.
 - 
maxPostSizeprotected int maxPostSize Maximum size of a POST which will be automatically parsed by the container. 2 MiB by default.
 - 
maxSavePostSizeprotected int maxSavePostSize Maximum size of a POST which will be saved by the container during authentication. 4 KiB by default
 - 
parseBodyMethodsprotected java.lang.String parseBodyMethods Comma-separated list of HTTP methods that will be parsed according to POST-style rules for application/x-www-form-urlencoded request bodies.
 - 
parseBodyMethodsSetprotected java.util.HashSet<java.lang.String> parseBodyMethodsSet A Set of methods determined byparseBodyMethods.
 - 
useIPVHostsprotected boolean useIPVHosts Flag to use IP-based virtual hosting.
 - 
protocolHandlerClassNameprotected final java.lang.String protocolHandlerClassName Coyote Protocol handler class name. SeeConnector()for current default.
 - 
protocolHandlerprotected final ProtocolHandler protocolHandler Coyote protocol handler.
 - 
adapterprotected Adapter adapter Coyote adapter.
 - 
useBodyEncodingForURIprotected boolean useBodyEncodingForURI URI encoding as body.
 
- 
 - 
Constructor Detail- 
Connectorpublic Connector() Defaults to using HTTP/1.1 NIO implementation.
 - 
Connectorpublic Connector(java.lang.String protocol) 
 - 
Connectorpublic Connector(ProtocolHandler protocolHandler) 
 
- 
 - 
Method Detail- 
getPropertypublic java.lang.Object getProperty(java.lang.String name) Return a property from the protocol handler.- Parameters:
- name- the property name
- Returns:
- the property value
 
 - 
setPropertypublic boolean setProperty(java.lang.String name, java.lang.String value)Set a property on the protocol handler.- Parameters:
- name- the property name
- value- the property value
- Returns:
- trueif the property was successfully set
 
 - 
getAttribute@Deprecated public java.lang.Object getAttribute(java.lang.String name) Deprecated.UsegetProperty(String). This will be removed in Tomcat 10 onwards.Return a property from the protocol handler.- Parameters:
- name- the property name
- Returns:
- the property value
 
 - 
setAttribute@Deprecated public void setAttribute(java.lang.String name, java.lang.Object value)Deprecated.UsesetProperty(String, String). This will be removed in Tomcat 10 onwards.Set a property on the protocol handler.- Parameters:
- name- the property name
- value- the property value
 
 - 
getServicepublic Service getService() - Returns:
- the Servicewith which we are associated (if any).
 
 - 
setServicepublic void setService(Service service) Set theServicewith which we are associated (if any).- Parameters:
- service- The service that owns this Engine
 
 - 
getAllowTracepublic boolean getAllowTrace() - Returns:
- trueif the TRACE method is allowed. Default value is- false.
 
 - 
setAllowTracepublic void setAllowTrace(boolean allowTrace) Set the allowTrace flag, to disable or enable the TRACE HTTP method.- Parameters:
- allowTrace- The new allowTrace flag
 
 - 
getAsyncTimeoutpublic long getAsyncTimeout() - Returns:
- the default timeout for async requests in ms.
 
 - 
setAsyncTimeoutpublic void setAsyncTimeout(long asyncTimeout) Set the default timeout for async requests.- Parameters:
- asyncTimeout- The new timeout in ms.
 
 - 
getDiscardFacadespublic boolean getDiscardFacades() - Returns:
- trueif the object facades are discarded, either when the discardFacades value is- trueor when the security manager is enabled.
 
 - 
setDiscardFacadespublic void setDiscardFacades(boolean discardFacades) Set the recycling strategy for the object facades.- Parameters:
- discardFacades- the new value of the flag
 
 - 
getEnableLookupspublic boolean getEnableLookups() - Returns:
- the "enable DNS lookups" flag.
 
 - 
setEnableLookupspublic void setEnableLookups(boolean enableLookups) Set the "enable DNS lookups" flag.- Parameters:
- enableLookups- The new "enable DNS lookups" flag value
 
 - 
getMaxCookieCountpublic int getMaxCookieCount() 
 - 
setMaxCookieCountpublic void setMaxCookieCount(int maxCookieCount) 
 - 
getMaxParameterCountpublic int getMaxParameterCount() - Returns:
- the maximum number of parameters (GET plus POST) that will be automatically parsed by the container. A value of less than 0 means no limit.
 
 - 
setMaxParameterCountpublic void setMaxParameterCount(int maxParameterCount) Set the maximum number of parameters (GET plus POST) that will be automatically parsed by the container. A value of less than 0 means no limit.- Parameters:
- maxParameterCount- The new setting
 
 - 
getMaxPostSizepublic int getMaxPostSize() - Returns:
- the maximum size of a POST which will be automatically parsed by the container.
 
 - 
setMaxPostSizepublic void setMaxPostSize(int maxPostSize) Set the maximum size of a POST which will be automatically parsed by the container.- Parameters:
- maxPostSize- The new maximum size in bytes of a POST which will be automatically parsed by the container
 
 - 
getMaxSavePostSizepublic int getMaxSavePostSize() - Returns:
- the maximum size of a POST which will be saved by the container during authentication.
 
 - 
setMaxSavePostSizepublic void setMaxSavePostSize(int maxSavePostSize) Set the maximum size of a POST which will be saved by the container during authentication.- Parameters:
- maxSavePostSize- The new maximum size in bytes of a POST which will be saved by the container during authentication.
 
 - 
getParseBodyMethodspublic java.lang.String getParseBodyMethods() - Returns:
- the HTTP methods which will support body parameters parsing
 
 - 
setParseBodyMethodspublic void setParseBodyMethods(java.lang.String methods) Set list of HTTP methods which should allow body parameter parsing. This defaults toPOST.- Parameters:
- methods- Comma separated list of HTTP method names
 
 - 
isParseBodyMethodprotected boolean isParseBodyMethod(java.lang.String method) 
 - 
getPortpublic int getPort() - Returns:
- the port number on which this connector is configured to listen for requests. The special value of 0 means select a random free port when the socket is bound.
 
 - 
setPortpublic void setPort(int port) Set the port number on which we listen for requests.- Parameters:
- port- The new port number
 
 - 
getPortOffsetpublic int getPortOffset() 
 - 
setPortOffsetpublic void setPortOffset(int portOffset) 
 - 
getPortWithOffsetpublic int getPortWithOffset() 
 - 
getLocalPortpublic int getLocalPort() - Returns:
- the port number on which this connector is listening to requests. If the special value for
             getPort()of zero is used then this method will report the actual port bound.
 
 - 
getProtocolpublic java.lang.String getProtocol() - Returns:
- the Coyote protocol handler in use.
 
 - 
getProtocolHandlerClassNamepublic java.lang.String getProtocolHandlerClassName() - Returns:
- the class name of the Coyote protocol handler in use.
 
 - 
getProtocolHandlerpublic ProtocolHandler getProtocolHandler() - Returns:
- the protocol handler associated with the connector.
 
 - 
getProxyNamepublic java.lang.String getProxyName() - Returns:
- the proxy server name for this Connector.
 
 - 
setProxyNamepublic void setProxyName(java.lang.String proxyName) Set the proxy server name for this Connector.- Parameters:
- proxyName- The new proxy server name
 
 - 
getProxyPortpublic int getProxyPort() - Returns:
- the proxy server port for this Connector.
 
 - 
setProxyPortpublic void setProxyPort(int proxyPort) Set the proxy server port for this Connector.- Parameters:
- proxyPort- The new proxy server port
 
 - 
getRedirectPortpublic int getRedirectPort() - Returns:
- the port number to which a request should be redirected if it comes in on a non-SSL port and is subject to a security constraint with a transport guarantee that requires SSL.
 
 - 
setRedirectPortpublic void setRedirectPort(int redirectPort) Set the redirect port number.- Parameters:
- redirectPort- The redirect port number (non-SSL to SSL)
 
 - 
getRedirectPortWithOffsetpublic int getRedirectPortWithOffset() 
 - 
getSchemepublic java.lang.String getScheme() - Returns:
- the scheme that will be assigned to requests received through this connector. Default value is "http".
 
 - 
setSchemepublic void setScheme(java.lang.String scheme) Set the scheme that will be assigned to requests received through this connector.- Parameters:
- scheme- The new scheme
 
 - 
getSecurepublic boolean getSecure() - Returns:
- the secure connection flag that will be assigned to requests received through this connector. Default value is "false".
 
 - 
setSecurepublic void setSecure(boolean secure) Set the secure connection flag that will be assigned to requests received through this connector.- Parameters:
- secure- The new secure connection flag
 
 - 
getURIEncodingpublic java.lang.String getURIEncoding() - Returns:
- the name of character encoding to be used for the URI using the original case.
 
 - 
getURICharsetpublic java.nio.charset.Charset getURICharset() - Returns:
- The Charset to use to convert raw URI bytes (after %nn decoding) to characters. This will never be null
 
 - 
setURIEncodingpublic void setURIEncoding(java.lang.String URIEncoding) Set the URI encoding to be used for the URI.- Parameters:
- URIEncoding- The new URI character encoding.
 
 - 
getUseBodyEncodingForURIpublic boolean getUseBodyEncodingForURI() - Returns:
- the true if the entity body encoding should be used for the URI.
 
 - 
setUseBodyEncodingForURIpublic void setUseBodyEncodingForURI(boolean useBodyEncodingForURI) Set if the entity body encoding should be used for the URI.- Parameters:
- useBodyEncodingForURI- The new value for the flag.
 
 - 
getXpoweredBypublic boolean getXpoweredBy() Indicates whether the generation of an X-Powered-By response header for Servlet-generated responses is enabled or disabled for this Connector.- Returns:
- trueif generation of X-Powered-By response header is enabled, false otherwise
 
 - 
setXpoweredBypublic void setXpoweredBy(boolean xpoweredBy) Enables or disables the generation of an X-Powered-By header (with value Servlet/2.5) for all servlet-generated responses returned by this Connector.- Parameters:
- xpoweredBy- true if generation of X-Powered-By response header is to be enabled, false otherwise
 
 - 
setUseIPVHostspublic void setUseIPVHosts(boolean useIPVHosts) Enable the use of IP-based virtual hosting.- Parameters:
- useIPVHosts-- trueif Hosts are identified by IP,- falseif Hosts are identified by name.
 
 - 
getUseIPVHostspublic boolean getUseIPVHosts() Test if IP-based virtual hosting is enabled.- Returns:
- trueif IP vhosts are enabled
 
 - 
getExecutorNamepublic java.lang.String getExecutorName() 
 - 
addSslHostConfigpublic void addSslHostConfig(SSLHostConfig sslHostConfig) 
 - 
findSslHostConfigspublic SSLHostConfig[] findSslHostConfigs() 
 - 
addUpgradeProtocolpublic void addUpgradeProtocol(UpgradeProtocol upgradeProtocol) 
 - 
findUpgradeProtocolspublic UpgradeProtocol[] findUpgradeProtocols() 
 - 
getEncodedSolidusHandlingpublic java.lang.String getEncodedSolidusHandling() 
 - 
setEncodedSolidusHandlingpublic void setEncodedSolidusHandling(java.lang.String encodedSolidusHandling) 
 - 
getEncodedSolidusHandlingInternalpublic EncodedSolidusHandling getEncodedSolidusHandlingInternal() 
 - 
createRequestpublic Request createRequest() Create (or allocate) and return a Request object suitable for specifying the contents of a Request to the responsible Container.- Returns:
- a new Servlet request object
 
 - 
createResponsepublic Response createResponse() Create (or allocate) and return a Response object suitable for receiving the contents of a Response from the responsible Container.- Returns:
- a new Servlet response object
 
 - 
createObjectNameKeyPropertiesprotected java.lang.String createObjectNameKeyProperties(java.lang.String type) 
 - 
pausepublic void pause() Pause the connector.
 - 
resumepublic void resume() Resume the connector.
 - 
initInternalprotected void initInternal() throws LifecycleExceptionDescription copied from class:LifecycleMBeanBaseSub-classes wishing to perform additional initialization should override this method, ensuring that super.initInternal() is the first call in the overriding method.- Overrides:
- initInternalin class- LifecycleMBeanBase
- Throws:
- LifecycleException- If the initialisation fails
 
 - 
startInternalprotected void startInternal() throws LifecycleExceptionBegin processing requests via this Connector.- Specified by:
- startInternalin class- LifecycleBase
- Throws:
- LifecycleException- if a fatal startup error occurs
 
 - 
stopInternalprotected void stopInternal() throws LifecycleExceptionTerminate processing requests via this Connector.- Specified by:
- stopInternalin class- LifecycleBase
- Throws:
- LifecycleException- if a fatal shutdown error occurs
 
 - 
destroyInternalprotected void destroyInternal() throws LifecycleExceptionDescription copied from class:LifecycleMBeanBaseSub-classes wishing to perform additional clean-up should override this method, ensuring that super.destroyInternal() is the last call in the overriding method.- Overrides:
- destroyInternalin class- LifecycleMBeanBase
- Throws:
- LifecycleException- If the destruction fails
 
 - 
toStringpublic java.lang.String toString() Provide a useful toString() implementation as it may be used when logging Lifecycle errors to identify the component.- Overrides:
- toStringin class- java.lang.Object
 
 - 
getDomainInternalprotected java.lang.String getDomainInternal() Description copied from class:LifecycleMBeanBaseMethod implemented by sub-classes to identify the domain in which MBeans should be registered.- Specified by:
- getDomainInternalin class- LifecycleMBeanBase
- Returns:
- The name of the domain to use to register MBeans.
 
 - 
getObjectNameKeyPropertiesprotected java.lang.String getObjectNameKeyProperties() Description copied from class:LifecycleMBeanBaseAllow sub-classes to specify the key properties component of theObjectNamethat will be used to register this component.- Specified by:
- getObjectNameKeyPropertiesin class- LifecycleMBeanBase
- Returns:
- The string representation of the key properties component of the
          desired ObjectName
 
 
- 
 
-