@financialforcedev/orizuru
Version:
Streamlined communication between Heroku dynos / other worker processes
136 lines • 16.6 kB
JavaScript
;
/*
* Copyright (c) 2017-2019, FinancialForce.com, inc
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of the FinancialForce.com, inc nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
Object.defineProperty(exports, "__esModule", { value: true });
/**
* The HTTP methods that can be used with the Orizuru Server.
* @module server/routeMethod
*/
/**
* _The DELETE method requests that the origin server remove the
* association between the target resource and its current
* functionality. In effect, this method is similar to the rm command
* in UNIX: it expresses a deletion operation on the URI mapping of the
* origin server rather than an expectation that the previously
* associated information be deleted._
*
* {@link https://tools.ietf.org/html/rfc7231#section-4.3.5}
*/
exports.DELETE = 'delete';
/**
* _The GET method requests transfer of a current selected representation
* for the target resource. GET is the primary mechanism of information
* retrieval and the focus of almost all performance optimizations.
* Hence, when people speak of retrieving some identifiable information
* via HTTP, they are generally referring to making a GET request._
*
* {@link https://tools.ietf.org/html/rfc7231#section-4.3.1}
*/
exports.GET = 'get';
/**
* _The HEAD method is identical to GET except that the server MUST NOT
* send a message body in the response (i.e., the response terminates at
* the end of the header section). The server SHOULD send the same
* header fields in response to a HEAD request as it would have sent if
* the request had been a GET, except that the payload header fields
* (Section 3.3) MAY be omitted. This method can be used for obtaining
* metadata about the selected representation without transferring the
* representation data and is often used for testing hypertext links for
* validity, accessibility, and recent modification._
*
* {@link https://tools.ietf.org/html/rfc7231#section-4.3.2}
*/
exports.HEAD = 'head';
/**
* _The OPTIONS method requests information about the communication
* options available for the target resource, at either the origin
* server or an intervening intermediary. This method allows a client
* to determine the options and/or requirements associated with a
* resource, or the capabilities of a server, without implying a
* resource action._
*
* {@link https://tools.ietf.org/html/rfc7231#section-4.3.7}
*/
exports.OPTIONS = 'options';
/**
* _The PATCH method requests that a set of changes described in the
* request entity be applied to the resource identified by the Request-
* URI. The set of changes is represented in a format called a "patch
* document" identified by a media type. If the Request-URI does not
* point to an existing resource, the server MAY create a new resource,
* depending on the patch document type (whether it can logically modify
* a null resource) and permissions, etc._
*
* {@link https://tools.ietf.org/html/rfc5789}
*/
exports.PATCH = 'patch';
/**
* _The POST method requests that the target resource process the
* representation enclosed in the request according to the resource's
* own specific semantics. For example, POST is used for the following
* functions (among others):_
* * _Providing a block of data, such as the fields entered into an HTML
* form, to a data-handling process;_
* * _Posting a message to a bulletin board, newsgroup, mailing list,
* blog, or similar group of articles;_
* * _Creating a new resource that has yet to be identified by the
* origin server; and_
* * _Appending data to a resource's existing representation(s)._
*
* {@link https://tools.ietf.org/html/rfc7231#section-4.3.4}
*/
exports.POST = 'post';
/**
* _The PUT method requests that the state of the target resource be
* created or replaced with the state defined by the representation
* enclosed in the request message payload. A successful PUT of a given
* representation would suggest that a subsequent GET on that same
* target resource will result in an equivalent representation being
* sent in a 200 (OK) response. However, there is no guarantee that
* such a state change will be observable, since the target resource
* might be acted upon by other user agents in parallel, or might be
* subject to dynamic processing by the origin server, before any
* subsequent GET is received. A successful response only implies that
* the user agent's intent was achieved at the time of its processing by
* the origin server._
*
* {@link https://tools.ietf.org/html/rfc7231#section-4.3.3}
*/
exports.PUT = 'put';
/**
* _The TRACE method requests a remote, application-level loop-back of
* the request message. The final recipient of the request SHOULD
* reflect the message received, excluding some fields described below,
* back to the client as the message body of a 200 (OK) response with a
* Content-Type of "message/http" (Section 8.3.1 of [RFC7230]). The
* final recipient is either the origin server or the first server to
* receive a Max-Forwards value of zero (0) in the request
* (Section 5.1.2)._
*
* {@link https://tools.ietf.org/html/rfc7231#section-4.3.8}
*/
exports.TRACE = 'trace';
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVNZXRob2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaW5kZXgvc2VydmVyL3JvdXRlTWV0aG9kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHOztBQUVIOzs7R0FHRztBQUVIOzs7Ozs7Ozs7R0FTRztBQUNVLFFBQUEsTUFBTSxHQUFXLFFBQVEsQ0FBQztBQUV2Qzs7Ozs7Ozs7R0FRRztBQUNVLFFBQUEsR0FBRyxHQUFXLEtBQUssQ0FBQztBQUVqQzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDVSxRQUFBLElBQUksR0FBVyxNQUFNLENBQUM7QUFFbkM7Ozs7Ozs7OztHQVNHO0FBQ1UsUUFBQSxPQUFPLEdBQVcsU0FBUyxDQUFDO0FBRXpDOzs7Ozs7Ozs7O0dBVUc7QUFDVSxRQUFBLEtBQUssR0FBVyxPQUFPLENBQUM7QUFFckM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDVSxRQUFBLElBQUksR0FBVyxNQUFNLENBQUM7QUFFbkM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ1UsUUFBQSxHQUFHLEdBQVcsS0FBSyxDQUFDO0FBRWpDOzs7Ozs7Ozs7OztHQVdHO0FBQ1UsUUFBQSxLQUFLLEdBQVcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE5LCBGaW5hbmNpYWxGb3JjZS5jb20sIGluY1xuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLFxuICogICBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsXG4gKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogICAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqIC0gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgRmluYW5jaWFsRm9yY2UuY29tLCBpbmMgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzXG4gKiAgICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0XG4gKiAgICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkRcbiAqICBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTXG4gKiAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTExcbiAqICBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCxcbiAqICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFNcbiAqICBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUllcbiAqICBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSlcbiAqICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS5cbiAqL1xuXG4vKipcbiAqIFRoZSBIVFRQIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBPcml6dXJ1IFNlcnZlci5cbiAqIEBtb2R1bGUgc2VydmVyL3JvdXRlTWV0aG9kXG4gKi9cblxuLyoqXG4gKiBfVGhlIERFTEVURSBtZXRob2QgcmVxdWVzdHMgdGhhdCB0aGUgb3JpZ2luIHNlcnZlciByZW1vdmUgdGhlXG4gKiBhc3NvY2lhdGlvbiBiZXR3ZWVuIHRoZSB0YXJnZXQgcmVzb3VyY2UgYW5kIGl0cyBjdXJyZW50XG4gKiBmdW5jdGlvbmFsaXR5LiAgSW4gZWZmZWN0LCB0aGlzIG1ldGhvZCBpcyBzaW1pbGFyIHRvIHRoZSBybSBjb21tYW5kXG4gKiBpbiBVTklYOiBpdCBleHByZXNzZXMgYSBkZWxldGlvbiBvcGVyYXRpb24gb24gdGhlIFVSSSBtYXBwaW5nIG9mIHRoZVxuICogb3JpZ2luIHNlcnZlciByYXRoZXIgdGhhbiBhbiBleHBlY3RhdGlvbiB0aGF0IHRoZSBwcmV2aW91c2x5XG4gKiBhc3NvY2lhdGVkIGluZm9ybWF0aW9uIGJlIGRlbGV0ZWQuX1xuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41fVxuICovXG5leHBvcnQgY29uc3QgREVMRVRFOiBzdHJpbmcgPSAnZGVsZXRlJztcblxuLyoqXG4gKiBfVGhlIEdFVCBtZXRob2QgcmVxdWVzdHMgdHJhbnNmZXIgb2YgYSBjdXJyZW50IHNlbGVjdGVkIHJlcHJlc2VudGF0aW9uXG4gKiBmb3IgdGhlIHRhcmdldCByZXNvdXJjZS4gIEdFVCBpcyB0aGUgcHJpbWFyeSBtZWNoYW5pc20gb2YgaW5mb3JtYXRpb25cbiAqIHJldHJpZXZhbCBhbmQgdGhlIGZvY3VzIG9mIGFsbW9zdCBhbGwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucy5cbiAqIEhlbmNlLCB3aGVuIHBlb3BsZSBzcGVhayBvZiByZXRyaWV2aW5nIHNvbWUgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uXG4gKiB2aWEgSFRUUCwgdGhleSBhcmUgZ2VuZXJhbGx5IHJlZmVycmluZyB0byBtYWtpbmcgYSBHRVQgcmVxdWVzdC5fXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjF9XG4gKi9cbmV4cG9ydCBjb25zdCBHRVQ6IHN0cmluZyA9ICdnZXQnO1xuXG4vKipcbiAqIF9UaGUgSEVBRCBtZXRob2QgaXMgaWRlbnRpY2FsIHRvIEdFVCBleGNlcHQgdGhhdCB0aGUgc2VydmVyIE1VU1QgTk9UXG4gKiBzZW5kIGEgbWVzc2FnZSBib2R5IGluIHRoZSByZXNwb25zZSAoaS5lLiwgdGhlIHJlc3BvbnNlIHRlcm1pbmF0ZXMgYXRcbiAqIHRoZSBlbmQgb2YgdGhlIGhlYWRlciBzZWN0aW9uKS4gIFRoZSBzZXJ2ZXIgU0hPVUxEIHNlbmQgdGhlIHNhbWVcbiAqIGhlYWRlciBmaWVsZHMgaW4gcmVzcG9uc2UgdG8gYSBIRUFEIHJlcXVlc3QgYXMgaXQgd291bGQgaGF2ZSBzZW50IGlmXG4gKiB0aGUgcmVxdWVzdCBoYWQgYmVlbiBhIEdFVCwgZXhjZXB0IHRoYXQgdGhlIHBheWxvYWQgaGVhZGVyIGZpZWxkc1xuICogKFNlY3Rpb24gMy4zKSBNQVkgYmUgb21pdHRlZC4gIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGZvciBvYnRhaW5pbmdcbiAqIG1ldGFkYXRhIGFib3V0IHRoZSBzZWxlY3RlZCByZXByZXNlbnRhdGlvbiB3aXRob3V0IHRyYW5zZmVycmluZyB0aGVcbiAqIHJlcHJlc2VudGF0aW9uIGRhdGEgYW5kIGlzIG9mdGVuIHVzZWQgZm9yIHRlc3RpbmcgaHlwZXJ0ZXh0IGxpbmtzIGZvclxuICogdmFsaWRpdHksIGFjY2Vzc2liaWxpdHksIGFuZCByZWNlbnQgbW9kaWZpY2F0aW9uLl9cbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMn1cbiAqL1xuZXhwb3J0IGNvbnN0IEhFQUQ6IHN0cmluZyA9ICdoZWFkJztcblxuLyoqXG4gKiBfVGhlIE9QVElPTlMgbWV0aG9kIHJlcXVlc3RzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21tdW5pY2F0aW9uXG4gKiBvcHRpb25zIGF2YWlsYWJsZSBmb3IgdGhlIHRhcmdldCByZXNvdXJjZSwgYXQgZWl0aGVyIHRoZSBvcmlnaW5cbiAqIHNlcnZlciBvciBhbiBpbnRlcnZlbmluZyBpbnRlcm1lZGlhcnkuICBUaGlzIG1ldGhvZCBhbGxvd3MgYSBjbGllbnRcbiAqIHRvIGRldGVybWluZSB0aGUgb3B0aW9ucyBhbmQvb3IgcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCBhXG4gKiByZXNvdXJjZSwgb3IgdGhlIGNhcGFiaWxpdGllcyBvZiBhIHNlcnZlciwgd2l0aG91dCBpbXBseWluZyBhXG4gKiByZXNvdXJjZSBhY3Rpb24uX1xuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy43fVxuICovXG5leHBvcnQgY29uc3QgT1BUSU9OUzogc3RyaW5nID0gJ29wdGlvbnMnO1xuXG4vKipcbiAqIF9UaGUgUEFUQ0ggbWV0aG9kIHJlcXVlc3RzIHRoYXQgYSBzZXQgb2YgY2hhbmdlcyBkZXNjcmliZWQgaW4gdGhlXG4gKiByZXF1ZXN0IGVudGl0eSBiZSBhcHBsaWVkIHRvIHRoZSByZXNvdXJjZSBpZGVudGlmaWVkIGJ5IHRoZSBSZXF1ZXN0LVxuICogVVJJLiAgVGhlIHNldCBvZiBjaGFuZ2VzIGlzIHJlcHJlc2VudGVkIGluIGEgZm9ybWF0IGNhbGxlZCBhIFwicGF0Y2hcbiAqIGRvY3VtZW50XCIgaWRlbnRpZmllZCBieSBhIG1lZGlhIHR5cGUuICBJZiB0aGUgUmVxdWVzdC1VUkkgZG9lcyBub3RcbiAqIHBvaW50IHRvIGFuIGV4aXN0aW5nIHJlc291cmNlLCB0aGUgc2VydmVyIE1BWSBjcmVhdGUgYSBuZXcgcmVzb3VyY2UsXG4gKiBkZXBlbmRpbmcgb24gdGhlIHBhdGNoIGRvY3VtZW50IHR5cGUgKHdoZXRoZXIgaXQgY2FuIGxvZ2ljYWxseSBtb2RpZnlcbiAqIGEgbnVsbCByZXNvdXJjZSkgYW5kIHBlcm1pc3Npb25zLCBldGMuX1xuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTc4OX1cbiAqL1xuZXhwb3J0IGNvbnN0IFBBVENIOiBzdHJpbmcgPSAncGF0Y2gnO1xuXG4vKipcbiAqIF9UaGUgUE9TVCBtZXRob2QgcmVxdWVzdHMgdGhhdCB0aGUgdGFyZ2V0IHJlc291cmNlIHByb2Nlc3MgdGhlXG4gKiByZXByZXNlbnRhdGlvbiBlbmNsb3NlZCBpbiB0aGUgcmVxdWVzdCBhY2NvcmRpbmcgdG8gdGhlIHJlc291cmNlJ3NcbiAqIG93biBzcGVjaWZpYyBzZW1hbnRpY3MuICBGb3IgZXhhbXBsZSwgUE9TVCBpcyB1c2VkIGZvciB0aGUgZm9sbG93aW5nXG4gKiBmdW5jdGlvbnMgKGFtb25nIG90aGVycyk6X1xuICogKiBfUHJvdmlkaW5nIGEgYmxvY2sgb2YgZGF0YSwgc3VjaCBhcyB0aGUgZmllbGRzIGVudGVyZWQgaW50byBhbiBIVE1MXG4gKiBmb3JtLCB0byBhIGRhdGEtaGFuZGxpbmcgcHJvY2VzcztfXG4gKiAqIF9Qb3N0aW5nIGEgbWVzc2FnZSB0byBhIGJ1bGxldGluIGJvYXJkLCBuZXdzZ3JvdXAsIG1haWxpbmcgbGlzdCxcbiAqIGJsb2csIG9yIHNpbWlsYXIgZ3JvdXAgb2YgYXJ0aWNsZXM7X1xuICogKiBfQ3JlYXRpbmcgYSBuZXcgcmVzb3VyY2UgdGhhdCBoYXMgeWV0IHRvIGJlIGlkZW50aWZpZWQgYnkgdGhlXG4gKiBvcmlnaW4gc2VydmVyOyBhbmRfXG4gKiAqIF9BcHBlbmRpbmcgZGF0YSB0byBhIHJlc291cmNlJ3MgZXhpc3RpbmcgcmVwcmVzZW50YXRpb24ocykuX1xuICpcbiAqIHtAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy40fVxuICovXG5leHBvcnQgY29uc3QgUE9TVDogc3RyaW5nID0gJ3Bvc3QnO1xuXG4vKipcbiAqIF9UaGUgUFVUIG1ldGhvZCByZXF1ZXN0cyB0aGF0IHRoZSBzdGF0ZSBvZiB0aGUgdGFyZ2V0IHJlc291cmNlIGJlXG4gKiBjcmVhdGVkIG9yIHJlcGxhY2VkIHdpdGggdGhlIHN0YXRlIGRlZmluZWQgYnkgdGhlIHJlcHJlc2VudGF0aW9uXG4gKiBlbmNsb3NlZCBpbiB0aGUgcmVxdWVzdCBtZXNzYWdlIHBheWxvYWQuICBBIHN1Y2Nlc3NmdWwgUFVUIG9mIGEgZ2l2ZW5cbiAqIHJlcHJlc2VudGF0aW9uIHdvdWxkIHN1Z2dlc3QgdGhhdCBhIHN1YnNlcXVlbnQgR0VUIG9uIHRoYXQgc2FtZVxuICogdGFyZ2V0IHJlc291cmNlIHdpbGwgcmVzdWx0IGluIGFuIGVxdWl2YWxlbnQgcmVwcmVzZW50YXRpb24gYmVpbmdcbiAqIHNlbnQgaW4gYSAyMDAgKE9LKSByZXNwb25zZS4gIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0XG4gKiBzdWNoIGEgc3RhdGUgY2hhbmdlIHdpbGwgYmUgb2JzZXJ2YWJsZSwgc2luY2UgdGhlIHRhcmdldCByZXNvdXJjZVxuICogbWlnaHQgYmUgYWN0ZWQgdXBvbiBieSBvdGhlciB1c2VyIGFnZW50cyBpbiBwYXJhbGxlbCwgb3IgbWlnaHQgYmVcbiAqIHN1YmplY3QgdG8gZHluYW1pYyBwcm9jZXNzaW5nIGJ5IHRoZSBvcmlnaW4gc2VydmVyLCBiZWZvcmUgYW55XG4gKiBzdWJzZXF1ZW50IEdFVCBpcyByZWNlaXZlZC4gIEEgc3VjY2Vzc2Z1bCByZXNwb25zZSBvbmx5IGltcGxpZXMgdGhhdFxuICogdGhlIHVzZXIgYWdlbnQncyBpbnRlbnQgd2FzIGFjaGlldmVkIGF0IHRoZSB0aW1lIG9mIGl0cyBwcm9jZXNzaW5nIGJ5XG4gKiB0aGUgb3JpZ2luIHNlcnZlci5fXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjN9XG4gKi9cbmV4cG9ydCBjb25zdCBQVVQ6IHN0cmluZyA9ICdwdXQnO1xuXG4vKipcbiAqIF9UaGUgVFJBQ0UgbWV0aG9kIHJlcXVlc3RzIGEgcmVtb3RlLCBhcHBsaWNhdGlvbi1sZXZlbCBsb29wLWJhY2sgb2ZcbiAqIHRoZSByZXF1ZXN0IG1lc3NhZ2UuICBUaGUgZmluYWwgcmVjaXBpZW50IG9mIHRoZSByZXF1ZXN0IFNIT1VMRFxuICogcmVmbGVjdCB0aGUgbWVzc2FnZSByZWNlaXZlZCwgZXhjbHVkaW5nIHNvbWUgZmllbGRzIGRlc2NyaWJlZCBiZWxvdyxcbiAqIGJhY2sgdG8gdGhlIGNsaWVudCBhcyB0aGUgbWVzc2FnZSBib2R5IG9mIGEgMjAwIChPSykgcmVzcG9uc2Ugd2l0aCBhXG4gKiBDb250ZW50LVR5cGUgb2YgXCJtZXNzYWdlL2h0dHBcIiAoU2VjdGlvbiA4LjMuMSBvZiBbUkZDNzIzMF0pLiAgVGhlXG4gKiBmaW5hbCByZWNpcGllbnQgaXMgZWl0aGVyIHRoZSBvcmlnaW4gc2VydmVyIG9yIHRoZSBmaXJzdCBzZXJ2ZXIgdG9cbiAqIHJlY2VpdmUgYSBNYXgtRm9yd2FyZHMgdmFsdWUgb2YgemVybyAoMCkgaW4gdGhlIHJlcXVlc3RcbiAqIChTZWN0aW9uIDUuMS4yKS5fXG4gKlxuICoge0BsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjh9XG4gKi9cbmV4cG9ydCBjb25zdCBUUkFDRTogc3RyaW5nID0gJ3RyYWNlJztcbiJdfQ==