nextlove 2.1.5 → 2.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,281 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
- mod
23
- ));
24
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
25
-
26
- // src/with-route-spec/index.ts
27
- var with_route_spec_exports = {};
28
- __export(with_route_spec_exports, {
29
- checkRouteSpec: () => checkRouteSpec,
30
- createWithRouteSpec: () => createWithRouteSpec
31
- });
32
- module.exports = __toCommonJS(with_route_spec_exports);
33
- var import_nextjs_exception_middleware3 = require("nextjs-exception-middleware");
34
- var import_nextjs_middleware_wrappers = __toESM(require("nextjs-middleware-wrappers"));
35
-
36
- // src/with-route-spec/middlewares/with-methods.ts
37
- var import_nextjs_exception_middleware = require("nextjs-exception-middleware");
38
- var withMethods = (methods) => (next) => (req, res) => {
39
- if (!methods.includes(req.method)) {
40
- throw new import_nextjs_exception_middleware.MethodNotAllowedException({
41
- type: "method_not_allowed",
42
- message: `only ${methods.join(",")} accepted`
43
- });
44
- }
45
- return next(req, res);
46
- };
47
- var with_methods_default = withMethods;
48
-
49
- // src/with-route-spec/middlewares/with-validation.ts
50
- var import_zod = require("zod");
51
- var import_nextjs_exception_middleware2 = require("nextjs-exception-middleware");
52
- var import_lodash = require("lodash");
53
- var getZodObjectSchemaFromZodEffectSchema = (isZodEffect, schema) => {
54
- if (!isZodEffect) {
55
- return schema;
56
- }
57
- let currentSchema = schema;
58
- while (currentSchema instanceof import_zod.z.ZodEffects) {
59
- currentSchema = currentSchema._def.schema;
60
- }
61
- return currentSchema;
62
- };
63
- var getZodDefFromZodSchemaHelpers = (schema) => {
64
- const special_zod_types = [
65
- import_zod.ZodFirstPartyTypeKind.ZodOptional,
66
- import_zod.ZodFirstPartyTypeKind.ZodDefault,
67
- import_zod.ZodFirstPartyTypeKind.ZodEffects
68
- ];
69
- while (special_zod_types.includes(schema._def.typeName)) {
70
- if (schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodOptional || schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodDefault) {
71
- schema = schema._def.innerType;
72
- continue;
73
- }
74
- if (schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodEffects) {
75
- schema = schema._def.schema;
76
- continue;
77
- }
78
- }
79
- return schema._def;
80
- };
81
- var parseQueryParams = (schema, input) => {
82
- const parsed_input = Object.assign({}, input);
83
- const isZodEffect = schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodEffects;
84
- const safe_schema = getZodObjectSchemaFromZodEffectSchema(isZodEffect, schema);
85
- const isZodObject = safe_schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodObject;
86
- if (isZodObject) {
87
- const obj_schema = safe_schema;
88
- for (const [key, value] of Object.entries(obj_schema.shape)) {
89
- const def = getZodDefFromZodSchemaHelpers(value);
90
- const isArray = def.typeName === import_zod.ZodFirstPartyTypeKind.ZodArray;
91
- if (isArray) {
92
- const array_input = input[key];
93
- if (typeof array_input === "string") {
94
- parsed_input[key] = array_input.split(",");
95
- }
96
- const bracket_syntax_array_input = input[`${key}[]`];
97
- if (typeof bracket_syntax_array_input === "string") {
98
- const pre_split_array = bracket_syntax_array_input;
99
- parsed_input[key] = pre_split_array.split(",");
100
- }
101
- if (Array.isArray(bracket_syntax_array_input)) {
102
- parsed_input[key] = bracket_syntax_array_input;
103
- }
104
- continue;
105
- }
106
- const isBoolean = def.typeName === import_zod.ZodFirstPartyTypeKind.ZodBoolean;
107
- if (isBoolean) {
108
- const boolean_input = input[key];
109
- if (typeof boolean_input === "string") {
110
- parsed_input[key] = boolean_input === "true";
111
- }
112
- }
113
- }
114
- }
115
- return schema.parse(parsed_input);
116
- };
117
- var zodIssueToString = (issue) => {
118
- if (issue.path.join(".") === "") {
119
- return issue.message;
120
- }
121
- if (issue.message === "Required") {
122
- return `${issue.path.join(".")} is required`;
123
- }
124
- return `${issue.message} for "${issue.path.join(".")}"`;
125
- };
126
- function validateJsonResponse(jsonResponse, res) {
127
- const original_res_json = res.json;
128
- const override_res_json = (json) => {
129
- const is_success = res.statusCode >= 200 && res.statusCode < 300;
130
- if (!is_success) {
131
- return original_res_json(json);
132
- }
133
- try {
134
- jsonResponse == null ? void 0 : jsonResponse.parse(json);
135
- } catch (err) {
136
- throw new import_nextjs_exception_middleware2.InternalServerErrorException({
137
- type: "invalid_response",
138
- message: "the response does not match with jsonResponse",
139
- zodError: err
140
- });
141
- }
142
- return original_res_json(json);
143
- };
144
- res.json = override_res_json;
145
- }
146
- var withValidation = (input) => (next) => async (req, res) => {
147
- var _a, _b, _c, _d;
148
- if (input.formData && input.jsonBody || input.formData && input.commonParams) {
149
- throw new Error("Cannot use formData with jsonBody or commonParams");
150
- }
151
- if ((req.method === "POST" || req.method === "PATCH") && (input.jsonBody || input.commonParams) && !((_a = req.headers["content-type"]) == null ? void 0 : _a.includes("application/json")) && !(0, import_lodash.isEmpty)(req.body)) {
152
- throw new import_nextjs_exception_middleware2.BadRequestException({
153
- type: "invalid_content_type",
154
- message: `${req.method} requests must have Content-Type header with "application/json"`
155
- });
156
- }
157
- if (input.formData && req.method !== "GET" && !((_b = req.headers["content-type"]) == null ? void 0 : _b.includes(
158
- "application/x-www-form-urlencoded"
159
- ))) {
160
- throw new import_nextjs_exception_middleware2.BadRequestException({
161
- type: "invalid_content_type",
162
- message: `Must have Content-Type header with "application/x-www-form-urlencoded"`
163
- });
164
- }
165
- try {
166
- const original_combined_params = { ...req.query, ...req.body };
167
- const willValidateRequestBody = input.shouldValidateGetRequestBody ? true : req.method !== "GET";
168
- const isFormData = Boolean(input.formData);
169
- if (isFormData && willValidateRequestBody) {
170
- req.body = (_c = input.formData) == null ? void 0 : _c.parse(req.body);
171
- }
172
- if (!isFormData && willValidateRequestBody) {
173
- req.body = (_d = input.jsonBody) == null ? void 0 : _d.parse(req.body);
174
- }
175
- if (input.queryParams) {
176
- req.query = parseQueryParams(input.queryParams, req.query);
177
- }
178
- if (input.commonParams) {
179
- ;
180
- req.commonParams = parseQueryParams(
181
- input.commonParams,
182
- original_combined_params
183
- );
184
- }
185
- } catch (error) {
186
- if (error.name === "ZodError") {
187
- let message;
188
- if (error.issues.length === 1) {
189
- const issue = error.issues[0];
190
- message = zodIssueToString(issue);
191
- } else {
192
- const message_components = [];
193
- for (const issue of error.issues) {
194
- message_components.push(zodIssueToString(issue));
195
- }
196
- message = `${error.issues.length} Input Errors: ` + message_components.join(", ");
197
- }
198
- throw new import_nextjs_exception_middleware2.BadRequestException({
199
- type: "invalid_input",
200
- message,
201
- validation_errors: error.format()
202
- });
203
- }
204
- throw new import_nextjs_exception_middleware2.BadRequestException({
205
- type: "invalid_input",
206
- message: "Error while parsing input"
207
- });
208
- }
209
- if (input.shouldValidateResponses) {
210
- validateJsonResponse(input.jsonResponse, res);
211
- }
212
- return next(req, res);
213
- };
214
- var with_validation_default = withValidation;
215
-
216
- // src/with-route-spec/index.ts
217
- var import_zod2 = require("zod");
218
- var checkRouteSpec = (spec) => spec;
219
- var createWithRouteSpec = (setupParams) => {
220
- const {
221
- authMiddlewareMap = {},
222
- globalMiddlewares = [],
223
- shouldValidateResponses,
224
- shouldValidateGetRequestBody = true,
225
- exceptionHandlingMiddleware = (0, import_nextjs_exception_middleware3.withExceptionHandling)({
226
- addOkStatus: setupParams.addOkStatus,
227
- exceptionHandlingOptions: {
228
- getErrorContext: (req, error) => {
229
- if (process.env.NODE_ENV === "production") {
230
- return {};
231
- }
232
- return error;
233
- }
234
- }
235
- }),
236
- globalSchemas = setupParams.addOkStatus ? {
237
- ok: import_zod2.z.boolean()
238
- } : {}
239
- } = setupParams;
240
- const withRouteSpec = (spec) => {
241
- const createRouteExport = (userDefinedRouteFn) => {
242
- const rootRequestHandler = async (req, res) => {
243
- authMiddlewareMap["none"] = (next) => next;
244
- const auth_middleware = authMiddlewareMap[spec.auth];
245
- if (!auth_middleware)
246
- throw new Error(`Unknown auth type: ${spec.auth}`);
247
- return (0, import_nextjs_middleware_wrappers.default)(
248
- ...exceptionHandlingMiddleware ? [exceptionHandlingMiddleware] : [],
249
- ...globalMiddlewares || [],
250
- auth_middleware,
251
- ...spec.middlewares || [],
252
- with_methods_default(spec.methods),
253
- with_validation_default({
254
- jsonBody: spec.jsonBody,
255
- queryParams: spec.queryParams,
256
- commonParams: spec.commonParams,
257
- formData: spec.formData,
258
- jsonResponse: spec.jsonResponse,
259
- shouldValidateResponses,
260
- shouldValidateGetRequestBody
261
- }),
262
- userDefinedRouteFn
263
- )(req, res);
264
- };
265
- rootRequestHandler._setupParams = setupParams;
266
- rootRequestHandler._routeSpec = spec;
267
- return rootRequestHandler;
268
- };
269
- createRouteExport._setupParams = setupParams;
270
- createRouteExport._routeSpec = spec;
271
- return createRouteExport;
272
- };
273
- withRouteSpec._setupParams = setupParams;
274
- return withRouteSpec;
275
- };
276
- // Annotate the CommonJS export names for ESM import in node:
277
- 0 && (module.exports = {
278
- checkRouteSpec,
279
- createWithRouteSpec
280
- });
281
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9pbmRleC50cyIsICIuLi8uLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtbWV0aG9kcy50cyIsICIuLi8uLi9zcmMvd2l0aC1yb3V0ZS1zcGVjL21pZGRsZXdhcmVzL3dpdGgtdmFsaWRhdGlvbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgTmV4dEFwaVJlc3BvbnNlLCBOZXh0QXBpUmVxdWVzdCB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHdpdGhFeGNlcHRpb25IYW5kbGluZyB9IGZyb20gXCJuZXh0anMtZXhjZXB0aW9uLW1pZGRsZXdhcmVcIlxuaW1wb3J0IHdyYXBwZXJzLCB7IE1pZGRsZXdhcmUgfSBmcm9tIFwibmV4dGpzLW1pZGRsZXdhcmUtd3JhcHBlcnNcIlxuaW1wb3J0IHsgQ3JlYXRlV2l0aFJvdXRlU3BlY0Z1bmN0aW9uLCBSb3V0ZVNwZWMgfSBmcm9tIFwiLi4vdHlwZXNcIlxuaW1wb3J0IHdpdGhNZXRob2RzLCB7IEhUVFBNZXRob2RzIH0gZnJvbSBcIi4vbWlkZGxld2FyZXMvd2l0aC1tZXRob2RzXCJcbmltcG9ydCB3aXRoVmFsaWRhdGlvbiBmcm9tIFwiLi9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb25cIlxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIlxuXG50eXBlIFBhcmFtRGVmID0gei5ab2RUeXBlQW55IHwgei5ab2RFZmZlY3RzPHouWm9kVHlwZUFueT5cblxuZXhwb3J0IGNvbnN0IGNoZWNrUm91dGVTcGVjID0gPFxuICBBdXRoVHlwZSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgTWV0aG9kcyBleHRlbmRzIEhUVFBNZXRob2RzW10gPSBIVFRQTWV0aG9kc1tdLFxuICBKc29uQm9keSBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIFBhcmFtRGVmID0gei5ab2RUeXBlQW55LFxuICBDb21tb25QYXJhbXMgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgTWlkZGxld2FyZXMgZXh0ZW5kcyByZWFkb25seSBNaWRkbGV3YXJlPGFueSwgYW55PltdID0gcmVhZG9ubHkgTWlkZGxld2FyZTxcbiAgICBhbnksXG4gICAgYW55XG4gID5bXSxcbiAgRm9ybURhdGEgZXh0ZW5kcyBQYXJhbURlZiA9IHouWm9kVHlwZUFueSxcbiAgU3BlYyBleHRlbmRzIFJvdXRlU3BlYzxcbiAgICBBdXRoVHlwZSxcbiAgICBNZXRob2RzLFxuICAgIEpzb25Cb2R5LFxuICAgIFF1ZXJ5UGFyYW1zLFxuICAgIENvbW1vblBhcmFtcyxcbiAgICBNaWRkbGV3YXJlcyxcbiAgICBGb3JtRGF0YVxuICA+ID0gUm91dGVTcGVjPFxuICAgIEF1dGhUeXBlLFxuICAgIE1ldGhvZHMsXG4gICAgSnNvbkJvZHksXG4gICAgUXVlcnlQYXJhbXMsXG4gICAgQ29tbW9uUGFyYW1zLFxuICAgIE1pZGRsZXdhcmVzLFxuICAgIEZvcm1EYXRhXG4gID5cbj4oXG4gIHNwZWM6IFNwZWNcbik6IHN0cmluZyBleHRlbmRzIFNwZWNbXCJhdXRoXCJdXG4gID8gYHlvdXIgcm91dGUgc3BlYyBpcyB1bmRlcnNwZWNpZmllZCwgYWRkIFwiYXMgY29uc3RcImBcbiAgOiBTcGVjID0+IHNwZWMgYXMgYW55XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVXaXRoUm91dGVTcGVjOiBDcmVhdGVXaXRoUm91dGVTcGVjRnVuY3Rpb24gPSAoKFxuICBzZXR1cFBhcmFtc1xuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhdXRoTWlkZGxld2FyZU1hcCA9IHt9LFxuICAgIGdsb2JhbE1pZGRsZXdhcmVzID0gW10sXG4gICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keSA9IHRydWUsXG4gICAgZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlID0gd2l0aEV4Y2VwdGlvbkhhbmRsaW5nKHtcbiAgICAgIGFkZE9rU3RhdHVzOiBzZXR1cFBhcmFtcy5hZGRPa1N0YXR1cyxcbiAgICAgIGV4Y2VwdGlvbkhhbmRsaW5nT3B0aW9uczoge1xuICAgICAgICBnZXRFcnJvckNvbnRleHQ6IChyZXEsIGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pIGFzIGFueSxcbiAgICBnbG9iYWxTY2hlbWFzID0gc2V0dXBQYXJhbXMuYWRkT2tTdGF0dXNcbiAgICAgID8ge1xuICAgICAgICAgIG9rOiB6LmJvb2xlYW4oKSxcbiAgICAgICAgfVxuICAgICAgOiB7fSxcbiAgfSA9IHNldHVwUGFyYW1zXG5cbiAgY29uc3Qgd2l0aFJvdXRlU3BlYyA9IChzcGVjOiBSb3V0ZVNwZWMpID0+IHtcbiAgICBjb25zdCBjcmVhdGVSb3V0ZUV4cG9ydCA9ICh1c2VyRGVmaW5lZFJvdXRlRm4pID0+IHtcbiAgICAgIGNvbnN0IHJvb3RSZXF1ZXN0SGFuZGxlciA9IGFzeW5jIChcbiAgICAgICAgcmVxOiBOZXh0QXBpUmVxdWVzdCxcbiAgICAgICAgcmVzOiBOZXh0QXBpUmVzcG9uc2VcbiAgICAgICkgPT4ge1xuICAgICAgICBhdXRoTWlkZGxld2FyZU1hcFtcIm5vbmVcIl0gPSAobmV4dCkgPT4gbmV4dFxuXG4gICAgICAgIGNvbnN0IGF1dGhfbWlkZGxld2FyZSA9IGF1dGhNaWRkbGV3YXJlTWFwW3NwZWMuYXV0aF1cbiAgICAgICAgaWYgKCFhdXRoX21pZGRsZXdhcmUpIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBhdXRoIHR5cGU6ICR7c3BlYy5hdXRofWApXG5cbiAgICAgICAgcmV0dXJuIHdyYXBwZXJzKFxuICAgICAgICAgIC4uLigoZXhjZXB0aW9uSGFuZGxpbmdNaWRkbGV3YXJlXG4gICAgICAgICAgICA/IFtleGNlcHRpb25IYW5kbGluZ01pZGRsZXdhcmVdXG4gICAgICAgICAgICA6IFtdKSBhcyBbYW55XSksXG4gICAgICAgICAgLi4uKChnbG9iYWxNaWRkbGV3YXJlcyB8fCBbXSkgYXMgW10pLFxuICAgICAgICAgIGF1dGhfbWlkZGxld2FyZSxcbiAgICAgICAgICAuLi4oKHNwZWMubWlkZGxld2FyZXMgfHwgW10pIGFzIFtdKSxcbiAgICAgICAgICB3aXRoTWV0aG9kcyhzcGVjLm1ldGhvZHMpLFxuICAgICAgICAgIHdpdGhWYWxpZGF0aW9uKHtcbiAgICAgICAgICAgIGpzb25Cb2R5OiBzcGVjLmpzb25Cb2R5LFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHNwZWMucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBjb21tb25QYXJhbXM6IHNwZWMuY29tbW9uUGFyYW1zLFxuICAgICAgICAgICAgZm9ybURhdGE6IHNwZWMuZm9ybURhdGEsXG4gICAgICAgICAgICBqc29uUmVzcG9uc2U6IHNwZWMuanNvblJlc3BvbnNlLFxuICAgICAgICAgICAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXMsXG4gICAgICAgICAgICBzaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHVzZXJEZWZpbmVkUm91dGVGblxuICAgICAgICApKHJlcSBhcyBhbnksIHJlcylcbiAgICAgIH1cblxuICAgICAgcm9vdFJlcXVlc3RIYW5kbGVyLl9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgICByb290UmVxdWVzdEhhbmRsZXIuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgICAgcmV0dXJuIHJvb3RSZXF1ZXN0SGFuZGxlclxuICAgIH1cblxuICAgIGNyZWF0ZVJvdXRlRXhwb3J0Ll9zZXR1cFBhcmFtcyA9IHNldHVwUGFyYW1zXG4gICAgY3JlYXRlUm91dGVFeHBvcnQuX3JvdXRlU3BlYyA9IHNwZWNcblxuICAgIHJldHVybiBjcmVhdGVSb3V0ZUV4cG9ydFxuICB9XG5cbiAgd2l0aFJvdXRlU3BlYy5fc2V0dXBQYXJhbXMgPSBzZXR1cFBhcmFtc1xuXG4gIHJldHVybiB3aXRoUm91dGVTcGVjXG59KSBhcyBhbnlcbiIsICJpbXBvcnQgeyBNZXRob2ROb3RBbGxvd2VkRXhjZXB0aW9uIH0gZnJvbSBcIm5leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5cbmV4cG9ydCB0eXBlIEhUVFBNZXRob2RzID1cbiAgfCBcIkdFVFwiXG4gIHwgXCJQT1NUXCJcbiAgfCBcIkRFTEVURVwiXG4gIHwgXCJQVVRcIlxuICB8IFwiUEFUQ0hcIlxuICB8IFwiSEVBRFwiXG4gIHwgXCJPUFRJT05TXCJcblxuZXhwb3J0IGNvbnN0IHdpdGhNZXRob2RzID0gKG1ldGhvZHM6IEhUVFBNZXRob2RzW10pID0+IChuZXh0KSA9PiAocmVxLCByZXMpID0+IHtcbiAgaWYgKCFtZXRob2RzLmluY2x1ZGVzKHJlcS5tZXRob2QpKSB7XG4gICAgdGhyb3cgbmV3IE1ldGhvZE5vdEFsbG93ZWRFeGNlcHRpb24oe1xuICAgICAgdHlwZTogXCJtZXRob2Rfbm90X2FsbG93ZWRcIixcbiAgICAgIG1lc3NhZ2U6IGBvbmx5ICR7bWV0aG9kcy5qb2luKFwiLFwiKX0gYWNjZXB0ZWRgLFxuICAgIH0pXG4gIH1cbiAgcmV0dXJuIG5leHQocmVxLCByZXMpXG59XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhNZXRob2RzXG4iLCAiaW1wb3J0IHR5cGUgeyBOZXh0QXBpUmVxdWVzdCwgTmV4dEFwaVJlc3BvbnNlIH0gZnJvbSBcIm5leHRcIlxuaW1wb3J0IHsgeiwgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kIH0gZnJvbSBcInpvZFwiXG5pbXBvcnQge1xuICBCYWRSZXF1ZXN0RXhjZXB0aW9uLFxuICBJbnRlcm5hbFNlcnZlckVycm9yRXhjZXB0aW9uLFxufSBmcm9tIFwibmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwibG9kYXNoXCJcblxuY29uc3QgZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYSA9IChcbiAgaXNab2RFZmZlY3Q6IGJvb2xlYW4sXG4gIHNjaGVtYTogei5ab2RUeXBlQW55XG4pOiB6LlpvZFR5cGVBbnkgfCB6LlpvZE9iamVjdDxhbnk+ID0+IHtcbiAgaWYgKCFpc1pvZEVmZmVjdCkge1xuICAgIHJldHVybiBzY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxuICB9XG5cbiAgbGV0IGN1cnJlbnRTY2hlbWEgPSBzY2hlbWFcblxuICB3aGlsZSAoY3VycmVudFNjaGVtYSBpbnN0YW5jZW9mIHouWm9kRWZmZWN0cykge1xuICAgIGN1cnJlbnRTY2hlbWEgPSBjdXJyZW50U2NoZW1hLl9kZWYuc2NoZW1hXG4gIH1cblxuICByZXR1cm4gY3VycmVudFNjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG59XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCB0aGUgY29ycmVjdCBzY2hlbWEgZnJvbSBhIFpvZEVmZmVjdCB8IFpvZERlZmF1bHQgfCBab2RPcHRpb25hbCBzY2hlbWEuXG4gKiBUT0RPOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgYWxsIHNwZWNpYWwgY2FzZXMgb2YgWm9kU2NoZW1hIGFuZCBub3QganVzdCBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWxcbiAqL1xuY29uc3QgZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnMgPSAoc2NoZW1hOiB6LlpvZFR5cGVBbnkpID0+IHtcbiAgY29uc3Qgc3BlY2lhbF96b2RfdHlwZXMgPSBbXG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsLFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2REZWZhdWx0LFxuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICBdXG5cbiAgd2hpbGUgKHNwZWNpYWxfem9kX3R5cGVzLmluY2x1ZGVzKHNjaGVtYS5fZGVmLnR5cGVOYW1lKSkge1xuICAgIGlmIChcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwgfHxcbiAgICAgIHNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdFxuICAgICkge1xuICAgICAgc2NoZW1hID0gc2NoZW1hLl9kZWYuaW5uZXJUeXBlXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHMpIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLnNjaGVtYVxuICAgICAgY29udGludWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYS5fZGVmXG59XG5cbmNvbnN0IHBhcnNlUXVlcnlQYXJhbXMgPSAoXG4gIHNjaGVtYTogei5ab2RUeXBlQW55LFxuICBpbnB1dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbikgPT4ge1xuICBjb25zdCBwYXJzZWRfaW5wdXQgPSBPYmplY3QuYXNzaWduKHt9LCBpbnB1dClcbiAgY29uc3QgaXNab2RFZmZlY3QgPSBzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEVmZmVjdHNcbiAgY29uc3Qgc2FmZV9zY2hlbWEgPSBnZXRab2RPYmplY3RTY2hlbWFGcm9tWm9kRWZmZWN0U2NoZW1hKGlzWm9kRWZmZWN0LCBzY2hlbWEpXG4gIGNvbnN0IGlzWm9kT2JqZWN0ID1cbiAgICBzYWZlX3NjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0XG5cbiAgaWYgKGlzWm9kT2JqZWN0KSB7XG4gICAgY29uc3Qgb2JqX3NjaGVtYSA9IHNhZmVfc2NoZW1hIGFzIHouWm9kT2JqZWN0PGFueT5cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9ial9zY2hlbWEuc2hhcGUpKSB7XG4gICAgICBjb25zdCBkZWYgPSBnZXRab2REZWZGcm9tWm9kU2NoZW1hSGVscGVycyh2YWx1ZSBhcyB6LlpvZFR5cGVBbnkpXG4gICAgICBjb25zdCBpc0FycmF5ID0gZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQXJyYXlcbiAgICAgIGlmIChpc0FycmF5KSB7XG4gICAgICAgIGNvbnN0IGFycmF5X2lucHV0ID0gaW5wdXRba2V5XVxuXG4gICAgICAgIGlmICh0eXBlb2YgYXJyYXlfaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGFycmF5X2lucHV0LnNwbGl0KFwiLFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXQgPSBpbnB1dFtgJHtrZXl9W11gXVxuICAgICAgICBpZiAodHlwZW9mIGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29uc3QgcHJlX3NwbGl0X2FycmF5ID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IHByZV9zcGxpdF9hcnJheS5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0KSkge1xuICAgICAgICAgIHBhcnNlZF9pbnB1dFtrZXldID0gYnJhY2tldF9zeW50YXhfYXJyYXlfaW5wdXRcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGlzQm9vbGVhbiA9IGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJvb2xlYW5cbiAgICAgIGlmIChpc0Jvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgYm9vbGVhbl9pbnB1dCA9IGlucHV0W2tleV1cblxuICAgICAgICBpZiAodHlwZW9mIGJvb2xlYW5faW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGJvb2xlYW5faW5wdXQgPT09IFwidHJ1ZVwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2NoZW1hLnBhcnNlKHBhcnNlZF9pbnB1dClcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SW5wdXQ8XG4gIEpzb25Cb2R5IGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBRdWVyeVBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgQ29tbW9uUGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICBGb3JtRGF0YSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgSnNvblJlc3BvbnNlIGV4dGVuZHMgei5ab2RUeXBlQW55XG4+IHtcbiAganNvbkJvZHk/OiBKc29uQm9keVxuICBxdWVyeVBhcmFtcz86IFF1ZXJ5UGFyYW1zXG4gIGNvbW1vblBhcmFtcz86IENvbW1vblBhcmFtc1xuICBmb3JtRGF0YT86IEZvcm1EYXRhXG4gIGpzb25SZXNwb25zZT86IEpzb25SZXNwb25zZVxuICBzaG91bGRWYWxpZGF0ZVJlc3BvbnNlcz86IGJvb2xlYW5cbiAgc2hvdWxkVmFsaWRhdGVHZXRSZXF1ZXN0Qm9keT86IGJvb2xlYW5cbn1cblxuY29uc3Qgem9kSXNzdWVUb1N0cmluZyA9IChpc3N1ZTogei5ab2RJc3N1ZSkgPT4ge1xuICBpZiAoaXNzdWUucGF0aC5qb2luKFwiLlwiKSA9PT0gXCJcIikge1xuICAgIHJldHVybiBpc3N1ZS5tZXNzYWdlXG4gIH1cbiAgaWYgKGlzc3VlLm1lc3NhZ2UgPT09IFwiUmVxdWlyZWRcIikge1xuICAgIHJldHVybiBgJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfSBpcyByZXF1aXJlZGBcbiAgfVxuICByZXR1cm4gYCR7aXNzdWUubWVzc2FnZX0gZm9yIFwiJHtpc3N1ZS5wYXRoLmpvaW4oXCIuXCIpfVwiYFxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUpzb25SZXNwb25zZTxKc29uUmVzcG9uc2UgZXh0ZW5kcyB6LlpvZFR5cGVBbnk+KFxuICBqc29uUmVzcG9uc2U6IEpzb25SZXNwb25zZSB8IHVuZGVmaW5lZCxcbiAgcmVzOiBOZXh0QXBpUmVzcG9uc2Vcbikge1xuICBjb25zdCBvcmlnaW5hbF9yZXNfanNvbiA9IHJlcy5qc29uXG4gIGNvbnN0IG92ZXJyaWRlX3Jlc19qc29uID0gKGpzb246IGFueSkgPT4ge1xuICAgIGNvbnN0IGlzX3N1Y2Nlc3MgPSByZXMuc3RhdHVzQ29kZSA+PSAyMDAgJiYgcmVzLnN0YXR1c0NvZGUgPCAzMDBcbiAgICBpZiAoIWlzX3N1Y2Nlc3MpIHtcbiAgICAgIHJldHVybiBvcmlnaW5hbF9yZXNfanNvbihqc29uKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBqc29uUmVzcG9uc2U/LnBhcnNlKGpzb24pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9yZXNwb25zZVwiLFxuICAgICAgICBtZXNzYWdlOiBcInRoZSByZXNwb25zZSBkb2VzIG5vdCBtYXRjaCB3aXRoIGpzb25SZXNwb25zZVwiLFxuICAgICAgICB6b2RFcnJvcjogZXJyLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWxfcmVzX2pzb24oanNvbilcbiAgfVxuICByZXMuanNvbiA9IG92ZXJyaWRlX3Jlc19qc29uXG59XG5cbmV4cG9ydCBjb25zdCB3aXRoVmFsaWRhdGlvbiA9XG4gIDxcbiAgICBKc29uQm9keSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBRdWVyeVBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgICBDb21tb25QYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgRm9ybURhdGEgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgSnNvblJlc3BvbnNlIGV4dGVuZHMgei5ab2RUeXBlQW55XG4gID4oXG4gICAgaW5wdXQ6IFJlcXVlc3RJbnB1dDxcbiAgICAgIEpzb25Cb2R5LFxuICAgICAgUXVlcnlQYXJhbXMsXG4gICAgICBDb21tb25QYXJhbXMsXG4gICAgICBGb3JtRGF0YSxcbiAgICAgIEpzb25SZXNwb25zZVxuICAgID5cbiAgKSA9PlxuICAobmV4dCkgPT5cbiAgYXN5bmMgKHJlcTogTmV4dEFwaVJlcXVlc3QsIHJlczogTmV4dEFwaVJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKFxuICAgICAgKGlucHV0LmZvcm1EYXRhICYmIGlucHV0Lmpzb25Cb2R5KSB8fFxuICAgICAgKGlucHV0LmZvcm1EYXRhICYmIGlucHV0LmNvbW1vblBhcmFtcylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgZm9ybURhdGEgd2l0aCBqc29uQm9keSBvciBjb21tb25QYXJhbXNcIilcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAocmVxLm1ldGhvZCA9PT0gXCJQT1NUXCIgfHwgcmVxLm1ldGhvZCA9PT0gXCJQQVRDSFwiKSAmJlxuICAgICAgKGlucHV0Lmpzb25Cb2R5IHx8IGlucHV0LmNvbW1vblBhcmFtcykgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXCJhcHBsaWNhdGlvbi9qc29uXCIpICYmXG4gICAgICAhaXNFbXB0eShyZXEuYm9keSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgdHlwZTogXCJpbnZhbGlkX2NvbnRlbnRfdHlwZVwiLFxuICAgICAgICBtZXNzYWdlOiBgJHtyZXEubWV0aG9kfSByZXF1ZXN0cyBtdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24vanNvblwiYCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaW5wdXQuZm9ybURhdGEgJiZcbiAgICAgIHJlcS5tZXRob2QgIT09IFwiR0VUXCIgJiZcbiAgICAgICFyZXEuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXT8uaW5jbHVkZXMoXG4gICAgICAgIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcbiAgICAgIClcbiAgICAgIC8vIFRPRE8gZXZlbnR1YWxseSB3ZSBzaG91bGQgc3VwcG9ydCBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYE11c3QgaGF2ZSBDb250ZW50LVR5cGUgaGVhZGVyIHdpdGggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXMgPSB7IC4uLnJlcS5xdWVyeSwgLi4ucmVxLmJvZHkgfVxuXG4gICAgICBjb25zdCB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSA9IGlucHV0LnNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHlcbiAgICAgICAgPyB0cnVlXG4gICAgICAgIDogcmVxLm1ldGhvZCAhPT0gXCJHRVRcIlxuXG4gICAgICBjb25zdCBpc0Zvcm1EYXRhID0gQm9vbGVhbihpbnB1dC5mb3JtRGF0YSlcblxuICAgICAgaWYgKGlzRm9ybURhdGEgJiYgd2lsbFZhbGlkYXRlUmVxdWVzdEJvZHkpIHtcbiAgICAgICAgcmVxLmJvZHkgPSBpbnB1dC5mb3JtRGF0YT8ucGFyc2UocmVxLmJvZHkpXG4gICAgICB9XG5cbiAgICAgIGlmICghaXNGb3JtRGF0YSAmJiB3aWxsVmFsaWRhdGVSZXF1ZXN0Qm9keSkge1xuICAgICAgICByZXEuYm9keSA9IGlucHV0Lmpzb25Cb2R5Py5wYXJzZShyZXEuYm9keSlcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHJlcS5xdWVyeSA9IHBhcnNlUXVlcnlQYXJhbXMoaW5wdXQucXVlcnlQYXJhbXMsIHJlcS5xdWVyeSlcbiAgICAgIH1cblxuICAgICAgaWYgKGlucHV0LmNvbW1vblBhcmFtcykge1xuICAgICAgICAvKipcbiAgICAgICAgICogYXMgY29tbW9uUGFyYW1zIGluY2x1ZGVzIHF1ZXJ5IHBhcmFtcywgd2UgY2FuIHVzZSB0aGUgcGFyc2VRdWVyeVBhcmFtcyBmdW5jdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgOyhyZXEgYXMgYW55KS5jb21tb25QYXJhbXMgPSBwYXJzZVF1ZXJ5UGFyYW1zKFxuICAgICAgICAgIGlucHV0LmNvbW1vblBhcmFtcyxcbiAgICAgICAgICBvcmlnaW5hbF9jb21iaW5lZF9wYXJhbXNcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIlpvZEVycm9yXCIpIHtcbiAgICAgICAgbGV0IG1lc3NhZ2VcbiAgICAgICAgaWYgKGVycm9yLmlzc3Vlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjb25zdCBpc3N1ZSA9IGVycm9yLmlzc3Vlc1swXVxuICAgICAgICAgIG1lc3NhZ2UgPSB6b2RJc3N1ZVRvU3RyaW5nKGlzc3VlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VfY29tcG9uZW50czogc3RyaW5nW10gPSBbXVxuICAgICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKSB7XG4gICAgICAgICAgICBtZXNzYWdlX2NvbXBvbmVudHMucHVzaCh6b2RJc3N1ZVRvU3RyaW5nKGlzc3VlKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICBgJHtlcnJvci5pc3N1ZXMubGVuZ3RofSBJbnB1dCBFcnJvcnM6IGAgK1xuICAgICAgICAgICAgbWVzc2FnZV9jb21wb25lbnRzLmpvaW4oXCIsIFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICAgIHR5cGU6IFwiaW52YWxpZF9pbnB1dFwiLFxuICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgdmFsaWRhdGlvbl9lcnJvcnM6IGVycm9yLmZvcm1hdCgpLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9pbnB1dFwiLFxuICAgICAgICBtZXNzYWdlOiBcIkVycm9yIHdoaWxlIHBhcnNpbmcgaW5wdXRcIixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdGhpcyB3aWxsIG92ZXJyaWRlIHRoZSByZXMuanNvbiBtZXRob2QgdG8gdmFsaWRhdGUgdGhlIHJlc3BvbnNlXG4gICAgICovXG4gICAgaWYgKGlucHV0LnNob3VsZFZhbGlkYXRlUmVzcG9uc2VzKSB7XG4gICAgICB2YWxpZGF0ZUpzb25SZXNwb25zZShpbnB1dC5qc29uUmVzcG9uc2UsIHJlcylcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChyZXEsIHJlcylcbiAgfVxuXG5leHBvcnQgZGVmYXVsdCB3aXRoVmFsaWRhdGlvblxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQSxJQUFBQSxzQ0FBc0M7QUFDdEMsd0NBQXFDOzs7QUNGckMseUNBQTBDO0FBV25DLElBQU0sY0FBYyxDQUFDLFlBQTJCLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUTtBQUM3RSxNQUFJLENBQUMsUUFBUSxTQUFTLElBQUksTUFBTSxHQUFHO0FBQ2pDLFVBQU0s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QUFBLFVBQzFCLHFCQUFZLEtBQUssT0FBTztBQUFBLFVBQ3hCLHdCQUFlO0FBQUEsWUFDYixVQUFVLEtBQUs7QUFBQSxZQUNmLGFBQWEsS0FBSztBQUFBLFlBQ2xCLGNBQWMsS0FBSztBQUFBLFlBQ25CLFVBQVUsS0FBSztBQUFBLFlBQ2YsY0FBYyxLQUFLO0FBQUEsWUFDbkI7QUFBQSxZQUNBO0FBQUEsVUFDRixDQUFDO0FBQUEsVUFDRDtBQUFBLFFBQ0YsRUFBRSxLQUFZLEdBQUc7QUFBQSxNQUNuQjtBQUVBLHlCQUFtQixlQUFlO0FBQ2xDLHlCQUFtQixhQUFhO0FBRWhDLGFBQU87QUFBQSxJQUNUO0FBRUEsc0JBQWtCLGVBQWU7QUFDakMsc0JBQWtCLGFBQWE7QUFFL0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxnQkFBYyxlQUFlO0FBRTdCLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X25leHRqc19leGNlcHRpb25fbWlkZGxld2FyZSIsICJpbXBvcnRfbmV4dGpzX2V4Y2VwdGlvbl9taWRkbGV3YXJlIiwgImltcG9ydF96b2QiLCAid3JhcHBlcnMiXQp9Cg==
@@ -1,4 +0,0 @@
1
- declare type HTTPMethods = "GET" | "POST" | "DELETE" | "PUT" | "PATCH" | "HEAD" | "OPTIONS";
2
- declare const withMethods: (methods: HTTPMethods[]) => (next: any) => (req: any, res: any) => any;
3
-
4
- export { HTTPMethods, withMethods as default, withMethods };
@@ -1,42 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/with-route-spec/middlewares/with-methods.ts
21
- var with_methods_exports = {};
22
- __export(with_methods_exports, {
23
- default: () => with_methods_default,
24
- withMethods: () => withMethods
25
- });
26
- module.exports = __toCommonJS(with_methods_exports);
27
- var import_nextjs_exception_middleware = require("nextjs-exception-middleware");
28
- var withMethods = (methods) => (next) => (req, res) => {
29
- if (!methods.includes(req.method)) {
30
- throw new import_nextjs_exception_middleware.MethodNotAllowedException({
31
- type: "method_not_allowed",
32
- message: `only ${methods.join(",")} accepted`
33
- });
34
- }
35
- return next(req, res);
36
- };
37
- var with_methods_default = withMethods;
38
- // Annotate the CommonJS export names for ESM import in node:
39
- 0 && (module.exports = {
40
- withMethods
41
- });
42
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9taWRkbGV3YXJlcy93aXRoLW1ldGhvZHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IE1ldGhvZE5vdEFsbG93ZWRFeGNlcHRpb24gfSBmcm9tIFwibmV4dGpzLWV4Y2VwdGlvbi1taWRkbGV3YXJlXCJcblxuZXhwb3J0IHR5cGUgSFRUUE1ldGhvZHMgPVxuICB8IFwiR0VUXCJcbiAgfCBcIlBPU1RcIlxuICB8IFwiREVMRVRFXCJcbiAgfCBcIlBVVFwiXG4gIHwgXCJQQVRDSFwiXG4gIHwgXCJIRUFEXCJcbiAgfCBcIk9QVElPTlNcIlxuXG5leHBvcnQgY29uc3Qgd2l0aE1ldGhvZHMgPSAobWV0aG9kczogSFRUUE1ldGhvZHNbXSkgPT4gKG5leHQpID0+IChyZXEsIHJlcykgPT4ge1xuICBpZiAoIW1ldGhvZHMuaW5jbHVkZXMocmVxLm1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgTWV0aG9kTm90QWxsb3dlZEV4Y2VwdGlvbih7XG4gICAgICB0eXBlOiBcIm1ldGhvZF9ub3RfYWxsb3dlZFwiLFxuICAgICAgbWVzc2FnZTogYG9ubHkgJHttZXRob2RzLmpvaW4oXCIsXCIpfSBhY2NlcHRlZGAsXG4gICAgfSlcbiAgfVxuICByZXR1cm4gbmV4dChyZXEsIHJlcylcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aE1ldGhvZHNcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEseUNBQTBDO0FBV25DLElBQU0sY0FBYyxDQUFDLFlBQTJCLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUTtBQUM3RSxNQUFJLENBQUMsUUFBUSxTQUFTLElBQUksTUFBTSxHQUFHO0FBQ2pDLFVBQU0sSUFBSSw2REFBMEI7QUFBQSxNQUNsQyxNQUFNO0FBQUEsTUFDTixTQUFTLFFBQVEsUUFBUSxLQUFLLEdBQUc7QUFBQSxJQUNuQyxDQUFDO0FBQUEsRUFDSDtBQUNBLFNBQU8sS0FBSyxLQUFLLEdBQUc7QUFDdEI7QUFFQSxJQUFPLHVCQUFROyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -1,15 +0,0 @@
1
- import { NextApiRequest, NextApiResponse } from 'next';
2
- import { z } from 'zod';
3
-
4
- interface RequestInput<JsonBody extends z.ZodTypeAny, QueryParams extends z.ZodTypeAny, CommonParams extends z.ZodTypeAny, FormData extends z.ZodTypeAny, JsonResponse extends z.ZodTypeAny> {
5
- jsonBody?: JsonBody;
6
- queryParams?: QueryParams;
7
- commonParams?: CommonParams;
8
- formData?: FormData;
9
- jsonResponse?: JsonResponse;
10
- shouldValidateResponses?: boolean;
11
- shouldValidateGetRequestBody?: boolean;
12
- }
13
- declare const withValidation: <JsonBody extends z.ZodTypeAny, QueryParams extends z.ZodTypeAny, CommonParams extends z.ZodTypeAny, FormData_1 extends z.ZodTypeAny, JsonResponse extends z.ZodTypeAny>(input: RequestInput<JsonBody, QueryParams, CommonParams, FormData_1, JsonResponse>) => (next: any) => (req: NextApiRequest, res: NextApiResponse) => Promise<any>;
14
-
15
- export { RequestInput, withValidation as default, withValidation };
@@ -1,196 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/with-route-spec/middlewares/with-validation.ts
21
- var with_validation_exports = {};
22
- __export(with_validation_exports, {
23
- default: () => with_validation_default,
24
- withValidation: () => withValidation
25
- });
26
- module.exports = __toCommonJS(with_validation_exports);
27
- var import_zod = require("zod");
28
- var import_nextjs_exception_middleware = require("nextjs-exception-middleware");
29
- var import_lodash = require("lodash");
30
- var getZodObjectSchemaFromZodEffectSchema = (isZodEffect, schema) => {
31
- if (!isZodEffect) {
32
- return schema;
33
- }
34
- let currentSchema = schema;
35
- while (currentSchema instanceof import_zod.z.ZodEffects) {
36
- currentSchema = currentSchema._def.schema;
37
- }
38
- return currentSchema;
39
- };
40
- var getZodDefFromZodSchemaHelpers = (schema) => {
41
- const special_zod_types = [
42
- import_zod.ZodFirstPartyTypeKind.ZodOptional,
43
- import_zod.ZodFirstPartyTypeKind.ZodDefault,
44
- import_zod.ZodFirstPartyTypeKind.ZodEffects
45
- ];
46
- while (special_zod_types.includes(schema._def.typeName)) {
47
- if (schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodOptional || schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodDefault) {
48
- schema = schema._def.innerType;
49
- continue;
50
- }
51
- if (schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodEffects) {
52
- schema = schema._def.schema;
53
- continue;
54
- }
55
- }
56
- return schema._def;
57
- };
58
- var parseQueryParams = (schema, input) => {
59
- const parsed_input = Object.assign({}, input);
60
- const isZodEffect = schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodEffects;
61
- const safe_schema = getZodObjectSchemaFromZodEffectSchema(isZodEffect, schema);
62
- const isZodObject = safe_schema._def.typeName === import_zod.ZodFirstPartyTypeKind.ZodObject;
63
- if (isZodObject) {
64
- const obj_schema = safe_schema;
65
- for (const [key, value] of Object.entries(obj_schema.shape)) {
66
- const def = getZodDefFromZodSchemaHelpers(value);
67
- const isArray = def.typeName === import_zod.ZodFirstPartyTypeKind.ZodArray;
68
- if (isArray) {
69
- const array_input = input[key];
70
- if (typeof array_input === "string") {
71
- parsed_input[key] = array_input.split(",");
72
- }
73
- const bracket_syntax_array_input = input[`${key}[]`];
74
- if (typeof bracket_syntax_array_input === "string") {
75
- const pre_split_array = bracket_syntax_array_input;
76
- parsed_input[key] = pre_split_array.split(",");
77
- }
78
- if (Array.isArray(bracket_syntax_array_input)) {
79
- parsed_input[key] = bracket_syntax_array_input;
80
- }
81
- continue;
82
- }
83
- const isBoolean = def.typeName === import_zod.ZodFirstPartyTypeKind.ZodBoolean;
84
- if (isBoolean) {
85
- const boolean_input = input[key];
86
- if (typeof boolean_input === "string") {
87
- parsed_input[key] = boolean_input === "true";
88
- }
89
- }
90
- }
91
- }
92
- return schema.parse(parsed_input);
93
- };
94
- var zodIssueToString = (issue) => {
95
- if (issue.path.join(".") === "") {
96
- return issue.message;
97
- }
98
- if (issue.message === "Required") {
99
- return `${issue.path.join(".")} is required`;
100
- }
101
- return `${issue.message} for "${issue.path.join(".")}"`;
102
- };
103
- function validateJsonResponse(jsonResponse, res) {
104
- const original_res_json = res.json;
105
- const override_res_json = (json) => {
106
- const is_success = res.statusCode >= 200 && res.statusCode < 300;
107
- if (!is_success) {
108
- return original_res_json(json);
109
- }
110
- try {
111
- jsonResponse == null ? void 0 : jsonResponse.parse(json);
112
- } catch (err) {
113
- throw new import_nextjs_exception_middleware.InternalServerErrorException({
114
- type: "invalid_response",
115
- message: "the response does not match with jsonResponse",
116
- zodError: err
117
- });
118
- }
119
- return original_res_json(json);
120
- };
121
- res.json = override_res_json;
122
- }
123
- var withValidation = (input) => (next) => async (req, res) => {
124
- var _a, _b, _c, _d;
125
- if (input.formData && input.jsonBody || input.formData && input.commonParams) {
126
- throw new Error("Cannot use formData with jsonBody or commonParams");
127
- }
128
- if ((req.method === "POST" || req.method === "PATCH") && (input.jsonBody || input.commonParams) && !((_a = req.headers["content-type"]) == null ? void 0 : _a.includes("application/json")) && !(0, import_lodash.isEmpty)(req.body)) {
129
- throw new import_nextjs_exception_middleware.BadRequestException({
130
- type: "invalid_content_type",
131
- message: `${req.method} requests must have Content-Type header with "application/json"`
132
- });
133
- }
134
- if (input.formData && req.method !== "GET" && !((_b = req.headers["content-type"]) == null ? void 0 : _b.includes(
135
- "application/x-www-form-urlencoded"
136
- ))) {
137
- throw new import_nextjs_exception_middleware.BadRequestException({
138
- type: "invalid_content_type",
139
- message: `Must have Content-Type header with "application/x-www-form-urlencoded"`
140
- });
141
- }
142
- try {
143
- const original_combined_params = { ...req.query, ...req.body };
144
- const willValidateRequestBody = input.shouldValidateGetRequestBody ? true : req.method !== "GET";
145
- const isFormData = Boolean(input.formData);
146
- if (isFormData && willValidateRequestBody) {
147
- req.body = (_c = input.formData) == null ? void 0 : _c.parse(req.body);
148
- }
149
- if (!isFormData && willValidateRequestBody) {
150
- req.body = (_d = input.jsonBody) == null ? void 0 : _d.parse(req.body);
151
- }
152
- if (input.queryParams) {
153
- req.query = parseQueryParams(input.queryParams, req.query);
154
- }
155
- if (input.commonParams) {
156
- ;
157
- req.commonParams = parseQueryParams(
158
- input.commonParams,
159
- original_combined_params
160
- );
161
- }
162
- } catch (error) {
163
- if (error.name === "ZodError") {
164
- let message;
165
- if (error.issues.length === 1) {
166
- const issue = error.issues[0];
167
- message = zodIssueToString(issue);
168
- } else {
169
- const message_components = [];
170
- for (const issue of error.issues) {
171
- message_components.push(zodIssueToString(issue));
172
- }
173
- message = `${error.issues.length} Input Errors: ` + message_components.join(", ");
174
- }
175
- throw new import_nextjs_exception_middleware.BadRequestException({
176
- type: "invalid_input",
177
- message,
178
- validation_errors: error.format()
179
- });
180
- }
181
- throw new import_nextjs_exception_middleware.BadRequestException({
182
- type: "invalid_input",
183
- message: "Error while parsing input"
184
- });
185
- }
186
- if (input.shouldValidateResponses) {
187
- validateJsonResponse(input.jsonResponse, res);
188
- }
189
- return next(req, res);
190
- };
191
- var with_validation_default = withValidation;
192
- // Annotate the CommonJS export names for ESM import in node:
193
- 0 && (module.exports = {
194
- withValidation
195
- });
196
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3dpdGgtcm91dGUtc3BlYy9taWRkbGV3YXJlcy93aXRoLXZhbGlkYXRpb24udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB0eXBlIHsgTmV4dEFwaVJlcXVlc3QsIE5leHRBcGlSZXNwb25zZSB9IGZyb20gXCJuZXh0XCJcbmltcG9ydCB7IHosIFpvZEZpcnN0UGFydHlUeXBlS2luZCB9IGZyb20gXCJ6b2RcIlxuaW1wb3J0IHtcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvckV4Y2VwdGlvbixcbn0gZnJvbSBcIm5leHRqcy1leGNlcHRpb24tbWlkZGxld2FyZVwiXG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcImxvZGFzaFwiXG5cbmNvbnN0IGdldFpvZE9iamVjdFNjaGVtYUZyb21ab2RFZmZlY3RTY2hlbWEgPSAoXG4gIGlzWm9kRWZmZWN0OiBib29sZWFuLFxuICBzY2hlbWE6IHouWm9kVHlwZUFueVxuKTogei5ab2RUeXBlQW55IHwgei5ab2RPYmplY3Q8YW55PiA9PiB7XG4gIGlmICghaXNab2RFZmZlY3QpIHtcbiAgICByZXR1cm4gc2NoZW1hIGFzIHouWm9kT2JqZWN0PGFueT5cbiAgfVxuXG4gIGxldCBjdXJyZW50U2NoZW1hID0gc2NoZW1hXG5cbiAgd2hpbGUgKGN1cnJlbnRTY2hlbWEgaW5zdGFuY2VvZiB6LlpvZEVmZmVjdHMpIHtcbiAgICBjdXJyZW50U2NoZW1hID0gY3VycmVudFNjaGVtYS5fZGVmLnNjaGVtYVxuICB9XG5cbiAgcmV0dXJuIGN1cnJlbnRTY2hlbWEgYXMgei5ab2RPYmplY3Q8YW55PlxufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIGNvcnJlY3Qgc2NoZW1hIGZyb20gYSBab2RFZmZlY3QgfCBab2REZWZhdWx0IHwgWm9kT3B0aW9uYWwgc2NoZW1hLlxuICogVE9ETzogdGhpcyBmdW5jdGlvbiBzaG91bGQgaGFuZGxlIGFsbCBzcGVjaWFsIGNhc2VzIG9mIFpvZFNjaGVtYSBhbmQgbm90IGp1c3QgWm9kRWZmZWN0IHwgWm9kRGVmYXVsdCB8IFpvZE9wdGlvbmFsXG4gKi9cbmNvbnN0IGdldFpvZERlZkZyb21ab2RTY2hlbWFIZWxwZXJzID0gKHNjaGVtYTogei5ab2RUeXBlQW55KSA9PiB7XG4gIGNvbnN0IHNwZWNpYWxfem9kX3R5cGVzID0gW1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RPcHRpb25hbCxcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdCxcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgXVxuXG4gIHdoaWxlIChzcGVjaWFsX3pvZF90eXBlcy5pbmNsdWRlcyhzY2hlbWEuX2RlZi50eXBlTmFtZSkpIHtcbiAgICBpZiAoXG4gICAgICBzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9wdGlvbmFsIHx8XG4gICAgICBzY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERlZmF1bHRcbiAgICApIHtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYS5fZGVmLmlubmVyVHlwZVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBpZiAoc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzKSB7XG4gICAgICBzY2hlbWEgPSBzY2hlbWEuX2RlZi5zY2hlbWFcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWEuX2RlZlxufVxuXG5jb25zdCBwYXJzZVF1ZXJ5UGFyYW1zID0gKFxuICBzY2hlbWE6IHouWm9kVHlwZUFueSxcbiAgaW5wdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4pID0+IHtcbiAgY29uc3QgcGFyc2VkX2lucHV0ID0gT2JqZWN0LmFzc2lnbih7fSwgaW5wdXQpXG4gIGNvbnN0IGlzWm9kRWZmZWN0ID0gc2NoZW1hLl9kZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzXG4gIGNvbnN0IHNhZmVfc2NoZW1hID0gZ2V0Wm9kT2JqZWN0U2NoZW1hRnJvbVpvZEVmZmVjdFNjaGVtYShpc1pvZEVmZmVjdCwgc2NoZW1hKVxuICBjb25zdCBpc1pvZE9iamVjdCA9XG4gICAgc2FmZV9zY2hlbWEuX2RlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdFxuXG4gIGlmIChpc1pvZE9iamVjdCkge1xuICAgIGNvbnN0IG9ial9zY2hlbWEgPSBzYWZlX3NjaGVtYSBhcyB6LlpvZE9iamVjdDxhbnk+XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhvYmpfc2NoZW1hLnNoYXBlKSkge1xuICAgICAgY29uc3QgZGVmID0gZ2V0Wm9kRGVmRnJvbVpvZFNjaGVtYUhlbHBlcnModmFsdWUgYXMgei5ab2RUeXBlQW55KVxuICAgICAgY29uc3QgaXNBcnJheSA9IGRlZi50eXBlTmFtZSA9PT0gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEFycmF5XG4gICAgICBpZiAoaXNBcnJheSkge1xuICAgICAgICBjb25zdCBhcnJheV9pbnB1dCA9IGlucHV0W2tleV1cblxuICAgICAgICBpZiAodHlwZW9mIGFycmF5X2lucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBhcnJheV9pbnB1dC5zcGxpdChcIixcIilcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0ID0gaW5wdXRbYCR7a2V5fVtdYF1cbiAgICAgICAgaWYgKHR5cGVvZiBicmFja2V0X3N5bnRheF9hcnJheV9pbnB1dCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGNvbnN0IHByZV9zcGxpdF9hcnJheSA9IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBwcmVfc3BsaXRfYXJyYXkuc3BsaXQoXCIsXCIpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShicmFja2V0X3N5bnRheF9hcnJheV9pbnB1dCkpIHtcbiAgICAgICAgICBwYXJzZWRfaW5wdXRba2V5XSA9IGJyYWNrZXRfc3ludGF4X2FycmF5X2lucHV0XG4gICAgICAgIH1cblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0Jvb2xlYW4gPSBkZWYudHlwZU5hbWUgPT09IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RCb29sZWFuXG4gICAgICBpZiAoaXNCb29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGJvb2xlYW5faW5wdXQgPSBpbnB1dFtrZXldXG5cbiAgICAgICAgaWYgKHR5cGVvZiBib29sZWFuX2lucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgcGFyc2VkX2lucHV0W2tleV0gPSBib29sZWFuX2lucHV0ID09PSBcInRydWVcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNjaGVtYS5wYXJzZShwYXJzZWRfaW5wdXQpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdElucHV0PFxuICBKc29uQm9keSBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgUXVlcnlQYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIENvbW1vblBhcmFtcyBleHRlbmRzIHouWm9kVHlwZUFueSxcbiAgRm9ybURhdGEgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gIEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueVxuPiB7XG4gIGpzb25Cb2R5PzogSnNvbkJvZHlcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtc1xuICBjb21tb25QYXJhbXM/OiBDb21tb25QYXJhbXNcbiAgZm9ybURhdGE/OiBGb3JtRGF0YVxuICBqc29uUmVzcG9uc2U/OiBKc29uUmVzcG9uc2VcbiAgc2hvdWxkVmFsaWRhdGVSZXNwb25zZXM/OiBib29sZWFuXG4gIHNob3VsZFZhbGlkYXRlR2V0UmVxdWVzdEJvZHk/OiBib29sZWFuXG59XG5cbmNvbnN0IHpvZElzc3VlVG9TdHJpbmcgPSAoaXNzdWU6IHouWm9kSXNzdWUpID0+IHtcbiAgaWYgKGlzc3VlLnBhdGguam9pbihcIi5cIikgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gaXNzdWUubWVzc2FnZVxuICB9XG4gIGlmIChpc3N1ZS5tZXNzYWdlID09PSBcIlJlcXVpcmVkXCIpIHtcbiAgICByZXR1cm4gYCR7aXNzdWUucGF0aC5qb2luKFwiLlwiKX0gaXMgcmVxdWlyZWRgXG4gIH1cbiAgcmV0dXJuIGAke2lzc3VlLm1lc3NhZ2V9IGZvciBcIiR7aXNzdWUucGF0aC5qb2luKFwiLlwiKX1cImBcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVKc29uUmVzcG9uc2U8SnNvblJlc3BvbnNlIGV4dGVuZHMgei5ab2RUeXBlQW55PihcbiAganNvblJlc3BvbnNlOiBKc29uUmVzcG9uc2UgfCB1bmRlZmluZWQsXG4gIHJlczogTmV4dEFwaVJlc3BvbnNlXG4pIHtcbiAgY29uc3Qgb3JpZ2luYWxfcmVzX2pzb24gPSByZXMuanNvblxuICBjb25zdCBvdmVycmlkZV9yZXNfanNvbiA9IChqc29uOiBhbnkpID0+IHtcbiAgICBjb25zdCBpc19zdWNjZXNzID0gcmVzLnN0YXR1c0NvZGUgPj0gMjAwICYmIHJlcy5zdGF0dXNDb2RlIDwgMzAwXG4gICAgaWYgKCFpc19zdWNjZXNzKSB7XG4gICAgICByZXR1cm4gb3JpZ2luYWxfcmVzX2pzb24oanNvbilcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAganNvblJlc3BvbnNlPy5wYXJzZShqc29uKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgbmV3IEludGVybmFsU2VydmVyRXJyb3JFeGNlcHRpb24oe1xuICAgICAgICB0eXBlOiBcImludmFsaWRfcmVzcG9uc2VcIixcbiAgICAgICAgbWVzc2FnZTogXCJ0aGUgcmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggd2l0aCBqc29uUmVzcG9uc2VcIixcbiAgICAgICAgem9kRXJyb3I6IGVycixcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsX3Jlc19qc29uKGpzb24pXG4gIH1cbiAgcmVzLmpzb24gPSBvdmVycmlkZV9yZXNfanNvblxufVxuXG5leHBvcnQgY29uc3Qgd2l0aFZhbGlkYXRpb24gPVxuICA8XG4gICAgSnNvbkJvZHkgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgUXVlcnlQYXJhbXMgZXh0ZW5kcyB6LlpvZFR5cGVBbnksXG4gICAgQ29tbW9uUGFyYW1zIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIEZvcm1EYXRhIGV4dGVuZHMgei5ab2RUeXBlQW55LFxuICAgIEpzb25SZXNwb25zZSBleHRlbmRzIHouWm9kVHlwZUFueVxuICA+KFxuICAgIGlucHV0OiBSZXF1ZXN0SW5wdXQ8XG4gICAgICBKc29uQm9keSxcbiAgICAgIFF1ZXJ5UGFyYW1zLFxuICAgICAgQ29tbW9uUGFyYW1zLFxuICAgICAgRm9ybURhdGEsXG4gICAgICBKc29uUmVzcG9uc2VcbiAgICA+XG4gICkgPT5cbiAgKG5leHQpID0+XG4gIGFzeW5jIChyZXE6IE5leHRBcGlSZXF1ZXN0LCByZXM6IE5leHRBcGlSZXNwb25zZSkgPT4ge1xuICAgIGlmIChcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5qc29uQm9keSkgfHxcbiAgICAgIChpbnB1dC5mb3JtRGF0YSAmJiBpbnB1dC5jb21tb25QYXJhbXMpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgdXNlIGZvcm1EYXRhIHdpdGgganNvbkJvZHkgb3IgY29tbW9uUGFyYW1zXCIpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKHJlcS5tZXRob2QgPT09IFwiUE9TVFwiIHx8IHJlcS5tZXRob2QgPT09IFwiUEFUQ0hcIikgJiZcbiAgICAgIChpbnB1dC5qc29uQm9keSB8fCBpbnB1dC5jb21tb25QYXJhbXMpICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSAmJlxuICAgICAgIWlzRW1wdHkocmVxLmJvZHkpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEV4Y2VwdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW52YWxpZF9jb250ZW50X3R5cGVcIixcbiAgICAgICAgbWVzc2FnZTogYCR7cmVxLm1ldGhvZH0gcmVxdWVzdHMgbXVzdCBoYXZlIENvbnRlbnQtVHlwZSBoZWFkZXIgd2l0aCBcImFwcGxpY2F0aW9uL2pzb25cImAsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlucHV0LmZvcm1EYXRhICYmXG4gICAgICByZXEubWV0aG9kICE9PSBcIkdFVFwiICYmXG4gICAgICAhcmVxLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0/LmluY2x1ZGVzKFxuICAgICAgICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiXG4gICAgICApXG4gICAgICAvLyBUT0RPIGV2ZW50dWFsbHkgd2Ugc2hvdWxkIHN1cHBvcnQgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICB0eXBlOiBcImludmFsaWRfY29udGVudF90eXBlXCIsXG4gICAgICAgIG1lc3NhZ2U6IGBNdXN0IGhhdmUgQ29udGVudC1UeXBlIGhlYWRlciB3aXRoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJgLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxfY29tYmluZWRfcGFyYW1zID0geyAuLi5yZXEucXVlcnksIC4uLnJlcS5ib2R5IH1cblxuICAgICAgY29uc3Qgd2lsbFZhbGlkYXRlUmVxdWVzdEJvZHkgPSBpbnB1dC5zaG91bGRWYWxpZGF0ZUdldFJlcXVlc3RCb2R5XG4gICAgICAgID8gdHJ1ZVxuICAgICAgICA6IHJlcS5tZXRob2QgIT09IFwiR0VUXCJcblxuICAgICAgY29uc3QgaXNGb3JtRGF0YSA9IEJvb2xlYW4oaW5wdXQuZm9ybURhdGEpXG5cbiAgICAgIGlmIChpc0Zvcm1EYXRhICYmIHdpbGxWYWxpZGF0ZVJlcXVlc3RCb2R5KSB7XG4gICAgICAgIHJlcS5ib2R5ID0gaW5wdXQuZm9ybURhdGE/LnBhcnNlKHJlcS5ib2R5KVxuICAgICAgfVxuXG4gICAgICBpZiAoIWlzRm9ybURhdGEgJiYgd2lsbFZhbGlkYXRlUmVxdWVzdEJvZHkpIHtcbiAgICAgICAgcmVxLmJvZHkgPSBpbnB1dC5qc29uQm9keT8ucGFyc2UocmVxLmJvZHkpXG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dC5xdWVyeVBhcmFtcykge1xuICAgICAgICByZXEucXVlcnkgPSBwYXJzZVF1ZXJ5UGFyYW1zKGlucHV0LnF1ZXJ5UGFyYW1zLCByZXEucXVlcnkpXG4gICAgICB9XG5cbiAgICAgIGlmIChpbnB1dC5jb21tb25QYXJhbXMpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGFzIGNvbW1vblBhcmFtcyBpbmNsdWRlcyBxdWVyeSBwYXJhbXMsIHdlIGNhbiB1c2UgdGhlIHBhcnNlUXVlcnlQYXJhbXMgZnVuY3Rpb25cbiAgICAgICAgICovXG4gICAgICAgIDsocmVxIGFzIGFueSkuY29tbW9uUGFyYW1zID0gcGFyc2VRdWVyeVBhcmFtcyhcbiAgICAgICAgICBpbnB1dC5jb21tb25QYXJhbXMsXG4gICAgICAgICAgb3JpZ2luYWxfY29tYmluZWRfcGFyYW1zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJab2RFcnJvclwiKSB7XG4gICAgICAgIGxldCBtZXNzYWdlXG4gICAgICAgIGlmIChlcnJvci5pc3N1ZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29uc3QgaXNzdWUgPSBlcnJvci5pc3N1ZXNbMF1cbiAgICAgICAgICBtZXNzYWdlID0gem9kSXNzdWVUb1N0cmluZyhpc3N1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlX2NvbXBvbmVudHM6IHN0cmluZ1tdID0gW11cbiAgICAgICAgICBmb3IgKGNvbnN0IGlzc3VlIG9mIGVycm9yLmlzc3Vlcykge1xuICAgICAgICAgICAgbWVzc2FnZV9jb21wb25lbnRzLnB1c2goem9kSXNzdWVUb1N0cmluZyhpc3N1ZSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIG1lc3NhZ2UgPVxuICAgICAgICAgICAgYCR7ZXJyb3IuaXNzdWVzLmxlbmd0aH0gSW5wdXQgRXJyb3JzOiBgICtcbiAgICAgICAgICAgIG1lc3NhZ2VfY29tcG9uZW50cy5qb2luKFwiLCBcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKHtcbiAgICAgICAgICB0eXBlOiBcImludmFsaWRfaW5wdXRcIixcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHZhbGlkYXRpb25fZXJyb3JzOiBlcnJvci5mb3JtYXQoKSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFeGNlcHRpb24oe1xuICAgICAgICB0eXBlOiBcImludmFsaWRfaW5wdXRcIixcbiAgICAgICAgbWVzc2FnZTogXCJFcnJvciB3aGlsZSBwYXJzaW5nIGlucHV0XCIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoaXMgd2lsbCBvdmVycmlkZSB0aGUgcmVzLmpzb24gbWV0aG9kIHRvIHZhbGlkYXRlIHRoZSByZXNwb25zZVxuICAgICAqL1xuICAgIGlmIChpbnB1dC5zaG91bGRWYWxpZGF0ZVJlc3BvbnNlcykge1xuICAgICAgdmFsaWRhdGVKc29uUmVzcG9uc2UoaW5wdXQuanNvblJlc3BvbnNlLCByZXMpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQocmVxLCByZXMpXG4gIH1cblxuZXhwb3J0IGRlZmF1bHQgd2l0aFZhbGlkYXRpb25cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0EsaUJBQXlDO0FBQ3pDLHlDQUdPO0FBQ1Asb0JBQXdCO0FBRXhCLElBQU0sd0NBQXdDLENBQzVDLGFBQ0EsV0FDb0M7QUFDcEMsTUFBSSxDQUFDLGFBQWE7QUFDaEIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLGdCQUFnQjtBQUVwQixTQUFPLHlCQUF5QixhQUFFLFlBQVk7QUFDNUMsb0JBQWdCLGNBQWMsS0FBSztBQUFBLEVBQ3JDO0FBRUEsU0FBTztBQUNUO0FBTUEsSUFBTSxnQ0FBZ0MsQ0FBQyxXQUF5QjtBQUM5RCxRQUFNLG9CQUFvQjtBQUFBLElBQ3hCLGlDQUFzQjtBQUFBLElBQ3RCLGlDQUFzQjtBQUFBLElBQ3RCLGlDQUFzQjtBQUFBLEVBQ3hCO0FBRUEsU0FBTyxrQkFBa0IsU0FBUyxPQUFPLEtBQUssUUFBUSxHQUFHO0FBQ3ZELFFBQ0UsT0FBTyxLQUFLLGFBQWEsaUNBQXNCLGVBQy9DLE9BQU8sS0FBSyxhQUFhLGlDQUFzQixZQUMvQztBQUNBLGVBQVMsT0FBTyxLQUFLO0FBQ3JCO0FBQUEsSUFDRjtBQUVBLFFBQUksT0FBTyxLQUFLLGFBQWEsaUNBQXNCLFlBQVk7QUFDN0QsZUFBUyxPQUFPLEtBQUs7QUFDckI7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNBLFNBQU8sT0FBTztBQUNoQjtBQUVBLElBQU0sbUJBQW1CLENBQ3ZCLFFBQ0EsVUFDRztBQUNILFFBQU0sZUFBZSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEtBQUs7QUFDNUMsUUFBTSxjQUFjLE9BQU8sS0FBSyxhQUFhLGlDQUFzQjtBQUNuRSxRQUFNLGNBQWMsc0NBQXNDLGFBQWEsTUFBTTtBQUM3RSxRQUFNLGNBQ0osWUFBWSxLQUFLLGFBQWEsaUNBQXNCO0FBRXRELE1BQUksYUFBYTtBQUNmLFVBQU0sYUFBYTtBQUVuQixlQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLFdBQVcsS0FBSyxHQUFHO0FBQzNELFlBQU0sTUFBTSw4QkFBOEIsS0FBcUI7QUFDL0QsWUFBTSxVQUFVLElBQUksYUFBYSxpQ0FBc0I7QUFDdkQsVUFBSSxTQUFTO0FBQ1gsY0FBTSxjQUFjLE1BQU07QUFFMUIsWUFBSSxPQUFPLGdCQUFnQixVQUFVO0FBQ25DLHVCQUFhLE9BQU8sWUFBWSxNQUFNLEdBQUc7QUFBQSxRQUMzQztBQUVBLGNBQU0sNkJBQTZCLE1BQU0sR0FBRztBQUM1QyxZQUFJLE9BQU8sK0JBQStCLFVBQVU7QUFDbEQsZ0JBQU0sa0JBQWtCO0FBQ3hCLHVCQUFhLE9BQU8sZ0JBQWdCLE1BQU0sR0FBRztBQUFBLFFBQy9DO0FBRUEsWUFBSSxNQUFNLFFBQVEsMEJBQTBCLEdBQUc7QUFDN0MsdUJBQWEsT0FBTztBQUFBLFFBQ3RCO0FBRUE7QUFBQSxNQUNGO0FBRUEsWUFBTSxZQUFZLElBQUksYUFBYSxpQ0FBc0I7QUFDekQsVUFBSSxXQUFXO0FBQ2IsY0FBTSxnQkFBZ0IsTUFBTTtBQUU1QixZQUFJLE9BQU8sa0JBQWtCLFVBQVU7QUFDckMsdUJBQWEsT0FBTyxrQkFBa0I7QUFBQSxRQUN4QztBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLFNBQU8sT0FBTyxNQUFNLFlBQVk7QUFDbEM7QUFrQkEsSUFBTSxtQkFBbUIsQ0FBQyxVQUFzQjtBQUM5QyxNQUFJLE1BQU0sS0FBSyxLQUFLLEdBQUcsTUFBTSxJQUFJO0FBQy9CLFdBQU8sTUFBTTtBQUFBLEVBQ2Y7QUFDQSxNQUFJLE1BQU0sWUFBWSxZQUFZO0FBQ2hDLFdBQU8sR0FBRyxNQUFNLEtBQUssS0FBSyxHQUFHO0FBQUEsRUFDL0I7QUFDQSxTQUFPLEdBQUcsTUFBTSxnQkFBZ0IsTUFBTSxLQUFLLEtBQUssR0FBRztBQUNyRDtBQUVBLFNBQVMscUJBQ1AsY0FDQSxLQUNBO0FBQ0EsUUFBTSxvQkFBb0IsSUFBSTtBQUM5QixRQUFNLG9CQUFvQixDQUFDLFNBQWM7QUFDdkMsVUFBTSxhQUFhLElBQUksY0FBYyxPQUFPLElBQUksYUFBYTtBQUM3RCxRQUFJLENBQUMsWUFBWTtBQUNmLGFBQU8sa0JBQWtCLElBQUk7QUFBQSxJQUMvQjtBQUVBLFFBQUk7QUFDRixtREFBYyxNQUFNO0FBQUEsSUFDdEIsU0FBUyxLQUFQO0FBQ0EsWUFBTSxJQUFJLGdFQUE2QjtBQUFBLFFBQ3JDLE1BQU07QUFBQSxRQUNOLFNBQVM7QUFBQSxRQUNULFVBQVU7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNIO0FBRUEsV0FBTyxrQkFBa0IsSUFBSTtBQUFBLEVBQy9CO0FBQ0EsTUFBSSxPQUFPO0FBQ2I7QUFFTyxJQUFNLGlCQUNYLENBT0UsVUFRRixDQUFDLFNBQ0QsT0FBTyxLQUFxQixRQUF5QjtBQTVLdkQ7QUE2S0ksTUFDRyxNQUFNLFlBQVksTUFBTSxZQUN4QixNQUFNLFlBQVksTUFBTSxjQUN6QjtBQUNBLFVBQU0sSUFBSSxNQUFNLG1EQUFtRDtBQUFBLEVBQ3JFO0FBRUEsT0FDRyxJQUFJLFdBQVcsVUFBVSxJQUFJLFdBQVcsYUFDeEMsTUFBTSxZQUFZLE1BQU0saUJBQ3pCLEdBQUMsU0FBSSxRQUFRLG9CQUFaLG1CQUE2QixTQUFTLHdCQUN2QyxLQUFDLHVCQUFRLElBQUksSUFBSSxHQUNqQjtBQUNBLFVBQU0sSUFBSSx1REFBb0I7QUFBQSxNQUM1QixNQUFNO0FBQUEsTUFDTixTQUFTLEdBQUcsSUFBSTtBQUFBLElBQ2xCLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFDRSxNQUFNLFlBQ04sSUFBSSxXQUFXLFNBQ2YsR0FBQyxTQUFJLFFBQVEsb0JBQVosbUJBQTZCO0FBQUEsSUFDNUI7QUFBQSxNQUdGO0FBQ0EsVUFBTSxJQUFJLHVEQUFvQjtBQUFBLE1BQzVCLE1BQU07QUFBQSxNQUNOLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNIO0FBRUEsTUFBSTtBQUNGLFVBQU0sMkJBQTJCLEVBQUUsR0FBRyxJQUFJLE9BQU8sR0FBRyxJQUFJLEtBQUs7QUFFN0QsVUFBTSwwQkFBMEIsTUFBTSwrQkFDbEMsT0FDQSxJQUFJLFdBQVc7QUFFbkIsVUFBTSxhQUFhLFFBQVEsTUFBTSxRQUFRO0FBRXpDLFFBQUksY0FBYyx5QkFBeUI7QUFDekMsVUFBSSxRQUFPLFdBQU0sYUFBTixtQkFBZ0IsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFFQSxRQUFJLENBQUMsY0FBYyx5QkFBeUI7QUFDMUMsVUFBSSxRQUFPLFdBQU0sYUFBTixtQkFBZ0IsTUFBTSxJQUFJO0FBQUEsSUFDdkM7QUFFQSxRQUFJLE1BQU0sYUFBYTtBQUNyQixVQUFJLFFBQVEsaUJBQWlCLE1BQU0sYUFBYSxJQUFJLEtBQUs7QUFBQSxJQUMzRDtBQUVBLFFBQUksTUFBTSxjQUFjO0FBSXRCO0FBQUMsTUFBQyxJQUFZLGVBQWU7QUFBQSxRQUMzQixNQUFNO0FBQUEsUUFDTjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixTQUFTLE9BQVA7QUFDQSxRQUFJLE1BQU0sU0FBUyxZQUFZO0FBQzdCLFVBQUk7QUFDSixVQUFJLE1BQU0sT0FBTyxXQUFXLEdBQUc7QUFDN0IsY0FBTSxRQUFRLE1BQU0sT0FBTztBQUMzQixrQkFBVSxpQkFBaUIsS0FBSztBQUFBLE1BQ2xDLE9BQU87QUFDTCxjQUFNLHFCQUErQixDQUFDO0FBQ3RDLG1CQUFXLFNBQVMsTUFBTSxRQUFRO0FBQ2hDLDZCQUFtQixLQUFLLGlCQUFpQixLQUFLLENBQUM7QUFBQSxRQUNqRDtBQUNBLGtCQUNFLEdBQUcsTUFBTSxPQUFPLDBCQUNoQixtQkFBbUIsS0FBSyxJQUFJO0FBQUEsTUFDaEM7QUFFQSxZQUFNLElBQUksdURBQW9CO0FBQUEsUUFDNUIsTUFBTTtBQUFBLFFBQ047QUFBQSxRQUNBLG1CQUFtQixNQUFNLE9BQU87QUFBQSxNQUNsQyxDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sSUFBSSx1REFBb0I7QUFBQSxNQUM1QixNQUFNO0FBQUEsTUFDTixTQUFTO0FBQUEsSUFDWCxDQUFDO0FBQUEsRUFDSDtBQUtBLE1BQUksTUFBTSx5QkFBeUI7QUFDakMseUJBQXFCLE1BQU0sY0FBYyxHQUFHO0FBQUEsRUFDOUM7QUFFQSxTQUFPLEtBQUssS0FBSyxHQUFHO0FBQ3RCO0FBRUYsSUFBTywwQkFBUTsiLAogICJuYW1lcyI6IFtdCn0K