UNPKG

@financialforcedev/orizuru

Version:

Streamlined communication between Heroku dynos / other worker processes

136 lines 16.6 kB
"use strict"; /* * 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==