@restatedev/restate-cdk 1.1.0-rc.2 → 1.1.1-pre.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,8 +1,8 @@
1
1
  "use strict";
2
2
  /*
3
- * Copyright (c) 2023-2024 - Restate Software, Inc., Restate GmbH
3
+ * Copyright (c) 2023-2025 - Restate Software, Inc., Restate GmbH
4
4
  *
5
- * This file is part of the Restate SDK for Node.js/TypeScript,
5
+ * This file is part of the Restate CDK Construct Library,
6
6
  * which is released under the MIT license.
7
7
  *
8
8
  * You can find a copy of the license in file LICENSE in the root
@@ -25,13 +25,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
25
25
  }) : function(o, v) {
26
26
  o["default"] = v;
27
27
  });
28
- var __importStar = (this && this.__importStar) || function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
35
45
  Object.defineProperty(exports, "__esModule", { value: true });
36
46
  exports.SingleNodeRestateDeployment = exports.TlsTermination = void 0;
37
47
  const constructs_1 = require("constructs");
@@ -110,6 +120,14 @@ class SingleNodeRestateDeployment extends constructs_1.Construct {
110
120
  const restateTag = props.restateTag ?? RESTATE_DOCKER_DEFAULT_TAG;
111
121
  const adotTag = props.adotTag ?? ADOT_DOCKER_DEFAULT_TAG;
112
122
  this.tlsEnabled = props.tlsTermination === TlsTermination.ON_HOST_SELF_SIGNED_CERTIFICATE;
123
+ const envDefaults = {
124
+ RESTATE_OBSERVABILITY__LOG__FORMAT: "Json",
125
+ RUST_LOG: "info",
126
+ RESTATE_OBSERVABILITY__TRACING__ENDPOINT: "http://localhost:4317",
127
+ };
128
+ const envArgs = Object.entries({ ...envDefaults, ...(props.environment ?? {}) })
129
+ .map(([key, value]) => `-e ${key}="${value}"`)
130
+ .join(" ");
113
131
  const initScript = ec2.UserData.forLinux();
114
132
  initScript.addCommands("set -euf -o pipefail", `yum install -y npm && npm install -gq @restatedev/restate@${restateTag}`, "yum install -y docker", this.mountDataVolumeScript(), "mkdir -p /etc/restate", ["cat << EOF > /etc/restate/config.toml", this.restateConfig(id, props), "EOF"].join("\n"), "systemctl start docker.service",
115
133
  // Start the ADOT collector - needed for X-ray trace forwarding
@@ -121,8 +139,7 @@ class SingleNodeRestateDeployment extends constructs_1.Construct {
121
139
  " --volume /etc/restate:/etc/restate" +
122
140
  " --volume /var/restate:/restate-data" +
123
141
  " --network=host" +
124
- " -e RESTATE_OBSERVABILITY__LOG__FORMAT=Json -e RUST_LOG=info,restate_worker::partition=warn" +
125
- " -e RESTATE_OBSERVABILITY__TRACING__ENDPOINT=http://localhost:4317" +
142
+ ` ${envArgs}` +
126
143
  ` --log-driver=awslogs --log-opt awslogs-group=${logGroup.logGroupName}` +
127
144
  ` ${restateImage}:${restateTag}` +
128
145
  " --config-file /etc/restate/config.toml");
@@ -312,4 +329,4 @@ fi
312
329
  }
313
330
  }
314
331
  exports.SingleNodeRestateDeployment = SingleNodeRestateDeployment;
315
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW5vZGUtcmVzdGF0ZS1kZXBsb3ltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3Jlc3RhdGUtY29uc3RydWN0cy9zaW5nbGUtbm9kZS1yZXN0YXRlLWRlcGxveW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCwyQ0FBdUM7QUFDdkMsMkRBQTZDO0FBQzdDLHlEQUEyQztBQUMzQyx5REFBMkM7QUFFM0MsNkRBQW1EO0FBRW5ELDZDQUE0QztBQXNHNUMsSUFBWSxjQVdYO0FBWEQsV0FBWSxjQUFjO0lBQ3hCOztPQUVHO0lBQ0gsMkRBQVEsQ0FBQTtJQUVSOzs7T0FHRztJQUNILHlHQUErQixDQUFBO0FBQ2pDLENBQUMsRUFYVyxjQUFjLDhCQUFkLGNBQWMsUUFXekI7QUFFRCxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQztBQUNsQyxNQUFNLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUNyQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNoQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLHFCQUFxQixHQUFHLDhCQUE4QixDQUFDO0FBQzdELE1BQU0sMEJBQTBCLEdBQUcsUUFBUSxDQUFDO0FBQzVDLE1BQU0sdUJBQXVCLEdBQUcsUUFBUSxDQUFDO0FBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQWEsMkJBQTRCLFNBQVEsc0JBQVM7SUFheEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNyRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVB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K0JBQStCO2dCQUMvQixFQUFFO2dCQUNGLDhEQUE4RDtnQkFDOUQsa0VBQWtFO2dCQUNsRSxvQ0FBb0M7Z0JBQ3BDLDRCQUE0QjtnQkFDNUIsK0JBQStCO2dCQUMvQixpQ0FBaUM7Z0JBQ2pDLEVBQUU7Z0JBQ0YsZ0JBQWdCO2dCQUNoQixtQ0FBbUMsa0JBQWtCLEdBQUc7Z0JBQ3hELEtBQUs7Z0JBQ0wsR0FBRzthQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUEzU0Qsa0VBMlNDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMy0yMDI0IC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgU0RLIGZvciBOb2RlLmpzL1R5cGVTY3JpcHQsXG4gKiB3aGljaCBpcyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKlxuICogWW91IGNhbiBmaW5kIGEgY29weSBvZiB0aGUgbGljZW5zZSBpbiBmaWxlIExJQ0VOU0UgaW4gdGhlIHJvb3RcbiAqIGRpcmVjdG9yeSBvZiB0aGlzIHJlcG9zaXRvcnkgb3IgcGFja2FnZSwgb3IgYXRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXN0YXRlZGV2L3Nkay10eXBlc2NyaXB0L2Jsb2IvbWFpbi9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGxvZ3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgSVJlc3RhdGVFbnZpcm9ubWVudCB9IGZyb20gXCIuL3Jlc3RhdGUtZW52aXJvbm1lbnRcIjtcbmltcG9ydCB7IFRyYWNpbmdNb2RlIH0gZnJvbSBcIi4vZGVwbG95bWVudHMtY29tbW9uXCI7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBSZW1vdmFsUG9saWN5IH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2luZ2xlTm9kZVJlc3RhdGVQcm9wcyB7XG4gIC8qKiBFQzIgaW5zdGFuY2UgdHlwZSB0byB1c2UuICovXG4gIGluc3RhbmNlVHlwZT86IGVjMi5JbnN0YW5jZVR5cGU7XG5cbiAgLyoqIE1hY2hpbmUgaW1hZ2UuIE5vdGU6IHN0YXJ0dXAgc2NyaXB0IGV4cGVjdHMgeXVtLWJhc2VkIHBhY2thZ2UgbWFuYWdlbWVudC4gKi9cbiAgbWFjaGluZUltYWdlPzogZWMyLklNYWNoaW5lSW1hZ2U7XG5cbiAgLyoqIFRoZSBWUEMgaW4gd2hpY2ggdG8gbGF1bmNoIHRoZSBSZXN0YXRlIGhvc3QuICovXG4gIHZwYz86IGVjMi5JVnBjO1xuXG4gIG5ldHdvcmtDb25maWd1cmF0aW9uPzoge1xuICAgIC8qKlxuICAgICAqIFN1Ym5ldCB0eXBlIGZvciB0aGUgUmVzdGF0ZSBob3N0LlxuICAgICAqXG4gICAgICogQXZhaWxhYmxlIG9wdGlvbnM6XG4gICAgICogIC0gW0RlZmF1bHRdIHtAbGluayBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTfSB3aWxsIGNyZWF0ZSB0aGUgUmVzdGF0ZSBpbnN0YW5jZSB3aXRoIG91dGJvdW5kIGludGVybmV0XG4gICAgICogICAgYWNjZXNzIG9ubHksIHNvIHRoYXQgaXQgY2FuIGludm9rZSBIVFRQIGVuZHBvaW50cy4gVGhlIHNlY3VyaXR5IGdyb3VwcyB7QGxpbmsgaW5ncmVzc1NlY3VyaXR5R3JvdXB9IGFuZFxuICAgICAqICAgIHtAbGluayBhZG1pblNlY3VyaXR5R3JvdXB9IGNvbnRyb2wgaW5ib3VuZCB0cmFmZmljIHRvIHRoZSBzZXJ2aWNlIGluZ3Jlc3MgYW5kIGFkbWluIHBvcnRzIHJlc3BlY3RpdmVseS5cbiAgICAgKiAgICBDb25maWd1cmUge0BsaW5rIFNlcnZpY2VEZXBsb3llcn0gdG8gdXNlIHRoZSBsYXR0ZXIsIGFuZCBzZXQgdXAgaW5ncmVzcyB0cmFmZmljIHJvdXRpbmcgb3V0c2lkZSBvZiB0aGlzXG4gICAgICogICAgY29uc3RydWN0IHVzaW5nIHRoZSBmb3JtZXIuXG4gICAgICogIC0gSW5zZWN1cmUsIGludGVybmV0LWZhY2luZyB7QGxpbmsgZWMyLlN1Ym5ldFR5cGUuUFVCTElDfSB3aWxsIGFsc28gcHJvdmlzaW9uIGFuIG5naW54IHJldmVyc2UgcHJveHlcbiAgICAgKiAgICBhbmQgYW4gSFRUUCBsaXN0ZW5lciB3aXRoIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUuXG4gICAgICovXG4gICAgc3VibmV0VHlwZT86IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfCBlYzIuU3VibmV0VHlwZS5QVUJMSUM7XG4gIH07XG5cbiAgLyoqXG4gICAqIEFsbG93IGluY29taW5nIGluZ3Jlc3MgdHJhZmZpYyBmcm9tIGFueXdoZXJlLiBEZWZhdWx0OiBgZmFsc2VgLiBBbHRlcm5hdGl2ZWx5LCBhZGQgcnVsZXMgdG8gdGhlXG4gICAqIGBpbmdyZXNzU2VjdXJpdHlHcm91cGAgZGlyZWN0bHkuXG4gICAqL1xuICBwdWJsaWNJbmdyZXNzPzogYm9vbGVhbjtcblxuICAvKiogTG9nIGdyb3VwIGZvciBSZXN0YXRlIHNlcnZpY2UgbG9ncy4gKi9cbiAgbG9nR3JvdXA/OiBsb2dzLkxvZ0dyb3VwO1xuXG4gIC8qKiBUcmFjaW5nIG1vZGUgZm9yIFJlc3RhdGUgc2VydmljZXMuIERlZmF1bHRzIHRvIHtAbGluayBUcmFjaW5nTW9kZS5ESVNBQkxFRH0uICovXG4gIHRyYWNpbmc/OiBUcmFjaW5nTW9kZTtcblxuICAvKiogUHJlZml4IGZvciByZXNvdXJjZXMgY3JlYXRlZCBieSB0aGlzIGNvbnN0cnVjdCB0aGF0IHJlcXVpcmUgdW5pcXVlIG5hbWVzLiAqL1xuICBwcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqIFJlc3RhdGUgRG9ja2VyIGltYWdlIG5hbWUuIERlZmF1bHRzIHRvIGBsYXRlc3RgLiAqL1xuICByZXN0YXRlSW1hZ2U/OiBzdHJpbmc7XG5cbiAgLyoqIFJlc3RhdGUgRG9ja2VyIGltYWdlIHRhZy4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIHJlc3RhdGVUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVCUyBkYXRhIHZvbHVtZSBzZXR0aW5ncyBmb3IgUmVzdGF0ZSBkYXRhIHN0b3JhZ2UuIElmIG5vdCBzcGVjaWZpZWQsIGEgZGVmYXVsdCA4R0Igdm9sdW1lIHdpbGwgYmUgY3JlYXRlZC5cbiAgICovXG4gIGRhdGFWb2x1bWVPcHRpb25zPzogZWMyLkVic0RldmljZVByb3BzIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBSZXN0YXRlIGhpZ2gtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNldCB7QGxpbmsgcmVzdGF0ZUNvbmZpZ092ZXJyaWRlfS4gKi9cbiAgcmVzdGF0ZUNvbmZpZz86IHtcbiAgICAvKiogRGVmYXVsdHMgdG8gdGhlIGNvbnN0cnVjdCBpZCBpZiBsZWZ0IHVuc3BlY2lmaWVkLiAqL1xuICAgIGNsdXN0ZXJOYW1lPzogc3RyaW5nO1xuICAgIC8qKiBEZWZhdWx0cyB0byA0LiBPbmx5IHRha2VzIGVmZmVjdCBvbiBpbml0aWFsIHByb3Zpc2lvbmluZy4gKi9cbiAgICBib290c3RyYXBOdW1QYXJ0aXRpb25zPzogbnVtYmVyO1xuICAgIC8qKiBSb2Nrc0RCIHNldHRpbmdzLiAqL1xuICAgIHJvY2tzZGI/OiB7XG4gICAgICAvKiogRGVmYXVsdHMgdG8gNTEyIE1CLiAqL1xuICAgICAgdG90YWxNZW1vcnlTaXplPzogY2RrLlNpemU7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogQ29tcGxldGVseSBvdmVycmlkZSB0aGUgUmVzdGF0ZSBzZXJ2ZXIgY29uZmlndXJhdGlvbi4gTm90ZSB0aGF0IG90aGVyIFJlc3RhdGUgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIHdpbGwgZWZmZWN0aXZlbHkgYmUgaWdub3JlZCBpZiB0aGlzIGlzIHNldC4gU2VlIGh0dHBzOi8vZG9jcy5yZXN0YXRlLmRldi9vcGVyYXRlL2NvbmZpZ3VyYXRpb24vc2VydmVyL1xuICAgKiBmb3IgZGV0YWlscy5cbiAgICovXG4gIHJlc3RhdGVDb25maWdPdmVycmlkZT86IHN0cmluZztcblxuICAvKiogQW1hem9uIERpc3RybyBmb3IgT3BlbiBUZWxlbWV0cnkgRG9ja2VyIGltYWdlIHRhZy4gRGVmYXVsdHMgdG8gYGxhdGVzdGAuICovXG4gIGFkb3RUYWc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlbW92YWwgcG9saWN5IGZvciBsb25nLWxpdmVkIHJlc291cmNlcyAoc3RvcmFnZSwgbG9ncykuIERlZmF1bHQ6IGBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZYC5cbiAgICovXG4gIHJlbW92YWxQb2xpY3k/OiBjZGsuUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogQ29udHJvbCBvbi1ob3N0IFRMUyB0ZXJtaW5hdGlvbiBmb3IgaW5ncmVzcyBhbmQgYWRtaW4gcG9ydHMuIERlZmF1bHRzIHRvIGBUbHNUZXJtaW5hdGlvbi5OT05FYC4gQ3VycmVudGx5LCBlbmFibGluZ1xuICAgKiBUTFMgaW1wbGljaXRseSBlbmFibGVzIGFuIGBuZ2lueGAgc2VydmljZSB0byBiZSBjb25maWd1cmVkIG9uIHRoZSBob3N0LiBEZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoaXMgb3B0aW9uLCB0aGVcbiAgICogaW5ncmVzcyBzZWN1cml0eSBncm91cCB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgaW5ib3VuZCB0cmFmZmljIHRvIHRoZSBhcHByb3ByaWF0ZSBwb3J0IC0gODA4MCBmb3Igbm8gVExTLCBvclxuICAgKiA0NDMgd2l0aCBUTFMgZW5hYmxlZC5cbiAgICovXG4gIHRsc1Rlcm1pbmF0aW9uPzogVGxzVGVybWluYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSByZWFkIHRpbWVvdXQgZm9yIHByb3hpZWQgaW5ncmVzcyByZXF1ZXN0cy4gRGVmYXVsdDogMzYwMCBzZWNvbmRzLlxuICAgKi9cbiAgaW5ncmVzc1Byb3h5UmVhZFRpbWVvdXQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlbHkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYG5naW54YCBjb25maWd1cmF0aW9uIGZvciB0aGUgaW5ncmVzcyBwcm94eS4gTm90ZSB0aGF0IG90aGVyXG4gICAqIGluZ3Jlc3MgcHJveHkgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpbGwgZWZmZWN0aXZlbHkgYmUgaWdub3JlZCBpZiB0aGlzIGlzIHNldC5cbiAgICovXG4gIGluZ3Jlc3NOZ2lueENvbmZpZ092ZXJyaWRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZW51bSBUbHNUZXJtaW5hdGlvbiB7XG4gIC8qKlxuICAgKiBEaXNhYmxlZCAoZGVmYXVsdCk7IGV4cG9zZSB0aGUgYHJlc3RhdGUtc2VydmVyYCBIVFRQIHBvcnRzIGRpcmVjdGx5LlxuICAgKi9cbiAgRElTQUJMRUQsXG5cbiAgLyoqXG4gICAqIFVzZSBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZXMgZm9yIFRMUyB0ZXJtaW5hdGlvbiBvbiB0aGUgaW5ncmVzcyBhbmQgYWRtaW4gcG9ydHMuIENvbnZlbmllbnQgZm9yIHF1aWNrIHRlc3RpbmcsXG4gICAqIG1ha2Ugc3VyZSB5b3Ugc2V0IGBpbnNlY3VyZWAgPSBgdHJ1ZWAgd2hlbiB1c2luZyBgU2VydmljZURlcGxveWVyYCB0byBhY2NlcHQgdGhpcyBjZXJ0aWZpY2F0ZS5cbiAgICovXG4gIE9OX0hPU1RfU0VMRl9TSUdORURfQ0VSVElGSUNBVEUsXG59XG5cbmNvbnN0IFJFU1RBVEVfSU5HUkVTU19QT1JUID0gODA4MDtcbmNvbnN0IFJFU1RBVEVfVExTX0lOR1JFU1NfUE9SVCA9IDQ0MztcbmNvbnN0IFJFU1RBVEVfQURNSU5fUE9SVCA9IDkwNzA7XG5jb25zdCBSRVNUQVRFX1RMU19BRE1JTl9QT1JUID0gOTA3MztcbmNvbnN0IFJFU1RBVEVfSU1BR0VfREVGQVVMVCA9IFwiZG9ja2VyLmlvL3Jlc3RhdGVkZXYvcmVzdGF0ZVwiO1xuY29uc3QgUkVTVEFURV9ET0NLRVJfREVGQVVMVF9UQUcgPSBcImxhdGVzdFwiO1xuY29uc3QgQURPVF9ET0NLRVJfREVGQVVMVF9UQUcgPSBcImxhdGVzdFwiO1xuY29uc3QgREFUQV9ERVZJQ0VfTkFNRSA9IFwiL2Rldi9zZGRcIjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgUmVzdGF0ZSBzZXJ2aWNlIGRlcGxveW1lbnQgYmFja2VkIGJ5IGEgc2luZ2xlIEVDMiBpbnN0YW5jZSwgc3VpdGFibGUgZm9yIGRldmVsb3BtZW50IGFuZCB0ZXN0aW5nIHB1cnBvc2VzLlxuICpcbiAqICoqRHVyYWJpbGl0eSoqXG4gKlxuICogUmVzdGF0ZSBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIGEgc2VwYXJhdGUgRUJTIHZvbHVtZSB3aGljaCB5b3UgY2FuIGNvbmZpZ3VyZSBleHBsaWNpdGx5IHZpYSB0aGUgYGRhdGFWb2x1bWVPcHRpb25zYFxuICogcHJvcGVydHkuIFVwZGF0aW5nIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgbWF5IHRyaWdnZXIgaW5zdGFuY2UgcmVib290IG9yIHJlcGxhY2VtZW50IC0gY29uc2lkZXIgc25hcHNob3R0aW5nIHRoZSBkYXRhXG4gKiB2b2x1bWUgcHJpb3IgdG8gZGVwbG95bWVudHMsIGFuZCBlbmFibGluZyBpbnN0YW5jZSB0ZXJtaW5hdGlvbiBwcm90ZWN0aW9uLlxuICpcbiAqICoqU2VjdXJpdHkqKlxuICpcbiAqIFRoZSBFQzIgaW5zdGFuY2Ugd2lsbCBiZSBjcmVhdGVkIGluIHRoZSBkZWZhdWx0IFZQQyB1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZC4gVHdvIHNlY3VyaXR5IGdyb3VwcyBhcmUgY3JlYXRlZCxcbiAqIGBpbmdyZXNzU2VjdXJpdHlHcm91cGAgYW5kIGBhZG1pblNlY3VyaXR5R3JvdXBgLCB3aGljaCBjb250cm9sIGFjY2VzcyB0byB0aGUgUmVzdGF0ZSBzZXJ2aWNlIGluZ3Jlc3MgYW5kIGFkbWluIHBvcnRzXG4gKiByZXNwZWN0aXZlbHkuIFlvdSBtdXN0IGFkZCBhcHByb3ByaWF0ZSBydWxlcyBvciBhZGQgb3RoZXIgcmVzb3VyY2VzIHRvIHRoZXNlIHNlY3VyaXR5IGdyb3VwcyB0byBhbGxvdyBhY2Nlc3MuXG4gKlxuICogU2VlIHtAbGluayBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzfSBmb3IgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgYW5kIHtAbGluayBTZXJ2aWNlRGVwbG95ZXJ9IGZvciBkZXBsb3lpbmdcbiAqIExhbWJkYSBoYW5kbGVycyB0byBlbnZpcm9ubWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaW5nbGVOb2RlUmVzdGF0ZURlcGxveW1lbnQgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUmVzdGF0ZUVudmlyb25tZW50IHtcbiAgcmVhZG9ubHkgaW5zdGFuY2U6IGVjMi5JbnN0YW5jZTtcbiAgcmVhZG9ubHkgaW5zdGFuY2VSb2xlOiBpYW0uSVJvbGU7XG4gIHJlYWRvbmx5IGludm9rZXJSb2xlOiBpYW0uSVJvbGU7XG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG4gIHJlYWRvbmx5IGluZ3Jlc3NTZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gIHJlYWRvbmx5IGluZ3Jlc3NQb3J0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGluZ3Jlc3NVcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgYWRtaW5TZWN1cml0eUdyb3VwOiBlYzIuSVNlY3VyaXR5R3JvdXA7XG4gIHJlYWRvbmx5IGFkbWluUG9ydDogbnVtYmVyO1xuICByZWFkb25seSBhZG1pblVybDogc3RyaW5nO1xuICByZWFkb25seSB0bHNFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMudnBjID0gcHJvcHMudnBjID8/IGVjMi5WcGMuZnJvbUxvb2t1cCh0aGlzLCBcIlZwY1wiLCB7IGlzRGVmYXVsdDogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IHN1Ym5ldFR5cGUgPSBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbj8uc3VibmV0VHlwZSA/PyBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTO1xuXG4gICAgdGhpcy5pbnN0YW5jZVJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnN0YW5jZVJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJlYzIuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2lhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcIkFtYXpvblNTTU1hbmFnZWRJbnN0YW5jZUNvcmVcIildLFxuICAgIH0pO1xuXG4gICAgdGhpcy5pbnZva2VyUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCBcIkludm9rZXJSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5pbnN0YW5jZVJvbGUsXG4gICAgfSk7XG5cbiAgICBuZXcgaWFtLlBvbGljeSh0aGlzLCBcIkFzc3VtZUludm9rZXJSb2xlUG9saWN5XCIsIHtcbiAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIHNpZDogXCJBbGxvd0Fzc3VtZUludm9rZXJSb2xlXCIsXG4gICAgICAgICAgYWN0aW9uczogW1wic3RzOkFzc3VtZVJvbGVcIl0sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbdGhpcy5pbnZva2VyUm9sZS5yb2xlQXJuXSxcbiAgICAgICAgfSksXG4gICAgICBdLFxuICAgIH0pLmF0dGFjaFRvUm9sZSh0aGlzLmluc3RhbmNlUm9sZSk7XG5cbiAgICBjb25zdCBsb2dHcm91cCA9XG4gICAgICBwcm9wcy5sb2dHcm91cCA/P1xuICAgICAgbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgXCJMb2dzXCIsIHtcbiAgICAgICAgbG9nR3JvdXBOYW1lOiBgL3Jlc3RhdGUvJHtpZH1gLFxuICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfTU9OVEgsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgPz8gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgfSk7XG4gICAgbG9nR3JvdXAuZ3JhbnRXcml0ZSh0aGlzLmluc3RhbmNlUm9sZSk7XG5cbiAgICBjb25zdCByZXN0YXRlSW1hZ2UgPSBwcm9wcy5yZXN0YXRlSW1hZ2UgPz8gUkVTVEFURV9JTUFHRV9ERUZBVUxUO1xuICAgIGNvbnN0IHJlc3RhdGVUYWcgPSBwcm9wcy5yZXN0YXRlVGFnID8/IFJFU1RBVEVfRE9DS0VSX0RFRkFVTFRfVEFHO1xuICAgIGNvbnN0IGFkb3RUYWcgPSBwcm9wcy5hZG90VGFnID8/IEFET1RfRE9DS0VSX0RFRkFVTFRfVEFHO1xuXG4gICAgdGhpcy50bHNFbmFibGVkID0gcHJvcHMudGxzVGVybWluYXRpb24gPT09IFRsc1Rlcm1pbmF0aW9uLk9OX0hPU1RfU0VMRl9TSUdORURfQ0VSVElGSUNBVEU7XG5cbiAgICBjb25zdCBpbml0U2NyaXB0ID0gZWMyLlVzZXJEYXRhLmZvckxpbnV4KCk7XG4gICAgaW5pdFNjcmlwdC5hZGRDb21tYW5kcyhcbiAgICAgIFwic2V0IC1ldWYgLW8gcGlwZWZhaWxcIixcbiAgICAgIGB5dW0gaW5zdGFsbCAteSBucG0gJiYgbnBtIGluc3RhbGwgLWdxIEByZXN0YXRlZGV2L3Jlc3RhdGVAJHtyZXN0YXRlVGFnfWAsXG4gICAgICBcInl1bSBpbnN0YWxsIC15IGRvY2tlclwiLFxuICAgICAgdGhpcy5tb3VudERhdGFWb2x1bWVTY3JpcHQoKSxcblxuICAgICAgXCJta2RpciAtcCAvZXRjL3Jlc3RhdGVcIixcbiAgICAgIFtcImNhdCA8PCBFT0YgPiAvZXRjL3Jlc3RhdGUvY29uZmlnLnRvbWxcIiwgdGhpcy5yZXN0YXRlQ29uZmlnKGlkLCBwcm9wcyksIFwiRU9GXCJdLmpvaW4oXCJcXG5cIiksXG5cbiAgICAgIFwic3lzdGVtY3RsIHN0YXJ0IGRvY2tlci5zZXJ2aWNlXCIsXG5cbiAgICAgIC8vIFN0YXJ0IHRoZSBBRE9UIGNvbGxlY3RvciAtIG5lZWRlZCBmb3IgWC1yYXkgdHJhY2UgZm9yd2FyZGluZ1xuICAgICAgYGlmIFsgXCIkKGRvY2tlciBwcyAtcWEgLWYgbmFtZT1hZG90KVwiIF07IHRoZW4gZG9ja2VyIHN0b3AgYWRvdCB8fCB0cnVlOyBkb2NrZXIgcm0gYWRvdDsgZmlgLFxuICAgICAgXCJkb2NrZXIgcnVuIC0tbmFtZSBhZG90IC0tcmVzdGFydCBvbi1mYWlsdXJlIC0tZGV0YWNoXCIgK1xuICAgICAgICBcIiAtcCA0MzE3OjQzMTcgLXAgNTU2ODA6NTU2ODAgLXAgODg4OTo4ODg4XCIgK1xuICAgICAgICBgIHB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1vdGVsLWNvbGxlY3Rvcjoke2Fkb3RUYWd9YCxcblxuICAgICAgLy8gU3RhcnQgdGhlIFJlc3RhdGUgc2VydmVyIGNvbnRhaW5lclxuICAgICAgYGlmIFsgXCIkKGRvY2tlciBwcyAtcWEgLWYgbmFtZT1yZXN0YXRlKVwiIF07IHRoZW4gZG9ja2VyIHN0b3AgcmVzdGF0ZSB8fCB0cnVlOyBkb2NrZXIgcm0gcmVzdGF0ZTsgZmlgLFxuICAgICAgXCJkb2NrZXIgcnVuIC0tbmFtZSByZXN0YXRlIC0tcmVzdGFydCBvbi1mYWlsdXJlIC0tZGV0YWNoXCIgK1xuICAgICAgICBcIiAtLXZvbHVtZSAvZXRjL3Jlc3RhdGU6L2V0Yy9yZXN0YXRlXCIgK1xuICAgICAgICBcIiAtLXZvbHVtZSAvdmFyL3Jlc3RhdGU6L3Jlc3RhdGUtZGF0YVwiICtcbiAgICAgICAgXCIgLS1uZXR3b3JrPWhvc3RcIiArXG4gICAgICAgIFwiIC1lIFJFU1RBVEVfT0JTRVJWQUJJTElUWV9fTE9HX19GT1JNQVQ9SnNvbiAtZSBSVVNUX0xPRz1pbmZvLHJlc3RhdGVfd29ya2VyOjpwYXJ0aXRpb249d2FyblwiICtcbiAgICAgICAgXCIgLWUgUkVTVEFURV9PQlNFUlZBQklMSVRZX19UUkFDSU5HX19FTkRQT0lOVD1odHRwOi8vbG9jYWxob3N0OjQzMTdcIiArXG4gICAgICAgIGAgLS1sb2ctZHJpdmVyPWF3c2xvZ3MgLS1sb2ctb3B0IGF3c2xvZ3MtZ3JvdXA9JHtsb2dHcm91cC5sb2dHcm91cE5hbWV9YCArXG4gICAgICAgIGAgJHtyZXN0YXRlSW1hZ2V9OiR7cmVzdGF0ZVRhZ31gICtcbiAgICAgICAgXCIgLS1jb25maWctZmlsZSAvZXRjL3Jlc3RhdGUvY29uZmlnLnRvbWxcIixcbiAgICApO1xuXG4gICAgLy8gT3B0aW9uYWxseSwgY29uZmlndXJlIGFuZCBzdGFydCB0aGUgbmdpbnggc2VydmljZVxuICAgIGlmICh0aGlzLnRsc0VuYWJsZWQpIHtcbiAgICAgIGlmIChzdWJuZXRUeXBlID09IGVjMi5TdWJuZXRUeXBlLlBVQkxJQykge1xuICAgICAgICBpbml0U2NyaXB0LmFkZENvbW1hbmRzKFxuICAgICAgICAgIFwieXVtIGluc3RhbGwgLXkgbmdpbnhcIixcbiAgICAgICAgICBcIm1rZGlyIC1wIC9ldGMvcGtpL3ByaXZhdGVcIixcbiAgICAgICAgICBbXG4gICAgICAgICAgICBcIm9wZW5zc2wgcmVxIC1uZXcgLXg1MDkgLW5vZGVzIC1zaGEyNTYgLWRheXMgMzY1IC1leHRlbnNpb25zIHYzX2NhXCIsXG4gICAgICAgICAgICBcIiAtc3ViaiAnL0M9REUvU1Q9QmVybGluL0w9QmVybGluL089cmVzdGF0ZS5kZXYvT1U9ZGVtby9DTj1yZXN0YXRlLmV4YW1wbGUuY29tJ1wiLFxuICAgICAgICAgICAgXCIgLW5ld2tleSByc2E6MjA0OCAta2V5b3V0IC9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmtleSAtb3V0IC9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmNydFwiLFxuICAgICAgICAgIF0uam9pbihcIlwiKSxcblxuICAgICAgICAgIFtcImNhdCA8PCBFT0YgPiAvZXRjL25naW54L2NvbmYuZC9yZXN0YXRlLWluZ3Jlc3MuY29uZlwiLCB0aGlzLmluZ3Jlc3NOZ2lueENvbmZpZyhwcm9wcyksIFwiRU9GXCJdLmpvaW4oXCJcXG5cIiksXG4gICAgICAgICAgXCJzeXN0ZW1jdGwgc3RhcnQgbmdpbnhcIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbG91ZENvbmZpZyA9IGVjMi5Vc2VyRGF0YS5jdXN0b20oW2BjbG91ZF9maW5hbF9tb2R1bGVzOmAsIGAtIFtzY3JpcHRzLXVzZXIsIGFsd2F5c11gXS5qb2luKFwiXFxuXCIpKTtcblxuICAgIGNvbnN0IHVzZXJEYXRhID0gbmV3IGVjMi5NdWx0aXBhcnRVc2VyRGF0YSgpO1xuICAgIHVzZXJEYXRhLmFkZFVzZXJEYXRhUGFydChjbG91ZENvbmZpZywgXCJ0ZXh0L2Nsb3VkLWNvbmZpZ1wiKTtcbiAgICB1c2VyRGF0YS5hZGRVc2VyRGF0YVBhcnQoaW5pdFNjcmlwdCwgXCJ0ZXh0L3gtc2hlbGxzY3JpcHRcIik7XG5cbiAgICBjb25zdCByZXN0YXRlSW5zdGFuY2UgPSBuZXcgZWMyLkluc3RhbmNlKHRoaXMsIFwiSG9zdFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgdnBjU3VibmV0czogeyBzdWJuZXRUeXBlIH0sXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZSA/PyBuZXcgZWMyLkluc3RhbmNlVHlwZShcInQ0Zy5taWNyb1wiKSxcbiAgICAgIG1hY2hpbmVJbWFnZTpcbiAgICAgICAgcHJvcHMubWFjaGluZUltYWdlID8/XG4gICAgICAgIGVjMi5NYWNoaW5lSW1hZ2UubGF0ZXN0QW1hem9uTGludXgyMDIzKHtcbiAgICAgICAgICBjcHVUeXBlOiBlYzIuQW1hem9uTGludXhDcHVUeXBlLkFSTV82NCxcbiAgICAgICAgfSksXG4gICAgICByb2xlOiB0aGlzLmluc3RhbmNlUm9sZSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogREFUQV9ERVZJQ0VfTkFNRSxcbiAgICAgICAgICB2b2x1bWU6IHtcbiAgICAgICAgICAgIGVic0RldmljZToge1xuICAgICAgICAgICAgICB2b2x1bWVTaXplOiA4LFxuICAgICAgICAgICAgICBkZWxldGVPblRlcm1pbmF0aW9uOiBwcm9wcy5yZW1vdmFsUG9saWN5ID09PSBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgICAgICAgIC4uLihwcm9wcy5kYXRhVm9sdW1lT3B0aW9ucyA/PyB7fSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdmlydHVhbE5hbWU6IFwicmVzdGF0ZS1kYXRhXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB1c2VyRGF0YSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5zdGFuY2UgPSByZXN0YXRlSW5zdGFuY2U7XG5cbiAgICAvLyBXZSBzdGFydCB0aGUgQURPVCBjb2xsZWN0b3IgcmVnYXJkbGVzcywgYW5kIGNvbnRyb2wgd2hldGhlciB0cmFjZXMgd2lsbCBiZSBleHBvcnRlZCB0byBYLVJheSB1c2luZyBpbnN0YW5jZSByb2xlXG4gICAgLy8gcGVybWlzc2lvbnMuIFRoaXMgd2F5IGhpc3RvcmljIHRyYWNlcyB3aWxsIGJlIGJ1ZmZlcmVkIG9uIHRoZSBob3N0LCBldmVuIGlmIHRyYWNpbmcgaXMgZGlzYWJsZWQgaW5pdGlhbGx5LlxuICAgIGlmIChwcm9wcy50cmFjaW5nID09PSBUcmFjaW5nTW9kZS5BV1NfWFJBWSkge1xuICAgICAgcmVzdGF0ZUluc3RhbmNlLnJvbGUuYWRkTWFuYWdlZFBvbGljeShpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXCJBV1NYcmF5V3JpdGVPbmx5QWNjZXNzXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmdyZXNzU2VjdXJpdHlHcm91cCA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cCh0aGlzLCBcIkluZ3Jlc3NTZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJSZXN0YXRlIEluZ3Jlc3MgQUNMc1wiLFxuICAgIH0pO1xuICAgIHJlc3RhdGVJbnN0YW5jZS5hZGRTZWN1cml0eUdyb3VwKGluZ3Jlc3NTZWN1cml0eUdyb3VwKTtcbiAgICBjb25zdCBhZG1pblNlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJBZG1pblNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlJlc3RhdGUgQWRtaW4gQUNMc1wiLFxuICAgIH0pO1xuICAgIHJlc3RhdGVJbnN0YW5jZS5hZGRTZWN1cml0eUdyb3VwKGFkbWluU2VjdXJpdHlHcm91cCk7XG5cbiAgICB0aGlzLmluZ3Jlc3NQb3J0ID0gdGhpcy50bHNFbmFibGVkID8gUkVTVEFURV9UTFNfSU5HUkVTU19QT1JUIDogUkVTVEFURV9JTkdSRVNTX1BPUlQ7XG4gICAgdGhpcy5hZG1pblBvcnQgPSB0aGlzLnRsc0VuYWJsZWQgPyBSRVNUQVRFX1RMU19BRE1JTl9QT1JUIDogUkVTVEFURV9BRE1JTl9QT1JUO1xuXG4gICAgaW5ncmVzc1NlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICAocHJvcHMucHVibGljSW5ncmVzcyA/PyBmYWxzZSkgPyBlYzIuUGVlci5hbnlJcHY0KCkgOiBpbmdyZXNzU2VjdXJpdHlHcm91cCxcbiAgICAgIGVjMi5Qb3J0LnRjcCh0aGlzLmluZ3Jlc3NQb3J0KSxcbiAgICAgIFwiUmVzdGF0ZSBpbmdyZXNzXCIsXG4gICAgKTtcbiAgICBhZG1pblNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoYWRtaW5TZWN1cml0eUdyb3VwLCBlYzIuUG9ydC50Y3AodGhpcy5hZG1pblBvcnQpLCBcIlJlc3RhdGUgYWRtaW5cIik7XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHRoaXMudGxzRW5hYmxlZCA/IFwiaHR0cHNcIiA6IFwiaHR0cFwiO1xuICAgIGNvbnN0IGhvc3RuYW1lID1cbiAgICAgIHByb3BzLm5ldHdvcmtDb25maWd1cmF0aW9uPy5zdWJuZXRUeXBlICE9PSBlYzIuU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgPyBgJHtyZXN0YXRlSW5zdGFuY2UuaW5zdGFuY2VQcml2YXRlRG5zTmFtZX1gXG4gICAgICAgIDogYCR7cmVzdGF0ZUluc3RhbmNlLmluc3RhbmNlUHVibGljRG5zTmFtZX1gO1xuICAgIHRoaXMuaW5ncmVzc1VybCA9IGAke3Byb3RvY29sfTovLyR7aG9zdG5hbWV9YCArICh0aGlzLmluZ3Jlc3NQb3J0ID09PSA0NDMgPyBcIlwiIDogYDoke3RoaXMuaW5ncmVzc1BvcnR9YCk7XG4gICAgdGhpcy5hZG1pblVybCA9IGAke3Byb3RvY29sfTovLyR7aG9zdG5hbWV9OiR7dGhpcy5hZG1pblBvcnR9YDtcblxuICAgIHRoaXMuaW5ncmVzc1NlY3VyaXR5R3JvdXAgPSBpbmdyZXNzU2VjdXJpdHlHcm91cDtcbiAgICB0aGlzLmFkbWluU2VjdXJpdHlHcm91cCA9IGFkbWluU2VjdXJpdHlHcm91cDtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXN0YXRlQ29uZmlnKGlkOiBzdHJpbmcsIHByb3BzOiBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb3BzLnJlc3RhdGVDb25maWdPdmVycmlkZSA/P1xuICAgICAgW1xuICAgICAgICBgcm9sZXMgPSBbYCxcbiAgICAgICAgYCAgICBcIndvcmtlclwiLGAsXG4gICAgICAgIGAgICAgXCJhZG1pblwiLGAsXG4gICAgICAgIGAgICAgXCJtZXRhZGF0YS1zdG9yZVwiLGAsXG4gICAgICAgIGBdYCxcbiAgICAgICAgYG5vZGUtbmFtZSA9IFwicmVzdGF0ZS0wXCJgLFxuICAgICAgICBgY2x1c3Rlci1uYW1lID0gXCIke3Byb3BzLnJlc3RhdGVDb25maWc/LmNsdXN0ZXJOYW1lID8/IGlkfVwiYCxcbiAgICAgICAgYGFsbG93LWJvb3RzdHJhcCA9IHRydWVgLFxuICAgICAgICBgYm9vdHN0cmFwLW51bS1wYXJ0aXRpb25zID0gJHtwcm9wcy5yZXN0YXRlQ29uZmlnPy5ib290c3RyYXBOdW1QYXJ0aXRpb25zID8/IDR9YCxcbiAgICAgICAgYGRlZmF1bHQtdGhyZWFkLXBvb2wtc2l6ZSA9IDNgLFxuICAgICAgICBgc3RvcmFnZS1oaWdoLXByaW9yaXR5LWJnLXRocmVhZHMgPSAzYCxcbiAgICAgICAgYHN0b3JhZ2UtbG93LXByaW9yaXR5LWJnLXRocmVhZHMgPSAzYCxcbiAgICAgICAgYHJvY2tzZGItdG90YWwtbWVtb3J5LXNpemUgPSBcIiR7cHJvcHMucmVzdGF0ZUNvbmZpZz8ucm9ja3NkYj8udG90YWxNZW1vcnlTaXplPy50b01lYmlieXRlcygpID8/IDUxMi4wICsgXCIgTUJcIn1cImAsXG4gICAgICAgIGByb2Nrc2RiLXRvdGFsLW1lbXRhYmxlcy1yYXRpbyA9IDAuNjBgLFxuICAgICAgICBgcm9ja3NkYi1iZy10aHJlYWRzID0gM2AsXG4gICAgICAgIGByb2Nrc2RiLWhpZ2gtcHJpb3JpdHktYmctdGhyZWFkcyA9IDNgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFt3b3JrZXJdYCxcbiAgICAgICAgYGludGVybmFsLXF1ZXVlLWxlbmd0aCA9IDEwMDBgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFt3b3JrZXIuc3RvcmFnZV1gLFxuICAgICAgICBgcm9ja3NkYi1tYXgtYmFja2dyb3VuZC1qb2JzID0gM2AsXG4gICAgICAgIGByb2Nrc2RiLXN0YXRpc3RpY3MtbGV2ZWwgPSBcImV4Y2VwdC1kZXRhaWxlZC10aW1lcnNcImAsXG4gICAgICAgIGBudW0tcGFydGl0aW9ucy10by1zaGFyZS1tZW1vcnktYnVkZ2V0ID0gNGAsXG4gICAgICAgIGBgLFxuICAgICAgICBgW2FkbWluXWAsXG4gICAgICAgIGBiaW5kLWFkZHJlc3MgPSBcIiR7dGhpcy50bHNFbmFibGVkID8gXCIxMjcuMC4wLjFcIiA6IFwiMC4wLjAuMFwifToke1JFU1RBVEVfQURNSU5fUE9SVH1cImAsXG4gICAgICAgIGBgLFxuICAgICAgICBgW2FkbWluLnF1ZXJ5LWVuZ2luZV1gLFxuICAgICAgICBgbWVtb3J5LXNpemUgPSBcIjUwLjAgTUJcImAsXG4gICAgICAgIGBxdWVyeS1wYXJhbGxlbGlzbSA9IDRgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFtpbmdyZXNzXWAsXG4gICAgICAgIGBiaW5kLWFkZHJlc3MgPSBcIiR7dGhpcy50bHNFbmFibGVkID8gXCIxMjcuMC4wLjFcIiA6IFwiMC4wLjAuMFwifToke1JFU1RBVEVfSU5HUkVTU19QT1JUfVwiYCxcbiAgICAgICAgYHJvY2tzZGItbWF4LWJhY2tncm91bmQtam9icyA9IDNgLFxuICAgICAgICBgcm9ja3NkYi1zdGF0aXN0aWNzLWxldmVsID0gXCJleGNlcHQtZGV0YWlsZWQtdGltZXJzXCJgLFxuICAgICAgICBgd3JpdGVyLWJhdGNoLWNvbW1pdC1jb3VudCA9IDEwMDBgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFttZXRhZGF0YS1zdG9yZS5yb2Nrc2RiXWAsXG4gICAgICAgIGByb2Nrc2RiLW1heC1iYWNrZ3JvdW5kLWpvYnMgPSAxYCxcbiAgICAgICAgYHJvY2tzZGItc3RhdGlzdGljcy1sZXZlbCA9IFwiZXhjZXB0LWRldGFpbGVkLXRpbWVyc1wiYCxcbiAgICAgIF0uam9pbihcIlxcblwiKVxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbW91bnREYXRhVm9sdW1lU2NyaXB0KCkge1xuICAgIHJldHVybiBgXG5pZiBtb3VudCB8IGdyZXAgLXFzICcvdmFyL3Jlc3RhdGUnOyB0aGVuXG4gIGVjaG8gXCIvdmFyL3Jlc3RhdGUgaXMgbW91bnRlZFwiXG5lbHNlXG4gIGlmIFsgLWQgL3Zhci9yZXN0YXRlIF07IHRoZW5cbiAgICBpZiBbIFwiJChscyAtQSAvdmFyL3Jlc3RhdGUpXCIgXTsgdGhlblxuICAgICAgZWNobyBcIkRhdGEgZXhpc3RzIGluIC92YXIvcmVzdGF0ZSB0aGF0IGlzIG5vdCBvbiBkYXRhIHZvbHVtZTsgcmVmdXNpbmcgdG8gb3ZlcndyaXRlIVwiXG4gICAgICBleGl0IDFcbiAgICBmaVxuICBlbHNlXG4gICAgbWtkaXIgL3Zhci9yZXN0YXRlXG4gIGZpXG4gIGlmIGZpbGUgLXNMICR7REFUQV9ERVZJQ0VfTkFNRX0gfCBncmVwIC1xICc6IGRhdGEkJzsgdGhlblxuICAgIG1rZnMgLXQgeGZzICR7REFUQV9ERVZJQ0VfTkFNRX1cbiAgZmlcbiAgbW91bnQgJHtEQVRBX0RFVklDRV9OQU1FfSAvdmFyL3Jlc3RhdGVcbiAgaWYgISBncmVwIC1xcyAnL3Zhci9yZXN0YXRlJyAvZXRjL2ZzdGFiOyB0aGVuXG4gICAgZWNobyBcIiR7REFUQV9ERVZJQ0VfTkFNRX0gL3Zhci9yZXN0YXRlIHhmcyBkZWZhdWx0cyAwIDBcIiA+PiAvZXRjL2ZzdGFiXG4gICAgZWNobyBcIkFkZGVkIGVudHJ5IGZvciAke0RBVEFfREVWSUNFX05BTUV9IHRvIC9ldGMvZnN0YWJcIlxuICBlbHNlXG4gICAgZWNobyBcIkVudHJ5IGZvciAke0RBVEFfREVWSUNFX05BTUV9IGFscmVhZHkgZXhpc3RzIGluIC9ldGMvZnN0YWJcIlxuICBmaVxuZmlcbmA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHByb3BzIGNvbnN0cnVjdCBwcm9wZXJ0aWVzXG4gICAqIEByZXR1cm5zIG5naW54IGNvbmZpZ3VyYXRpb24gdG8gdXNlIGZvciBpbmdyZXNzIHJldmVyc2UgcHJveHksIGZvcm1hdHRlZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5ncmVzc05naW54Q29uZmlnKHByb3BzOiBTaW5nbGVOb2RlUmVzdGF0ZVByb3BzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHByb3BzLmluZ3Jlc3NOZ2lueENvbmZpZ092ZXJyaWRlID8/XG4gICAgICBbXG4gICAgICAgIFwic2VydmVyIHtcIixcbiAgICAgICAgYCAgbGlzdGVuICR7UkVTVEFURV9UTFNfSU5HUkVTU19QT1JUfSBzc2wgaHR0cDI7YCxcbiAgICAgICAgYCAgbGlzdGVuIFs6Ol06JHtSRVNUQVRFX1RMU19JTkdSRVNTX1BPUlR9IHNzbCBodHRwMjtgLFxuICAgICAgICBcIiAgc2VydmVyX25hbWUgXztcIixcbiAgICAgICAgXCIgIHJvb3QgL3Vzci9zaGFyZS9uZ2lueC9odG1sO1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICAnICBzc2xfY2VydGlmaWNhdGUgXCIvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5jcnRcIjsnLFxuICAgICAgICAnICBzc2xfY2VydGlmaWNhdGVfa2V5IFwiL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQua2V5XCI7JyxcbiAgICAgICAgXCIgIHNzbF9zZXNzaW9uX2NhY2hlIHNoYXJlZDpTU0w6MW07XCIsXG4gICAgICAgIFwiICBzc2xfc2Vzc2lvbl90aW1lb3V0IDEwbTtcIixcbiAgICAgICAgXCIgIHNzbF9jaXBoZXJzIFBST0ZJTEU9U1lTVEVNO1wiLFxuICAgICAgICBcIiAgc3NsX3ByZWZlcl9zZXJ2ZXJfY2lwaGVycyBvbjtcIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCIgIGxvY2F0aW9uIC8ge1wiLFxuICAgICAgICBgICAgIHByb3h5X3Bhc3MgaHR0cDovL2xvY2FsaG9zdDoke1JFU1RBVEVfSU5HUkVTU19QT1JUfTtgLFxuICAgICAgICBgICAgIHByb3h5X3JlYWRfdGltZW91dCAke3Byb3BzLmluZ3Jlc3NQcm94eVJlYWRUaW1lb3V0Py50b1NlY29uZHMoKSA/PyAzNjAwfTtgLFxuICAgICAgICBcIiAgfVwiLFxuICAgICAgICBcIn1cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCJzZXJ2ZXIge1wiLFxuICAgICAgICBgICBsaXN0ZW4gJHtSRVNUQVRFX1RMU19BRE1JTl9QT1JUfSBzc2wgaHR0cDI7YCxcbiAgICAgICAgYCAgbGlzdGVuIFs6Ol06JHtSRVNUQVRFX1RMU19BRE1JTl9QT1JUfSBzc2wgaHR0cDI7YCxcbiAgICAgICAgXCIgIHNlcnZlcl9uYW1lIF87XCIsXG4gICAgICAgIFwiICByb290IC91c3Ivc2hhcmUvbmdpbngvaHRtbDtcIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgJyAgc3NsX2NlcnRpZmljYXRlIFwiL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQuY3J0XCI7JyxcbiAgICAgICAgJyAgc3NsX2NlcnRpZmljYXRlX2tleSBcIi9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmtleVwiOycsXG4gICAgICAgIFwiICBzc2xfc2Vzc2lvbl9jYWNoZSBzaGFyZWQ6U1NMOjFtO1wiLFxuICAgICAgICBcIiAgc3NsX3Nlc3Npb25fdGltZW91dCAxMG07XCIsXG4gICAgICAgIFwiICBzc2xfY2lwaGVycyBQUk9GSUxFPVNZU1RFTTtcIixcbiAgICAgICAgXCIgIHNzbF9wcmVmZXJfc2VydmVyX2NpcGhlcnMgb247XCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiICBsb2NhdGlvbiAvIHtcIixcbiAgICAgICAgYCAgICBwcm94eV9wYXNzIGh0dHA6Ly9sb2NhbGhvc3Q6JHtSRVNUQVRFX0FETUlOX1BPUlR9O2AsXG4gICAgICAgIFwiICB9XCIsXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpXG4gICAgKTtcbiAgfVxufVxuIl19
332
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLW5vZGUtcmVzdGF0ZS1kZXBsb3ltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL3Jlc3RhdGUtY29uc3RydWN0cy9zaW5nbGUtbm9kZS1yZXN0YXRlLWRlcGxveW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsMkNBQXVDO0FBQ3ZDLDJEQUE2QztBQUM3Qyx5REFBMkM7QUFDM0MseURBQTJDO0FBRTNDLDZEQUFtRDtBQUVuRCw2Q0FBNEM7QUE2RzVDLElBQVksY0FXWDtBQVhELFdBQVksY0FBYztJQUN4Qjs7T0FFRztJQUNILDJEQUFRLENBQUE7SUFFUjs7O09BR0c7SUFDSCx5R0FBK0IsQ0FBQTtBQUNqQyxDQUFDLEVBWFcsY0FBYyw4QkFBZCxjQUFjLFFBV3pCO0FBRUQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDbEMsTUFBTSx3QkFBd0IsR0FBRyxHQUFHLENBQUM7QUFDckMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDaEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUM7QUFDcEMsTUFBTSxxQkFBcUIsR0FBRyw4QkFBOEIsQ0FBQztBQUM3RCxNQUFNLDBCQUEwQixHQUFHLFFBQVEsQ0FBQztBQUM1QyxNQUFNLHVCQUF1QixHQUFHLFFBQVEsQ0FBQztBQUN6QyxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztBQUVwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFhLDJCQUE0QixTQUFRLHNCQUFTO0lBYXhELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNkI7UUFDckUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTdFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztRQUVoRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFO1lBQ3JELFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQztZQUN4RCxlQUFlLEVBQUUsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFDLDhCQUE4QixDQUFDLENBQUM7U0FDOUYsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUNuRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUM5QyxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO29CQUN0QixHQUFHLEVBQUUsd0JBQXdCO29CQUM3QixPQUFPLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDM0IsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUM7aUJBQ3RDLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRW5DLE1BQU0sUUFBUSxHQUNaLEtBQUssQ0FBQyxRQUFRO1lBQ2QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQzlCLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRTtnQkFDOUIsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUztnQkFDdkMsYUFBYSxFQUFFLEtBQUssQ0FBQyxhQUFhLElBQUksMkJBQWEsQ0FBQyxPQUFPO2FBQzVELENBQUMsQ0FBQztRQUNMLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUkscUJBQXFCLENBQUM7UUFDakUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSwwQkFBMEIsQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDO1FBRXpELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGNBQWMsS0FBSyxjQUFjLENBQUMsK0JBQStCLENBQUM7UUFFMUYsTUFBTSxXQUFXLEdBQUc7WUFDbEIsa0NBQWtDLEVBQUUsTUFBTTtZQUMxQyxRQUFRLEVBQUUsTUFBTTtZQUNoQix3Q0FBd0MsRUFBRSx1QkFBdUI7U0FDbEUsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLFdBQVcsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQzdFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQzthQUM3QyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFYixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNDLFVBQVUsQ0FBQyxXQUFXLENBQ3BCLHNCQUFzQixFQUN0Qiw2REFBNkQsVUFBVSxFQUFFLEVBQ3pFLHVCQUF1QixFQUN2QixJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFFNUIsdUJBQXVCLEVBQ3ZCLENBQUMsdUNBQXVDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUUxRixnQ0FBZ0M7UUFFaEMsK0RBQStEO1FBQy9ELDJGQUEyRixFQUMzRixzREFBc0Q7WUFDcEQsMkNBQTJDO1lBQzNDLHdEQUF3RCxPQUFPLEVBQUU7UUFFbkUscUNBQXFDO1FBQ3JDLG9HQUFvRyxFQUNwRyx5REFBeUQ7WUFDdkQscUNBQXFDO1lBQ3JDLHNDQUFzQztZQUN0QyxpQkFBaUI7WUFDakIsSUFBSSxPQUFPLEVBQUU7WUFDYixpREFBaUQsUUFBUSxDQUFDLFlBQVksRUFBRTtZQUN4RSxJQUFJLFlBQVksSUFBSSxVQUFVLEVBQUU7WUFDaEMseUNBQXlDLENBQzVDLENBQUM7UUFFRixvREFBb0Q7UUFDcEQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxVQUFVLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEMsVUFBVSxDQUFDLFdBQVcsQ0FDcEIsc0JBQXNCLEVBQ3RCLDJCQUEyQixFQUMzQjtvQkFDRSxtRUFBbUU7b0JBQ25FLGdGQUFnRjtvQkFDaEYsZ0hBQWdIO2lCQUNqSCxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFFVixDQUFDLHFEQUFxRCxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQ3pHLHVCQUF1QixDQUN4QixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLHNCQUFzQixFQUFFLDBCQUEwQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFekcsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QyxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNELFFBQVEsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFFM0QsTUFBTSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDckQsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsVUFBVSxFQUFFLEVBQUUsVUFBVSxFQUFFO1lBQzFCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksR0FBRyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7WUFDckUsWUFBWSxFQUNWLEtBQUssQ0FBQyxZQUFZO2dCQUNsQixHQUFHLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDO29CQUNyQyxPQUFPLEVBQUUsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE1BQU07aUJBQ3ZDLENBQUM7WUFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDdkIsWUFBWSxFQUFFO2dCQUNaO29CQUNFLFVBQVUsRUFBRSxnQkFBZ0I7b0JBQzVCLE1BQU0sRUFBRTt3QkFDTixTQUFTLEVBQUU7NEJBQ1QsVUFBVSxFQUFFLENBQUM7NEJBQ2IsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLGFBQWEsS0FBSywyQkFBYSxDQUFDLE9BQU87NEJBQ2xFLEdBQUcsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO3lCQUNuQzt3QkFDRCxXQUFXLEVBQUUsY0FBYztxQkFDNUI7aUJBQ0Y7YUFDRjtZQUNELFFBQVE7U0FDVCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQztRQUVoQyxtSEFBbUg7UUFDbkgsNkdBQTZHO1FBQzdHLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxnQ0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzNDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUM7UUFDOUcsQ0FBQztRQUVELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUMvRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixXQUFXLEVBQUUsc0JBQXNCO1NBQ3BDLENBQUMsQ0FBQztRQUNILGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUMzRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixXQUFXLEVBQUUsb0JBQW9CO1NBQ2xDLENBQUMsQ0FBQztRQUNILGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1FBQ3JGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1FBRS9FLG9CQUFvQixDQUFDLGNBQWMsQ0FDakMsQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsRUFDMUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUM5QixpQkFBaUIsQ0FDbEIsQ0FBQztRQUNGLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFckcsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDcEQsTUFBTSxRQUFRLEdBQ1osS0FBSyxDQUFDLG9CQUFvQixFQUFFLFVBQVUsS0FBSyxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU07WUFDOUQsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLHNCQUFzQixFQUFFO1lBQzdDLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxRQUFRLE1BQU0sUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxRQUFRLEdBQUcsR0FBRyxRQUFRLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUU5RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7UUFDakQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO0lBQy9DLENBQUM7SUFFUyxhQUFhLENBQUMsRUFBVSxFQUFFLEtBQTZCO1FBQy9ELE9BQU8sQ0FDTCxLQUFLLENBQUMscUJBQXFCO1lBQzNCO2dCQUNFLFdBQVc7Z0JBQ1gsZUFBZTtnQkFDZixjQUFjO2dCQUNkLHVCQUF1QjtnQkFDdkIsR0FBRztnQkFDSCx5QkFBeUI7Z0JBQ3pCLG1CQUFtQixLQUFLLENBQUMsYUFBYSxFQUFFLFdBQVcsSUFBSSxFQUFFLEdBQUc7Z0JBQzVELHdCQUF3QjtnQkFDeEIsOEJBQThCLEtBQUssQ0FBQyxhQUFhLEVBQUUsc0JBQXNCLElBQUksQ0FBQyxFQUFFO2dCQUNoRiw4QkFBOEI7Z0JBQzlCLHNDQUFzQztnQkFDdEMscUNBQXFDO2dCQUNyQyxnQ0FBZ0MsS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxJQUFJLEtBQUssR0FBRyxLQUFLLEdBQUc7Z0JBQ2hILHNDQUFzQztnQkFDdEMsd0JBQXdCO2dCQUN4QixzQ0FBc0M7Z0JBQ3RDLEVBQUU7Z0JBQ0YsVUFBVTtnQkFDViw4QkFBOEI7Z0JBQzlCLEVBQUU7Z0JBQ0Ysa0JBQWtCO2dCQUNsQixpQ0FBaUM7Z0JBQ2pDLHFEQUFxRDtnQkFDckQsMkNBQTJDO2dCQUMzQyxFQUFFO2dCQUNGLFNBQVM7Z0JBQ1QsbUJBQW1CLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLGtCQUFrQixHQUFHO2dCQUNyRixFQUFFO2dCQUNGLHNCQUFzQjtnQkFDdEIseUJBQXlCO2dCQUN6Qix1QkFBdUI7Z0JBQ3ZCLEVBQUU7Z0JBQ0YsV0FBVztnQkFDWCxtQkFBbUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksb0JBQW9CLEdBQUc7Z0JBQ3ZGLGlDQUFpQztnQkFDakMscURBQXFEO2dCQUNyRCxrQ0FBa0M7Z0JBQ2xDLEVBQUU7Z0JBQ0YsMEJBQTBCO2dCQUMxQixpQ0FBaUM7Z0JBQ2pDLHFEQUFxRDthQUN0RCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixPQUFPOzs7Ozs7Ozs7Ozs7Z0JBWUssZ0JBQWdCO2tCQUNkLGdCQUFnQjs7VUFFeEIsZ0JBQWdCOztZQUVkLGdCQUFnQjs0QkFDQSxnQkFBZ0I7O3NCQUV0QixnQkFBZ0I7OztDQUdyQyxDQUFDO0lBQ0EsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGtCQUFrQixDQUFDLEtBQTZCO1FBQ3hELE9BQU8sQ0FDTCxLQUFLLENBQUMsMEJBQTBCO1lBQ2hDO2dCQUNFLFVBQVU7Z0JBQ1YsWUFBWSx3QkFBd0IsYUFBYTtnQkFDakQsaUJBQWlCLHdCQUF3QixhQUFhO2dCQUN0RCxrQkFBa0I7Z0JBQ2xCLCtCQUErQjtnQkFDL0IsRUFBRTtnQkFDRiw4REFBOEQ7Z0JBQzlELGtFQUFrRTtnQkFDbEUsb0NBQW9DO2dCQUNwQyw0QkFBNEI7Z0JBQzVCLCtCQUErQjtnQkFDL0IsaUNBQWlDO2dCQUNqQyxFQUFFO2dCQUNGLGdCQUFnQjtnQkFDaEIsbUNBQW1DLG9CQUFvQixHQUFHO2dCQUMxRCwwQkFBMEIsS0FBSyxDQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxJQUFJLElBQUksR0FBRztnQkFDL0UsS0FBSztnQkFDTCxHQUFHO2dCQUNILEVBQUU7Z0JBQ0YsVUFBVTtnQkFDVixZQUFZLHNCQUFzQixhQUFhO2dCQUMvQyxpQkFBaUIsc0JBQXNCLGFBQWE7Z0JBQ3BELGtCQUFrQjtnQkFDbEIsK0JBQStCO2dCQUMvQixFQUFFO2dCQUNGLDhEQUE4RDtnQkFDOUQsa0VBQWtFO2dCQUNsRSxvQ0FBb0M7Z0JBQ3BDLDRCQUE0QjtnQkFDNUIsK0JBQStCO2dCQUMvQixpQ0FBaUM7Z0JBQ2pDLEVBQUU7Z0JBQ0YsZ0JBQWdCO2dCQUNoQixtQ0FBbUMsa0JBQWtCLEdBQUc7Z0JBQ3hELEtBQUs7Z0JBQ0wsR0FBRzthQUNKLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuVEQsa0VBbVRDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMy0yMDI1IC0gUmVzdGF0ZSBTb2Z0d2FyZSwgSW5jLiwgUmVzdGF0ZSBHbWJIXG4gKlxuICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFJlc3RhdGUgQ0RLIENvbnN0cnVjdCBMaWJyYXJ5LFxuICogd2hpY2ggaXMgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICpcbiAqIFlvdSBjYW4gZmluZCBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgaW4gZmlsZSBMSUNFTlNFIGluIHRoZSByb290XG4gKiBkaXJlY3Rvcnkgb2YgdGhpcyByZXBvc2l0b3J5IG9yIHBhY2thZ2UsIG9yIGF0XG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVzdGF0ZWRldi9zZGstdHlwZXNjcmlwdC9ibG9iL21haW4vTElDRU5TRVxuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IElSZXN0YXRlRW52aXJvbm1lbnQgfSBmcm9tIFwiLi9yZXN0YXRlLWVudmlyb25tZW50XCI7XG5pbXBvcnQgeyBUcmFjaW5nTW9kZSB9IGZyb20gXCIuL2RlcGxveW1lbnRzLWNvbW1vblwiO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZU5vZGVSZXN0YXRlUHJvcHMge1xuICAvKiogRUMyIGluc3RhbmNlIHR5cGUgdG8gdXNlLiAqL1xuICBpbnN0YW5jZVR5cGU/OiBlYzIuSW5zdGFuY2VUeXBlO1xuXG4gIC8qKiBNYWNoaW5lIGltYWdlLiBOb3RlOiBzdGFydHVwIHNjcmlwdCBleHBlY3RzIHl1bS1iYXNlZCBwYWNrYWdlIG1hbmFnZW1lbnQuICovXG4gIG1hY2hpbmVJbWFnZT86IGVjMi5JTWFjaGluZUltYWdlO1xuXG4gIC8qKiBUaGUgVlBDIGluIHdoaWNoIHRvIGxhdW5jaCB0aGUgUmVzdGF0ZSBob3N0LiAqL1xuICB2cGM/OiBlYzIuSVZwYztcblxuICBuZXR3b3JrQ29uZmlndXJhdGlvbj86IHtcbiAgICAvKipcbiAgICAgKiBTdWJuZXQgdHlwZSBmb3IgdGhlIFJlc3RhdGUgaG9zdC5cbiAgICAgKlxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgICAqICAtIFtEZWZhdWx0XSB7QGxpbmsgZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTU30gd2lsbCBjcmVhdGUgdGhlIFJlc3RhdGUgaW5zdGFuY2Ugd2l0aCBvdXRib3VuZCBpbnRlcm5ldFxuICAgICAqICAgIGFjY2VzcyBvbmx5LCBzbyB0aGF0IGl0IGNhbiBpbnZva2UgSFRUUCBlbmRwb2ludHMuIFRoZSBzZWN1cml0eSBncm91cHMge0BsaW5rIGluZ3Jlc3NTZWN1cml0eUdyb3VwfSBhbmRcbiAgICAgKiAgICB7QGxpbmsgYWRtaW5TZWN1cml0eUdyb3VwfSBjb250cm9sIGluYm91bmQgdHJhZmZpYyB0byB0aGUgc2VydmljZSBpbmdyZXNzIGFuZCBhZG1pbiBwb3J0cyByZXNwZWN0aXZlbHkuXG4gICAgICogICAgQ29uZmlndXJlIHtAbGluayBTZXJ2aWNlRGVwbG95ZXJ9IHRvIHVzZSB0aGUgbGF0dGVyLCBhbmQgc2V0IHVwIGluZ3Jlc3MgdHJhZmZpYyByb3V0aW5nIG91dHNpZGUgb2YgdGhpc1xuICAgICAqICAgIGNvbnN0cnVjdCB1c2luZyB0aGUgZm9ybWVyLlxuICAgICAqICAtIEluc2VjdXJlLCBpbnRlcm5ldC1mYWNpbmcge0BsaW5rIGVjMi5TdWJuZXRUeXBlLlBVQkxJQ30gd2lsbCBhbHNvIHByb3Zpc2lvbiBhbiBuZ2lueCByZXZlcnNlIHByb3h5XG4gICAgICogICAgYW5kIGFuIEhUVFAgbGlzdGVuZXIgd2l0aCBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLlxuICAgICAqL1xuICAgIHN1Ym5ldFR5cGU/OiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIHwgZWMyLlN1Ym5ldFR5cGUuUFVCTElDO1xuICB9O1xuXG4gIC8qKlxuICAgKiBBbGxvdyBpbmNvbWluZyBpbmdyZXNzIHRyYWZmaWMgZnJvbSBhbnl3aGVyZS4gRGVmYXVsdDogYGZhbHNlYC4gQWx0ZXJuYXRpdmVseSwgYWRkIHJ1bGVzIHRvIHRoZVxuICAgKiBgaW5ncmVzc1NlY3VyaXR5R3JvdXBgIGRpcmVjdGx5LlxuICAgKi9cbiAgcHVibGljSW5ncmVzcz86IGJvb2xlYW47XG5cbiAgLyoqIExvZyBncm91cCBmb3IgUmVzdGF0ZSBzZXJ2aWNlIGxvZ3MuICovXG4gIGxvZ0dyb3VwPzogbG9ncy5Mb2dHcm91cDtcblxuICAvKiogVHJhY2luZyBtb2RlIGZvciBSZXN0YXRlIHNlcnZpY2VzLiBEZWZhdWx0cyB0byB7QGxpbmsgVHJhY2luZ01vZGUuRElTQUJMRUR9LiAqL1xuICB0cmFjaW5nPzogVHJhY2luZ01vZGU7XG5cbiAgLyoqIFByZWZpeCBmb3IgcmVzb3VyY2VzIGNyZWF0ZWQgYnkgdGhpcyBjb25zdHJ1Y3QgdGhhdCByZXF1aXJlIHVuaXF1ZSBuYW1lcy4gKi9cbiAgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKiBSZXN0YXRlIERvY2tlciBpbWFnZSBuYW1lLiBEZWZhdWx0cyB0byBgbGF0ZXN0YC4gKi9cbiAgcmVzdGF0ZUltYWdlPzogc3RyaW5nO1xuXG4gIC8qKiBSZXN0YXRlIERvY2tlciBpbWFnZSB0YWcuIERlZmF1bHRzIHRvIGBsYXRlc3RgLiAqL1xuICByZXN0YXRlVGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFQlMgZGF0YSB2b2x1bWUgc2V0dGluZ3MgZm9yIFJlc3RhdGUgZGF0YSBzdG9yYWdlLiBJZiBub3Qgc3BlY2lmaWVkLCBhIGRlZmF1bHQgOEdCIHZvbHVtZSB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBkYXRhVm9sdW1lT3B0aW9ucz86IGVjMi5FYnNEZXZpY2VQcm9wcyB8IHVuZGVmaW5lZDtcblxuICAvKiogUmVzdGF0ZSBoaWdoLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzZXQge0BsaW5rIHJlc3RhdGVDb25maWdPdmVycmlkZX0uICovXG4gIHJlc3RhdGVDb25maWc/OiB7XG4gICAgLyoqIERlZmF1bHRzIHRvIHRoZSBjb25zdHJ1Y3QgaWQgaWYgbGVmdCB1bnNwZWNpZmllZC4gKi9cbiAgICBjbHVzdGVyTmFtZT86IHN0cmluZztcbiAgICAvKiogRGVmYXVsdHMgdG8gNC4gT25seSB0YWtlcyBlZmZlY3Qgb24gaW5pdGlhbCBwcm92aXNpb25pbmcuICovXG4gICAgYm9vdHN0cmFwTnVtUGFydGl0aW9ucz86IG51bWJlcjtcbiAgICAvKiogUm9ja3NEQiBzZXR0aW5ncy4gKi9cbiAgICByb2Nrc2RiPzoge1xuICAgICAgLyoqIERlZmF1bHRzIHRvIDUxMiBNQi4gKi9cbiAgICAgIHRvdGFsTWVtb3J5U2l6ZT86IGNkay5TaXplO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIEVudmlyb25tZW50IHByb3BlcnRpZXMgdG8gc2V0IGZvciBSZXN0YXRlLiBUaGlzIGlzIGEgc2ltcGxlIHdheSB0byBwYXNzIGN1c3RvbSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuXG4gICAqL1xuICBlbnZpcm9ubWVudD86IHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbXBsZXRlbHkgb3ZlcnJpZGUgdGhlIFJlc3RhdGUgc2VydmVyIGNvbmZpZ3VyYXRpb24uIE5vdGUgdGhhdCBvdGhlciBSZXN0YXRlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiB3aWxsIGVmZmVjdGl2ZWx5IGJlIGlnbm9yZWQgaWYgdGhpcyBpcyBzZXQuIFNlZSBodHRwczovL2RvY3MucmVzdGF0ZS5kZXYvb3BlcmF0ZS9jb25maWd1cmF0aW9uL3NlcnZlci9cbiAgICogZm9yIGRldGFpbHMuXG4gICAqL1xuICByZXN0YXRlQ29uZmlnT3ZlcnJpZGU/OiBzdHJpbmc7XG5cbiAgLyoqIEFtYXpvbiBEaXN0cm8gZm9yIE9wZW4gVGVsZW1ldHJ5IERvY2tlciBpbWFnZSB0YWcuIERlZmF1bHRzIHRvIGBsYXRlc3RgLiAqL1xuICBhZG90VGFnPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZW1vdmFsIHBvbGljeSBmb3IgbG9uZy1saXZlZCByZXNvdXJjZXMgKHN0b3JhZ2UsIGxvZ3MpLiBEZWZhdWx0OiBgY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWWAuXG4gICAqL1xuICByZW1vdmFsUG9saWN5PzogY2RrLlJlbW92YWxQb2xpY3k7XG5cbiAgLyoqXG4gICAqIENvbnRyb2wgb24taG9zdCBUTFMgdGVybWluYXRpb24gZm9yIGluZ3Jlc3MgYW5kIGFkbWluIHBvcnRzLiBEZWZhdWx0cyB0byBgVGxzVGVybWluYXRpb24uTk9ORWAuIEN1cnJlbnRseSwgZW5hYmxpbmdcbiAgICogVExTIGltcGxpY2l0bHkgZW5hYmxlcyBhbiBgbmdpbnhgIHNlcnZpY2UgdG8gYmUgY29uZmlndXJlZCBvbiB0aGUgaG9zdC4gRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiB0aGlzIG9wdGlvbiwgdGhlXG4gICAqIGluZ3Jlc3Mgc2VjdXJpdHkgZ3JvdXAgd2lsbCBiZSBjb25maWd1cmVkIHRvIGFsbG93IGluYm91bmQgdHJhZmZpYyB0byB0aGUgYXBwcm9wcmlhdGUgcG9ydCAtIDgwODAgZm9yIG5vIFRMUywgb3JcbiAgICogNDQzIHdpdGggVExTIGVuYWJsZWQuXG4gICAqL1xuICB0bHNUZXJtaW5hdGlvbj86IFRsc1Rlcm1pbmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVhZCB0aW1lb3V0IGZvciBwcm94aWVkIGluZ3Jlc3MgcmVxdWVzdHMuIERlZmF1bHQ6IDM2MDAgc2Vjb25kcy5cbiAgICovXG4gIGluZ3Jlc3NQcm94eVJlYWRUaW1lb3V0PzogY2RrLkR1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBDb21wbGV0ZWx5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGBuZ2lueGAgY29uZmlndXJhdGlvbiBmb3IgdGhlIGluZ3Jlc3MgcHJveHkuIE5vdGUgdGhhdCBvdGhlclxuICAgKiBpbmdyZXNzIHByb3h5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGVmZmVjdGl2ZWx5IGJlIGlnbm9yZWQgaWYgdGhpcyBpcyBzZXQuXG4gICAqL1xuICBpbmdyZXNzTmdpbnhDb25maWdPdmVycmlkZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gVGxzVGVybWluYXRpb24ge1xuICAvKipcbiAgICogRGlzYWJsZWQgKGRlZmF1bHQpOyBleHBvc2UgdGhlIGByZXN0YXRlLXNlcnZlcmAgSFRUUCBwb3J0cyBkaXJlY3RseS5cbiAgICovXG4gIERJU0FCTEVELFxuXG4gIC8qKlxuICAgKiBVc2Ugc2VsZi1zaWduZWQgY2VydGlmaWNhdGVzIGZvciBUTFMgdGVybWluYXRpb24gb24gdGhlIGluZ3Jlc3MgYW5kIGFkbWluIHBvcnRzLiBDb252ZW5pZW50IGZvciBxdWljayB0ZXN0aW5nLFxuICAgKiBtYWtlIHN1cmUgeW91IHNldCBgaW5zZWN1cmVgID0gYHRydWVgIHdoZW4gdXNpbmcgYFNlcnZpY2VEZXBsb3llcmAgdG8gYWNjZXB0IHRoaXMgY2VydGlmaWNhdGUuXG4gICAqL1xuICBPTl9IT1NUX1NFTEZfU0lHTkVEX0NFUlRJRklDQVRFLFxufVxuXG5jb25zdCBSRVNUQVRFX0lOR1JFU1NfUE9SVCA9IDgwODA7XG5jb25zdCBSRVNUQVRFX1RMU19JTkdSRVNTX1BPUlQgPSA0NDM7XG5jb25zdCBSRVNUQVRFX0FETUlOX1BPUlQgPSA5MDcwO1xuY29uc3QgUkVTVEFURV9UTFNfQURNSU5fUE9SVCA9IDkwNzM7XG5jb25zdCBSRVNUQVRFX0lNQUdFX0RFRkFVTFQgPSBcImRvY2tlci5pby9yZXN0YXRlZGV2L3Jlc3RhdGVcIjtcbmNvbnN0IFJFU1RBVEVfRE9DS0VSX0RFRkFVTFRfVEFHID0gXCJsYXRlc3RcIjtcbmNvbnN0IEFET1RfRE9DS0VSX0RFRkFVTFRfVEFHID0gXCJsYXRlc3RcIjtcbmNvbnN0IERBVEFfREVWSUNFX05BTUUgPSBcIi9kZXYvc2RkXCI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIFJlc3RhdGUgc2VydmljZSBkZXBsb3ltZW50IGJhY2tlZCBieSBhIHNpbmdsZSBFQzIgaW5zdGFuY2UsIHN1aXRhYmxlIGZvciBkZXZlbG9wbWVudCBhbmQgdGVzdGluZyBwdXJwb3Nlcy5cbiAqXG4gKiAqKkR1cmFiaWxpdHkqKlxuICpcbiAqIFJlc3RhdGUgZGF0YSB3aWxsIGJlIHN0b3JlZCBpbiBhIHNlcGFyYXRlIEVCUyB2b2x1bWUgd2hpY2ggeW91IGNhbiBjb25maWd1cmUgZXhwbGljaXRseSB2aWEgdGhlIGBkYXRhVm9sdW1lT3B0aW9uc2BcbiAqIHByb3BlcnR5LiBVcGRhdGluZyBjb25maWd1cmF0aW9uIHNldHRpbmdzIG1heSB0cmlnZ2VyIGluc3RhbmNlIHJlYm9vdCBvciByZXBsYWNlbWVudCAtIGNvbnNpZGVyIHNuYXBzaG90dGluZyB0aGUgZGF0YVxuICogdm9sdW1lIHByaW9yIHRvIGRlcGxveW1lbnRzLCBhbmQgZW5hYmxpbmcgaW5zdGFuY2UgdGVybWluYXRpb24gcHJvdGVjdGlvbi5cbiAqXG4gKiAqKlNlY3VyaXR5KipcbiAqXG4gKiBUaGUgRUMyIGluc3RhbmNlIHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgZGVmYXVsdCBWUEMgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuIFR3byBzZWN1cml0eSBncm91cHMgYXJlIGNyZWF0ZWQsXG4gKiBgaW5ncmVzc1NlY3VyaXR5R3JvdXBgIGFuZCBgYWRtaW5TZWN1cml0eUdyb3VwYCwgd2hpY2ggY29udHJvbCBhY2Nlc3MgdG8gdGhlIFJlc3RhdGUgc2VydmljZSBpbmdyZXNzIGFuZCBhZG1pbiBwb3J0c1xuICogcmVzcGVjdGl2ZWx5LiBZb3UgbXVzdCBhZGQgYXBwcm9wcmlhdGUgcnVsZXMgb3IgYWRkIG90aGVyIHJlc291cmNlcyB0byB0aGVzZSBzZWN1cml0eSBncm91cHMgdG8gYWxsb3cgYWNjZXNzLlxuICpcbiAqIFNlZSB7QGxpbmsgU2luZ2xlTm9kZVJlc3RhdGVQcm9wc30gZm9yIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGFuZCB7QGxpbmsgU2VydmljZURlcGxveWVyfSBmb3IgZGVwbG95aW5nXG4gKiBMYW1iZGEgaGFuZGxlcnMgdG8gZW52aXJvbm1lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgU2luZ2xlTm9kZVJlc3RhdGVEZXBsb3ltZW50IGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSVJlc3RhdGVFbnZpcm9ubWVudCB7XG4gIHJlYWRvbmx5IGluc3RhbmNlOiBlYzIuSW5zdGFuY2U7XG4gIHJlYWRvbmx5IGluc3RhbmNlUm9sZTogaWFtLklSb2xlO1xuICByZWFkb25seSBpbnZva2VyUm9sZTogaWFtLklSb2xlO1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuICByZWFkb25seSBpbmdyZXNzU2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICByZWFkb25seSBpbmdyZXNzUG9ydDogbnVtYmVyO1xuICByZWFkb25seSBpbmdyZXNzVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFkbWluU2VjdXJpdHlHcm91cDogZWMyLklTZWN1cml0eUdyb3VwO1xuICByZWFkb25seSBhZG1pblBvcnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgYWRtaW5Vcmw6IHN0cmluZztcbiAgcmVhZG9ubHkgdGxzRW5hYmxlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2luZ2xlTm9kZVJlc3RhdGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnZwYyA9IHByb3BzLnZwYyA/PyBlYzIuVnBjLmZyb21Mb29rdXAodGhpcywgXCJWcGNcIiwgeyBpc0RlZmF1bHQ6IHRydWUgfSk7XG5cbiAgICBjb25zdCBzdWJuZXRUeXBlID0gcHJvcHMubmV0d29ya0NvbmZpZ3VyYXRpb24/LnN1Ym5ldFR5cGUgPz8gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUztcblxuICAgIHRoaXMuaW5zdGFuY2VSb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsIFwiSW5zdGFuY2VSb2xlXCIsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXCJBbWF6b25TU01NYW5hZ2VkSW5zdGFuY2VDb3JlXCIpXSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW52b2tlclJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgXCJJbnZva2VyUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IHRoaXMuaW5zdGFuY2VSb2xlLFxuICAgIH0pO1xuXG4gICAgbmV3IGlhbS5Qb2xpY3kodGhpcywgXCJBc3N1bWVJbnZva2VyUm9sZVBvbGljeVwiLCB7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBzaWQ6IFwiQWxsb3dBc3N1bWVJbnZva2VyUm9sZVwiLFxuICAgICAgICAgIGFjdGlvbnM6IFtcInN0czpBc3N1bWVSb2xlXCJdLFxuICAgICAgICAgIHJlc291cmNlczogW3RoaXMuaW52b2tlclJvbGUucm9sZUFybl0sXG4gICAgICAgIH0pLFxuICAgICAgXSxcbiAgICB9KS5hdHRhY2hUb1JvbGUodGhpcy5pbnN0YW5jZVJvbGUpO1xuXG4gICAgY29uc3QgbG9nR3JvdXAgPVxuICAgICAgcHJvcHMubG9nR3JvdXAgPz9cbiAgICAgIG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsIFwiTG9nc1wiLCB7XG4gICAgICAgIGxvZ0dyb3VwTmFtZTogYC9yZXN0YXRlLyR7aWR9YCxcbiAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX01PTlRILFxuICAgICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5ID8/IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgIH0pO1xuICAgIGxvZ0dyb3VwLmdyYW50V3JpdGUodGhpcy5pbnN0YW5jZVJvbGUpO1xuXG4gICAgY29uc3QgcmVzdGF0ZUltYWdlID0gcHJvcHMucmVzdGF0ZUltYWdlID8/IFJFU1RBVEVfSU1BR0VfREVGQVVMVDtcbiAgICBjb25zdCByZXN0YXRlVGFnID0gcHJvcHMucmVzdGF0ZVRhZyA/PyBSRVNUQVRFX0RPQ0tFUl9ERUZBVUxUX1RBRztcbiAgICBjb25zdCBhZG90VGFnID0gcHJvcHMuYWRvdFRhZyA/PyBBRE9UX0RPQ0tFUl9ERUZBVUxUX1RBRztcblxuICAgIHRoaXMudGxzRW5hYmxlZCA9IHByb3BzLnRsc1Rlcm1pbmF0aW9uID09PSBUbHNUZXJtaW5hdGlvbi5PTl9IT1NUX1NFTEZfU0lHTkVEX0NFUlRJRklDQVRFO1xuXG4gICAgY29uc3QgZW52RGVmYXVsdHMgPSB7XG4gICAgICBSRVNUQVRFX09CU0VSVkFCSUxJVFlfX0xPR19fRk9STUFUOiBcIkpzb25cIixcbiAgICAgIFJVU1RfTE9HOiBcImluZm9cIixcbiAgICAgIFJFU1RBVEVfT0JTRVJWQUJJTElUWV9fVFJBQ0lOR19fRU5EUE9JTlQ6IFwiaHR0cDovL2xvY2FsaG9zdDo0MzE3XCIsXG4gICAgfTtcbiAgICBjb25zdCBlbnZBcmdzID0gT2JqZWN0LmVudHJpZXMoeyAuLi5lbnZEZWZhdWx0cywgLi4uKHByb3BzLmVudmlyb25tZW50ID8/IHt9KSB9KVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgLWUgJHtrZXl9PVwiJHt2YWx1ZX1cImApXG4gICAgICAuam9pbihcIiBcIik7XG5cbiAgICBjb25zdCBpbml0U2NyaXB0ID0gZWMyLlVzZXJEYXRhLmZvckxpbnV4KCk7XG4gICAgaW5pdFNjcmlwdC5hZGRDb21tYW5kcyhcbiAgICAgIFwic2V0IC1ldWYgLW8gcGlwZWZhaWxcIixcbiAgICAgIGB5dW0gaW5zdGFsbCAteSBucG0gJiYgbnBtIGluc3RhbGwgLWdxIEByZXN0YXRlZGV2L3Jlc3RhdGVAJHtyZXN0YXRlVGFnfWAsXG4gICAgICBcInl1bSBpbnN0YWxsIC15IGRvY2tlclwiLFxuICAgICAgdGhpcy5tb3VudERhdGFWb2x1bWVTY3JpcHQoKSxcblxuICAgICAgXCJta2RpciAtcCAvZXRjL3Jlc3RhdGVcIixcbiAgICAgIFtcImNhdCA8PCBFT0YgPiAvZXRjL3Jlc3RhdGUvY29uZmlnLnRvbWxcIiwgdGhpcy5yZXN0YXRlQ29uZmlnKGlkLCBwcm9wcyksIFwiRU9GXCJdLmpvaW4oXCJcXG5cIiksXG5cbiAgICAgIFwic3lzdGVtY3RsIHN0YXJ0IGRvY2tlci5zZXJ2aWNlXCIsXG5cbiAgICAgIC8vIFN0YXJ0IHRoZSBBRE9UIGNvbGxlY3RvciAtIG5lZWRlZCBmb3IgWC1yYXkgdHJhY2UgZm9yd2FyZGluZ1xuICAgICAgYGlmIFsgXCIkKGRvY2tlciBwcyAtcWEgLWYgbmFtZT1hZG90KVwiIF07IHRoZW4gZG9ja2VyIHN0b3AgYWRvdCB8fCB0cnVlOyBkb2NrZXIgcm0gYWRvdDsgZmlgLFxuICAgICAgXCJkb2NrZXIgcnVuIC0tbmFtZSBhZG90IC0tcmVzdGFydCBvbi1mYWlsdXJlIC0tZGV0YWNoXCIgK1xuICAgICAgICBcIiAtcCA0MzE3OjQzMTcgLXAgNTU2ODA6NTU2ODAgLXAgODg4OTo4ODg4XCIgK1xuICAgICAgICBgIHB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1vdGVsLWNvbGxlY3Rvcjoke2Fkb3RUYWd9YCxcblxuICAgICAgLy8gU3RhcnQgdGhlIFJlc3RhdGUgc2VydmVyIGNvbnRhaW5lclxuICAgICAgYGlmIFsgXCIkKGRvY2tlciBwcyAtcWEgLWYgbmFtZT1yZXN0YXRlKVwiIF07IHRoZW4gZG9ja2VyIHN0b3AgcmVzdGF0ZSB8fCB0cnVlOyBkb2NrZXIgcm0gcmVzdGF0ZTsgZmlgLFxuICAgICAgXCJkb2NrZXIgcnVuIC0tbmFtZSByZXN0YXRlIC0tcmVzdGFydCBvbi1mYWlsdXJlIC0tZGV0YWNoXCIgK1xuICAgICAgICBcIiAtLXZvbHVtZSAvZXRjL3Jlc3RhdGU6L2V0Yy9yZXN0YXRlXCIgK1xuICAgICAgICBcIiAtLXZvbHVtZSAvdmFyL3Jlc3RhdGU6L3Jlc3RhdGUtZGF0YVwiICtcbiAgICAgICAgXCIgLS1uZXR3b3JrPWhvc3RcIiArXG4gICAgICAgIGAgJHtlbnZBcmdzfWAgK1xuICAgICAgICBgIC0tbG9nLWRyaXZlcj1hd3Nsb2dzIC0tbG9nLW9wdCBhd3Nsb2dzLWdyb3VwPSR7bG9nR3JvdXAubG9nR3JvdXBOYW1lfWAgK1xuICAgICAgICBgICR7cmVzdGF0ZUltYWdlfToke3Jlc3RhdGVUYWd9YCArXG4gICAgICAgIFwiIC0tY29uZmlnLWZpbGUgL2V0Yy9yZXN0YXRlL2NvbmZpZy50b21sXCIsXG4gICAgKTtcblxuICAgIC8vIE9wdGlvbmFsbHksIGNvbmZpZ3VyZSBhbmQgc3RhcnQgdGhlIG5naW54IHNlcnZpY2VcbiAgICBpZiAodGhpcy50bHNFbmFibGVkKSB7XG4gICAgICBpZiAoc3VibmV0VHlwZSA9PSBlYzIuU3VibmV0VHlwZS5QVUJMSUMpIHtcbiAgICAgICAgaW5pdFNjcmlwdC5hZGRDb21tYW5kcyhcbiAgICAgICAgICBcInl1bSBpbnN0YWxsIC15IG5naW54XCIsXG4gICAgICAgICAgXCJta2RpciAtcCAvZXRjL3BraS9wcml2YXRlXCIsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgXCJvcGVuc3NsIHJlcSAtbmV3IC14NTA5IC1ub2RlcyAtc2hhMjU2IC1kYXlzIDM2NSAtZXh0ZW5zaW9ucyB2M19jYVwiLFxuICAgICAgICAgICAgXCIgLXN1YmogJy9DPURFL1NUPUJlcmxpbi9MPUJlcmxpbi9PPXJlc3RhdGUuZGV2L09VPWRlbW8vQ049cmVzdGF0ZS5leGFtcGxlLmNvbSdcIixcbiAgICAgICAgICAgIFwiIC1uZXdrZXkgcnNhOjIwNDggLWtleW91dCAvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5rZXkgLW91dCAvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5jcnRcIixcbiAgICAgICAgICBdLmpvaW4oXCJcIiksXG5cbiAgICAgICAgICBbXCJjYXQgPDwgRU9GID4gL2V0Yy9uZ2lueC9jb25mLmQvcmVzdGF0ZS1pbmdyZXNzLmNvbmZcIiwgdGhpcy5pbmdyZXNzTmdpbnhDb25maWcocHJvcHMpLCBcIkVPRlwiXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIFwic3lzdGVtY3RsIHN0YXJ0IG5naW54XCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xvdWRDb25maWcgPSBlYzIuVXNlckRhdGEuY3VzdG9tKFtgY2xvdWRfZmluYWxfbW9kdWxlczpgLCBgLSBbc2NyaXB0cy11c2VyLCBhbHdheXNdYF0uam9pbihcIlxcblwiKSk7XG5cbiAgICBjb25zdCB1c2VyRGF0YSA9IG5ldyBlYzIuTXVsdGlwYXJ0VXNlckRhdGEoKTtcbiAgICB1c2VyRGF0YS5hZGRVc2VyRGF0YVBhcnQoY2xvdWRDb25maWcsIFwidGV4dC9jbG91ZC1jb25maWdcIik7XG4gICAgdXNlckRhdGEuYWRkVXNlckRhdGFQYXJ0KGluaXRTY3JpcHQsIFwidGV4dC94LXNoZWxsc2NyaXB0XCIpO1xuXG4gICAgY29uc3QgcmVzdGF0ZUluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZSh0aGlzLCBcIkhvc3RcIiwge1xuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZSB9LFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGUgPz8gbmV3IGVjMi5JbnN0YW5jZVR5cGUoXCJ0NGcubWljcm9cIiksXG4gICAgICBtYWNoaW5lSW1hZ2U6XG4gICAgICAgIHByb3BzLm1hY2hpbmVJbWFnZSA/P1xuICAgICAgICBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4MjAyMyh7XG4gICAgICAgICAgY3B1VHlwZTogZWMyLkFtYXpvbkxpbnV4Q3B1VHlwZS5BUk1fNjQsXG4gICAgICAgIH0pLFxuICAgICAgcm9sZTogdGhpcy5pbnN0YW5jZVJvbGUsXG4gICAgICBibG9ja0RldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZU5hbWU6IERBVEFfREVWSUNFX05BTUUsXG4gICAgICAgICAgdm9sdW1lOiB7XG4gICAgICAgICAgICBlYnNEZXZpY2U6IHtcbiAgICAgICAgICAgICAgdm9sdW1lU2l6ZTogOCxcbiAgICAgICAgICAgICAgZGVsZXRlT25UZXJtaW5hdGlvbjogcHJvcHMucmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgICAgICAgICAuLi4ocHJvcHMuZGF0YVZvbHVtZU9wdGlvbnMgPz8ge30pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZpcnR1YWxOYW1lOiBcInJlc3RhdGUtZGF0YVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdXNlckRhdGEsXG4gICAgfSk7XG5cbiAgICB0aGlzLmluc3RhbmNlID0gcmVzdGF0ZUluc3RhbmNlO1xuXG4gICAgLy8gV2Ugc3RhcnQgdGhlIEFET1QgY29sbGVjdG9yIHJlZ2FyZGxlc3MsIGFuZCBjb250cm9sIHdoZXRoZXIgdHJhY2VzIHdpbGwgYmUgZXhwb3J0ZWQgdG8gWC1SYXkgdXNpbmcgaW5zdGFuY2Ugcm9sZVxuICAgIC8vIHBlcm1pc3Npb25zLiBUaGlzIHdheSBoaXN0b3JpYyB0cmFjZXMgd2lsbCBiZSBidWZmZXJlZCBvbiB0aGUgaG9zdCwgZXZlbiBpZiB0cmFjaW5nIGlzIGRpc2FibGVkIGluaXRpYWxseS5cbiAgICBpZiAocHJvcHMudHJhY2luZyA9PT0gVHJhY2luZ01vZGUuQVdTX1hSQVkpIHtcbiAgICAgIHJlc3RhdGVJbnN0YW5jZS5yb2xlLmFkZE1hbmFnZWRQb2xpY3koaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKFwiQVdTWHJheVdyaXRlT25seUFjY2Vzc1wiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5ncmVzc1NlY3VyaXR5R3JvdXAgPSBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgXCJJbmdyZXNzU2VjdXJpdHlHcm91cFwiLCB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgZGVzY3JpcHRpb246IFwiUmVzdGF0ZSBJbmdyZXNzIEFDTHNcIixcbiAgICB9KTtcbiAgICByZXN0YXRlSW5zdGFuY2UuYWRkU2VjdXJpdHlHcm91cChpbmdyZXNzU2VjdXJpdHlHcm91cCk7XG4gICAgY29uc3QgYWRtaW5TZWN1cml0eUdyb3VwID0gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsIFwiQWRtaW5TZWN1cml0eUdyb3VwXCIsIHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICBkZXNjcmlwdGlvbjogXCJSZXN0YXRlIEFkbWluIEFDTHNcIixcbiAgICB9KTtcbiAgICByZXN0YXRlSW5zdGFuY2UuYWRkU2VjdXJpdHlHcm91cChhZG1pblNlY3VyaXR5R3JvdXApO1xuXG4gICAgdGhpcy5pbmdyZXNzUG9ydCA9IHRoaXMudGxzRW5hYmxlZCA/IFJFU1RBVEVfVExTX0lOR1JFU1NfUE9SVCA6IFJFU1RBVEVfSU5HUkVTU19QT1JUO1xuICAgIHRoaXMuYWRtaW5Qb3J0ID0gdGhpcy50bHNFbmFibGVkID8gUkVTVEFURV9UTFNfQURNSU5fUE9SVCA6IFJFU1RBVEVfQURNSU5fUE9SVDtcblxuICAgIGluZ3Jlc3NTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgKHByb3BzLnB1YmxpY0luZ3Jlc3MgPz8gZmFsc2UpID8gZWMyLlBlZXIuYW55SXB2NCgpIDogaW5ncmVzc1NlY3VyaXR5R3JvdXAsXG4gICAgICBlYzIuUG9ydC50Y3AodGhpcy5pbmdyZXNzUG9ydCksXG4gICAgICBcIlJlc3RhdGUgaW5ncmVzc1wiLFxuICAgICk7XG4gICAgYWRtaW5TZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKGFkbWluU2VjdXJpdHlHcm91cCwgZWMyLlBvcnQudGNwKHRoaXMuYWRtaW5Qb3J0KSwgXCJSZXN0YXRlIGFkbWluXCIpO1xuXG4gICAgY29uc3QgcHJvdG9jb2wgPSB0aGlzLnRsc0VuYWJsZWQgPyBcImh0dHBzXCIgOiBcImh0dHBcIjtcbiAgICBjb25zdCBob3N0bmFtZSA9XG4gICAgICBwcm9wcy5uZXR3b3JrQ29uZmlndXJhdGlvbj8uc3VibmV0VHlwZSAhPT0gZWMyLlN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgID8gYCR7cmVzdGF0ZUluc3RhbmNlLmluc3RhbmNlUHJpdmF0ZURuc05hbWV9YFxuICAgICAgICA6IGAke3Jlc3RhdGVJbnN0YW5jZS5pbnN0YW5jZVB1YmxpY0Ruc05hbWV9YDtcbiAgICB0aGlzLmluZ3Jlc3NVcmwgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfWAgKyAodGhpcy5pbmdyZXNzUG9ydCA9PT0gNDQzID8gXCJcIiA6IGA6JHt0aGlzLmluZ3Jlc3NQb3J0fWApO1xuICAgIHRoaXMuYWRtaW5VcmwgPSBgJHtwcm90b2NvbH06Ly8ke2hvc3RuYW1lfToke3RoaXMuYWRtaW5Qb3J0fWA7XG5cbiAgICB0aGlzLmluZ3Jlc3NTZWN1cml0eUdyb3VwID0gaW5ncmVzc1NlY3VyaXR5R3JvdXA7XG4gICAgdGhpcy5hZG1pblNlY3VyaXR5R3JvdXAgPSBhZG1pblNlY3VyaXR5R3JvdXA7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzdGF0ZUNvbmZpZyhpZDogc3RyaW5nLCBwcm9wczogU2luZ2xlTm9kZVJlc3RhdGVQcm9wcykge1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wcy5yZXN0YXRlQ29uZmlnT3ZlcnJpZGUgPz9cbiAgICAgIFtcbiAgICAgICAgYHJvbGVzID0gW2AsXG4gICAgICAgIGAgICAgXCJ3b3JrZXJcIixgLFxuICAgICAgICBgICAgIFwiYWRtaW5cIixgLFxuICAgICAgICBgICAgIFwibWV0YWRhdGEtc3RvcmVcIixgLFxuICAgICAgICBgXWAsXG4gICAgICAgIGBub2RlLW5hbWUgPSBcInJlc3RhdGUtMFwiYCxcbiAgICAgICAgYGNsdXN0ZXItbmFtZSA9IFwiJHtwcm9wcy5yZXN0YXRlQ29uZmlnPy5jbHVzdGVyTmFtZSA/PyBpZH1cImAsXG4gICAgICAgIGBhbGxvdy1ib290c3RyYXAgPSB0cnVlYCxcbiAgICAgICAgYGJvb3RzdHJhcC1udW0tcGFydGl0aW9ucyA9ICR7cHJvcHMucmVzdGF0ZUNvbmZpZz8uYm9vdHN0cmFwTnVtUGFydGl0aW9ucyA/PyA0fWAsXG4gICAgICAgIGBkZWZhdWx0LXRocmVhZC1wb29sLXNpemUgPSAzYCxcbiAgICAgICAgYHN0b3JhZ2UtaGlnaC1wcmlvcml0eS1iZy10aHJlYWRzID0gM2AsXG4gICAgICAgIGBzdG9yYWdlLWxvdy1wcmlvcml0eS1iZy10aHJlYWRzID0gM2AsXG4gICAgICAgIGByb2Nrc2RiLXRvdGFsLW1lbW9yeS1zaXplID0gXCIke3Byb3BzLnJlc3RhdGVDb25maWc/LnJvY2tzZGI/LnRvdGFsTWVtb3J5U2l6ZT8udG9NZWJpYnl0ZXMoKSA/PyA1MTIuMCArIFwiIE1CXCJ9XCJgLFxuICAgICAgICBgcm9ja3NkYi10b3RhbC1tZW10YWJsZXMtcmF0aW8gPSAwLjYwYCxcbiAgICAgICAgYHJvY2tzZGItYmctdGhyZWFkcyA9IDNgLFxuICAgICAgICBgcm9ja3NkYi1oaWdoLXByaW9yaXR5LWJnLXRocmVhZHMgPSAzYCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbd29ya2VyXWAsXG4gICAgICAgIGBpbnRlcm5hbC1xdWV1ZS1sZW5ndGggPSAxMDAwYCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbd29ya2VyLnN0b3JhZ2VdYCxcbiAgICAgICAgYHJvY2tzZGItbWF4LWJhY2tncm91bmQtam9icyA9IDNgLFxuICAgICAgICBgcm9ja3NkYi1zdGF0aXN0aWNzLWxldmVsID0gXCJleGNlcHQtZGV0YWlsZWQtdGltZXJzXCJgLFxuICAgICAgICBgbnVtLXBhcnRpdGlvbnMtdG8tc2hhcmUtbWVtb3J5LWJ1ZGdldCA9IDRgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFthZG1pbl1gLFxuICAgICAgICBgYmluZC1hZGRyZXNzID0gXCIke3RoaXMudGxzRW5hYmxlZCA/IFwiMTI3LjAuMC4xXCIgOiBcIjAuMC4wLjBcIn06JHtSRVNUQVRFX0FETUlOX1BPUlR9XCJgLFxuICAgICAgICBgYCxcbiAgICAgICAgYFthZG1pbi5xdWVyeS1lbmdpbmVdYCxcbiAgICAgICAgYG1lbW9yeS1zaXplID0gXCI1MC4wIE1CXCJgLFxuICAgICAgICBgcXVlcnktcGFyYWxsZWxpc20gPSA0YCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbaW5ncmVzc11gLFxuICAgICAgICBgYmluZC1hZGRyZXNzID0gXCIke3RoaXMudGxzRW5hYmxlZCA/IFwiMTI3LjAuMC4xXCIgOiBcIjAuMC4wLjBcIn06JHtSRVNUQVRFX0lOR1JFU1NfUE9SVH1cImAsXG4gICAgICAgIGByb2Nrc2RiLW1heC1iYWNrZ3JvdW5kLWpvYnMgPSAzYCxcbiAgICAgICAgYHJvY2tzZGItc3RhdGlzdGljcy1sZXZlbCA9IFwiZXhjZXB0LWRldGFpbGVkLXRpbWVyc1wiYCxcbiAgICAgICAgYHdyaXRlci1iYXRjaC1jb21taXQtY291bnQgPSAxMDAwYCxcbiAgICAgICAgYGAsXG4gICAgICAgIGBbbWV0YWRhdGEtc3RvcmUucm9ja3NkYl1gLFxuICAgICAgICBgcm9ja3NkYi1tYXgtYmFja2dyb3VuZC1qb2JzID0gMWAsXG4gICAgICAgIGByb2Nrc2RiLXN0YXRpc3RpY3MtbGV2ZWwgPSBcImV4Y2VwdC1kZXRhaWxlZC10aW1lcnNcImAsXG4gICAgICBdLmpvaW4oXCJcXG5cIilcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG1vdW50RGF0YVZvbHVtZVNjcmlwdCgpIHtcbiAgICByZXR1cm4gYFxuaWYgbW91bnQgfCBncmVwIC1xcyAnL3Zhci9yZXN0YXRlJzsgdGhlblxuICBlY2hvIFwiL3Zhci9yZXN0YXRlIGlzIG1vdW50ZWRcIlxuZWxzZVxuICBpZiBbIC1kIC92YXIvcmVzdGF0ZSBdOyB0aGVuXG4gICAgaWYgWyBcIiQobHMgLUEgL3Zhci9yZXN0YXRlKVwiIF07IHRoZW5cbiAgICAgIGVjaG8gXCJEYXRhIGV4aXN0cyBpbiAvdmFyL3Jlc3RhdGUgdGhhdCBpcyBub3Qgb24gZGF0YSB2b2x1bWU7IHJlZnVzaW5nIHRvIG92ZXJ3cml0ZSFcIlxuICAgICAgZXhpdCAxXG4gICAgZmlcbiAgZWxzZVxuICAgIG1rZGlyIC92YXIvcmVzdGF0ZVxuICBmaVxuICBpZiBmaWxlIC1zTCAke0RBVEFfREVWSUNFX05BTUV9IHwgZ3JlcCAtcSAnOiBkYXRhJCc7IHRoZW5cbiAgICBta2ZzIC10IHhmcyAke0RBVEFfREVWSUNFX05BTUV9XG4gIGZpXG4gIG1vdW50ICR7REFUQV9ERVZJQ0VfTkFNRX0gL3Zhci9yZXN0YXRlXG4gIGlmICEgZ3JlcCAtcXMgJy92YXIvcmVzdGF0ZScgL2V0Yy9mc3RhYjsgdGhlblxuICAgIGVjaG8gXCIke0RBVEFfREVWSUNFX05BTUV9IC92YXIvcmVzdGF0ZSB4ZnMgZGVmYXVsdHMgMCAwXCIgPj4gL2V0Yy9mc3RhYlxuICAgIGVjaG8gXCJBZGRlZCBlbnRyeSBmb3IgJHtEQVRBX0RFVklDRV9OQU1FfSB0byAvZXRjL2ZzdGFiXCJcbiAgZWxzZVxuICAgIGVjaG8gXCJFbnRyeSBmb3IgJHtEQVRBX0RFVklDRV9OQU1FfSBhbHJlYWR5IGV4aXN0cyBpbiAvZXRjL2ZzdGFiXCJcbiAgZmlcbmZpXG5gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwcm9wcyBjb25zdHJ1Y3QgcHJvcGVydGllc1xuICAgKiBAcmV0dXJucyBuZ2lueCBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgaW5ncmVzcyByZXZlcnNlIHByb3h5LCBmb3JtYXR0ZWQgYXMgYSBtdWx0aS1saW5lIHN0cmluZ1xuICAgKi9cbiAgcHJvdGVjdGVkIGluZ3Jlc3NOZ2lueENvbmZpZyhwcm9wczogU2luZ2xlTm9kZVJlc3RhdGVQcm9wcykge1xuICAgIHJldHVybiAoXG4gICAgICBwcm9wcy5pbmdyZXNzTmdpbnhDb25maWdPdmVycmlkZSA/P1xuICAgICAgW1xuICAgICAgICBcInNlcnZlciB7XCIsXG4gICAgICAgIGAgIGxpc3RlbiAke1JFU1RBVEVfVExTX0lOR1JFU1NfUE9SVH0gc3NsIGh0dHAyO2AsXG4gICAgICAgIGAgIGxpc3RlbiBbOjpdOiR7UkVTVEFURV9UTFNfSU5HUkVTU19QT1JUfSBzc2wgaHR0cDI7YCxcbiAgICAgICAgXCIgIHNlcnZlcl9uYW1lIF87XCIsXG4gICAgICAgIFwiICByb290IC91c3Ivc2hhcmUvbmdpbngvaHRtbDtcIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgJyAgc3NsX2NlcnRpZmljYXRlIFwiL2V0Yy9wa2kvcHJpdmF0ZS9yZXN0YXRlLXNlbGZzaWduZWQuY3J0XCI7JyxcbiAgICAgICAgJyAgc3NsX2NlcnRpZmljYXRlX2tleSBcIi9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmtleVwiOycsXG4gICAgICAgIFwiICBzc2xfc2Vzc2lvbl9jYWNoZSBzaGFyZWQ6U1NMOjFtO1wiLFxuICAgICAgICBcIiAgc3NsX3Nlc3Npb25fdGltZW91dCAxMG07XCIsXG4gICAgICAgIFwiICBzc2xfY2lwaGVycyBQUk9GSUxFPVNZU1RFTTtcIixcbiAgICAgICAgXCIgIHNzbF9wcmVmZXJfc2VydmVyX2NpcGhlcnMgb247XCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiICBsb2NhdGlvbiAvIHtcIixcbiAgICAgICAgYCAgICBwcm94eV9wYXNzIGh0dHA6Ly9sb2NhbGhvc3Q6JHtSRVNUQVRFX0lOR1JFU1NfUE9SVH07YCxcbiAgICAgICAgYCAgICBwcm94eV9yZWFkX3RpbWVvdXQgJHtwcm9wcy5pbmdyZXNzUHJveHlSZWFkVGltZW91dD8udG9TZWNvbmRzKCkgPz8gMzYwMH07YCxcbiAgICAgICAgXCIgIH1cIixcbiAgICAgICAgXCJ9XCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwic2VydmVyIHtcIixcbiAgICAgICAgYCAgbGlzdGVuICR7UkVTVEFURV9UTFNfQURNSU5fUE9SVH0gc3NsIGh0dHAyO2AsXG4gICAgICAgIGAgIGxpc3RlbiBbOjpdOiR7UkVTVEFURV9UTFNfQURNSU5fUE9SVH0gc3NsIGh0dHAyO2AsXG4gICAgICAgIFwiICBzZXJ2ZXJfbmFtZSBfO1wiLFxuICAgICAgICBcIiAgcm9vdCAvdXNyL3NoYXJlL25naW54L2h0bWw7XCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgICcgIHNzbF9jZXJ0aWZpY2F0ZSBcIi9ldGMvcGtpL3ByaXZhdGUvcmVzdGF0ZS1zZWxmc2lnbmVkLmNydFwiOycsXG4gICAgICAgICcgIHNzbF9jZXJ0aWZpY2F0ZV9rZXkgXCIvZXRjL3BraS9wcml2YXRlL3Jlc3RhdGUtc2VsZnNpZ25lZC5rZXlcIjsnLFxuICAgICAgICBcIiAgc3NsX3Nlc3Npb25fY2FjaGUgc2hhcmVkOlNTTDoxbTtcIixcbiAgICAgICAgXCIgIHNzbF9zZXNzaW9uX3RpbWVvdXQgMTBtO1wiLFxuICAgICAgICBcIiAgc3NsX2NpcGhlcnMgUFJPRklMRT1TWVNURU07XCIsXG4gICAgICAgIFwiICBzc2xfcHJlZmVyX3NlcnZlcl9jaXBoZXJzIG9uO1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBcIiAgbG9jYXRpb24gLyB7XCIsXG4gICAgICAgIGAgICAgcHJveHlfcGFzcyBodHRwOi8vbG9jYWxob3N0OiR7UkVTVEFURV9BRE1JTl9QT1JUfTtgLFxuICAgICAgICBcIiAgfVwiLFxuICAgICAgICBcIn1cIixcbiAgICAgIF0uam9pbihcIlxcblwiKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ testEnvironment: "node",
3
+ transform: {
4
+ "^.+\\.tsx?$": "ts-jest",
5
+ },
6
+ };
@@ -0,0 +1,8 @@
1
+ const baseConfig = require("./jest.config.base");
2
+
3
+ module.exports = {
4
+ ...baseConfig,
5
+ roots: ["<rootDir>/test"],
6
+ testMatch: ["<rootDir>/test/e2e/**/*.e2e.ts"],
7
+ testTimeout: 600_000,
8
+ };
package/jest.config.js CHANGED
@@ -1,8 +1,9 @@
1
+ const baseConfig = require("./jest.config.base");
2
+
1
3
  module.exports = {
2
- testEnvironment: "node",
4
+ ...baseConfig,
3
5
  roots: ["<rootDir>/test"],
4
- testMatch: ["**/*.test.ts"],
5
- transform: {
6
- "^.+\\.tsx?$": "ts-jest",
7
- },
6
+ testMatch: ["<rootDir>/test/**/*.test.ts"],
7
+ // Exclude E2E tests
8
+ testPathIgnorePatterns: ["/node_modules/", "/test/e2e/"],
8
9
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@restatedev/restate-cdk",
3
3
  "description": "Restate.dev CDK constructs",
4
- "version": "1.1.0-rc.2",
4
+ "version": "1.1.1-pre.6",
5
5
  "author": "Restate Developers",
6
6
  "license": "MIT",
7
7
  "email": "code@restate.dev",
@@ -20,7 +20,8 @@
20
20
  "prebundle": "rm -rf dist",
21
21
  "postbundle": "cd dist && zip -r index.zip index.js*",
22
22
  "watch": "tsc -w",
23
- "test": "jest",
23
+ "test": "jest --config jest.config.js",
24
+ "test:e2e": "npx tsx test/handlers/build.mts && jest --config jest.config.e2e.js",
24
25
  "lint": "npx prettier --check .",
25
26
  "cdk": "cdk"
26
27
  },
@@ -30,20 +31,21 @@
30
31
  "@types/jest": "^29.5.14",
31
32
  "@types/node": "^22.9.0",
32
33
  "@types/source-map-support": "^0.5.10",
33
- "esbuild": "^0.24.0",
34
+ "esbuild": "^0.25.0",
34
35
  "jest": "^29.7.0",
35
36
  "jest-cdk-snapshot": "^2.2.5",
36
37
  "prettier": "^3.3.3",
37
38
  "source-map-support": "^0.5.21",
38
39
  "ts-jest": "^29.2.5",
39
40
  "tsx": "^4.19.2",
40
- "typescript": "^5.6.3"
41
+ "typescript": "^5.7.0",
42
+ "zx": "^8.3.2"
41
43
  },
42
44
  "peerDependencies": {
43
45
  "@aws-sdk/client-secrets-manager": "^3.637.0",
44
- "aws-cdk": "^2.162.1",
45
- "aws-cdk-lib": "^2.162.1",
46
- "constructs": "^10.3.0",
46
+ "aws-cdk": "^2.177.0",
47
+ "aws-cdk-lib": "^2.177.0",
48
+ "constructs": "^10.4.0",
47
49
  "node-fetch": "^3.3.2"
48
50
  },
49
51
  "directories": {