@decaf-ts/logging 0.3.13 → 0.3.15
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.
- package/dist/logging.cjs +21 -7
- package/dist/logging.esm.cjs +21 -7
- package/lib/environment.cjs +20 -6
- package/lib/environment.d.ts +4 -31
- package/lib/esm/environment.d.ts +4 -31
- package/lib/esm/environment.js +20 -6
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/package.json +1 -1
package/lib/environment.cjs
CHANGED
|
@@ -32,6 +32,7 @@ const constants_1 = require("./constants.cjs");
|
|
|
32
32
|
* end
|
|
33
33
|
* Env-->>Client: merged value
|
|
34
34
|
*/
|
|
35
|
+
const EmptyValue = Symbol("EnvironmentEmpty");
|
|
35
36
|
class Environment extends typed_object_accumulator_1.ObjectAccumulator {
|
|
36
37
|
/**
|
|
37
38
|
* @static
|
|
@@ -97,9 +98,9 @@ class Environment extends typed_object_accumulator_1.ObjectAccumulator {
|
|
|
97
98
|
if (v && typeof v === "object") {
|
|
98
99
|
return Environment.buildEnvProxy(v, [k]);
|
|
99
100
|
}
|
|
100
|
-
// If the model provides an empty string,
|
|
101
|
+
// If the model provides an empty string, mark with EmptyValue so instance proxy can return undefined without enabling key composition
|
|
101
102
|
if (v === "") {
|
|
102
|
-
return
|
|
103
|
+
return EmptyValue;
|
|
103
104
|
}
|
|
104
105
|
return v;
|
|
105
106
|
},
|
|
@@ -126,6 +127,14 @@ class Environment extends typed_object_accumulator_1.ObjectAccumulator {
|
|
|
126
127
|
const proxied = new Proxy(base, {
|
|
127
128
|
get(target, prop, receiver) {
|
|
128
129
|
const value = Reflect.get(target, prop, receiver);
|
|
130
|
+
if (value === EmptyValue)
|
|
131
|
+
return undefined;
|
|
132
|
+
// If the property exists on the instance but resolves to undefined, return undefined (no proxy)
|
|
133
|
+
if (typeof prop === "string" &&
|
|
134
|
+
Object.prototype.hasOwnProperty.call(target, prop)) {
|
|
135
|
+
if (typeof value === "undefined")
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
129
138
|
if (typeof value !== "undefined")
|
|
130
139
|
return value;
|
|
131
140
|
if (typeof prop === "string") {
|
|
@@ -202,9 +211,8 @@ class Environment extends typed_object_accumulator_1.ObjectAccumulator {
|
|
|
202
211
|
}
|
|
203
212
|
if (typeof prop === "symbol")
|
|
204
213
|
return undefined;
|
|
205
|
-
const
|
|
206
|
-
|
|
207
|
-
: undefined;
|
|
214
|
+
const hasProp = !!current && Object.prototype.hasOwnProperty.call(current, prop);
|
|
215
|
+
const nextModel = hasProp ? current[prop] : undefined;
|
|
208
216
|
const nextPath = [...path, prop];
|
|
209
217
|
const composedKey = buildKey(nextPath);
|
|
210
218
|
// If an ENV value exists for this path, return it directly
|
|
@@ -215,6 +223,12 @@ class Environment extends typed_object_accumulator_1.ObjectAccumulator {
|
|
|
215
223
|
const isNextObject = nextModel && typeof nextModel === "object";
|
|
216
224
|
if (isNextObject)
|
|
217
225
|
return Environment.buildEnvProxy(nextModel, nextPath);
|
|
226
|
+
// If the model marks this leaf as an empty string, treat as undefined (no proxy)
|
|
227
|
+
if (hasProp && nextModel === "")
|
|
228
|
+
return undefined;
|
|
229
|
+
// If the model explicitly contains the property with value undefined, treat as undefined (no proxy)
|
|
230
|
+
if (hasProp && typeof nextModel === "undefined")
|
|
231
|
+
return undefined;
|
|
218
232
|
// Always return a proxy for further path composition when no ENV value;
|
|
219
233
|
// do not surface primitive model defaults here (this API is for key composition).
|
|
220
234
|
return Environment.buildEnvProxy(undefined, nextPath);
|
|
@@ -259,4 +273,4 @@ exports.LoggedEnvironment = Environment.accumulate(Object.assign({}, constants_1
|
|
|
259
273
|
? globalThis[constants_1.BrowserEnvKey]["NODE_ENV"]
|
|
260
274
|
: globalThis.process.env["NODE_ENV"]) || "development",
|
|
261
275
|
}));
|
|
262
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUVBQTZEO0FBQzdELHFDQUFxQztBQUNyQyxtQ0FBa0M7QUFDbEMsK0NBSXFCO0FBY3JCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQWEsV0FBOEIsU0FBUSw0Q0FBb0I7SUFDckU7Ozs7OztPQU1HO2FBQ2MsWUFBTyxHQUN0QixHQUFxQixFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQVU1QztRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sT0FBTyxDQUFDLENBQVM7UUFDekIsSUFBSSxHQUE0QixDQUFDO1FBQ2pDLElBQUksSUFBQSxlQUFTLEdBQUUsRUFBRSxDQUFDO1lBQ2hCLEdBQUc7Z0JBRUMsVUFHRCxDQUFDLHlCQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDN0IsQ0FBQyxHQUFHLElBQUEsa0JBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGFBQWEsQ0FBQyxHQUFZO1FBQ2xDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3hDLElBQUksR0FBRyxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUNoQyxJQUFJLEdBQUcsS0FBSyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FB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O0lBQ3RDLEdBQUcsRUFDRCxDQUFDLElBQUEsZUFBUyxHQUFFLElBQUssVUFBa0IsQ0FBQyx5QkFBYSxDQUFDO1FBQ2hELENBQUMsQ0FBRSxVQUFrQixDQUFDLHlCQUFhLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDaEQsQ0FBQyxDQUFFLFVBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLGFBQWE7Q0FDcEUsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RBY2N1bXVsYXRvciB9IGZyb20gXCJ0eXBlZC1vYmplY3QtYWNjdW11bGF0b3JcIjtcbmltcG9ydCB7IHRvRU5WRm9ybWF0IH0gZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSBcIi4vd2ViXCI7XG5pbXBvcnQge1xuICBCcm93c2VyRW52S2V5LFxuICBEZWZhdWx0TG9nZ2luZ0NvbmZpZyxcbiAgRU5WX1BBVEhfREVMSU1JVEVSLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmFjdG9yeSB0eXBlIGZvciBjcmVhdGluZyBFbnZpcm9ubWVudCBpbnN0YW5jZXMuXG4gKiBAc3VtbWFyeSBEZXNjcmliZXMgZmFjdG9yaWVzIHRoYXQgY29uc3RydWN0IHtAbGluayBFbnZpcm9ubWVudH0gZGVyaXZhdGl2ZXMgd2l0aCBjdXN0b20gaW5pdGlhbGl6YXRpb24uXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIG9iamVjdCB0aGUgRW52aXJvbm1lbnQgd2lsbCBhY2N1bXVsYXRlLlxuICogQHRlbXBsYXRlIEUgLSBUaGUgc3BlY2lmaWMgRW52aXJvbm1lbnQgdHlwZSB0byBiZSBjcmVhdGVkLCBleHRlbmRpbmcgRW52aXJvbm1lbnQ8VD4uXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24odW5rbm93bltdKTogRX0gRW52aXJvbm1lbnRGYWN0b3J5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRGYWN0b3J5PFQgZXh0ZW5kcyBvYmplY3QsIEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxUPj4gPSAoXG4gIC4uLmFyZ3M6IHVua25vd25bXVxuKSA9PiBFO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnZpcm9ubWVudCBhY2N1bXVsYXRvciB0aGF0IGxhemlseSByZWFkcyBmcm9tIHJ1bnRpbWUgc291cmNlcy5cbiAqIEBzdW1tYXJ5IEV4dGVuZHMge0BsaW5rIE9iamVjdEFjY3VtdWxhdG9yfSB0byBtZXJnZSBjb25maWd1cmF0aW9uIG9iamVjdHMgd2hpbGUgcmVzb2x2aW5nIHZhbHVlcyBmcm9tIE5vZGUgb3IgYnJvd3NlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gZGVtYW5kLlxuICogQHRlbXBsYXRlIFRcbiAqIEBjbGFzcyBFbnZpcm9ubWVudFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IENvbmZpZyA9IEVudmlyb25tZW50LmFjY3VtdWxhdGUoeyBsb2dnaW5nOiB7IGxldmVsOiBcImluZm9cIiB9IH0pO1xuICogY29uc29sZS5sb2coQ29uZmlnLmxvZ2dpbmcubGV2ZWwpO1xuICogY29uc29sZS5sb2coU3RyaW5nKENvbmZpZy5sb2dnaW5nLmxldmVsKSk7IC8vID0+IExPR0dJTkdfX0xFVkVMIGtleSB3aGVuIHNlcmlhbGl6ZWRcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IEVudiBhcyBFbnZpcm9ubWVudFxuICogICBwYXJ0aWNpcGFudCBQcm9jZXNzIGFzIHByb2Nlc3MuZW52XG4gKiAgIHBhcnRpY2lwYW50IEJyb3dzZXIgYXMgZ2xvYmFsVGhpcy5FTlZcbiAqICAgQ2xpZW50LT4+RW52OiBhY2N1bXVsYXRlKHBhcnRpYWxDb25maWcpXG4gKiAgIEVudi0+PkVudjogZXhwYW5kKHZhbHVlcylcbiAqICAgQ2xpZW50LT4+RW52OiBDb25maWcubG9nZ2luZy5sZXZlbFxuICogICBhbHQgQnJvd3NlciBydW50aW1lXG4gKiAgICAgRW52LT4+QnJvd3NlcjogbG9va3VwIEVOViBrZXlcbiAqICAgICBCcm93c2VyLS0+PkVudjogcmVzb2x2ZWQgdmFsdWVcbiAqICAgZWxzZSBOb2RlIHJ1bnRpbWVcbiAqICAgICBFbnYtPj5Qcm9jZXNzOiBsb29rdXAgRU5WIGtleVxuICogICAgIFByb2Nlc3MtLT4+RW52OiByZXNvbHZlZCB2YWx1ZVxuICogICBlbmRcbiAqICAgRW52LS0+PkNsaWVudDogbWVyZ2VkIHZhbHVlXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudDxUIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIE9iamVjdEFjY3VtdWxhdG9yPFQ+IHtcbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQHByb3RlY3RlZFxuICAgKiBAZGVzY3JpcHRpb24gQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBFbnZpcm9ubWVudCBpbnN0YW5jZXMuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IG5ldyBpbnN0YW5jZXMgb2YgdGhlIEVudmlyb25tZW50IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudDxhbnk+fSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGZhY3Rvcnk6IEVudmlyb25tZW50RmFjdG9yeTxhbnksIGFueT4gPVxuICAgICgpOiBFbnZpcm9ubWVudDxhbnk+ID0+IG5ldyBFbnZpcm9ubWVudCgpO1xuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcml2YXRlXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHR5cGUge0Vudmlyb25tZW50PGFueT59XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IEVudmlyb25tZW50PGFueT47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gICAqIEBzdW1tYXJ5IEhhbmRsZXMgYnJvd3NlciBhbmQgTm9kZS5qcyBlbnZpcm9ubWVudHMgYnkgbm9ybWFsaXppbmcga2V5cyBhbmQgcGFyc2luZyB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrIC0gS2V5IHRvIHJlc29sdmUgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm4ge3Vua25vd259IFZhbHVlIHJlc29sdmVkIGZyb20gdGhlIGVudmlyb25tZW50IG9yIGB1bmRlZmluZWRgIHdoZW4gYWJzZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGZyb21FbnYoazogc3RyaW5nKSB7XG4gICAgbGV0IGVudjogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICBlbnYgPVxuICAgICAgICAoXG4gICAgICAgICAgZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICAgICAgICAgIFtCcm93c2VyRW52S2V5XTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICB9XG4gICAgICAgIClbQnJvd3NlckVudktleV0gfHwge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudiA9IGdsb2JhbFRoaXMucHJvY2Vzcy5lbnY7XG4gICAgICBrID0gdG9FTlZGb3JtYXQoayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhcnNlRW52VmFsdWUoZW52W2tdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgc3RyaW5naWZpZWQgZW52aXJvbm1lbnQgdmFsdWVzIGludG8gbmF0aXZlIHR5cGVzLlxuICAgKiBAc3VtbWFyeSBJbnRlcnByZXRzIGJvb2xlYW5zIGFuZCBudW1iZXJzIHdoaWxlIGxlYXZpbmcgb3RoZXIgdHlwZXMgdW5jaGFuZ2VkLlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbCAtIFJhdyB2YWx1ZSByZXRyaWV2ZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm4ge3Vua25vd259IFBhcnNlZCB2YWx1ZSBjb252ZXJ0ZWQgdG8gYm9vbGVhbiwgbnVtYmVyLCBvciBsZWZ0IGFzLWlzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcnNlRW52VmFsdWUodmFsOiB1bmtub3duKSB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWw7XG4gICAgaWYgKHZhbCA9PT0gXCJ0cnVlXCIpIHJldHVybiB0cnVlO1xuICAgIGlmICh2YWwgPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlRmxvYXQodmFsKTtcbiAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhwYW5kcyBhbiBvYmplY3QgaW50byB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgbGF6eSBwcm9wZXJ0aWVzIHRoYXQgZmlyc3QgY29uc3VsdCBydW50aW1lIHZhcmlhYmxlcyBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHNlZWRlZCB2YWx1ZXMuXG4gICAqIEB0ZW1wbGF0ZSBWIC0gVHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGV4cGFuZGVkLlxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gT2JqZWN0IHRvIGV4cG9zZSB0aHJvdWdoIGVudmlyb25tZW50IGdldHRlcnMgYW5kIHNldHRlcnMuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhwYW5kPFYgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBWKTogdm9pZCB7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGssIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUVudiA9IHRoaXMuZnJvbUVudihrKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGZyb21FbnYgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmcm9tRW52O1xuICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuYnVpbGRFbnZQcm94eSh2IGFzIGFueSwgW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgdGhlIG1vZGVsIHByb3ZpZGVzIGFuIGVtcHR5IHN0cmluZywgZXhwb3NlIGEgcHJveHkgdGhhdCBjb21wb3NlcyBFTlYga2V5c1xuICAgICAgICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuYnVpbGRFbnZQcm94eSh1bmRlZmluZWQsIFtrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6ICh2YWw6IFZba2V5b2YgVl0pID0+IHtcbiAgICAgICAgICB2ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAc3VtbWFyeSBFbnN1cmVzIG9ubHkgb25lIHtAbGluayBFbnZpcm9ubWVudH0gaW5zdGFuY2UgaXMgY3JlYXRlZCwgd3JhcHBpbmcgaXQgaW4gYSBwcm94eSB0byBjb21wb3NlIEVOViBrZXlzIG9uIGRlbWFuZC5cbiAgICogQHRlbXBsYXRlIEVcbiAgICogQHBhcmFtIHsuLi51bmtub3duW119IGFyZ3MgLSBBcmd1bWVudHMgZm9yd2FyZGVkIHRvIHRoZSBmYWN0b3J5IHdoZW4gaW5zdGFudGlhdGluZyB0aGUgc2luZ2xldG9uLlxuICAgKiBAcmV0dXJuIHtFfSBTaW5nbGV0b24gZW52aXJvbm1lbnQgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGluc3RhbmNlPEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxhbnk+PiguLi5hcmdzOiB1bmtub3duW10pOiBFIHtcbiAgICBpZiAoIUVudmlyb25tZW50Ll9pbnN0YW5jZSkge1xuICAgICAgY29uc3QgYmFzZSA9IEVudmlyb25tZW50LmZhY3RvcnkoLi4uYXJncykgYXMgRTtcbiAgICAgIGNvbnN0IHByb3hpZWQgPSBuZXcgUHJveHkoYmFzZSBhcyBhbnksIHtcbiAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIGludGVyZmVyaW5nIHdpdGggbG9nZ2luZyBjb25maWcgbG9va3VwcyBmb3Igb3B0aW9uYWwgZmllbGRzIGxpa2UgJ2FwcCdcbiAgICAgICAgICAgIGlmIChwcm9wID09PSBcImFwcFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LmJ1aWxkRW52UHJveHkodW5kZWZpbmVkLCBbcHJvcF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIEVudmlyb25tZW50Ll9pbnN0YW5jZSA9IHByb3hpZWQgYXMgYW55O1xuICAgIH1cbiAgICByZXR1cm4gRW52aXJvbm1lbnQuX2luc3RhbmNlIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzLCBoaWRpbmcgcmF3IGRlc2NyaXB0b3JzIHRvIGF2b2lkIGxlYWtpbmcgZW51bWVyYXRpb24gc2VtYW50aWNzLlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAdGVtcGxhdGUgVlxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gT2JqZWN0IHRvIG1lcmdlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudH0gVXBkYXRlZCBlbnZpcm9ubWVudCByZWZlcmVuY2UuXG4gICAqL1xuICBzdGF0aWMgYWNjdW11bGF0ZTxWIGV4dGVuZHMgb2JqZWN0PihcbiAgICB2YWx1ZTogVlxuICApOiB0eXBlb2YgRW52aXJvbm1lbnQuX2luc3RhbmNlICZcbiAgICBWICZcbiAgICBPYmplY3RBY2N1bXVsYXRvcjx0eXBlb2YgRW52aXJvbm1lbnQuX2luc3RhbmNlICYgVj4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gRW52aXJvbm1lbnQuaW5zdGFuY2UoKTtcbiAgICBPYmplY3Qua2V5cyhpbnN0YW5jZSBhcyBhbnkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5zdGFuY2UgYXMgYW55LCBrZXkpO1xuICAgICAgaWYgKGRlc2MgJiYgZGVzYy5jb25maWd1cmFibGUgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0YW5jZSBhcyBhbnksIGtleSwge1xuICAgICAgICAgIC4uLmRlc2MsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpbnN0YW5jZS5hY2N1bXVsYXRlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgdXNpbmcgYSBkb3QtcGF0aCBrZXkgZnJvbSB0aGUgYWNjdW11bGF0ZWQgZW52aXJvbm1lbnQuXG4gICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIHRvIGFjY2VzcyBzdG9yZWQgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEtleSB0byByZXNvbHZlIGZyb20gdGhlIGVudmlyb25tZW50IHN0b3JlLlxuICAgKiBAcmV0dXJuIHt1bmtub3dufSBTdG9yZWQgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQga2V5LlxuICAgKi9cbiAgc3RhdGljIGdldChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBFbnZpcm9ubWVudC5faW5zdGFuY2UuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEJ1aWxkcyBhIHByb3h5IHRoYXQgY29tcG9zZXMgZW52aXJvbm1lbnQga2V5cyBmb3IgbmVzdGVkIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IEFsbG93cyBjaGFpbmVkIHByb3BlcnR5IGFjY2VzcyB0byBlbWl0IHVwcGVyY2FzZSBFTlYgaWRlbnRpZmllcnMgd2hpbGUgaG9ub3JpbmcgZXhpc3RpbmcgcnVudGltZSBvdmVycmlkZXMuXG4gICAqIEBwYXJhbSB7YW55fSBjdXJyZW50IC0gU2VlZCBtb2RlbCBzZWdtZW50IHVzZWQgd2hlbiBwcm9qZWN0aW5nIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gQWNjdW11bGF0ZWQgcGF0aCBzZWdtZW50cyBsZWFkaW5nIHRvIHRoZSBwcm94eS5cbiAgICogQHJldHVybiB7YW55fSBQcm94eSB0aGF0IHJlc29sdmVzIGVudmlyb25tZW50IHZhbHVlcyBvciBjb21wb3NlcyBhZGRpdGlvbmFsIHByb3hpZXMgZm9yIGRlZXBlciBwYXRocy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkRW52UHJveHkoY3VycmVudDogYW55LCBwYXRoOiBzdHJpbmdbXSk6IGFueSB7XG4gICAgY29uc3QgYnVpbGRLZXkgPSAocDogc3RyaW5nW10pID0+XG4gICAgICBwLm1hcCgoc2VnKSA9PiB0b0VOVkZvcm1hdChzZWcpKS5qb2luKEVOVl9QQVRIX0RFTElNSVRFUik7XG5cbiAgICAvLyBIZWxwZXIgdG8gcmVhZCBmcm9tIHRoZSBhY3RpdmUgZW52aXJvbm1lbnQgZ2l2ZW4gYSBjb21wb3NlZCBrZXlcbiAgICBjb25zdCByZWFkRW52ID0gKGtleTogc3RyaW5nKTogdW5rbm93biA9PiB7XG4gICAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgICAgY29uc3QgZW52ID0gKFxuICAgICAgICAgIGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgICAgICAgICBbQnJvd3NlckVudktleV0/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICB9XG4gICAgICAgIClbQnJvd3NlckVudktleV07XG4gICAgICAgIHJldHVybiBlbnYgPyBlbnZba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBhbnkpPy5wcm9jZXNzPy5lbnY/LltrZXldO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVyOiBQcm94eUhhbmRsZXI8YW55PiA9IHtcbiAgICAgIGdldChfdGFyZ2V0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICAgICAgaWYgKHByb3AgPT09IFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuICAgICAgICAgIHJldHVybiAoKSA9PiBidWlsZEtleShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcCA9PT0gXCJ0b1N0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuICgpID0+IGJ1aWxkS2V5KHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wID09PSBcInZhbHVlT2ZcIikge1xuICAgICAgICAgIHJldHVybiAoKSA9PiBidWlsZEtleShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3ltYm9sXCIpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgbmV4dE1vZGVsID1cbiAgICAgICAgICBjdXJyZW50ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyZW50LCBwcm9wKVxuICAgICAgICAgICAgPyAoY3VycmVudCBhcyBhbnkpW3Byb3BdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbmV4dFBhdGggPSBbLi4ucGF0aCwgcHJvcF07XG4gICAgICAgIGNvbnN0IGNvbXBvc2VkS2V5ID0gYnVpbGRLZXkobmV4dFBhdGgpO1xuXG4gICAgICAgIC8vIElmIGFuIEVOViB2YWx1ZSBleGlzdHMgZm9yIHRoaXMgcGF0aCwgcmV0dXJuIGl0IGRpcmVjdGx5XG4gICAgICAgIGNvbnN0IGVudlZhbHVlID0gcmVhZEVudihjb21wb3NlZEtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgZW52VmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbnZWYWx1ZTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBtb2RlbCBoYXMgYW4gb2JqZWN0IGF0IHRoaXMgcGF0aCwga2VlcCBkcmlsbGluZyB3aXRoIGEgcHJveHlcbiAgICAgICAgY29uc3QgaXNOZXh0T2JqZWN0ID0gbmV4dE1vZGVsICYmIHR5cGVvZiBuZXh0TW9kZWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgIGlmIChpc05leHRPYmplY3QpIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KG5leHRNb2RlbCwgbmV4dFBhdGgpO1xuXG4gICAgICAgIC8vIEFsd2F5cyByZXR1cm4gYSBwcm94eSBmb3IgZnVydGhlciBwYXRoIGNvbXBvc2l0aW9uIHdoZW4gbm8gRU5WIHZhbHVlO1xuICAgICAgICAvLyBkbyBub3Qgc3VyZmFjZSBwcmltaXRpdmUgbW9kZWwgZGVmYXVsdHMgaGVyZSAodGhpcyBBUEkgaXMgZm9yIGtleSBjb21wb3NpdGlvbikuXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KHVuZGVmaW5lZCwgbmV4dFBhdGgpO1xuICAgICAgfSxcbiAgICAgIG93bktleXMoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50ID8gUmVmbGVjdC5vd25LZXlzKGN1cnJlbnQpIDogW107XG4gICAgICB9LFxuICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF90LCBwKSB7XG4gICAgICAgIGlmICghY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZCBhcyBhbnk7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwgcCkpIHtcbiAgICAgICAgICByZXR1cm4geyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSBhcyBQcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBhbnk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0YXJnZXQgPSB7fSBhcyBhbnk7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUga2V5cyBvZiB0aGUgZW52aXJvbm1lbnQsIG9wdGlvbmFsbHkgY29udmVydGluZyB0aGVtIHRvIEVOViBmb3JtYXQuXG4gICAqIEBzdW1tYXJ5IEdldHMgYWxsIGtleXMgaW4gdGhlIGVudmlyb25tZW50LCB3aXRoIGFuIG9wdGlvbiB0byBmb3JtYXQgdGhlbSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b0Vudj10cnVlXSAtIFdoZXRoZXIgdG8gY29udmVydCB0aGUga2V5cyB0byBFTlYgZm9ybWF0LlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Yga2V5cyBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIHN0YXRpYyBrZXlzKHRvRW52OiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuaW5zdGFuY2UoKVxuICAgICAgLmtleXMoKVxuICAgICAgLm1hcCgoaykgPT4gKHRvRW52ID8gdG9FTlZGb3JtYXQoaykgOiBrKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU2luZ2xldG9uIGVudmlyb25tZW50IGluc3RhbmNlIHNlZWRlZCB3aXRoIGRlZmF1bHQgbG9nZ2luZyBjb25maWd1cmF0aW9uLlxuICogQHN1bW1hcnkgQ29tYmluZXMge0BsaW5rIERlZmF1bHRMb2dnaW5nQ29uZmlnfSB3aXRoIHJ1bnRpbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHByb3ZpZGUgY29uc2lzdGVudCBsb2dnaW5nIGRlZmF1bHRzIGFjcm9zcyBwbGF0Zm9ybXMuXG4gKiBAY29uc3QgTG9nZ2VkRW52aXJvbm1lbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgTG9nZ2VkRW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5hY2N1bXVsYXRlKFxuICBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0TG9nZ2luZ0NvbmZpZywge1xuICAgIGVudjpcbiAgICAgIChpc0Jyb3dzZXIoKSAmJiAoZ2xvYmFsVGhpcyBhcyBhbnkpW0Jyb3dzZXJFbnZLZXldXG4gICAgICAgID8gKGdsb2JhbFRoaXMgYXMgYW55KVtCcm93c2VyRW52S2V5XVtcIk5PREVfRU5WXCJdXG4gICAgICAgIDogKGdsb2JhbFRoaXMgYXMgYW55KS5wcm9jZXNzLmVudltcIk5PREVfRU5WXCJdKSB8fCBcImRldmVsb3BtZW50XCIsXG4gIH0pXG4pO1xuIl19
|
|
276
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdUVBQTZEO0FBQzdELHFDQUFxQztBQUNyQyxtQ0FBa0M7QUFDbEMsK0NBSXFCO0FBY3JCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRTlDLE1BQWEsV0FBOEIsU0FBUSw0Q0FBb0I7SUFDckU7Ozs7OztPQU1HO2FBQ2MsWUFBTyxHQUN0QixHQUFxQixFQUFFLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQVU1QztRQUNFLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sT0FBTyxDQUFDLENBQVM7UUFDekIsSUFBSSxHQUE0QixDQUFDO1FBQ2pDLElBQUksSUFBQSxlQUFTLEdBQUUsRUFBRSxDQUFDO1lBQ2hCLEdBQUc7Z0JBRUMsVUFHRCxDQUFDLHlCQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0IsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDN0IsQ0FBQyxHQUFHLElBQUEsa0JBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGFBQWEsQ0FBQyxHQUFZO1FBQ2xDLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3hDLElBQUksR0FBRyxLQUFLLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUNoQyxJQUFJLEdBQUcsS0FBSyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDbEMsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDbEMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ2dCLE1BQU0sQ0FBbUIsS0FBUTtRQUNsRCxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDdkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUM3QixHQUFHLEVBQUUsR0FBRyxFQUFFO29CQUNSLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hDLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVzt3QkFBRSxPQUFPLE9BQU8sQ0FBQztvQkFDbkQsSUFBSSxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQy9CLE9BQU8sV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxDQUFDO29CQUNELHNJQUFzSTtvQkFDdEksSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7d0JBQ2IsT0FBTyxVQUFtQyxDQUFDO29CQUM3QyxDQUFDO29CQUNELE9BQU8sQ0FBQyxDQUFDO2dCQUNYLENBQUM7Z0JBQ0QsR0FBRyxFQUFFLENBQUMsR0FBZSxFQUFFLEVBQUU7b0JBQ3ZCLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ1YsQ0FBQztnQkFDRCxZQUFZLEVBQUUsSUFBSTtnQkFDbEIsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDTyxNQUFNLENBQUMsUUFBUSxDQUE2QixHQUFHLElBQWU7UUFDdEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFNLENBQUM7WUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBVyxFQUFFO2dCQUNyQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRO29CQUN4QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7b0JBQ2xELElBQUksS0FBSyxLQUFLLFVBQVU7d0JBQUUsT0FBTyxTQUFTLENBQUM7b0JBQzNDLGdHQUFnRztvQkFDaEcsSUFDRSxPQUFPLElBQUksS0FBSyxRQUFRO3dCQUN4QixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUNsRCxDQUFDO3dCQUNELElBQUksT0FBTyxLQUFLLEtBQUssV0FBVzs0QkFBRSxPQUFPLFNBQVMsQ0FBQztvQkFDckQsQ0FBQztvQkFDRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFdBQVc7d0JBQUUsT0FBTyxLQUFLLENBQUM7b0JBQy9DLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7d0JBQzdCLCtFQUErRTt3QkFDL0UsSUFBSSxJQUFJLEtBQUssS0FBSzs0QkFBRSxPQUFPLFNBQVMsQ0FBQzt3QkFDckMsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7b0JBQ3RELENBQUM7b0JBQ0QsT0FBTyxLQUFLLENBQUM7Z0JBQ2YsQ0FBQzthQUNGLENBQUMsQ0FBQztZQUNILFdBQVcsQ0FBQyxTQUFTLEdBQUcsT0FBYyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQyxTQUFjLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FDZixLQUFRO1FBRVIsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBMEIsQ0FBQztRQUNoRSxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzNDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxRQUFlLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBZSxFQUFFLEdBQUcsRUFBRTtvQkFDMUMsR0FBRyxJQUFJO29CQUNQLFVBQVUsRUFBRSxLQUFLO2lCQUNsQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUU3QixDQUFDO0lBQ04sQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFXO1FBQ3BCLE9BQU8sV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBWSxFQUFFLElBQWM7UUFDdkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFXLEVBQUUsRUFBRSxDQUMvQixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGtCQUFXLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsOEJBQWtCLENBQUMsQ0FBQztRQUU1RCxrRUFBa0U7UUFDbEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFXLEVBQVcsRUFBRTtZQUN2QyxJQUFJLElBQUEsZUFBUyxHQUFFLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxHQUFHLEdBQ1AsVUFHRCxDQUFDLHlCQUFhLENBQUMsQ0FBQztnQkFDakIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3BDLENBQUM7WUFDRCxPQUFRLFVBQWtCLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQztRQUVGLE1BQU0sT0FBTyxHQUFzQjtZQUNqQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQXFCO2dCQUNoQyxJQUFJLElBQUksS0FBSyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ2hDLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QixDQUFDO2dCQUNELElBQUksSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUN4QixPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztnQkFDRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDdkIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlCLENBQUM7Z0JBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO29CQUFFLE9BQU8sU0FBUyxDQUFDO2dCQUUvQyxNQUFNLE9BQU8sR0FDWCxDQUFDLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25FLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUUsT0FBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQy9ELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFFdkMsMkRBQTJEO2dCQUMzRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVztvQkFBRSxPQUFPLFFBQVEsQ0FBQztnQkFFckQsaUZBQWlGO2dCQUNqRixNQUFNLFlBQVksR0FBRyxTQUFTLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxDQUFDO2dCQUNoRSxJQUFJLFlBQVk7b0JBQUUsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFFeEUsaUZBQWlGO2dCQUNqRixJQUFJLE9BQU8sSUFBSSxTQUFTLEtBQUssRUFBRTtvQkFBRSxPQUFPLFNBQVMsQ0FBQztnQkFDbEQsb0dBQW9HO2dCQUNwRyxJQUFJLE9BQU8sSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXO29CQUFFLE9BQU8sU0FBUyxDQUFDO2dCQUVsRSx3RUFBd0U7Z0JBQ3hFLGtGQUFrRjtnQkFDbEYsT0FBTyxXQUFXLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4RCxDQUFDO1lBQ0QsT0FBTztnQkFDTCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2pELENBQUM7WUFDRCx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTyxTQUFnQixDQUFDO2dCQUN0QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBd0IsQ0FBQztnQkFDeEUsQ0FBQztnQkFDRCxPQUFPLFNBQWdCLENBQUM7WUFDMUIsQ0FBQztTQUNGLENBQUM7UUFFRixNQUFNLE1BQU0sR0FBRyxFQUFTLENBQUM7UUFDekIsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBaUIsSUFBSTtRQUMvQixPQUFPLFdBQVcsQ0FBQyxRQUFRLEVBQUU7YUFDMUIsSUFBSSxFQUFFO2FBQ04sR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBQSxrQkFBVyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O0FBNVBILGtDQTZQQztBQUVEOzs7OztHQUtHO0FBQ1UsUUFBQSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxnQ0FBb0IsRUFBRTtJQUN0QyxHQUFHLEVBQ0QsQ0FBQyxJQUFBLGVBQVMsR0FBRSxJQUFLLFVBQWtCLENBQUMseUJBQWEsQ0FBQztRQUNoRCxDQUFDLENBQUUsVUFBa0IsQ0FBQyx5QkFBYSxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ2hELENBQUMsQ0FBRSxVQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxhQUFhO0NBQ3BFLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JqZWN0QWNjdW11bGF0b3IgfSBmcm9tIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCI7XG5pbXBvcnQgeyB0b0VOVkZvcm1hdCB9IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gXCIuL3dlYlwiO1xuaW1wb3J0IHtcbiAgQnJvd3NlckVudktleSxcbiAgRGVmYXVsdExvZ2dpbmdDb25maWcsXG4gIEVOVl9QQVRIX0RFTElNSVRFUixcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgdHlwZSBmb3IgY3JlYXRpbmcgRW52aXJvbm1lbnQgaW5zdGFuY2VzLlxuICogQHN1bW1hcnkgRGVzY3JpYmVzIGZhY3RvcmllcyB0aGF0IGNvbnN0cnVjdCB7QGxpbmsgRW52aXJvbm1lbnR9IGRlcml2YXRpdmVzIHdpdGggY3VzdG9tIGluaXRpYWxpemF0aW9uLlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiBvYmplY3QgdGhlIEVudmlyb25tZW50IHdpbGwgYWNjdW11bGF0ZS5cbiAqIEB0ZW1wbGF0ZSBFIC0gVGhlIHNwZWNpZmljIEVudmlyb25tZW50IHR5cGUgdG8gYmUgY3JlYXRlZCwgZXh0ZW5kaW5nIEVudmlyb25tZW50PFQ+LlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHVua25vd25bXSk6IEV9IEVudmlyb25tZW50RmFjdG9yeVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50RmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0LCBFIGV4dGVuZHMgRW52aXJvbm1lbnQ8VD4+ID0gKFxuICAuLi5hcmdzOiB1bmtub3duW11cbikgPT4gRTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW52aXJvbm1lbnQgYWNjdW11bGF0b3IgdGhhdCBsYXppbHkgcmVhZHMgZnJvbSBydW50aW1lIHNvdXJjZXMuXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHtAbGluayBPYmplY3RBY2N1bXVsYXRvcn0gdG8gbWVyZ2UgY29uZmlndXJhdGlvbiBvYmplY3RzIHdoaWxlIHJlc29sdmluZyB2YWx1ZXMgZnJvbSBOb2RlIG9yIGJyb3dzZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIGRlbWFuZC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAY2xhc3MgRW52aXJvbm1lbnRcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBDb25maWcgPSBFbnZpcm9ubWVudC5hY2N1bXVsYXRlKHsgbG9nZ2luZzogeyBsZXZlbDogXCJpbmZvXCIgfSB9KTtcbiAqIGNvbnNvbGUubG9nKENvbmZpZy5sb2dnaW5nLmxldmVsKTtcbiAqIGNvbnNvbGUubG9nKFN0cmluZyhDb25maWcubG9nZ2luZy5sZXZlbCkpOyAvLyA9PiBMT0dHSU5HX19MRVZFTCBrZXkgd2hlbiBzZXJpYWxpemVkXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBFbnYgYXMgRW52aXJvbm1lbnRcbiAqICAgcGFydGljaXBhbnQgUHJvY2VzcyBhcyBwcm9jZXNzLmVudlxuICogICBwYXJ0aWNpcGFudCBCcm93c2VyIGFzIGdsb2JhbFRoaXMuRU5WXG4gKiAgIENsaWVudC0+PkVudjogYWNjdW11bGF0ZShwYXJ0aWFsQ29uZmlnKVxuICogICBFbnYtPj5FbnY6IGV4cGFuZCh2YWx1ZXMpXG4gKiAgIENsaWVudC0+PkVudjogQ29uZmlnLmxvZ2dpbmcubGV2ZWxcbiAqICAgYWx0IEJyb3dzZXIgcnVudGltZVxuICogICAgIEVudi0+PkJyb3dzZXI6IGxvb2t1cCBFTlYga2V5XG4gKiAgICAgQnJvd3Nlci0tPj5FbnY6IHJlc29sdmVkIHZhbHVlXG4gKiAgIGVsc2UgTm9kZSBydW50aW1lXG4gKiAgICAgRW52LT4+UHJvY2VzczogbG9va3VwIEVOViBrZXlcbiAqICAgICBQcm9jZXNzLS0+PkVudjogcmVzb2x2ZWQgdmFsdWVcbiAqICAgZW5kXG4gKiAgIEVudi0tPj5DbGllbnQ6IG1lcmdlZCB2YWx1ZVxuICovXG5jb25zdCBFbXB0eVZhbHVlID0gU3ltYm9sKFwiRW52aXJvbm1lbnRFbXB0eVwiKTtcblxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50PFQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgT2JqZWN0QWNjdW11bGF0b3I8VD4ge1xuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBBIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIEVudmlyb25tZW50IGluc3RhbmNlcy5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBob3cgbmV3IGluc3RhbmNlcyBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAqIEByZXR1cm4ge0Vudmlyb25tZW50PGFueT59IEEgbmV3IGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgZmFjdG9yeTogRW52aXJvbm1lbnRGYWN0b3J5PGFueSwgYW55PiA9XG4gICAgKCk6IEVudmlyb25tZW50PGFueT4gPT4gbmV3IEVudmlyb25tZW50KCk7XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQHByaXZhdGVcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAdHlwZSB7RW52aXJvbm1lbnQ8YW55Pn1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogRW52aXJvbm1lbnQ8YW55PjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAgICogQHN1bW1hcnkgSGFuZGxlcyBicm93c2VyIGFuZCBOb2RlLmpzIGVudmlyb25tZW50cyBieSBub3JtYWxpemluZyBrZXlzIGFuZCBwYXJzaW5nIHZhbHVlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGsgLSBLZXkgdG8gcmVzb2x2ZSBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHJldHVybiB7dW5rbm93bn0gVmFsdWUgcmVzb2x2ZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZnJvbUVudihrOiBzdHJpbmcpIHtcbiAgICBsZXQgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgIGVudiA9XG4gICAgICAgIChcbiAgICAgICAgICBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgICAgICAgICAgW0Jyb3dzZXJFbnZLZXldOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgICAgIH1cbiAgICAgICAgKVtCcm93c2VyRW52S2V5XSB8fCB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW52ID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmVudjtcbiAgICAgIGsgPSB0b0VOVkZvcm1hdChrKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VFbnZWYWx1ZShlbnZba10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBzdHJpbmdpZmllZCBlbnZpcm9ubWVudCB2YWx1ZXMgaW50byBuYXRpdmUgdHlwZXMuXG4gICAqIEBzdW1tYXJ5IEludGVycHJldHMgYm9vbGVhbnMgYW5kIG51bWJlcnMgd2hpbGUgbGVhdmluZyBvdGhlciB0eXBlcyB1bmNoYW5nZWQuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdmFsIC0gUmF3IHZhbHVlIHJldHJpZXZlZCBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHJldHVybiB7dW5rbm93bn0gUGFyc2VkIHZhbHVlIGNvbnZlcnRlZCB0byBib29sZWFuLCBudW1iZXIsIG9yIGxlZnQgYXMtaXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcGFyc2VFbnZWYWx1ZSh2YWw6IHVua25vd24pIHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbDtcbiAgICBpZiAodmFsID09PSBcInRydWVcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKHZhbCA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VGbG9hdCh2YWwpO1xuICAgIGlmICghaXNOYU4ocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeHBhbmRzIGFuIG9iamVjdCBpbnRvIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBsYXp5IHByb3BlcnRpZXMgdGhhdCBmaXJzdCBjb25zdWx0IHJ1bnRpbWUgdmFyaWFibGVzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gc2VlZGVkIHZhbHVlcy5cbiAgICogQHRlbXBsYXRlIFYgLSBUeXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWQuXG4gICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBPYmplY3QgdG8gZXhwb3NlIHRocm91Z2ggZW52aXJvbm1lbnQgZ2V0dGVycyBhbmQgc2V0dGVycy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBleHBhbmQ8ViBleHRlbmRzIG9iamVjdD4odmFsdWU6IFYpOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmcm9tRW52ID0gdGhpcy5mcm9tRW52KGspO1xuICAgICAgICAgIGlmICh0eXBlb2YgZnJvbUVudiAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZyb21FbnY7XG4gICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KHYgYXMgYW55LCBba10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJZiB0aGUgbW9kZWwgcHJvdmlkZXMgYW4gZW1wdHkgc3RyaW5nLCBtYXJrIHdpdGggRW1wdHlWYWx1ZSBzbyBpbnN0YW5jZSBwcm94eSBjYW4gcmV0dXJuIHVuZGVmaW5lZCB3aXRob3V0IGVuYWJsaW5nIGtleSBjb21wb3NpdGlvblxuICAgICAgICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gRW1wdHlWYWx1ZSBhcyB1bmtub3duIGFzIFZba2V5b2YgVl07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6ICh2YWw6IFZba2V5b2YgVl0pID0+IHtcbiAgICAgICAgICB2ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAc3VtbWFyeSBFbnN1cmVzIG9ubHkgb25lIHtAbGluayBFbnZpcm9ubWVudH0gaW5zdGFuY2UgaXMgY3JlYXRlZCwgd3JhcHBpbmcgaXQgaW4gYSBwcm94eSB0byBjb21wb3NlIEVOViBrZXlzIG9uIGRlbWFuZC5cbiAgICogQHRlbXBsYXRlIEVcbiAgICogQHBhcmFtIHsuLi51bmtub3duW119IGFyZ3MgLSBBcmd1bWVudHMgZm9yd2FyZGVkIHRvIHRoZSBmYWN0b3J5IHdoZW4gaW5zdGFudGlhdGluZyB0aGUgc2luZ2xldG9uLlxuICAgKiBAcmV0dXJuIHtFfSBTaW5nbGV0b24gZW52aXJvbm1lbnQgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGluc3RhbmNlPEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxhbnk+PiguLi5hcmdzOiB1bmtub3duW10pOiBFIHtcbiAgICBpZiAoIUVudmlyb25tZW50Ll9pbnN0YW5jZSkge1xuICAgICAgY29uc3QgYmFzZSA9IEVudmlyb25tZW50LmZhY3RvcnkoLi4uYXJncykgYXMgRTtcbiAgICAgIGNvbnN0IHByb3hpZWQgPSBuZXcgUHJveHkoYmFzZSBhcyBhbnksIHtcbiAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gRW1wdHlWYWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSBidXQgcmVzb2x2ZXMgdG8gdW5kZWZpbmVkLCByZXR1cm4gdW5kZWZpbmVkIChubyBwcm94eSlcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJvcClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIGludGVyZmVyaW5nIHdpdGggbG9nZ2luZyBjb25maWcgbG9va3VwcyBmb3Igb3B0aW9uYWwgZmllbGRzIGxpa2UgJ2FwcCdcbiAgICAgICAgICAgIGlmIChwcm9wID09PSBcImFwcFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LmJ1aWxkRW52UHJveHkodW5kZWZpbmVkLCBbcHJvcF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIEVudmlyb25tZW50Ll9pbnN0YW5jZSA9IHByb3hpZWQgYXMgYW55O1xuICAgIH1cbiAgICByZXR1cm4gRW52aXJvbm1lbnQuX2luc3RhbmNlIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzLCBoaWRpbmcgcmF3IGRlc2NyaXB0b3JzIHRvIGF2b2lkIGxlYWtpbmcgZW51bWVyYXRpb24gc2VtYW50aWNzLlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAdGVtcGxhdGUgVlxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gT2JqZWN0IHRvIG1lcmdlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudH0gVXBkYXRlZCBlbnZpcm9ubWVudCByZWZlcmVuY2UuXG4gICAqL1xuICBzdGF0aWMgYWNjdW11bGF0ZTxWIGV4dGVuZHMgb2JqZWN0LCBUQmFzZSBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4oXG4gICAgdmFsdWU6IFZcbiAgKTogRW52aXJvbm1lbnQ8VEJhc2UgJiBWPiAmIFRCYXNlICYgViB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBFbnZpcm9ubWVudC5pbnN0YW5jZTxFbnZpcm9ubWVudDxUQmFzZSAmIFY+PigpO1xuICAgIE9iamVjdC5rZXlzKGluc3RhbmNlIGFzIGFueSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbnN0YW5jZSBhcyBhbnksIGtleSk7XG4gICAgICBpZiAoZGVzYyAmJiBkZXNjLmNvbmZpZ3VyYWJsZSAmJiBkZXNjLmVudW1lcmFibGUpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3RhbmNlIGFzIGFueSwga2V5LCB7XG4gICAgICAgICAgLi4uZGVzYyxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmFjY3VtdWxhdGUodmFsdWUpIGFzIHVua25vd24gYXMgRW52aXJvbm1lbnQ8VEJhc2UgJiBWPiAmXG4gICAgICBUQmFzZSAmXG4gICAgICBWO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSB1c2luZyBhIGRvdC1wYXRoIGtleSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBlbnZpcm9ubWVudC5cbiAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UgdG8gYWNjZXNzIHN0b3JlZCBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gS2V5IHRvIHJlc29sdmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgc3RvcmUuXG4gICAqIEByZXR1cm4ge3Vua25vd259IFN0b3JlZCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBrZXkuXG4gICAqL1xuICBzdGF0aWMgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Ll9pbnN0YW5jZS5nZXQoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQnVpbGRzIGEgcHJveHkgdGhhdCBjb21wb3NlcyBlbnZpcm9ubWVudCBrZXlzIGZvciBuZXN0ZWQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgQWxsb3dzIGNoYWluZWQgcHJvcGVydHkgYWNjZXNzIHRvIGVtaXQgdXBwZXJjYXNlIEVOViBpZGVudGlmaWVycyB3aGlsZSBob25vcmluZyBleGlzdGluZyBydW50aW1lIG92ZXJyaWRlcy5cbiAgICogQHBhcmFtIHthbnl9IGN1cnJlbnQgLSBTZWVkIG1vZGVsIHNlZ21lbnQgdXNlZCB3aGVuIHByb2plY3RpbmcgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBBY2N1bXVsYXRlZCBwYXRoIHNlZ21lbnRzIGxlYWRpbmcgdG8gdGhlIHByb3h5LlxuICAgKiBAcmV0dXJuIHthbnl9IFByb3h5IHRoYXQgcmVzb2x2ZXMgZW52aXJvbm1lbnQgdmFsdWVzIG9yIGNvbXBvc2VzIGFkZGl0aW9uYWwgcHJveGllcyBmb3IgZGVlcGVyIHBhdGhzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRFbnZQcm94eShjdXJyZW50OiBhbnksIHBhdGg6IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBidWlsZEtleSA9IChwOiBzdHJpbmdbXSkgPT5cbiAgICAgIHAubWFwKChzZWcpID0+IHRvRU5WRm9ybWF0KHNlZykpLmpvaW4oRU5WX1BBVEhfREVMSU1JVEVSKTtcblxuICAgIC8vIEhlbHBlciB0byByZWFkIGZyb20gdGhlIGFjdGl2ZSBlbnZpcm9ubWVudCBnaXZlbiBhIGNvbXBvc2VkIGtleVxuICAgIGNvbnN0IHJlYWRFbnYgPSAoa2V5OiBzdHJpbmcpOiB1bmtub3duID0+IHtcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICBjb25zdCBlbnYgPSAoXG4gICAgICAgICAgZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICAgICAgICAgIFtCcm93c2VyRW52S2V5XT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIH1cbiAgICAgICAgKVtCcm93c2VyRW52S2V5XTtcbiAgICAgICAgcmV0dXJuIGVudiA/IGVudltrZXldIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIGFueSk/LnByb2Nlc3M/LmVudj8uW2tleV07XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZXI6IFByb3h5SGFuZGxlcjxhbnk+ID0ge1xuICAgICAgZ2V0KF90YXJnZXQsIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgICAgICBpZiAocHJvcCA9PT0gU3ltYm9sLnRvUHJpbWl0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuICgpID0+IGJ1aWxkS2V5KHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wID09PSBcInRvU3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4gYnVpbGRLZXkocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3AgPT09IFwidmFsdWVPZlwiKSB7XG4gICAgICAgICAgcmV0dXJuICgpID0+IGJ1aWxkS2V5KHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBoYXNQcm9wID1cbiAgICAgICAgICAhIWN1cnJlbnQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIHByb3ApO1xuICAgICAgICBjb25zdCBuZXh0TW9kZWwgPSBoYXNQcm9wID8gKGN1cnJlbnQgYXMgYW55KVtwcm9wXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbmV4dFBhdGggPSBbLi4ucGF0aCwgcHJvcF07XG4gICAgICAgIGNvbnN0IGNvbXBvc2VkS2V5ID0gYnVpbGRLZXkobmV4dFBhdGgpO1xuXG4gICAgICAgIC8vIElmIGFuIEVOViB2YWx1ZSBleGlzdHMgZm9yIHRoaXMgcGF0aCwgcmV0dXJuIGl0IGRpcmVjdGx5XG4gICAgICAgIGNvbnN0IGVudlZhbHVlID0gcmVhZEVudihjb21wb3NlZEtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgZW52VmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbnZWYWx1ZTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBtb2RlbCBoYXMgYW4gb2JqZWN0IGF0IHRoaXMgcGF0aCwga2VlcCBkcmlsbGluZyB3aXRoIGEgcHJveHlcbiAgICAgICAgY29uc3QgaXNOZXh0T2JqZWN0ID0gbmV4dE1vZGVsICYmIHR5cGVvZiBuZXh0TW9kZWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgIGlmIChpc05leHRPYmplY3QpIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KG5leHRNb2RlbCwgbmV4dFBhdGgpO1xuXG4gICAgICAgIC8vIElmIHRoZSBtb2RlbCBtYXJrcyB0aGlzIGxlYWYgYXMgYW4gZW1wdHkgc3RyaW5nLCB0cmVhdCBhcyB1bmRlZmluZWQgKG5vIHByb3h5KVxuICAgICAgICBpZiAoaGFzUHJvcCAmJiBuZXh0TW9kZWwgPT09IFwiXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIElmIHRoZSBtb2RlbCBleHBsaWNpdGx5IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSB3aXRoIHZhbHVlIHVuZGVmaW5lZCwgdHJlYXQgYXMgdW5kZWZpbmVkIChubyBwcm94eSlcbiAgICAgICAgaWYgKGhhc1Byb3AgJiYgdHlwZW9mIG5leHRNb2RlbCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBBbHdheXMgcmV0dXJuIGEgcHJveHkgZm9yIGZ1cnRoZXIgcGF0aCBjb21wb3NpdGlvbiB3aGVuIG5vIEVOViB2YWx1ZTtcbiAgICAgICAgLy8gZG8gbm90IHN1cmZhY2UgcHJpbWl0aXZlIG1vZGVsIGRlZmF1bHRzIGhlcmUgKHRoaXMgQVBJIGlzIGZvciBrZXkgY29tcG9zaXRpb24pLlxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuYnVpbGRFbnZQcm94eSh1bmRlZmluZWQsIG5leHRQYXRoKTtcbiAgICAgIH0sXG4gICAgICBvd25LZXlzKCkge1xuICAgICAgICByZXR1cm4gY3VycmVudCA/IFJlZmxlY3Qub3duS2V5cyhjdXJyZW50KSA6IFtdO1xuICAgICAgfSxcbiAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfdCwgcCkge1xuICAgICAgICBpZiAoIWN1cnJlbnQpIHJldHVybiB1bmRlZmluZWQgYXMgYW55O1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIHApKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gYXMgUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgYW55O1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFyZ2V0ID0ge30gYXMgYW55O1xuICAgIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGtleXMgb2YgdGhlIGVudmlyb25tZW50LCBvcHRpb25hbGx5IGNvbnZlcnRpbmcgdGhlbSB0byBFTlYgZm9ybWF0LlxuICAgKiBAc3VtbWFyeSBHZXRzIGFsbCBrZXlzIGluIHRoZSBlbnZpcm9ubWVudCwgd2l0aCBhbiBvcHRpb24gdG8gZm9ybWF0IHRoZW0gZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdG9FbnY9dHJ1ZV0gLSBXaGV0aGVyIHRvIGNvbnZlcnQgdGhlIGtleXMgdG8gRU5WIGZvcm1hdC5cbiAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIGtleXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqL1xuICBzdGF0aWMga2V5cyh0b0VudjogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Lmluc3RhbmNlKClcbiAgICAgIC5rZXlzKClcbiAgICAgIC5tYXAoKGspID0+ICh0b0VudiA/IHRvRU5WRm9ybWF0KGspIDogaykpO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNpbmdsZXRvbiBlbnZpcm9ubWVudCBpbnN0YW5jZSBzZWVkZWQgd2l0aCBkZWZhdWx0IGxvZ2dpbmcgY29uZmlndXJhdGlvbi5cbiAqIEBzdW1tYXJ5IENvbWJpbmVzIHtAbGluayBEZWZhdWx0TG9nZ2luZ0NvbmZpZ30gd2l0aCBydW50aW1lIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwcm92aWRlIGNvbnNpc3RlbnQgbG9nZ2luZyBkZWZhdWx0cyBhY3Jvc3MgcGxhdGZvcm1zLlxuICogQGNvbnN0IExvZ2dlZEVudmlyb25tZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2dlZEVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuYWNjdW11bGF0ZShcbiAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdExvZ2dpbmdDb25maWcsIHtcbiAgICBlbnY6XG4gICAgICAoaXNCcm93c2VyKCkgJiYgKGdsb2JhbFRoaXMgYXMgYW55KVtCcm93c2VyRW52S2V5XVxuICAgICAgICA/IChnbG9iYWxUaGlzIGFzIGFueSlbQnJvd3NlckVudktleV1bXCJOT0RFX0VOVlwiXVxuICAgICAgICA6IChnbG9iYWxUaGlzIGFzIGFueSkucHJvY2Vzcy5lbnZbXCJOT0RFX0VOVlwiXSkgfHwgXCJkZXZlbG9wbWVudFwiLFxuICB9KVxuKTtcbiJdfQ==
|
package/lib/environment.d.ts
CHANGED
|
@@ -8,33 +8,6 @@ import { ObjectAccumulator } from "typed-object-accumulator";
|
|
|
8
8
|
* @memberOf module:Logging
|
|
9
9
|
*/
|
|
10
10
|
export type EnvironmentFactory<T extends object, E extends Environment<T>> = (...args: unknown[]) => E;
|
|
11
|
-
/**
|
|
12
|
-
* @description Environment accumulator that lazily reads from runtime sources.
|
|
13
|
-
* @summary Extends {@link ObjectAccumulator} to merge configuration objects while resolving values from Node or browser environment variables on demand.
|
|
14
|
-
* @template T
|
|
15
|
-
* @class Environment
|
|
16
|
-
* @example
|
|
17
|
-
* const Config = Environment.accumulate({ logging: { level: "info" } });
|
|
18
|
-
* console.log(Config.logging.level);
|
|
19
|
-
* console.log(String(Config.logging.level)); // => LOGGING__LEVEL key when serialized
|
|
20
|
-
* @mermaid
|
|
21
|
-
* sequenceDiagram
|
|
22
|
-
* participant Client
|
|
23
|
-
* participant Env as Environment
|
|
24
|
-
* participant Process as process.env
|
|
25
|
-
* participant Browser as globalThis.ENV
|
|
26
|
-
* Client->>Env: accumulate(partialConfig)
|
|
27
|
-
* Env->>Env: expand(values)
|
|
28
|
-
* Client->>Env: Config.logging.level
|
|
29
|
-
* alt Browser runtime
|
|
30
|
-
* Env->>Browser: lookup ENV key
|
|
31
|
-
* Browser-->>Env: resolved value
|
|
32
|
-
* else Node runtime
|
|
33
|
-
* Env->>Process: lookup ENV key
|
|
34
|
-
* Process-->>Env: resolved value
|
|
35
|
-
* end
|
|
36
|
-
* Env-->>Client: merged value
|
|
37
|
-
*/
|
|
38
11
|
export declare class Environment<T extends object> extends ObjectAccumulator<T> {
|
|
39
12
|
/**
|
|
40
13
|
* @static
|
|
@@ -93,7 +66,7 @@ export declare class Environment<T extends object> extends ObjectAccumulator<T>
|
|
|
93
66
|
* @param {V} value - Object to merge into the environment.
|
|
94
67
|
* @return {Environment} Updated environment reference.
|
|
95
68
|
*/
|
|
96
|
-
static accumulate<V extends object>(value: V):
|
|
69
|
+
static accumulate<V extends object, TBase extends object = object>(value: V): Environment<TBase & V> & TBase & V;
|
|
97
70
|
/**
|
|
98
71
|
* @description Retrieves a value using a dot-path key from the accumulated environment.
|
|
99
72
|
* @summary Delegates to the singleton instance to access stored configuration.
|
|
@@ -124,8 +97,8 @@ export declare class Environment<T extends object> extends ObjectAccumulator<T>
|
|
|
124
97
|
* @const LoggedEnvironment
|
|
125
98
|
* @memberOf module:Logging
|
|
126
99
|
*/
|
|
127
|
-
export declare const LoggedEnvironment: Environment<
|
|
100
|
+
export declare const LoggedEnvironment: Environment<object & import("./types").LoggingConfig & {
|
|
128
101
|
env: any;
|
|
129
|
-
} &
|
|
102
|
+
}> & object & import("./types").LoggingConfig & {
|
|
130
103
|
env: any;
|
|
131
|
-
}
|
|
104
|
+
};
|
package/lib/esm/environment.d.ts
CHANGED
|
@@ -8,33 +8,6 @@ import { ObjectAccumulator } from "typed-object-accumulator";
|
|
|
8
8
|
* @memberOf module:Logging
|
|
9
9
|
*/
|
|
10
10
|
export type EnvironmentFactory<T extends object, E extends Environment<T>> = (...args: unknown[]) => E;
|
|
11
|
-
/**
|
|
12
|
-
* @description Environment accumulator that lazily reads from runtime sources.
|
|
13
|
-
* @summary Extends {@link ObjectAccumulator} to merge configuration objects while resolving values from Node or browser environment variables on demand.
|
|
14
|
-
* @template T
|
|
15
|
-
* @class Environment
|
|
16
|
-
* @example
|
|
17
|
-
* const Config = Environment.accumulate({ logging: { level: "info" } });
|
|
18
|
-
* console.log(Config.logging.level);
|
|
19
|
-
* console.log(String(Config.logging.level)); // => LOGGING__LEVEL key when serialized
|
|
20
|
-
* @mermaid
|
|
21
|
-
* sequenceDiagram
|
|
22
|
-
* participant Client
|
|
23
|
-
* participant Env as Environment
|
|
24
|
-
* participant Process as process.env
|
|
25
|
-
* participant Browser as globalThis.ENV
|
|
26
|
-
* Client->>Env: accumulate(partialConfig)
|
|
27
|
-
* Env->>Env: expand(values)
|
|
28
|
-
* Client->>Env: Config.logging.level
|
|
29
|
-
* alt Browser runtime
|
|
30
|
-
* Env->>Browser: lookup ENV key
|
|
31
|
-
* Browser-->>Env: resolved value
|
|
32
|
-
* else Node runtime
|
|
33
|
-
* Env->>Process: lookup ENV key
|
|
34
|
-
* Process-->>Env: resolved value
|
|
35
|
-
* end
|
|
36
|
-
* Env-->>Client: merged value
|
|
37
|
-
*/
|
|
38
11
|
export declare class Environment<T extends object> extends ObjectAccumulator<T> {
|
|
39
12
|
/**
|
|
40
13
|
* @static
|
|
@@ -93,7 +66,7 @@ export declare class Environment<T extends object> extends ObjectAccumulator<T>
|
|
|
93
66
|
* @param {V} value - Object to merge into the environment.
|
|
94
67
|
* @return {Environment} Updated environment reference.
|
|
95
68
|
*/
|
|
96
|
-
static accumulate<V extends object>(value: V):
|
|
69
|
+
static accumulate<V extends object, TBase extends object = object>(value: V): Environment<TBase & V> & TBase & V;
|
|
97
70
|
/**
|
|
98
71
|
* @description Retrieves a value using a dot-path key from the accumulated environment.
|
|
99
72
|
* @summary Delegates to the singleton instance to access stored configuration.
|
|
@@ -124,8 +97,8 @@ export declare class Environment<T extends object> extends ObjectAccumulator<T>
|
|
|
124
97
|
* @const LoggedEnvironment
|
|
125
98
|
* @memberOf module:Logging
|
|
126
99
|
*/
|
|
127
|
-
export declare const LoggedEnvironment: Environment<
|
|
100
|
+
export declare const LoggedEnvironment: Environment<object & import("./types").LoggingConfig & {
|
|
128
101
|
env: any;
|
|
129
|
-
} &
|
|
102
|
+
}> & object & import("./types").LoggingConfig & {
|
|
130
103
|
env: any;
|
|
131
|
-
}
|
|
104
|
+
};
|
package/lib/esm/environment.js
CHANGED
|
@@ -29,6 +29,7 @@ import { BrowserEnvKey, DefaultLoggingConfig, ENV_PATH_DELIMITER, } from "./cons
|
|
|
29
29
|
* end
|
|
30
30
|
* Env-->>Client: merged value
|
|
31
31
|
*/
|
|
32
|
+
const EmptyValue = Symbol("EnvironmentEmpty");
|
|
32
33
|
export class Environment extends ObjectAccumulator {
|
|
33
34
|
/**
|
|
34
35
|
* @static
|
|
@@ -94,9 +95,9 @@ export class Environment extends ObjectAccumulator {
|
|
|
94
95
|
if (v && typeof v === "object") {
|
|
95
96
|
return Environment.buildEnvProxy(v, [k]);
|
|
96
97
|
}
|
|
97
|
-
// If the model provides an empty string,
|
|
98
|
+
// If the model provides an empty string, mark with EmptyValue so instance proxy can return undefined without enabling key composition
|
|
98
99
|
if (v === "") {
|
|
99
|
-
return
|
|
100
|
+
return EmptyValue;
|
|
100
101
|
}
|
|
101
102
|
return v;
|
|
102
103
|
},
|
|
@@ -123,6 +124,14 @@ export class Environment extends ObjectAccumulator {
|
|
|
123
124
|
const proxied = new Proxy(base, {
|
|
124
125
|
get(target, prop, receiver) {
|
|
125
126
|
const value = Reflect.get(target, prop, receiver);
|
|
127
|
+
if (value === EmptyValue)
|
|
128
|
+
return undefined;
|
|
129
|
+
// If the property exists on the instance but resolves to undefined, return undefined (no proxy)
|
|
130
|
+
if (typeof prop === "string" &&
|
|
131
|
+
Object.prototype.hasOwnProperty.call(target, prop)) {
|
|
132
|
+
if (typeof value === "undefined")
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
126
135
|
if (typeof value !== "undefined")
|
|
127
136
|
return value;
|
|
128
137
|
if (typeof prop === "string") {
|
|
@@ -199,9 +208,8 @@ export class Environment extends ObjectAccumulator {
|
|
|
199
208
|
}
|
|
200
209
|
if (typeof prop === "symbol")
|
|
201
210
|
return undefined;
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
: undefined;
|
|
211
|
+
const hasProp = !!current && Object.prototype.hasOwnProperty.call(current, prop);
|
|
212
|
+
const nextModel = hasProp ? current[prop] : undefined;
|
|
205
213
|
const nextPath = [...path, prop];
|
|
206
214
|
const composedKey = buildKey(nextPath);
|
|
207
215
|
// If an ENV value exists for this path, return it directly
|
|
@@ -212,6 +220,12 @@ export class Environment extends ObjectAccumulator {
|
|
|
212
220
|
const isNextObject = nextModel && typeof nextModel === "object";
|
|
213
221
|
if (isNextObject)
|
|
214
222
|
return Environment.buildEnvProxy(nextModel, nextPath);
|
|
223
|
+
// If the model marks this leaf as an empty string, treat as undefined (no proxy)
|
|
224
|
+
if (hasProp && nextModel === "")
|
|
225
|
+
return undefined;
|
|
226
|
+
// If the model explicitly contains the property with value undefined, treat as undefined (no proxy)
|
|
227
|
+
if (hasProp && typeof nextModel === "undefined")
|
|
228
|
+
return undefined;
|
|
215
229
|
// Always return a proxy for further path composition when no ENV value;
|
|
216
230
|
// do not surface primitive model defaults here (this API is for key composition).
|
|
217
231
|
return Environment.buildEnvProxy(undefined, nextPath);
|
|
@@ -255,4 +269,4 @@ export const LoggedEnvironment = Environment.accumulate(Object.assign({}, Defaul
|
|
|
255
269
|
? globalThis[BrowserEnvKey]["NODE_ENV"]
|
|
256
270
|
: globalThis.process.env["NODE_ENV"]) || "development",
|
|
257
271
|
}));
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBZTtBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFjO0FBQ2xDLE9BQU8sRUFDTCxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQix1QkFBb0I7QUFjckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBTSxPQUFPLFdBQThCLFNBQVEsaUJBQW9CO0lBQ3JFOzs7Ozs7T0FNRzthQUNjLFlBQU8sR0FDdEIsR0FBcUIsRUFBRSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7SUFVNUM7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLE9BQU8sQ0FBQyxDQUFTO1FBQ3pCLElBQUksR0FBNEIsQ0FBQztRQUNqQyxJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDaEIsR0FBRztnQkFFQyxVQUdELENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzdCLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxhQUFhLENBQUMsR0FBWTtRQUNsQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUN4QyxJQUFJLEdBQUcsS0FBSyxNQUFNO1lBQUUs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QUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUNyRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxvQkFBb0IsRUFBRTtJQUN0QyxHQUFHLEVBQ0QsQ0FBQyxTQUFTLEVBQUUsSUFBSyxVQUFrQixDQUFDLGFBQWEsQ0FBQztRQUNoRCxDQUFDLENBQUUsVUFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDaEQsQ0FBQyxDQUFFLFVBQWtCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLGFBQWE7Q0FDcEUsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RBY2N1bXVsYXRvciB9IGZyb20gXCJ0eXBlZC1vYmplY3QtYWNjdW11bGF0b3JcIjtcbmltcG9ydCB7IHRvRU5WRm9ybWF0IH0gZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSBcIi4vd2ViXCI7XG5pbXBvcnQge1xuICBCcm93c2VyRW52S2V5LFxuICBEZWZhdWx0TG9nZ2luZ0NvbmZpZyxcbiAgRU5WX1BBVEhfREVMSU1JVEVSLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmFjdG9yeSB0eXBlIGZvciBjcmVhdGluZyBFbnZpcm9ubWVudCBpbnN0YW5jZXMuXG4gKiBAc3VtbWFyeSBEZXNjcmliZXMgZmFjdG9yaWVzIHRoYXQgY29uc3RydWN0IHtAbGluayBFbnZpcm9ubWVudH0gZGVyaXZhdGl2ZXMgd2l0aCBjdXN0b20gaW5pdGlhbGl6YXRpb24uXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIG9iamVjdCB0aGUgRW52aXJvbm1lbnQgd2lsbCBhY2N1bXVsYXRlLlxuICogQHRlbXBsYXRlIEUgLSBUaGUgc3BlY2lmaWMgRW52aXJvbm1lbnQgdHlwZSB0byBiZSBjcmVhdGVkLCBleHRlbmRpbmcgRW52aXJvbm1lbnQ8VD4uXG4gKiBAdHlwZWRlZiB7ZnVuY3Rpb24odW5rbm93bltdKTogRX0gRW52aXJvbm1lbnRGYWN0b3J5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IHR5cGUgRW52aXJvbm1lbnRGYWN0b3J5PFQgZXh0ZW5kcyBvYmplY3QsIEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxUPj4gPSAoXG4gIC4uLmFyZ3M6IHVua25vd25bXVxuKSA9PiBFO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnZpcm9ubWVudCBhY2N1bXVsYXRvciB0aGF0IGxhemlseSByZWFkcyBmcm9tIHJ1bnRpbWUgc291cmNlcy5cbiAqIEBzdW1tYXJ5IEV4dGVuZHMge0BsaW5rIE9iamVjdEFjY3VtdWxhdG9yfSB0byBtZXJnZSBjb25maWd1cmF0aW9uIG9iamVjdHMgd2hpbGUgcmVzb2x2aW5nIHZhbHVlcyBmcm9tIE5vZGUgb3IgYnJvd3NlciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb24gZGVtYW5kLlxuICogQHRlbXBsYXRlIFRcbiAqIEBjbGFzcyBFbnZpcm9ubWVudFxuICogQGV4YW1wbGVcbiAqIGNvbnN0IENvbmZpZyA9IEVudmlyb25tZW50LmFjY3VtdWxhdGUoeyBsb2dnaW5nOiB7IGxldmVsOiBcImluZm9cIiB9IH0pO1xuICogY29uc29sZS5sb2coQ29uZmlnLmxvZ2dpbmcubGV2ZWwpO1xuICogY29uc29sZS5sb2coU3RyaW5nKENvbmZpZy5sb2dnaW5nLmxldmVsKSk7IC8vID0+IExPR0dJTkdfX0xFVkVMIGtleSB3aGVuIHNlcmlhbGl6ZWRcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IEVudiBhcyBFbnZpcm9ubWVudFxuICogICBwYXJ0aWNpcGFudCBQcm9jZXNzIGFzIHByb2Nlc3MuZW52XG4gKiAgIHBhcnRpY2lwYW50IEJyb3dzZXIgYXMgZ2xvYmFsVGhpcy5FTlZcbiAqICAgQ2xpZW50LT4+RW52OiBhY2N1bXVsYXRlKHBhcnRpYWxDb25maWcpXG4gKiAgIEVudi0+PkVudjogZXhwYW5kKHZhbHVlcylcbiAqICAgQ2xpZW50LT4+RW52OiBDb25maWcubG9nZ2luZy5sZXZlbFxuICogICBhbHQgQnJvd3NlciBydW50aW1lXG4gKiAgICAgRW52LT4+QnJvd3NlcjogbG9va3VwIEVOViBrZXlcbiAqICAgICBCcm93c2VyLS0+PkVudjogcmVzb2x2ZWQgdmFsdWVcbiAqICAgZWxzZSBOb2RlIHJ1bnRpbWVcbiAqICAgICBFbnYtPj5Qcm9jZXNzOiBsb29rdXAgRU5WIGtleVxuICogICAgIFByb2Nlc3MtLT4+RW52OiByZXNvbHZlZCB2YWx1ZVxuICogICBlbmRcbiAqICAgRW52LS0+PkNsaWVudDogbWVyZ2VkIHZhbHVlXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudDxUIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIE9iamVjdEFjY3VtdWxhdG9yPFQ+IHtcbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQHByb3RlY3RlZFxuICAgKiBAZGVzY3JpcHRpb24gQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBFbnZpcm9ubWVudCBpbnN0YW5jZXMuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IG5ldyBpbnN0YW5jZXMgb2YgdGhlIEVudmlyb25tZW50IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudDxhbnk+fSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGZhY3Rvcnk6IEVudmlyb25tZW50RmFjdG9yeTxhbnksIGFueT4gPVxuICAgICgpOiBFbnZpcm9ubWVudDxhbnk+ID0+IG5ldyBFbnZpcm9ubWVudCgpO1xuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcml2YXRlXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHR5cGUge0Vudmlyb25tZW50PGFueT59XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IEVudmlyb25tZW50PGFueT47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gICAqIEBzdW1tYXJ5IEhhbmRsZXMgYnJvd3NlciBhbmQgTm9kZS5qcyBlbnZpcm9ubWVudHMgYnkgbm9ybWFsaXppbmcga2V5cyBhbmQgcGFyc2luZyB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrIC0gS2V5IHRvIHJlc29sdmUgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm4ge3Vua25vd259IFZhbHVlIHJlc29sdmVkIGZyb20gdGhlIGVudmlyb25tZW50IG9yIGB1bmRlZmluZWRgIHdoZW4gYWJzZW50LlxuICAgKi9cbiAgcHJvdGVjdGVkIGZyb21FbnYoazogc3RyaW5nKSB7XG4gICAgbGV0IGVudjogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICBlbnYgPVxuICAgICAgICAoXG4gICAgICAgICAgZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICAgICAgICAgIFtCcm93c2VyRW52S2V5XTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgICB9XG4gICAgICAgIClbQnJvd3NlckVudktleV0gfHwge307XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudiA9IGdsb2JhbFRoaXMucHJvY2Vzcy5lbnY7XG4gICAgICBrID0gdG9FTlZGb3JtYXQoayk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnBhcnNlRW52VmFsdWUoZW52W2tdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgc3RyaW5naWZpZWQgZW52aXJvbm1lbnQgdmFsdWVzIGludG8gbmF0aXZlIHR5cGVzLlxuICAgKiBAc3VtbWFyeSBJbnRlcnByZXRzIGJvb2xlYW5zIGFuZCBudW1iZXJzIHdoaWxlIGxlYXZpbmcgb3RoZXIgdHlwZXMgdW5jaGFuZ2VkLlxuICAgKiBAcGFyYW0ge3Vua25vd259IHZhbCAtIFJhdyB2YWx1ZSByZXRyaWV2ZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm4ge3Vua25vd259IFBhcnNlZCB2YWx1ZSBjb252ZXJ0ZWQgdG8gYm9vbGVhbiwgbnVtYmVyLCBvciBsZWZ0IGFzLWlzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcnNlRW52VmFsdWUodmFsOiB1bmtub3duKSB7XG4gICAgaWYgKHR5cGVvZiB2YWwgIT09IFwic3RyaW5nXCIpIHJldHVybiB2YWw7XG4gICAgaWYgKHZhbCA9PT0gXCJ0cnVlXCIpIHJldHVybiB0cnVlO1xuICAgIGlmICh2YWwgPT09IFwiZmFsc2VcIikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlRmxvYXQodmFsKTtcbiAgICBpZiAoIWlzTmFOKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhwYW5kcyBhbiBvYmplY3QgaW50byB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgbGF6eSBwcm9wZXJ0aWVzIHRoYXQgZmlyc3QgY29uc3VsdCBydW50aW1lIHZhcmlhYmxlcyBiZWZvcmUgZmFsbGluZyBiYWNrIHRvIHNlZWRlZCB2YWx1ZXMuXG4gICAqIEB0ZW1wbGF0ZSBWIC0gVHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGV4cGFuZGVkLlxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gT2JqZWN0IHRvIGV4cG9zZSB0aHJvdWdoIGVudmlyb25tZW50IGdldHRlcnMgYW5kIHNldHRlcnMuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhwYW5kPFYgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBWKTogdm9pZCB7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGssIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUVudiA9IHRoaXMuZnJvbUVudihrKTtcbiAgICAgICAgICBpZiAodHlwZW9mIGZyb21FbnYgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBmcm9tRW52O1xuICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuYnVpbGRFbnZQcm94eSh2IGFzIGFueSwgW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgdGhlIG1vZGVsIHByb3ZpZGVzIGFuIGVtcHR5IHN0cmluZywgZXhwb3NlIGEgcHJveHkgdGhhdCBjb21wb3NlcyBFTlYga2V5c1xuICAgICAgICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuYnVpbGRFbnZQcm94eSh1bmRlZmluZWQsIFtrXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6ICh2YWw6IFZba2V5b2YgVl0pID0+IHtcbiAgICAgICAgICB2ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAc3VtbWFyeSBFbnN1cmVzIG9ubHkgb25lIHtAbGluayBFbnZpcm9ubWVudH0gaW5zdGFuY2UgaXMgY3JlYXRlZCwgd3JhcHBpbmcgaXQgaW4gYSBwcm94eSB0byBjb21wb3NlIEVOViBrZXlzIG9uIGRlbWFuZC5cbiAgICogQHRlbXBsYXRlIEVcbiAgICogQHBhcmFtIHsuLi51bmtub3duW119IGFyZ3MgLSBBcmd1bWVudHMgZm9yd2FyZGVkIHRvIHRoZSBmYWN0b3J5IHdoZW4gaW5zdGFudGlhdGluZyB0aGUgc2luZ2xldG9uLlxuICAgKiBAcmV0dXJuIHtFfSBTaW5nbGV0b24gZW52aXJvbm1lbnQgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGluc3RhbmNlPEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxhbnk+PiguLi5hcmdzOiB1bmtub3duW10pOiBFIHtcbiAgICBpZiAoIUVudmlyb25tZW50Ll9pbnN0YW5jZSkge1xuICAgICAgY29uc3QgYmFzZSA9IEVudmlyb25tZW50LmZhY3RvcnkoLi4uYXJncykgYXMgRTtcbiAgICAgIGNvbnN0IHByb3hpZWQgPSBuZXcgUHJveHkoYmFzZSBhcyBhbnksIHtcbiAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIGludGVyZmVyaW5nIHdpdGggbG9nZ2luZyBjb25maWcgbG9va3VwcyBmb3Igb3B0aW9uYWwgZmllbGRzIGxpa2UgJ2FwcCdcbiAgICAgICAgICAgIGlmIChwcm9wID09PSBcImFwcFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LmJ1aWxkRW52UHJveHkodW5kZWZpbmVkLCBbcHJvcF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIEVudmlyb25tZW50Ll9pbnN0YW5jZSA9IHByb3hpZWQgYXMgYW55O1xuICAgIH1cbiAgICByZXR1cm4gRW52aXJvbm1lbnQuX2luc3RhbmNlIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzLCBoaWRpbmcgcmF3IGRlc2NyaXB0b3JzIHRvIGF2b2lkIGxlYWtpbmcgZW51bWVyYXRpb24gc2VtYW50aWNzLlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAdGVtcGxhdGUgVlxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gT2JqZWN0IHRvIG1lcmdlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudH0gVXBkYXRlZCBlbnZpcm9ubWVudCByZWZlcmVuY2UuXG4gICAqL1xuICBzdGF0aWMgYWNjdW11bGF0ZTxWIGV4dGVuZHMgb2JqZWN0PihcbiAgICB2YWx1ZTogVlxuICApOiB0eXBlb2YgRW52aXJvbm1lbnQuX2luc3RhbmNlICZcbiAgICBWICZcbiAgICBPYmplY3RBY2N1bXVsYXRvcjx0eXBlb2YgRW52aXJvbm1lbnQuX2luc3RhbmNlICYgVj4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gRW52aXJvbm1lbnQuaW5zdGFuY2UoKTtcbiAgICBPYmplY3Qua2V5cyhpbnN0YW5jZSBhcyBhbnkpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaW5zdGFuY2UgYXMgYW55LCBrZXkpO1xuICAgICAgaWYgKGRlc2MgJiYgZGVzYy5jb25maWd1cmFibGUgJiYgZGVzYy5lbnVtZXJhYmxlKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0YW5jZSBhcyBhbnksIGtleSwge1xuICAgICAgICAgIC4uLmRlc2MsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpbnN0YW5jZS5hY2N1bXVsYXRlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgdXNpbmcgYSBkb3QtcGF0aCBrZXkgZnJvbSB0aGUgYWNjdW11bGF0ZWQgZW52aXJvbm1lbnQuXG4gICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0byB0aGUgc2luZ2xldG9uIGluc3RhbmNlIHRvIGFjY2VzcyBzdG9yZWQgY29uZmlndXJhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIEtleSB0byByZXNvbHZlIGZyb20gdGhlIGVudmlyb25tZW50IHN0b3JlLlxuICAgKiBAcmV0dXJuIHt1bmtub3dufSBTdG9yZWQgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQga2V5LlxuICAgKi9cbiAgc3RhdGljIGdldChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBFbnZpcm9ubWVudC5faW5zdGFuY2UuZ2V0KGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEJ1aWxkcyBhIHByb3h5IHRoYXQgY29tcG9zZXMgZW52aXJvbm1lbnQga2V5cyBmb3IgbmVzdGVkIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IEFsbG93cyBjaGFpbmVkIHByb3BlcnR5IGFjY2VzcyB0byBlbWl0IHVwcGVyY2FzZSBFTlYgaWRlbnRpZmllcnMgd2hpbGUgaG9ub3JpbmcgZXhpc3RpbmcgcnVudGltZSBvdmVycmlkZXMuXG4gICAqIEBwYXJhbSB7YW55fSBjdXJyZW50IC0gU2VlZCBtb2RlbCBzZWdtZW50IHVzZWQgd2hlbiBwcm9qZWN0aW5nIG5lc3RlZCBzdHJ1Y3R1cmVzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBwYXRoIC0gQWNjdW11bGF0ZWQgcGF0aCBzZWdtZW50cyBsZWFkaW5nIHRvIHRoZSBwcm94eS5cbiAgICogQHJldHVybiB7YW55fSBQcm94eSB0aGF0IHJlc29sdmVzIGVudmlyb25tZW50IHZhbHVlcyBvciBjb21wb3NlcyBhZGRpdGlvbmFsIHByb3hpZXMgZm9yIGRlZXBlciBwYXRocy5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGJ1aWxkRW52UHJveHkoY3VycmVudDogYW55LCBwYXRoOiBzdHJpbmdbXSk6IGFueSB7XG4gICAgY29uc3QgYnVpbGRLZXkgPSAocDogc3RyaW5nW10pID0+XG4gICAgICBwLm1hcCgoc2VnKSA9PiB0b0VOVkZvcm1hdChzZWcpKS5qb2luKEVOVl9QQVRIX0RFTElNSVRFUik7XG5cbiAgICAvLyBIZWxwZXIgdG8gcmVhZCBmcm9tIHRoZSBhY3RpdmUgZW52aXJvbm1lbnQgZ2l2ZW4gYSBjb21wb3NlZCBrZXlcbiAgICBjb25zdCByZWFkRW52ID0gKGtleTogc3RyaW5nKTogdW5rbm93biA9PiB7XG4gICAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgICAgY29uc3QgZW52ID0gKFxuICAgICAgICAgIGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7XG4gICAgICAgICAgICBbQnJvd3NlckVudktleV0/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICB9XG4gICAgICAgIClbQnJvd3NlckVudktleV07XG4gICAgICAgIHJldHVybiBlbnYgPyBlbnZba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoZ2xvYmFsVGhpcyBhcyBhbnkpPy5wcm9jZXNzPy5lbnY/LltrZXldO1xuICAgIH07XG5cbiAgICBjb25zdCBoYW5kbGVyOiBQcm94eUhhbmRsZXI8YW55PiA9IHtcbiAgICAgIGdldChfdGFyZ2V0LCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpIHtcbiAgICAgICAgaWYgKHByb3AgPT09IFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuICAgICAgICAgIHJldHVybiAoKSA9PiBidWlsZEtleShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcCA9PT0gXCJ0b1N0cmluZ1wiKSB7XG4gICAgICAgICAgcmV0dXJuICgpID0+IGJ1aWxkS2V5KHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wID09PSBcInZhbHVlT2ZcIikge1xuICAgICAgICAgIHJldHVybiAoKSA9PiBidWlsZEtleShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3ltYm9sXCIpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgbmV4dE1vZGVsID1cbiAgICAgICAgICBjdXJyZW50ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyZW50LCBwcm9wKVxuICAgICAgICAgICAgPyAoY3VycmVudCBhcyBhbnkpW3Byb3BdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbmV4dFBhdGggPSBbLi4ucGF0aCwgcHJvcF07XG4gICAgICAgIGNvbnN0IGNvbXBvc2VkS2V5ID0gYnVpbGRLZXkobmV4dFBhdGgpO1xuXG4gICAgICAgIC8vIElmIGFuIEVOViB2YWx1ZSBleGlzdHMgZm9yIHRoaXMgcGF0aCwgcmV0dXJuIGl0IGRpcmVjdGx5XG4gICAgICAgIGNvbnN0IGVudlZhbHVlID0gcmVhZEVudihjb21wb3NlZEtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgZW52VmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbnZWYWx1ZTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBtb2RlbCBoYXMgYW4gb2JqZWN0IGF0IHRoaXMgcGF0aCwga2VlcCBkcmlsbGluZyB3aXRoIGEgcHJveHlcbiAgICAgICAgY29uc3QgaXNOZXh0T2JqZWN0ID0gbmV4dE1vZGVsICYmIHR5cGVvZiBuZXh0TW9kZWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgIGlmIChpc05leHRPYmplY3QpIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KG5leHRNb2RlbCwgbmV4dFBhdGgpO1xuXG4gICAgICAgIC8vIEFsd2F5cyByZXR1cm4gYSBwcm94eSBmb3IgZnVydGhlciBwYXRoIGNvbXBvc2l0aW9uIHdoZW4gbm8gRU5WIHZhbHVlO1xuICAgICAgICAvLyBkbyBub3Qgc3VyZmFjZSBwcmltaXRpdmUgbW9kZWwgZGVmYXVsdHMgaGVyZSAodGhpcyBBUEkgaXMgZm9yIGtleSBjb21wb3NpdGlvbikuXG4gICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KHVuZGVmaW5lZCwgbmV4dFBhdGgpO1xuICAgICAgfSxcbiAgICAgIG93bktleXMoKSB7XG4gICAgICAgIHJldHVybiBjdXJyZW50ID8gUmVmbGVjdC5vd25LZXlzKGN1cnJlbnQpIDogW107XG4gICAgICB9LFxuICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF90LCBwKSB7XG4gICAgICAgIGlmICghY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZCBhcyBhbnk7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3VycmVudCwgcCkpIHtcbiAgICAgICAgICByZXR1cm4geyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSBhcyBQcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBhbnk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB0YXJnZXQgPSB7fSBhcyBhbnk7XG4gICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUga2V5cyBvZiB0aGUgZW52aXJvbm1lbnQsIG9wdGlvbmFsbHkgY29udmVydGluZyB0aGVtIHRvIEVOViBmb3JtYXQuXG4gICAqIEBzdW1tYXJ5IEdldHMgYWxsIGtleXMgaW4gdGhlIGVudmlyb25tZW50LCB3aXRoIGFuIG9wdGlvbiB0byBmb3JtYXQgdGhlbSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b0Vudj10cnVlXSAtIFdoZXRoZXIgdG8gY29udmVydCB0aGUga2V5cyB0byBFTlYgZm9ybWF0LlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Yga2V5cyBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIHN0YXRpYyBrZXlzKHRvRW52OiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuaW5zdGFuY2UoKVxuICAgICAgLmtleXMoKVxuICAgICAgLm1hcCgoaykgPT4gKHRvRW52ID8gdG9FTlZGb3JtYXQoaykgOiBrKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU2luZ2xldG9uIGVudmlyb25tZW50IGluc3RhbmNlIHNlZWRlZCB3aXRoIGRlZmF1bHQgbG9nZ2luZyBjb25maWd1cmF0aW9uLlxuICogQHN1bW1hcnkgQ29tYmluZXMge0BsaW5rIERlZmF1bHRMb2dnaW5nQ29uZmlnfSB3aXRoIHJ1bnRpbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHByb3ZpZGUgY29uc2lzdGVudCBsb2dnaW5nIGRlZmF1bHRzIGFjcm9zcyBwbGF0Zm9ybXMuXG4gKiBAY29uc3QgTG9nZ2VkRW52aXJvbm1lbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgTG9nZ2VkRW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5hY2N1bXVsYXRlKFxuICBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0TG9nZ2luZ0NvbmZpZywge1xuICAgIGVudjpcbiAgICAgIChpc0Jyb3dzZXIoKSAmJiAoZ2xvYmFsVGhpcyBhcyBhbnkpW0Jyb3dzZXJFbnZLZXldXG4gICAgICAgID8gKGdsb2JhbFRoaXMgYXMgYW55KVtCcm93c2VyRW52S2V5XVtcIk5PREVfRU5WXCJdXG4gICAgICAgIDogKGdsb2JhbFRoaXMgYXMgYW55KS5wcm9jZXNzLmVudltcIk5PREVfRU5WXCJdKSB8fCBcImRldmVsb3BtZW50XCIsXG4gIH0pXG4pO1xuIl19
|
|
272
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZW52aXJvbm1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBZTtBQUNyQyxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFjO0FBQ2xDLE9BQU8sRUFDTCxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLGtCQUFrQixHQUNuQix1QkFBb0I7QUFjckI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFFOUMsTUFBTSxPQUFPLFdBQThCLFNBQVEsaUJBQW9CO0lBQ3JFOzs7Ozs7T0FNRzthQUNjLFlBQU8sR0FDdEIsR0FBcUIsRUFBRSxDQUFDLElBQUksV0FBVyxFQUFFLENBQUM7SUFVNUM7UUFDRSxLQUFLLEVBQUUsQ0FBQztJQUNWLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLE9BQU8sQ0FBQyxDQUFTO1FBQ3pCLElBQUksR0FBNEIsQ0FBQztRQUNqQyxJQUFJLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDaEIsR0FBRztnQkFFQyxVQUdELENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzdCLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTyxhQUFhLENBQUMsR0FBWTtRQUNsQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFB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QUFFLFlBQVksRUFBRSxJQUFJLEVBQXdCLENBQUM7Z0JBQ3hFLENBQUM7Z0JBQ0QsT0FBTyxTQUFnQixDQUFDO1lBQzFCLENBQUM7U0FDRixDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsRUFBUyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQWlCLElBQUk7UUFDL0IsT0FBTyxXQUFXLENBQUMsUUFBUSxFQUFFO2FBQzFCLElBQUksRUFBRTthQUNOLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDOztBQUdIOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLEVBQUU7SUFDdEMsR0FBRyxFQUNELENBQUMsU0FBUyxFQUFFLElBQUssVUFBa0IsQ0FBQyxhQUFhLENBQUM7UUFDaEQsQ0FBQyxDQUFFLFVBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ2hELENBQUMsQ0FBRSxVQUFrQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxhQUFhO0NBQ3BFLENBQUMsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JqZWN0QWNjdW11bGF0b3IgfSBmcm9tIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCI7XG5pbXBvcnQgeyB0b0VOVkZvcm1hdCB9IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gXCIuL3dlYlwiO1xuaW1wb3J0IHtcbiAgQnJvd3NlckVudktleSxcbiAgRGVmYXVsdExvZ2dpbmdDb25maWcsXG4gIEVOVl9QQVRIX0RFTElNSVRFUixcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgdHlwZSBmb3IgY3JlYXRpbmcgRW52aXJvbm1lbnQgaW5zdGFuY2VzLlxuICogQHN1bW1hcnkgRGVzY3JpYmVzIGZhY3RvcmllcyB0aGF0IGNvbnN0cnVjdCB7QGxpbmsgRW52aXJvbm1lbnR9IGRlcml2YXRpdmVzIHdpdGggY3VzdG9tIGluaXRpYWxpemF0aW9uLlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiBvYmplY3QgdGhlIEVudmlyb25tZW50IHdpbGwgYWNjdW11bGF0ZS5cbiAqIEB0ZW1wbGF0ZSBFIC0gVGhlIHNwZWNpZmljIEVudmlyb25tZW50IHR5cGUgdG8gYmUgY3JlYXRlZCwgZXh0ZW5kaW5nIEVudmlyb25tZW50PFQ+LlxuICogQHR5cGVkZWYge2Z1bmN0aW9uKHVua25vd25bXSk6IEV9IEVudmlyb25tZW50RmFjdG9yeVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCB0eXBlIEVudmlyb25tZW50RmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0LCBFIGV4dGVuZHMgRW52aXJvbm1lbnQ8VD4+ID0gKFxuICAuLi5hcmdzOiB1bmtub3duW11cbikgPT4gRTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW52aXJvbm1lbnQgYWNjdW11bGF0b3IgdGhhdCBsYXppbHkgcmVhZHMgZnJvbSBydW50aW1lIHNvdXJjZXMuXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHtAbGluayBPYmplY3RBY2N1bXVsYXRvcn0gdG8gbWVyZ2UgY29uZmlndXJhdGlvbiBvYmplY3RzIHdoaWxlIHJlc29sdmluZyB2YWx1ZXMgZnJvbSBOb2RlIG9yIGJyb3dzZXIgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIGRlbWFuZC5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAY2xhc3MgRW52aXJvbm1lbnRcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBDb25maWcgPSBFbnZpcm9ubWVudC5hY2N1bXVsYXRlKHsgbG9nZ2luZzogeyBsZXZlbDogXCJpbmZvXCIgfSB9KTtcbiAqIGNvbnNvbGUubG9nKENvbmZpZy5sb2dnaW5nLmxldmVsKTtcbiAqIGNvbnNvbGUubG9nKFN0cmluZyhDb25maWcubG9nZ2luZy5sZXZlbCkpOyAvLyA9PiBMT0dHSU5HX19MRVZFTCBrZXkgd2hlbiBzZXJpYWxpemVkXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBFbnYgYXMgRW52aXJvbm1lbnRcbiAqICAgcGFydGljaXBhbnQgUHJvY2VzcyBhcyBwcm9jZXNzLmVudlxuICogICBwYXJ0aWNpcGFudCBCcm93c2VyIGFzIGdsb2JhbFRoaXMuRU5WXG4gKiAgIENsaWVudC0+PkVudjogYWNjdW11bGF0ZShwYXJ0aWFsQ29uZmlnKVxuICogICBFbnYtPj5FbnY6IGV4cGFuZCh2YWx1ZXMpXG4gKiAgIENsaWVudC0+PkVudjogQ29uZmlnLmxvZ2dpbmcubGV2ZWxcbiAqICAgYWx0IEJyb3dzZXIgcnVudGltZVxuICogICAgIEVudi0+PkJyb3dzZXI6IGxvb2t1cCBFTlYga2V5XG4gKiAgICAgQnJvd3Nlci0tPj5FbnY6IHJlc29sdmVkIHZhbHVlXG4gKiAgIGVsc2UgTm9kZSBydW50aW1lXG4gKiAgICAgRW52LT4+UHJvY2VzczogbG9va3VwIEVOViBrZXlcbiAqICAgICBQcm9jZXNzLS0+PkVudjogcmVzb2x2ZWQgdmFsdWVcbiAqICAgZW5kXG4gKiAgIEVudi0tPj5DbGllbnQ6IG1lcmdlZCB2YWx1ZVxuICovXG5jb25zdCBFbXB0eVZhbHVlID0gU3ltYm9sKFwiRW52aXJvbm1lbnRFbXB0eVwiKTtcblxuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50PFQgZXh0ZW5kcyBvYmplY3Q+IGV4dGVuZHMgT2JqZWN0QWNjdW11bGF0b3I8VD4ge1xuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBBIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIEVudmlyb25tZW50IGluc3RhbmNlcy5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBob3cgbmV3IGluc3RhbmNlcyBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQuXG4gICAqIEByZXR1cm4ge0Vudmlyb25tZW50PGFueT59IEEgbmV3IGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICovXG4gIHByb3RlY3RlZCBzdGF0aWMgZmFjdG9yeTogRW52aXJvbm1lbnRGYWN0b3J5PGFueSwgYW55PiA9XG4gICAgKCk6IEVudmlyb25tZW50PGFueT4gPT4gbmV3IEVudmlyb25tZW50KCk7XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQHByaXZhdGVcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAdHlwZSB7RW52aXJvbm1lbnQ8YW55Pn1cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogRW52aXJvbm1lbnQ8YW55PjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAgICogQHN1bW1hcnkgSGFuZGxlcyBicm93c2VyIGFuZCBOb2RlLmpzIGVudmlyb25tZW50cyBieSBub3JtYWxpemluZyBrZXlzIGFuZCBwYXJzaW5nIHZhbHVlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGsgLSBLZXkgdG8gcmVzb2x2ZSBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHJldHVybiB7dW5rbm93bn0gVmFsdWUgcmVzb2x2ZWQgZnJvbSB0aGUgZW52aXJvbm1lbnQgb3IgYHVuZGVmaW5lZGAgd2hlbiBhYnNlbnQuXG4gICAqL1xuICBwcm90ZWN0ZWQgZnJvbUVudihrOiBzdHJpbmcpIHtcbiAgICBsZXQgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgIGVudiA9XG4gICAgICAgIChcbiAgICAgICAgICBnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYge1xuICAgICAgICAgICAgW0Jyb3dzZXJFbnZLZXldOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgICAgIH1cbiAgICAgICAgKVtCcm93c2VyRW52S2V5XSB8fCB7fTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW52ID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmVudjtcbiAgICAgIGsgPSB0b0VOVkZvcm1hdChrKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucGFyc2VFbnZWYWx1ZShlbnZba10pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBzdHJpbmdpZmllZCBlbnZpcm9ubWVudCB2YWx1ZXMgaW50byBuYXRpdmUgdHlwZXMuXG4gICAqIEBzdW1tYXJ5IEludGVycHJldHMgYm9vbGVhbnMgYW5kIG51bWJlcnMgd2hpbGUgbGVhdmluZyBvdGhlciB0eXBlcyB1bmNoYW5nZWQuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdmFsIC0gUmF3IHZhbHVlIHJldHJpZXZlZCBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHJldHVybiB7dW5rbm93bn0gUGFyc2VkIHZhbHVlIGNvbnZlcnRlZCB0byBib29sZWFuLCBudW1iZXIsIG9yIGxlZnQgYXMtaXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcGFyc2VFbnZWYWx1ZSh2YWw6IHVua25vd24pIHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIHZhbDtcbiAgICBpZiAodmFsID09PSBcInRydWVcIikgcmV0dXJuIHRydWU7XG4gICAgaWYgKHZhbCA9PT0gXCJmYWxzZVwiKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgcmVzdWx0ID0gcGFyc2VGbG9hdCh2YWwpO1xuICAgIGlmICghaXNOYU4ocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBFeHBhbmRzIGFuIG9iamVjdCBpbnRvIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHN1bW1hcnkgRGVmaW5lcyBsYXp5IHByb3BlcnRpZXMgdGhhdCBmaXJzdCBjb25zdWx0IHJ1bnRpbWUgdmFyaWFibGVzIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gc2VlZGVkIHZhbHVlcy5cbiAgICogQHRlbXBsYXRlIFYgLSBUeXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWQuXG4gICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBPYmplY3QgdG8gZXhwb3NlIHRocm91Z2ggZW52aXJvbm1lbnQgZ2V0dGVycyBhbmQgc2V0dGVycy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBleHBhbmQ8ViBleHRlbmRzIG9iamVjdD4odmFsdWU6IFYpOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmcm9tRW52ID0gdGhpcy5mcm9tRW52KGspO1xuICAgICAgICAgIGlmICh0eXBlb2YgZnJvbUVudiAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGZyb21FbnY7XG4gICAgICAgICAgaWYgKHYgJiYgdHlwZW9mIHYgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KHYgYXMgYW55LCBba10pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBJZiB0aGUgbW9kZWwgcHJvdmlkZXMgYW4gZW1wdHkgc3RyaW5nLCBtYXJrIHdpdGggRW1wdHlWYWx1ZSBzbyBpbnN0YW5jZSBwcm94eSBjYW4gcmV0dXJuIHVuZGVmaW5lZCB3aXRob3V0IGVuYWJsaW5nIGtleSBjb21wb3NpdGlvblxuICAgICAgICAgIGlmICh2ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gRW1wdHlWYWx1ZSBhcyB1bmtub3duIGFzIFZba2V5b2YgVl07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB2O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6ICh2YWw6IFZba2V5b2YgVl0pID0+IHtcbiAgICAgICAgICB2ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAc3VtbWFyeSBFbnN1cmVzIG9ubHkgb25lIHtAbGluayBFbnZpcm9ubWVudH0gaW5zdGFuY2UgaXMgY3JlYXRlZCwgd3JhcHBpbmcgaXQgaW4gYSBwcm94eSB0byBjb21wb3NlIEVOViBrZXlzIG9uIGRlbWFuZC5cbiAgICogQHRlbXBsYXRlIEVcbiAgICogQHBhcmFtIHsuLi51bmtub3duW119IGFyZ3MgLSBBcmd1bWVudHMgZm9yd2FyZGVkIHRvIHRoZSBmYWN0b3J5IHdoZW4gaW5zdGFudGlhdGluZyB0aGUgc2luZ2xldG9uLlxuICAgKiBAcmV0dXJuIHtFfSBTaW5nbGV0b24gZW52aXJvbm1lbnQgaW5zdGFuY2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGluc3RhbmNlPEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxhbnk+PiguLi5hcmdzOiB1bmtub3duW10pOiBFIHtcbiAgICBpZiAoIUVudmlyb25tZW50Ll9pbnN0YW5jZSkge1xuICAgICAgY29uc3QgYmFzZSA9IEVudmlyb25tZW50LmZhY3RvcnkoLi4uYXJncykgYXMgRTtcbiAgICAgIGNvbnN0IHByb3hpZWQgPSBuZXcgUHJveHkoYmFzZSBhcyBhbnksIHtcbiAgICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gRW1wdHlWYWx1ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSBidXQgcmVzb2x2ZXMgdG8gdW5kZWZpbmVkLCByZXR1cm4gdW5kZWZpbmVkIChubyBwcm94eSlcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgcHJvcCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRhcmdldCwgcHJvcClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICBpZiAodHlwZW9mIHByb3AgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIC8vIEF2b2lkIGludGVyZmVyaW5nIHdpdGggbG9nZ2luZyBjb25maWcgbG9va3VwcyBmb3Igb3B0aW9uYWwgZmllbGRzIGxpa2UgJ2FwcCdcbiAgICAgICAgICAgIGlmIChwcm9wID09PSBcImFwcFwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIEVudmlyb25tZW50LmJ1aWxkRW52UHJveHkodW5kZWZpbmVkLCBbcHJvcF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIEVudmlyb25tZW50Ll9pbnN0YW5jZSA9IHByb3hpZWQgYXMgYW55O1xuICAgIH1cbiAgICByZXR1cm4gRW52aXJvbm1lbnQuX2luc3RhbmNlIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzLCBoaWRpbmcgcmF3IGRlc2NyaXB0b3JzIHRvIGF2b2lkIGxlYWtpbmcgZW51bWVyYXRpb24gc2VtYW50aWNzLlxuICAgKiBAdGVtcGxhdGUgVFxuICAgKiBAdGVtcGxhdGUgVlxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gT2JqZWN0IHRvIG1lcmdlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudH0gVXBkYXRlZCBlbnZpcm9ubWVudCByZWZlcmVuY2UuXG4gICAqL1xuICBzdGF0aWMgYWNjdW11bGF0ZTxWIGV4dGVuZHMgb2JqZWN0LCBUQmFzZSBleHRlbmRzIG9iamVjdCA9IG9iamVjdD4oXG4gICAgdmFsdWU6IFZcbiAgKTogRW52aXJvbm1lbnQ8VEJhc2UgJiBWPiAmIFRCYXNlICYgViB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBFbnZpcm9ubWVudC5pbnN0YW5jZTxFbnZpcm9ubWVudDxUQmFzZSAmIFY+PigpO1xuICAgIE9iamVjdC5rZXlzKGluc3RhbmNlIGFzIGFueSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpbnN0YW5jZSBhcyBhbnksIGtleSk7XG4gICAgICBpZiAoZGVzYyAmJiBkZXNjLmNvbmZpZ3VyYWJsZSAmJiBkZXNjLmVudW1lcmFibGUpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3RhbmNlIGFzIGFueSwga2V5LCB7XG4gICAgICAgICAgLi4uZGVzYyxcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmFjY3VtdWxhdGUodmFsdWUpIGFzIHVua25vd24gYXMgRW52aXJvbm1lbnQ8VEJhc2UgJiBWPiAmXG4gICAgICBUQmFzZSAmXG4gICAgICBWO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSB1c2luZyBhIGRvdC1wYXRoIGtleSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBlbnZpcm9ubWVudC5cbiAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRvIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UgdG8gYWNjZXNzIHN0b3JlZCBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gS2V5IHRvIHJlc29sdmUgZnJvbSB0aGUgZW52aXJvbm1lbnQgc3RvcmUuXG4gICAqIEByZXR1cm4ge3Vua25vd259IFN0b3JlZCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBrZXkuXG4gICAqL1xuICBzdGF0aWMgZ2V0KGtleTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Ll9pbnN0YW5jZS5nZXQoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQnVpbGRzIGEgcHJveHkgdGhhdCBjb21wb3NlcyBlbnZpcm9ubWVudCBrZXlzIGZvciBuZXN0ZWQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgQWxsb3dzIGNoYWluZWQgcHJvcGVydHkgYWNjZXNzIHRvIGVtaXQgdXBwZXJjYXNlIEVOViBpZGVudGlmaWVycyB3aGlsZSBob25vcmluZyBleGlzdGluZyBydW50aW1lIG92ZXJyaWRlcy5cbiAgICogQHBhcmFtIHthbnl9IGN1cnJlbnQgLSBTZWVkIG1vZGVsIHNlZ21lbnQgdXNlZCB3aGVuIHByb2plY3RpbmcgbmVzdGVkIHN0cnVjdHVyZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHBhdGggLSBBY2N1bXVsYXRlZCBwYXRoIHNlZ21lbnRzIGxlYWRpbmcgdG8gdGhlIHByb3h5LlxuICAgKiBAcmV0dXJuIHthbnl9IFByb3h5IHRoYXQgcmVzb2x2ZXMgZW52aXJvbm1lbnQgdmFsdWVzIG9yIGNvbXBvc2VzIGFkZGl0aW9uYWwgcHJveGllcyBmb3IgZGVlcGVyIHBhdGhzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgYnVpbGRFbnZQcm94eShjdXJyZW50OiBhbnksIHBhdGg6IHN0cmluZ1tdKTogYW55IHtcbiAgICBjb25zdCBidWlsZEtleSA9IChwOiBzdHJpbmdbXSkgPT5cbiAgICAgIHAubWFwKChzZWcpID0+IHRvRU5WRm9ybWF0KHNlZykpLmpvaW4oRU5WX1BBVEhfREVMSU1JVEVSKTtcblxuICAgIC8vIEhlbHBlciB0byByZWFkIGZyb20gdGhlIGFjdGl2ZSBlbnZpcm9ubWVudCBnaXZlbiBhIGNvbXBvc2VkIGtleVxuICAgIGNvbnN0IHJlYWRFbnYgPSAoa2V5OiBzdHJpbmcpOiB1bmtub3duID0+IHtcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICBjb25zdCBlbnYgPSAoXG4gICAgICAgICAgZ2xvYmFsVGhpcyBhcyB0eXBlb2YgZ2xvYmFsVGhpcyAmIHtcbiAgICAgICAgICAgIFtCcm93c2VyRW52S2V5XT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgIH1cbiAgICAgICAgKVtCcm93c2VyRW52S2V5XTtcbiAgICAgICAgcmV0dXJuIGVudiA/IGVudltrZXldIDogdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIChnbG9iYWxUaGlzIGFzIGFueSk/LnByb2Nlc3M/LmVudj8uW2tleV07XG4gICAgfTtcblxuICAgIGNvbnN0IGhhbmRsZXI6IFByb3h5SGFuZGxlcjxhbnk+ID0ge1xuICAgICAgZ2V0KF90YXJnZXQsIHByb3A6IHN0cmluZyB8IHN5bWJvbCkge1xuICAgICAgICBpZiAocHJvcCA9PT0gU3ltYm9sLnRvUHJpbWl0aXZlKSB7XG4gICAgICAgICAgcmV0dXJuICgpID0+IGJ1aWxkS2V5KHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wID09PSBcInRvU3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gKCkgPT4gYnVpbGRLZXkocGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3AgPT09IFwidmFsdWVPZlwiKSB7XG4gICAgICAgICAgcmV0dXJuICgpID0+IGJ1aWxkS2V5KHBhdGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gXCJzeW1ib2xcIikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICBjb25zdCBoYXNQcm9wID1cbiAgICAgICAgICAhIWN1cnJlbnQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIHByb3ApO1xuICAgICAgICBjb25zdCBuZXh0TW9kZWwgPSBoYXNQcm9wID8gKGN1cnJlbnQgYXMgYW55KVtwcm9wXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbmV4dFBhdGggPSBbLi4ucGF0aCwgcHJvcF07XG4gICAgICAgIGNvbnN0IGNvbXBvc2VkS2V5ID0gYnVpbGRLZXkobmV4dFBhdGgpO1xuXG4gICAgICAgIC8vIElmIGFuIEVOViB2YWx1ZSBleGlzdHMgZm9yIHRoaXMgcGF0aCwgcmV0dXJuIGl0IGRpcmVjdGx5XG4gICAgICAgIGNvbnN0IGVudlZhbHVlID0gcmVhZEVudihjb21wb3NlZEtleSk7XG4gICAgICAgIGlmICh0eXBlb2YgZW52VmFsdWUgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBlbnZWYWx1ZTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSBtb2RlbCBoYXMgYW4gb2JqZWN0IGF0IHRoaXMgcGF0aCwga2VlcCBkcmlsbGluZyB3aXRoIGEgcHJveHlcbiAgICAgICAgY29uc3QgaXNOZXh0T2JqZWN0ID0gbmV4dE1vZGVsICYmIHR5cGVvZiBuZXh0TW9kZWwgPT09IFwib2JqZWN0XCI7XG4gICAgICAgIGlmIChpc05leHRPYmplY3QpIHJldHVybiBFbnZpcm9ubWVudC5idWlsZEVudlByb3h5KG5leHRNb2RlbCwgbmV4dFBhdGgpO1xuXG4gICAgICAgIC8vIElmIHRoZSBtb2RlbCBtYXJrcyB0aGlzIGxlYWYgYXMgYW4gZW1wdHkgc3RyaW5nLCB0cmVhdCBhcyB1bmRlZmluZWQgKG5vIHByb3h5KVxuICAgICAgICBpZiAoaGFzUHJvcCAmJiBuZXh0TW9kZWwgPT09IFwiXCIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIElmIHRoZSBtb2RlbCBleHBsaWNpdGx5IGNvbnRhaW5zIHRoZSBwcm9wZXJ0eSB3aXRoIHZhbHVlIHVuZGVmaW5lZCwgdHJlYXQgYXMgdW5kZWZpbmVkIChubyBwcm94eSlcbiAgICAgICAgaWYgKGhhc1Byb3AgJiYgdHlwZW9mIG5leHRNb2RlbCA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgICAvLyBBbHdheXMgcmV0dXJuIGEgcHJveHkgZm9yIGZ1cnRoZXIgcGF0aCBjb21wb3NpdGlvbiB3aGVuIG5vIEVOViB2YWx1ZTtcbiAgICAgICAgLy8gZG8gbm90IHN1cmZhY2UgcHJpbWl0aXZlIG1vZGVsIGRlZmF1bHRzIGhlcmUgKHRoaXMgQVBJIGlzIGZvciBrZXkgY29tcG9zaXRpb24pLlxuICAgICAgICByZXR1cm4gRW52aXJvbm1lbnQuYnVpbGRFbnZQcm94eSh1bmRlZmluZWQsIG5leHRQYXRoKTtcbiAgICAgIH0sXG4gICAgICBvd25LZXlzKCkge1xuICAgICAgICByZXR1cm4gY3VycmVudCA/IFJlZmxlY3Qub3duS2V5cyhjdXJyZW50KSA6IFtdO1xuICAgICAgfSxcbiAgICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfdCwgcCkge1xuICAgICAgICBpZiAoIWN1cnJlbnQpIHJldHVybiB1bmRlZmluZWQgYXMgYW55O1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnJlbnQsIHApKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gYXMgUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQgYXMgYW55O1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFyZ2V0ID0ge30gYXMgYW55O1xuICAgIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGtleXMgb2YgdGhlIGVudmlyb25tZW50LCBvcHRpb25hbGx5IGNvbnZlcnRpbmcgdGhlbSB0byBFTlYgZm9ybWF0LlxuICAgKiBAc3VtbWFyeSBHZXRzIGFsbCBrZXlzIGluIHRoZSBlbnZpcm9ubWVudCwgd2l0aCBhbiBvcHRpb24gdG8gZm9ybWF0IHRoZW0gZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbdG9FbnY9dHJ1ZV0gLSBXaGV0aGVyIHRvIGNvbnZlcnQgdGhlIGtleXMgdG8gRU5WIGZvcm1hdC5cbiAgICogQHJldHVybiB7c3RyaW5nW119IEFuIGFycmF5IG9mIGtleXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuXG4gICAqL1xuICBzdGF0aWMga2V5cyh0b0VudjogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIEVudmlyb25tZW50Lmluc3RhbmNlKClcbiAgICAgIC5rZXlzKClcbiAgICAgIC5tYXAoKGspID0+ICh0b0VudiA/IHRvRU5WRm9ybWF0KGspIDogaykpO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNpbmdsZXRvbiBlbnZpcm9ubWVudCBpbnN0YW5jZSBzZWVkZWQgd2l0aCBkZWZhdWx0IGxvZ2dpbmcgY29uZmlndXJhdGlvbi5cbiAqIEBzdW1tYXJ5IENvbWJpbmVzIHtAbGluayBEZWZhdWx0TG9nZ2luZ0NvbmZpZ30gd2l0aCBydW50aW1lIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwcm92aWRlIGNvbnNpc3RlbnQgbG9nZ2luZyBkZWZhdWx0cyBhY3Jvc3MgcGxhdGZvcm1zLlxuICogQGNvbnN0IExvZ2dlZEVudmlyb25tZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IExvZ2dlZEVudmlyb25tZW50ID0gRW52aXJvbm1lbnQuYWNjdW11bGF0ZShcbiAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdExvZ2dpbmdDb25maWcsIHtcbiAgICBlbnY6XG4gICAgICAoaXNCcm93c2VyKCkgJiYgKGdsb2JhbFRoaXMgYXMgYW55KVtCcm93c2VyRW52S2V5XVxuICAgICAgICA/IChnbG9iYWxUaGlzIGFzIGFueSlbQnJvd3NlckVudktleV1bXCJOT0RFX0VOVlwiXVxuICAgICAgICA6IChnbG9iYWxUaGlzIGFzIGFueSkucHJvY2Vzcy5lbnZbXCJOT0RFX0VOVlwiXSkgfHwgXCJkZXZlbG9wbWVudFwiLFxuICB9KVxuKTtcbiJdfQ==
|
package/lib/esm/index.d.ts
CHANGED
package/lib/esm/index.js
CHANGED
|
@@ -20,5 +20,5 @@ export * from "./web.js";
|
|
|
20
20
|
* @type {string}
|
|
21
21
|
* @memberOf module:Logging
|
|
22
22
|
*/
|
|
23
|
-
export const VERSION = "0.3.
|
|
23
|
+
export const VERSION = "0.3.14";
|
|
24
24
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQTBCO0FBQzFCLCtCQUE0QjtBQUM1QixnQ0FBNkI7QUFDN0IsaUNBQThCO0FBQzlCLGlDQUE4QjtBQUM5Qiw2QkFBMEI7QUFDMUIsMEJBQXVCO0FBQ3ZCLDBCQUF1QjtBQUN2QiwyQkFBd0I7QUFDeEIseUJBQXNCO0FBRXRCOzs7O0dBSUc7QUFFSDs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vZmlsdGVyc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9lbnZpcm9ubWVudFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vTG9nZ2VkQ2xhc3NcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2xvZ2dpbmdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RleHRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RpbWVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi93ZWJcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcHJlaGVuc2l2ZSBsb2dnaW5nIHRvb2xraXQgZm9yIGJyb3dzZXIgYW5kIE5vZGUgZW52aXJvbm1lbnRzLlxuICogQHN1bW1hcnkgRXhwb3NlcyB7QGxpbmsgTG9nZ2luZ30gYW5kIHtAbGluayBNaW5pTG9nZ2VyfSBmb3IgcnVudGltZSBsb2dnaW5nLCBkZWNvcmF0b3JzIHN1Y2ggYXMge0BsaW5rIGxvZ30gZm9yIG1ldGhvZCBpbnN0cnVtZW50YXRpb24sIGFuZCB1dGlsaXRpZXMgbGlrZSB7QGxpbmsgUGF0dGVybkZpbHRlcn0sIHtAbGluayBTdG9wV2F0Y2h9LCBhbmQge0BsaW5rIExvZ2dlZEVudmlyb25tZW50fSB0byBidWlsZCBjb25maWd1cmFibGUsIHRoZW1lLWF3YXJlIGxvZyBwaXBlbGluZXMuXG4gKiBAbW9kdWxlIExvZ2dpbmdcbiAqL1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHBhY2thZ2UgdmVyc2lvbiBzdHJpbmcuXG4gKiBAc3VtbWFyeSBTdG9yZXMgdGhlIHBhY2thZ2UgdmVyc2lvbiBmb3IgZGlhZ25vc3RpY3MgYW5kIGNvbXBhdGliaWxpdHkgY2hlY2tzLlxuICogQGNvbnN0IFZFUlNJT05cbiAqIEB0eXBlIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFZFUlNJT04gPSBcIiMjVkVSU0lPTiMjXCI7XG4iXX0=
|
package/lib/index.cjs
CHANGED
|
@@ -37,5 +37,5 @@ __exportStar(require("./web.cjs"), exports);
|
|
|
37
37
|
* @type {string}
|
|
38
38
|
* @memberOf module:Logging
|
|
39
39
|
*/
|
|
40
|
-
exports.VERSION = "0.3.
|
|
40
|
+
exports.VERSION = "0.3.14";
|
|
41
41
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxzREFBMEI7QUFDMUIsa0RBQTRCO0FBQzVCLG1EQUE2QjtBQUM3QixvREFBOEI7QUFDOUIsb0RBQThCO0FBQzlCLGdEQUEwQjtBQUMxQiw2Q0FBdUI7QUFDdkIsNkNBQXVCO0FBQ3ZCLDhDQUF3QjtBQUN4Qiw0Q0FBc0I7QUFFdEI7Ozs7R0FJRztBQUVIOzs7Ozs7R0FNRztBQUNVLFFBQUEsT0FBTyxHQUFHLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2ZpbHRlcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vZW52aXJvbm1lbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0xvZ2dlZENsYXNzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9sb2dnaW5nXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZXh0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi90aW1lXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vd2ViXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXByZWhlbnNpdmUgbG9nZ2luZyB0b29sa2l0IGZvciBicm93c2VyIGFuZCBOb2RlIGVudmlyb25tZW50cy5cbiAqIEBzdW1tYXJ5IEV4cG9zZXMge0BsaW5rIExvZ2dpbmd9IGFuZCB7QGxpbmsgTWluaUxvZ2dlcn0gZm9yIHJ1bnRpbWUgbG9nZ2luZywgZGVjb3JhdG9ycyBzdWNoIGFzIHtAbGluayBsb2d9IGZvciBtZXRob2QgaW5zdHJ1bWVudGF0aW9uLCBhbmQgdXRpbGl0aWVzIGxpa2Uge0BsaW5rIFBhdHRlcm5GaWx0ZXJ9LCB7QGxpbmsgU3RvcFdhdGNofSwgYW5kIHtAbGluayBMb2dnZWRFbnZpcm9ubWVudH0gdG8gYnVpbGQgY29uZmlndXJhYmxlLCB0aGVtZS1hd2FyZSBsb2cgcGlwZWxpbmVzLlxuICogQG1vZHVsZSBMb2dnaW5nXG4gKi9cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3VycmVudCBwYWNrYWdlIHZlcnNpb24gc3RyaW5nLlxuICogQHN1bW1hcnkgU3RvcmVzIHRoZSBwYWNrYWdlIHZlcnNpb24gZm9yIGRpYWdub3N0aWNzIGFuZCBjb21wYXRpYmlsaXR5IGNoZWNrcy5cbiAqIEBjb25zdCBWRVJTSU9OXG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTpMb2dnaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIjI1ZFUlNJT04jI1wiO1xuIl19
|
package/lib/index.d.ts
CHANGED