serverless-plugin-datadog 3.3.0 → 3.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/dist/env.d.ts +17 -0
  2. package/dist/env.d.ts.map +1 -0
  3. package/dist/env.js +63 -0
  4. package/dist/env.js.map +1 -0
  5. package/dist/forwarder.d.ts +14 -0
  6. package/dist/forwarder.d.ts.map +1 -0
  7. package/dist/forwarder.js +87 -0
  8. package/dist/forwarder.js.map +1 -0
  9. package/dist/index.d.ts +10 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +161 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/layer.d.ts +26 -0
  14. package/dist/layer.d.ts.map +1 -0
  15. package/dist/layer.js +65 -0
  16. package/dist/layer.js.map +1 -0
  17. package/dist/layers.json +156 -0
  18. package/dist/package.json +1 -1
  19. package/dist/src/layer.d.ts.map +1 -1
  20. package/dist/src/layer.js +1 -2
  21. package/dist/src/layer.js.map +1 -1
  22. package/dist/src/layers-gov.json +4 -4
  23. package/dist/src/layers.json +42 -42
  24. package/dist/templates/node-es6-template.d.ts +2 -0
  25. package/dist/templates/node-es6-template.d.ts.map +1 -0
  26. package/dist/templates/node-es6-template.js +25 -0
  27. package/dist/templates/node-es6-template.js.map +1 -0
  28. package/dist/templates/node-js-template.d.ts +2 -0
  29. package/dist/templates/node-js-template.d.ts.map +1 -0
  30. package/dist/templates/node-js-template.js +24 -0
  31. package/dist/templates/node-js-template.js.map +1 -0
  32. package/dist/templates/node-ts-template.d.ts +2 -0
  33. package/dist/templates/node-ts-template.d.ts.map +1 -0
  34. package/dist/templates/node-ts-template.js +26 -0
  35. package/dist/templates/node-ts-template.js.map +1 -0
  36. package/dist/templates/python-template.d.ts +2 -0
  37. package/dist/templates/python-template.d.ts.map +1 -0
  38. package/dist/templates/python-template.js +25 -0
  39. package/dist/templates/python-template.js.map +1 -0
  40. package/dist/tracing.d.ts +9 -0
  41. package/dist/tracing.d.ts.map +1 -0
  42. package/dist/tracing.js +36 -0
  43. package/dist/tracing.js.map +1 -0
  44. package/dist/util.d.ts +9 -0
  45. package/dist/util.d.ts.map +1 -0
  46. package/dist/util.js +72 -0
  47. package/dist/util.js.map +1 -0
  48. package/dist/wrapper.d.ts +11 -0
  49. package/dist/wrapper.d.ts.map +1 -0
  50. package/dist/wrapper.js +57 -0
  51. package/dist/wrapper.js.map +1 -0
  52. package/dist/yarn.lock +3703 -0
  53. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ /*
3
+ * Unless explicitly stated otherwise all files in this repository are licensed
4
+ * under the Apache License Version 2.0.
5
+ *
6
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
+ * Copyright 2019 Datadog, Inc.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ function pythonTemplate(filePath, methods) {
11
+ const newPath = filePath.split(/\/|\\/).join(".");
12
+ const methodsString = methodsTemplate(newPath, methods);
13
+ return `from datadog_lambda.wrapper import datadog_lambda_wrapper` + methodsString;
14
+ }
15
+ exports.pythonTemplate = pythonTemplate;
16
+ function methodsTemplate(newPath, methods) {
17
+ let data = "";
18
+ for (const method of methods) {
19
+ data += "\n";
20
+ data += `from ${newPath} import ${method} as ${method}_impl
21
+ ${method} = datadog_lambda_wrapper(${method}_impl)`;
22
+ }
23
+ return data;
24
+ }
25
+ //# sourceMappingURL=python-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python-template.js","sourceRoot":"","sources":["../../src/templates/python-template.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,SAAgB,cAAc,CAAC,QAAgB,EAAE,OAAiB;IAChE,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAExD,OAAO,2DAA2D,GAAG,aAAa,CAAC;AACrF,CAAC;AALD,wCAKC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,OAAiB;IACzD,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,IAAI,IAAI,CAAC;QACb,IAAI,IAAI,QAAQ,OAAO,WAAW,MAAM,OAAO,MAAM;EACvD,MAAM,6BAA6B,MAAM,QAAQ,CAAC;KACjD;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,9 @@
1
+ import Service from "serverless/classes/Service";
2
+ export declare enum TracingMode {
3
+ XRAY = 0,
4
+ DD_TRACE = 1,
5
+ HYBRID = 2,
6
+ NONE = 3
7
+ }
8
+ export declare function enableTracing(service: Service, tracingMode: TracingMode): void;
9
+ //# sourceMappingURL=tracing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.d.ts","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":"AAQA,OAAO,OAAO,MAAM,4BAA4B,CAAC;AAKjD,oBAAY,WAAW;IACrB,IAAI,IAAA;IACJ,QAAQ,IAAA;IACR,MAAM,IAAA;IACN,IAAI,IAAA;CACL;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,QAcvE"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /*
3
+ * Unless explicitly stated otherwise all files in this repository are licensed
4
+ * under the Apache License Version 2.0.
5
+ *
6
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
+ * Copyright 2019 Datadog, Inc.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const ddTraceEnabledEnvVar = "DD_TRACE_ENABLED";
11
+ const ddMergeXrayTracesEnvVar = "DD_MERGE_XRAY_TRACES";
12
+ var TracingMode;
13
+ (function (TracingMode) {
14
+ TracingMode[TracingMode["XRAY"] = 0] = "XRAY";
15
+ TracingMode[TracingMode["DD_TRACE"] = 1] = "DD_TRACE";
16
+ TracingMode[TracingMode["HYBRID"] = 2] = "HYBRID";
17
+ TracingMode[TracingMode["NONE"] = 3] = "NONE";
18
+ })(TracingMode = exports.TracingMode || (exports.TracingMode = {}));
19
+ function enableTracing(service, tracingMode) {
20
+ var _a;
21
+ const provider = service.provider;
22
+ if (tracingMode === TracingMode.XRAY || tracingMode === TracingMode.HYBRID) {
23
+ provider.tracing = {
24
+ apiGateway: true,
25
+ lambda: true,
26
+ };
27
+ }
28
+ if (tracingMode === TracingMode.HYBRID || tracingMode === TracingMode.DD_TRACE) {
29
+ const environment = (_a = provider.environment) !== null && _a !== void 0 ? _a : {};
30
+ environment[ddTraceEnabledEnvVar] = true;
31
+ environment[ddMergeXrayTracesEnvVar] = tracingMode === TracingMode.HYBRID;
32
+ provider.environment = environment;
33
+ }
34
+ }
35
+ exports.enableTracing = enableTracing;
36
+ //# sourceMappingURL=tracing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracing.js","sourceRoot":"","sources":["../src/tracing.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAIH,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAChD,MAAM,uBAAuB,GAAG,sBAAsB,CAAC;AAEvD,IAAY,WAKX;AALD,WAAY,WAAW;IACrB,6CAAI,CAAA;IACJ,qDAAQ,CAAA;IACR,iDAAM,CAAA;IACN,6CAAI,CAAA;AACN,CAAC,EALW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAKtB;AAED,SAAgB,aAAa,CAAC,OAAgB,EAAE,WAAwB;;IACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAe,CAAC;IACzC,IAAI,WAAW,KAAK,WAAW,CAAC,IAAI,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE;QAC1E,QAAQ,CAAC,OAAO,GAAG;YACjB,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,IAAI;SACb,CAAC;KACH;IACD,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,IAAI,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE;QAC9E,MAAM,WAAW,SAA4B,QAAQ,CAAC,WAAW,mCAAI,EAAE,CAAC;QACxE,WAAW,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;QACzC,WAAW,CAAC,uBAAuB,CAAC,GAAG,WAAW,KAAK,WAAW,CAAC,MAAM,CAAC;QAC1E,QAAQ,CAAC,WAAW,GAAG,WAAW,CAAC;KACpC;AACH,CAAC;AAdD,sCAcC"}
package/dist/util.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { FunctionInfo } from "layer";
2
+ import Service from "serverless/classes/Service";
3
+ export declare function removeDirectory(path: string): Promise<void>;
4
+ export declare function getHandlerPath(handlerInfo: FunctionInfo): {
5
+ method: string;
6
+ filename: string;
7
+ } | undefined;
8
+ export declare function hasWebpackPlugin(service: Service): boolean;
9
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,OAAO,MAAM,4BAA4B,CAAC;AAQjD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,iBAejD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,YAAY;;;cASvD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,WAMhD"}
package/dist/util.js ADDED
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /*
3
+ * Unless explicitly stated otherwise all files in this repository are licensed
4
+ * under the Apache License Version 2.0.
5
+ *
6
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
+ * Copyright 2019 Datadog, Inc.
8
+ */
9
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
11
+ return new (P || (P = Promise))(function (resolve, reject) {
12
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
15
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
16
+ });
17
+ };
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
22
+ result["default"] = mod;
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ const fs = __importStar(require("fs"));
27
+ const util_1 = require("util");
28
+ const exists = util_1.promisify(fs.exists);
29
+ const readdir = util_1.promisify(fs.readdir);
30
+ const lstat = util_1.promisify(fs.lstat);
31
+ const unlink = util_1.promisify(fs.unlink);
32
+ const rmdir = util_1.promisify(fs.rmdir);
33
+ function removeDirectory(path) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const dirExists = yield exists(path);
36
+ if (dirExists) {
37
+ const files = yield readdir(path);
38
+ for (const file of files) {
39
+ const curPath = path + "/" + file;
40
+ const stats = yield lstat(curPath);
41
+ if (stats.isDirectory()) {
42
+ yield removeDirectory(curPath);
43
+ }
44
+ else {
45
+ yield unlink(curPath);
46
+ }
47
+ }
48
+ yield rmdir(path);
49
+ }
50
+ });
51
+ }
52
+ exports.removeDirectory = removeDirectory;
53
+ function getHandlerPath(handlerInfo) {
54
+ const handlerfile = handlerInfo.handler.handler;
55
+ const parts = handlerfile.split(".");
56
+ if (parts.length < 2) {
57
+ return;
58
+ }
59
+ const method = parts[parts.length - 1];
60
+ const filename = parts.slice(0, -1).join(".");
61
+ return { method, filename };
62
+ }
63
+ exports.getHandlerPath = getHandlerPath;
64
+ function hasWebpackPlugin(service) {
65
+ const plugins = service.plugins;
66
+ if (plugins === undefined) {
67
+ return false;
68
+ }
69
+ return plugins.find((plugin) => plugin === "serverless-webpack") !== undefined;
70
+ }
71
+ exports.hasWebpackPlugin = hasWebpackPlugin;
72
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AAGzB,+BAAiC;AAGjC,MAAM,MAAM,GAAG,gBAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,OAAO,GAAG,gBAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AACtC,MAAM,KAAK,GAAG,gBAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAClC,MAAM,MAAM,GAAG,gBAAS,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACpC,MAAM,KAAK,GAAG,gBAAS,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAElC,SAAsB,eAAe,CAAC,IAAY;;QAChD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,SAAS,EAAE;YACb,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;YAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACxB,MAAM,OAAO,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;gBAClC,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;oBACvB,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;iBAChC;qBAAM;oBACL,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;iBACvB;aACF;YACD,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC;SACnB;IACH,CAAC;CAAA;AAfD,0CAeC;AAED,SAAgB,cAAc,CAAC,WAAyB;IACtD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;IAChD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;QACpB,OAAO;KACR;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC;AATD,wCASC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,OAAO,GAA0B,OAAe,CAAC,OAAO,CAAC;IAC/D,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,OAAO,KAAK,CAAC;KACd;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,oBAAoB,CAAC,KAAK,SAAS,CAAC;AACjF,CAAC;AAND,4CAMC"}
@@ -0,0 +1,11 @@
1
+ import { FunctionInfo } from "./layer";
2
+ export declare const datadogHandlerEnvVar = "DD_LAMBDA_HANDLER";
3
+ export declare const pythonHandler = "datadog_lambda.handler.handler";
4
+ export declare const jsHandlerWithLayers = "/opt/nodejs/node_modules/datadog-lambda-js/handler.handler";
5
+ export declare const jsHandler = "node_modules/datadog-lambda-js/dist/handler.handler";
6
+ /**
7
+ * For each lambda function, redirects handler to the Datadog handler for the given runtime,
8
+ * and sets Datadog environment variable `DD_LAMBDA_HANDLER` to the original handler.
9
+ */
10
+ export declare function redirectHandlers(funcs: FunctionInfo[], addLayers: boolean): void;
11
+ //# sourceMappingURL=wrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAe,MAAM,SAAS,CAAC;AAEpD,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AACxD,eAAO,MAAM,aAAa,mCAAmC,CAAC;AAC9D,eAAO,MAAM,mBAAmB,+DAA+D,CAAC;AAChG,eAAO,MAAM,SAAS,wDAAwD,CAAC;AAE/E;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,OAAO,QAkBzE"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /*
3
+ * Unless explicitly stated otherwise all files in this repository are licensed
4
+ * under the Apache License Version 2.0.
5
+ *
6
+ * This product includes software developed at Datadog (https://www.datadoghq.com/).
7
+ * Copyright 2019 Datadog, Inc.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ const layer_1 = require("./layer");
11
+ exports.datadogHandlerEnvVar = "DD_LAMBDA_HANDLER";
12
+ exports.pythonHandler = "datadog_lambda.handler.handler";
13
+ exports.jsHandlerWithLayers = "/opt/nodejs/node_modules/datadog-lambda-js/handler.handler";
14
+ exports.jsHandler = "node_modules/datadog-lambda-js/dist/handler.handler";
15
+ /**
16
+ * For each lambda function, redirects handler to the Datadog handler for the given runtime,
17
+ * and sets Datadog environment variable `DD_LAMBDA_HANDLER` to the original handler.
18
+ */
19
+ function redirectHandlers(funcs, addLayers) {
20
+ funcs.forEach((func) => {
21
+ setEnvDatadogHandler(func);
22
+ const handler = getDDHandler(func.type, addLayers);
23
+ if (handler === undefined) {
24
+ return;
25
+ }
26
+ func.handler.handler = handler;
27
+ if (func.handler.package === undefined) {
28
+ func.handler.package = {
29
+ exclude: [],
30
+ include: [],
31
+ };
32
+ }
33
+ if (func.handler.package.include === undefined) {
34
+ func.handler.package.include = [];
35
+ }
36
+ });
37
+ }
38
+ exports.redirectHandlers = redirectHandlers;
39
+ function getDDHandler(lambdaRuntime, addLayers) {
40
+ if (lambdaRuntime === undefined) {
41
+ return;
42
+ }
43
+ switch (lambdaRuntime) {
44
+ case layer_1.RuntimeType.NODE:
45
+ return addLayers ? exports.jsHandlerWithLayers : exports.jsHandler;
46
+ case layer_1.RuntimeType.PYTHON:
47
+ return exports.pythonHandler;
48
+ }
49
+ }
50
+ function setEnvDatadogHandler(func) {
51
+ var _a;
52
+ const originalHandler = func.handler.handler;
53
+ const environment = (_a = func.handler.environment) !== null && _a !== void 0 ? _a : {};
54
+ environment[exports.datadogHandlerEnvVar] = originalHandler;
55
+ func.handler.environment = environment;
56
+ }
57
+ //# sourceMappingURL=wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../src/wrapper.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;AAEH,mCAAoD;AAEvC,QAAA,oBAAoB,GAAG,mBAAmB,CAAC;AAC3C,QAAA,aAAa,GAAG,gCAAgC,CAAC;AACjD,QAAA,mBAAmB,GAAG,4DAA4D,CAAC;AACnF,QAAA,SAAS,GAAG,qDAAqD,CAAC;AAE/E;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,KAAqB,EAAE,SAAkB;IACxE,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACrB,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnD,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,OAAO;SACR;QACD,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;YACtC,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG;gBACrB,OAAO,EAAE,EAAE;gBACX,OAAO,EAAE,EAAE;aACZ,CAAC;SACH;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE;YAC9C,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC;SACnC;IACH,CAAC,CAAC,CAAC;AACL,CAAC;AAlBD,4CAkBC;AAED,SAAS,YAAY,CAAC,aAAsC,EAAE,SAAkB;IAC9E,IAAI,aAAa,KAAK,SAAS,EAAE;QAC/B,OAAO;KACR;IACD,QAAQ,aAAa,EAAE;QACrB,KAAK,mBAAW,CAAC,IAAI;YACnB,OAAO,SAAS,CAAC,CAAC,CAAC,2BAAmB,CAAC,CAAC,CAAC,iBAAS,CAAC;QACrD,KAAK,mBAAW,CAAC,MAAM;YACrB,OAAO,qBAAa,CAAC;KACxB;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAkB;;IAC9C,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IAC7C,MAAM,WAAW,SAAI,IAAI,CAAC,OAAe,CAAC,WAAW,mCAAI,EAAE,CAAC;IAC5D,WAAW,CAAC,4BAAoB,CAAC,GAAG,eAAe,CAAC;IACnD,IAAI,CAAC,OAAe,CAAC,WAAW,GAAG,WAAW,CAAC;AAClD,CAAC"}