@mnaoumov/typescript-lib 1.7.0 → 3.0.0
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/README.md +21 -0
- package/dist/lib/cjs/async-events.cjs +1 -1
- package/dist/lib/cjs/async-events.d.cts +12 -12
- package/dist/lib/cjs/async.cjs +4 -5
- package/dist/lib/cjs/async.d.cts +2 -2
- package/dist/lib/cjs/debug-controller.cjs +1 -1
- package/dist/lib/cjs/debug-controller.d.cts +4 -4
- package/dist/lib/cjs/debug-switches.cjs +1 -1
- package/dist/lib/cjs/debug-switches.d.cts +2 -2
- package/dist/lib/cjs/debug.cjs +3 -11
- package/dist/lib/cjs/debug.d.cts +0 -8
- package/dist/lib/cjs/desktop-zip-extractor.cjs +1 -1
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +2 -2
- package/dist/lib/cjs/disposable.cjs +1 -1
- package/dist/lib/cjs/disposable.d.cts +2 -2
- package/dist/lib/cjs/error.cjs +23 -5
- package/dist/lib/cjs/html-element.cjs +1 -1
- package/dist/lib/cjs/html-element.d.cts +3 -3
- package/dist/lib/cjs/object-utils.cjs +5 -5
- package/dist/lib/cjs/object-utils.d.cts +6 -6
- package/dist/lib/cjs/string.cjs +1 -1
- package/dist/lib/cjs/string.d.cts +6 -6
- package/dist/lib/cjs/transformers/transformer.cjs +1 -1
- package/dist/lib/cjs/type.cjs +1 -1
- package/dist/lib/cjs/type.d.cts +3 -3
- package/dist/lib/cjs/value-provider.cjs +1 -1
- package/dist/lib/cjs/value-provider.d.cts +1 -1
- package/dist/lib/esm/async-events.d.mts +12 -12
- package/dist/lib/esm/async-events.mjs +1 -1
- package/dist/lib/esm/async.d.mts +2 -2
- package/dist/lib/esm/async.mjs +5 -9
- package/dist/lib/esm/debug-controller.d.mts +4 -4
- package/dist/lib/esm/debug-switches.d.mts +2 -2
- package/dist/lib/esm/debug-switches.mjs +1 -1
- package/dist/lib/esm/debug.d.mts +0 -8
- package/dist/lib/esm/debug.mjs +2 -9
- package/dist/lib/esm/desktop-zip-extractor.d.mts +2 -2
- package/dist/lib/esm/desktop-zip-extractor.mjs +1 -1
- package/dist/lib/esm/disposable.d.mts +2 -2
- package/dist/lib/esm/disposable.mjs +1 -1
- package/dist/lib/esm/error.mjs +23 -5
- package/dist/lib/esm/html-element.d.mts +3 -3
- package/dist/lib/esm/html-element.mjs +1 -1
- package/dist/lib/esm/object-utils.d.mts +6 -6
- package/dist/lib/esm/object-utils.mjs +5 -5
- package/dist/lib/esm/string.d.mts +6 -6
- package/dist/lib/esm/string.mjs +1 -1
- package/dist/lib/esm/transformers/transformer.mjs +1 -1
- package/dist/lib/esm/type.d.mts +3 -3
- package/dist/lib/esm/type.mjs +1 -1
- package/dist/lib/esm/value-provider.d.mts +1 -1
- package/dist/lib/esm/value-provider.mjs +1 -1
- package/package.json +18 -14
package/dist/lib/esm/error.mjs
CHANGED
|
@@ -167,19 +167,37 @@ function getErrorLines(error) {
|
|
|
167
167
|
}
|
|
168
168
|
return lines;
|
|
169
169
|
}
|
|
170
|
+
function getErrorStack(error) {
|
|
171
|
+
try {
|
|
172
|
+
return error.stack;
|
|
173
|
+
} catch {
|
|
174
|
+
const originalPrepareStackTrace = Object.getOwnPropertyDescriptor(Error, "prepareStackTrace");
|
|
175
|
+
try {
|
|
176
|
+
Reflect.deleteProperty(Error, "prepareStackTrace");
|
|
177
|
+
return error.stack;
|
|
178
|
+
} finally {
|
|
179
|
+
if (originalPrepareStackTrace) {
|
|
180
|
+
Object.defineProperty(Error, "prepareStackTrace", originalPrepareStackTrace);
|
|
181
|
+
} else {
|
|
182
|
+
Reflect.deleteProperty(Error, "prepareStackTrace");
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
170
187
|
function getFallbackErrorString(error, formattingError) {
|
|
171
188
|
const errorString = safeToString(() => String(error));
|
|
172
|
-
const stack = safeToString(() => error instanceof Error ? error
|
|
189
|
+
const stack = safeToString(() => error instanceof Error ? getErrorStack(error) ?? "" : "");
|
|
173
190
|
const lines = stack.startsWith(errorString) ? [stack] : [errorString, stack];
|
|
174
191
|
lines.push(`(errorToString could not format this error: ${safeToString(() => String(formattingError))})`);
|
|
175
192
|
return lines.filter((line) => line !== "").join("\n");
|
|
176
193
|
}
|
|
177
194
|
function getOwnErrorLines(error) {
|
|
178
195
|
const headerLines = getErrorHeader(error).split("\n").map((text) => toTitleLine(text));
|
|
179
|
-
|
|
196
|
+
const stack = getErrorStack(error);
|
|
197
|
+
if (stack === void 0) {
|
|
180
198
|
return headerLines;
|
|
181
199
|
}
|
|
182
|
-
const stackLines =
|
|
200
|
+
const stackLines = stack.split("\n");
|
|
183
201
|
if (hasStackHeader()) {
|
|
184
202
|
return stackLines.map((text) => ({ isFrame: text.startsWith(STACK_TRACE_PREFIX), text }));
|
|
185
203
|
}
|
|
@@ -189,7 +207,7 @@ function handleAsyncError(asyncError) {
|
|
|
189
207
|
printError(asyncError);
|
|
190
208
|
}
|
|
191
209
|
function hasStackHeader() {
|
|
192
|
-
const firstLine = new Error(STACK_HEADER_PROBE_MESSAGE)
|
|
210
|
+
const firstLine = getErrorStack(new Error(STACK_HEADER_PROBE_MESSAGE))?.split("\n", 1)[0];
|
|
193
211
|
return firstLine === `Error: ${STACK_HEADER_PROBE_MESSAGE}`;
|
|
194
212
|
}
|
|
195
213
|
function safeToString(toString) {
|
|
@@ -219,4 +237,4 @@ export {
|
|
|
219
237
|
stopCollectingUnhandledAsyncErrors,
|
|
220
238
|
throwExpression
|
|
221
239
|
};
|
|
222
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHtcbiAgQ2FsbGJhY2tEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICcuL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEVycm9yQXN5bmNFdmVudE1hcCB7XG4gIGFzeW5jRXJyb3I6IFtlcnJvcjogdW5rbm93bl07XG59XG5cbmNvbnN0IGVycm9yQXN5bmNFdmVudHMgPSBuZXcgQXN5bmNFdmVudHM8RXJyb3JBc3luY0V2ZW50TWFwPigpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdG9wLWxldmVsLXNpZGUtZWZmZWN0cyAtLSBJbnN0YWxsaW5nIHRoZSBkZWZhdWx0IGhhbmRsZXIgb24gaW1wb3J0IGlzIHdoYXQgdGhpcyBtb2R1bGUgaXMgZm9yLiBEZWZlcnJpbmcgaXQgYmVoaW5kIGEgY2FsbCB3b3VsZCBtZWFuIGV2ZXJ5IGNvbnN1bWVyIGhhZCB0byByZW1lbWJlciB0byBtYWtlIHRoYXQgY2FsbCBiZWZvcmUgdGhlIGZpcnN0IGFzeW5jIGVycm9yLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIG1vbWVudCB0aGUgaGFuZGxlciBuZWVkcyB0byBhbHJlYWR5IGV4aXN0LlxuZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIG5lc3RpbmcgZGVwdGggb2YgYWN0aXZlIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZXMuIFdoaWxlIGdyZWF0ZXIgdGhhbiBgMGAsIGFuXG4gICAqIGFzeW5jIGVycm9yIGVtaXR0ZWQgKG9yIGEgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvbiB3aG9zZSByZWplY3Rpb24gd2FzIGNhcHR1cmVkKSB3aXRoaW4gdGhlIHNjb3BlIGlzXG4gICAqIHRyZWF0ZWQgYXMgZXhwZWN0ZWQgYW5kIG5vdCBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkLlxuICAgKi9cbiAgYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVmZmVyIHRoYXQgY29sbGVjdHMgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyB3aGlsZSBhIGNvbGxlY3Rpb24gd2luZG93IGlzIG9wZW4sIG9yIGBudWxsYCB3aGVuXG4gICAqIG5vIHdpbmRvdyBpcyBvcGVuICh0aGUgZGVmYXVsdCBpbiBwcm9kdWN0aW9uKS4gT3BlbmVkIGJ5IHtAbGluayBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30sXG4gICAqIGVtcHRpZWQgd2l0aG91dCBjbG9zaW5nIGJ5IHtAbGluayBkcmFpbkNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzfSwgYW5kIGRyYWluZWQtYW5kLWNsb3NlZCBieVxuICAgKiB7QGxpbmsgc3RvcENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30gXHUyMDE0IHVzZWQgYnkgdGhlIHRlc3QgaGFybmVzcyB0byBmYWlsIGEgdGVzdCB0aGF0IHN3YWxsb3dlZFxuICAgKiBhbiBhc3luYyBlcnJvci5cbiAgICovXG4gIGNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzOiBudWxsIHwgdW5rbm93bltdO1xufVxuXG4vKipcbk1vZHVsZS1sZXZlbCBtdXRhYmxlIHN0YXRlLCBoZWxkIGluIG9uZSBvYmplY3Qgc28gZWFjaCBtdXRhdGlvbiBuYW1lcyBpdCBleHBsaWNpdGx5LlxuICovXG5jb25zdCBtb2R1bGVTdGF0ZTogTW9kdWxlU3RhdGUgPSB7XG4gIGFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGg6IDAsXG4gIGNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzOiBudWxsXG59O1xuLyoqXG4gKiBBIG1lc3NhZ2Ugb2YgdGhlIEFzeW5jV3JhcHBlckVycm9yLlxuICovXG5leHBvcnQgY29uc3QgQVNZTkNfV1JBUFBFUl9FUlJPUl9NRVNTQUdFID0gJ0FuIHVuaGFuZGxlZCBlcnJvciBvY2N1cnJlZCBleGVjdXRpbmcgYXN5bmMgb3BlcmF0aW9uJztcblxuY29uc3QgU1RBQ0tfVFJBQ0VfUFJFRklYID0gJyAgICBhdCc7XG5cbmNvbnN0IEVSUk9SX0hFQURFUl9SRUdfRVhQID0gL15cXHcqRXJyb3IoPzo6IHwkKS87XG5cbmNvbnN0IFNUQUNLX0hFQURFUl9QUk9CRV9NRVNTQUdFID0gJ3N0YWNrIGhlYWRlciBwcm9iZSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBDdXN0b21TdGFja1RyYWNlRXJyb3J9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVN0YWNrVHJhY2VFcnJvckNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYXVzZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICByZWFkb25seSBjYXVzZTogdW5rbm93bjtcblxuICAvKipcbiAgICogVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9uZSBsaW5lIG9mIGFuIGVycm9yJ3Mgc3RyaW5nIGZvcm0sIHRhZ2dlZCB3aXRoIHdoZXRoZXIgaXQgaXMgYSBzdGFjayBmcmFtZS5cbiAqXG4gKiBBIHRpdGxlIChhbiBlcnJvciBoZWFkZXIsIGEgYENhdXNlZCBieTpgIG1hcmtlciwgYSBsaW5lIG9mIGEgbXVsdGktbGluZSBtZXNzYWdlKSBpcyB3cmFwcGVkIGludG9cbiAqIHtAbGluayBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lfSdzIGZvcm0gd2hlbiB0aGUgZXJyb3IgaXQgYmVsb25ncyB0byBpcyBuZXN0ZWQ7IGEgZnJhbWUgaXMga2VwdCB2ZXJiYXRpbS5cbiAqL1xuaW50ZXJmYWNlIEVycm9yTGluZSB7XG4gIHJlYWRvbmx5IGlzRnJhbWU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBbiBlcnJvciB0aGF0IHdyYXBzIGFuIGVycm9yIHdpdGggYSBjdXN0b20gc3RhY2sgdHJhY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21TdGFja1RyYWNlRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBDdXN0b21TdGFja1RyYWNlRXJyb3JDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIGNvbnN0IHsgY2F1c2UsIG1lc3NhZ2UsIHN0YWNrVHJhY2UgfSA9IHBhcmFtcztcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgIHRoaXMubmFtZSA9ICdDdXN0b21TdGFja1RyYWNlRXJyb3InO1xuXG4gICAgbGV0IHJvb3RDYXVzZSA9IGNhdXNlO1xuICAgIGNvbnN0IHBhcmVudENhdXNlcyA9IG5ldyBTZXQ8Q3VzdG9tU3RhY2tUcmFjZUVycm9yPigpO1xuICAgIHdoaWxlIChyb290Q2F1c2UgaW5zdGFuY2VvZiBDdXN0b21TdGFja1RyYWNlRXJyb3IpIHtcbiAgICAgIGlmIChwYXJlbnRDYXVzZXMuaGFzKHJvb3RDYXVzZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaXJjdWxhciBjYXVzZSBkZXRlY3RlZCcpO1xuICAgICAgfVxuICAgICAgcGFyZW50Q2F1c2VzLmFkZChyb290Q2F1c2UpO1xuICAgICAgcm9vdENhdXNlID0gcm9vdENhdXNlLmNhdXNlO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWNrTGluZXMgPSBzdGFja1RyYWNlLnNwbGl0KCdcXG4nKTtcbiAgICBpZiAoRVJST1JfSEVBREVSX1JFR19FWFAudGVzdChlbnN1cmVOb25OdWxsYWJsZShzdGFja0xpbmVzWzBdKSkpIHtcbiAgICAgIHN0YWNrTGluZXMuc2hpZnQoKTtcbiAgICB9XG4gICAgLy8gS2VlcCB0aGUgZW5naW5lJ3Mgb3duIGAuc3RhY2tgIHNoYXBlOiBhIGhlYWRlciBvbmx5IHdoZXJlIHRoZSBlbmdpbmUgd3JpdGVzIG9uZSAoVjgpLCBmcmFtZXMgb25seSB3aGVyZSBpdCBkb2VzIG5vdCAoSmF2YVNjcmlwdENvcmUsIFNwaWRlck1vbmtleSkuXG4gICAgaWYgKGhhc1N0YWNrSGVhZGVyKCkpIHtcbiAgICAgIHN0YWNrTGluZXMudW5zaGlmdChnZXRFcnJvckhlYWRlcih0aGlzKSk7XG4gICAgfVxuICAgIHRoaXMuc3RhY2sgPSBzdGFja0xpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhIG5vbi1gRXJyb3JgIHZhbHVlIHRoYXQgd2FzIHRocm93biwgcHJlc2VydmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgaW4gYGNhdXNlYC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVycm9yV3JhcHBlciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRXJyb3JXcmFwcGVyLlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgb3JpZ2luYWwgbm9uLWBFcnJvcmAgdmFsdWUgdGhhdCB3YXMgdGhyb3duLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRocm93blZhbHVlOiB1bmtub3duKSB7XG4gICAgc3VwZXIoYEEgbm9uLUVycm9yIHZhbHVlIHdhcyB0aHJvd246ICR7U3RyaW5nKHRocm93blZhbHVlKX1gLCB7IGNhdXNlOiB0aHJvd25WYWx1ZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnRXJyb3JXcmFwcGVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGFueSB0aHJvd24gdmFsdWUgdG8gYW4gYEVycm9yYC5cbiAgICpcbiAgICogUmV0dXJucyB0aGUgdmFsdWUgdW5jaGFuZ2VkIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIHdyYXBzIGl0IGluIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKlxuICAgKiBAcGFyYW0gdGhyb3duVmFsdWUgLSBUaGUgdGhyb3duIHZhbHVlIHRvIG5vcm1hbGl6ZS5cbiAgICogQHJldHVybnMgQW4gYEVycm9yYCBpbnN0YW5jZTogdGhlIG9yaWdpbmFsIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgYW4gYEVycm9yYCwgb3RoZXJ3aXNlIGFuIHtAbGluayBFcnJvcldyYXBwZXJ9LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjcmVhdGUodGhyb3duVmFsdWU6IHVua25vd24pOiBFcnJvciB7XG4gICAgcmV0dXJuIHRocm93blZhbHVlIGluc3RhbmNlb2YgRXJyb3IgPyB0aHJvd25WYWx1ZSA6IG5ldyBFcnJvcldyYXBwZXIodGhyb3duVmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCBpcyBub3QgcHJpbnRlZCB0byB0aGUgY29uc29sZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFNpbGVudEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBTaWxlbnRFcnJvci5cbiAgICpcbiAgICogQHBhcmFtIG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSBvZiB0aGUgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ1NpbGVudEVycm9yJztcbiAgfVxufVxuXG4vKipcbiAqIEVtcHRpZXMgdGhlIGNvbGxlY3Rpb24gd2luZG93IG9wZW5lZCBieSB7QGxpbmsgc3RhcnRDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9IGFuZCByZXR1cm5zIHdoYXQgaXRcbiAqIGhlbGQsIGxlYXZpbmcgdGhlIHdpbmRvdyAqKm9wZW4qKiBzbyBlcnJvcnMgZW1pdHRlZCBhZnRlcndhcmRzIGtlZXAgYmVpbmcgY29sbGVjdGVkLlxuICpcbiAqIFRoaXMgaXMgd2hhdCB0aGUgdGVzdCBzZXR1cCdzIChgQG1uYW91bW92L3R5cGVzY3JpcHQtdGVzdC10b29sa2l0L3NldHVwYCkgYGJlZm9yZUVhY2hgIC8gYGFmdGVyRWFjaGAgdXNlLCByYXRoZXIgdGhhblxuICoge0BsaW5rIHN0b3BDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9OiBhbiBhc3luYyBlcnJvciBlbWl0dGVkIGluIHRoZSBnYXAgYmV0d2VlbiB0d28gdGVzdHMgKGUuZy4gYnkgYVxuICogYHNldFRpbWVvdXRgIHRoZSB0ZXN0IGxlZnQgcGVuZGluZykgd291bGQgb3RoZXJ3aXNlIGxhbmQgb24gYSBjbG9zZWQgd2luZG93IGFuZCB2YW5pc2ggdW5yZXBvcnRlZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyBjb2xsZWN0ZWQgc28gZmFyLCBvciBhbiBlbXB0eSBhcnJheSBpZiBubyB3aW5kb3cgaXMgb3Blbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRyYWluQ29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMoKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzPy5zcGxpY2UoMCkgPz8gW107XG59XG5cbi8qKlxuICogRW1pdHMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICpcbiAqIFdoZW4gYSBjb2xsZWN0aW9uIHdpbmRvdyBpcyBvcGVuIChzZWUge0BsaW5rIHN0YXJ0Q29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSkgdGhlIGVycm9yIGlzXG4gKiBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkIHVubGVzcyBpdCBpcyBpZ25vcmVkIFx1MjAxNCBlaXRoZXIgYmVjYXVzZSBgc2hvdWxkSWdub3JlYCBpcyBgdHJ1ZWAgb3IgYW5cbiAqIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZSBpcyBhY3RpdmUuIEEgcmVnaXN0ZXJlZCBjb25zdW1lciBoYW5kbGVyIGRlbGliZXJhdGVseSBkb2VzXG4gKiAqKm5vdCoqIGV4ZW1wdCB0aGUgZXJyb3I6IGluIHByb2R1Y3Rpb24gaXQgc2hvd3MgdGhlIHVzZXIgYSBOb3RpY2UsIHdoaWNoIGlzIG5vdCBhIHRlc3QgYXNzZXJ0aW5nIHRoYXRcbiAqIHRoZSBlcnJvciB3YXMgZXhwZWN0ZWQuIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBpcyB0aGUgc2luZ2xlLCBleHBsaWNpdCBvcHQtb3V0LlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGVycm9yIHRvIGVtaXQgYXMgYW4gYXN5bmNocm9ub3VzIGVycm9yIGV2ZW50LlxuICogQHBhcmFtIHNob3VsZElnbm9yZSAtIFdoZXRoZXIgdG8gdHJlYXQgdGhlIGVycm9yIGFzIGV4cGVjdGVkIGFuZCBuZXZlciBjb2xsZWN0IGl0IGFzIHVuaGFuZGxlZCwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aXZlIGlnbm9yZSBjb250ZXh0LiBVc2VkIHRvIGNhcnJ5IHRoZSBzY2hlZHVsZS10aW1lIGlnbm9yZSBkZWNpc2lvbiBvZiBhIGRlZmVycmVkIGZpcmUtYW5kLWZvcmdldCByZWplY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0QXN5bmNFcnJvckV2ZW50KGFzeW5jRXJyb3I6IHVua25vd24sIHNob3VsZElnbm9yZSA9IGZhbHNlKTogdm9pZCB7XG4gIGNvbnN0IGlzSWdub3JlZCA9IHNob3VsZElnbm9yZSB8fCBtb2R1bGVTdGF0ZS5hc3luY0Vycm9ySWdub3JlQ29udGV4dERlcHRoID4gMDtcbiAgaWYgKG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzICYmICFpc0lnbm9yZWQpIHtcbiAgICBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycy5wdXNoKGFzeW5jRXJyb3IpO1xuICB9XG4gIGVycm9yQXN5bmNFdmVudHMudHJpZ2dlcignYXN5bmNFcnJvcicsIGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGVycm9yIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgdGhlIGFnZ3JlZ2F0ZWQgZXJyb3JzIG9mXG4gKiBhbiBgQWdncmVnYXRlRXJyb3JgLCB3aXRoIGluZGVudGF0aW9uLlxuICpcbiAqIE5ldmVyIHRocm93czogaWYgdGhlIGVycm9yIGNhbm5vdCBiZSBmb3JtYXR0ZWQgKGEgdGhyb3dpbmcgZ2V0dGVyLCBhIG1hbGZvcm1lZCBuZXN0ZWQgZXJyb3IpLCBpdCBmYWxscyBiYWNrIHRvIHRoZVxuICogZXJyb3IncyBvd24gc3RyaW5nIGFuZCBzdGFjaywgc28gdGhlIGVycm9yIGJlaW5nIHJlcG9ydGVkIGlzIG5ldmVyIGhpZGRlbiBiZWhpbmQgYSBmYWlsdXJlIHRvIHJlcG9ydCBpdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gY29udmVydCB0byBhIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGdldEVycm9yTGluZXMoZXJyb3IpLm1hcCgobGluZSkgPT4gbGluZS50ZXh0KS5qb2luKCdcXG4nKTtcbiAgfSBjYXRjaCAoZm9ybWF0dGluZ0Vycm9yKSB7XG4gICAgcmV0dXJuIGdldEZhbGxiYWNrRXJyb3JTdHJpbmcoZXJyb3IsIGZvcm1hdHRpbmdFcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBjdXJyZW50IHN0YWNrIHRyYWNlIGFzIGEgc3RyaW5nLCBleGNsdWRpbmcgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbC5cbiAqXG4gKiBAcGFyYW0gZnJhbWVzVG9Ta2lwIC0gVGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcCBpbiB0aGUgc3RhY2sgdHJhY2UuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBzdGFjayB0cmFjZSwgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFja1RyYWNlKGZyYW1lc1RvU2tpcCA9IDApOiBzdHJpbmcge1xuICAvLyBTa2lwcGluZyB0aGUgYGdldFN0YWNrVHJhY2VgIGZyYW1lIGl0c2VsZiwgcGx1cyB0aGUgYEVycm9yYCBoZWFkZXIgbGluZSBvbiBhbiBlbmdpbmUgdGhhdCB3cml0ZXMgb25lLlxuICBjb25zdCBHRVRfU1RBQ0tfVFJBQ0VfRlJBTUVfQ09VTlQgPSAxO1xuICBjb25zdCBhZGRpdGlvbmFsTGluZXNUb1NraXAgPSBHRVRfU1RBQ0tfVFJBQ0VfRlJBTUVfQ09VTlQgKyAoaGFzU3RhY2tIZWFkZXIoKSA/IDEgOiAwKTtcbiAgY29uc3Qgc3RhY2sgPSBlbnN1cmVOb25OdWxsYWJsZShuZXcgRXJyb3IoKS5zdGFjayk7XG4gIGNvbnN0IGxpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICByZXR1cm4gbGluZXMuc2xpY2UoZnJhbWVzVG9Ta2lwICsgYWRkaXRpb25hbExpbmVzVG9Ta2lwKS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiB7QGxpbmsgc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dH0gc2NvcGUgaXMgY3VycmVudGx5IGFjdGl2ZS5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYXQgbGVhc3Qgb25lIGlnbm9yZSBjb250ZXh0IGlzIGFjdGl2ZSwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jRXJyb3JJZ25vcmVDb250ZXh0QWN0aXZlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gbW9kdWxlU3RhdGUuYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aCA+IDA7XG59XG5cbi8qKlxuICogUHJpbnRzIGFuIGVycm9yIHRvIHRoZSBjb25zb2xlLCBpbmNsdWRpbmcgbmVzdGVkIGNhdXNlcyBhbmQgb3B0aW9uYWwgQU5TSSBzZXF1ZW5jZSBjbGVhcmluZy5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gcHJpbnQuXG4gKiBAcGFyYW0gY29uc29sZSAtIFRoZSBjb25zb2xlIHRvIHByaW50IHRvIChkZWZhdWx0OiBgZ2xvYmFsVGhpcy5jb25zb2xlYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmludEVycm9yKGVycm9yOiB1bmtub3duLCBjb25zb2xlPzogQ29uc29sZSk6IHZvaWQge1xuICBjb25zb2xlID8/PSBnbG9iYWxUaGlzLmNvbnNvbGU7XG4gIGNvbnNvbGUuZXJyb3IoZXJyb3JUb1N0cmluZyhlcnJvcikpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhbiBldmVudCBoYW5kbGVyIGZvciBhc3luY2hyb25vdXMgZXJyb3JzLlxuICpcbiAqIFJlZ2lzdGVyaW5nIGEgaGFuZGxlciBkb2VzIG5vdCBtYXJrIHRoZSBlcnJvcnMgaXQgcmVjZWl2ZXMgYXMgZXhwZWN0ZWQgXHUyMDE0IHNlZVxuICoge0BsaW5rIGVtaXRBc3luY0Vycm9yRXZlbnR9LiBBIHRlc3QgdGhhdCBkZWxpYmVyYXRlbHkgdHJpZ2dlcnMgYW4gYXN5bmMgZXJyb3Igb3BlbnMgYVxuICoge0BsaW5rIHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHR9IHNjb3BlIHJlZ2FyZGxlc3Mgb2Ygd2hvIGlzIGxpc3RlbmluZy5cbiAqXG4gKiBAcGFyYW0gaGFuZGxlciAtIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudCBvY2N1cnMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJBc3luY0Vycm9yRXZlbnRIYW5kbGVyKGhhbmRsZXI6IChhc3luY0Vycm9yOiB1bmtub3duKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IGV2ZW50UmVmID0gZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZXIpO1xuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIGVycm9yQXN5bmNFdmVudHMub2ZmcmVmKGV2ZW50UmVmKTtcbiAgICB9LFxuICAgIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmVcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbnMgYW4gaWdub3JlIGNvbnRleHQgaW4gd2hpY2ggYXN5bmMgZXJyb3JzIGFyZSB0cmVhdGVkIGFzIGV4cGVjdGVkIHJhdGhlciB0aGFuIHVuaGFuZGxlZCwgc28gdGhlXG4gKiB0ZXN0IGhhcm5lc3MgZG9lcyBub3QgZmFpbCB0aGUgdGVzdC5cbiAqXG4gKiBXaGlsZSB0aGUgcmV0dXJuZWQgZGlzcG9zYWJsZSBpcyBoZWxkLCBhbiBhc3luYyBlcnJvciBlbWl0dGVkIGRpcmVjdGx5IChzZWVcbiAqIHtAbGluayBlbWl0QXN5bmNFcnJvckV2ZW50fSkgaXMgbm90IGNvbGxlY3RlZCBhcyB1bmhhbmRsZWQuIENydWNpYWxseSwgYSBmaXJlLWFuZC1mb3JnZXQgb3BlcmF0aW9uXG4gKiBzY2hlZHVsZWQgd2l0aGluIHRoZSBzY29wZSAoZS5nLiB2aWEge0BsaW5rIGFzeW5jIWludm9rZUFzeW5jU2FmZWx5fSkgaXMgYWxzbyBpZ25vcmVkIHdoZW4gaXQgbGF0ZXJcbiAqIHJlamVjdHMgXHUyMDE0IGV2ZW4gYWZ0ZXIgdGhlIHNjb3BlIGhhcyBleGl0ZWQgXHUyMDE0IGJlY2F1c2Uge0BsaW5rIGFzeW5jIWFkZEVycm9ySGFuZGxlcn0gY2FwdHVyZXMgdGhlIGFjdGl2ZVxuICogaWdub3JlIGNvbnRleHQgYXQgc2NoZWR1bGUgdGltZS4gQSB0ZXN0IHRoZXJlZm9yZSBkb2VzIG5vdCBuZWVkIHRvIGRyYWluIHRoZSBvcGVyYXRpb24gaXRzZWxmOlxuICpcbiAqIGBgYHRzXG4gKiBpdCgnZG9lcyBub3QgZmFpbCcsICgpID0+IHtcbiAqICAgdXNpbmcgXyA9IHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHQoKTtcbiAqICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdkZWxpYmVyYXRlbHkgc3dhbGxvd2VkJykpKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQ29udGV4dHMgbmVzdDsgdGhlIGlnbm9yZSBvbmx5IGVuZHMgb25jZSBldmVyeSBvcGVuIGNvbnRleHQgaGFzIGJlZW4gZGlzcG9zZWQuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCBjbG9zZXMgdGhlIGlnbm9yZSBjb250ZXh0IHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dCgpOiBEaXNwb3NhYmxlIHtcbiAgbW9kdWxlU3RhdGUuYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aCsrO1xuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIG1vZHVsZVN0YXRlLmFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGgtLTtcbiAgICB9LFxuICAgIG11bHRpcGxlRGlzcG9zZUJlaGF2aW9yOiBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvci5JZ25vcmVcbiAgfSk7XG59XG5cbi8qKlxuICogT3BlbnMgYSB3aW5kb3cgaW4gd2hpY2ggYXN5bmMgZXJyb3JzIGVtaXR0ZWQgb3V0c2lkZSBhbiBpZ25vcmUgY29udGV4dCBhcmUgY29sbGVjdGVkIGFzIHVuaGFuZGxlZFxuICogKHNlZSB7QGxpbmsgZW1pdEFzeW5jRXJyb3JFdmVudH0pLCBkaXNjYXJkaW5nIGFueXRoaW5nIGNvbGxlY3RlZCBieSBhIHByZXZpb3VzIHdpbmRvdy5cbiAqXG4gKiBJbnRlbmRlZCBmb3IgdGhlIHRlc3QgaGFybmVzcyBvbmx5OiB0aGUgcGVyLXRlc3Qgc2V0dXAgb3BlbnMgYSB3aW5kb3cgYmVmb3JlIGVhY2ggdGVzdCBhbmQgZW1wdGllcyBpdFxuICogYWZ0ZXIgZWFjaCB0ZXN0IHZpYSB7QGxpbmsgZHJhaW5Db2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9yc30sIGNsb3NpbmcgaXQgZm9yIGdvb2Qgd2l0aFxuICoge0BsaW5rIHN0b3BDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnN9IG9uY2UgdGhlIGZpbGUncyBsYXN0IHRlc3QgaGFzIHJ1bi4gSW4gcHJvZHVjdGlvbiBubyB3aW5kb3dcbiAqIGlzIG9wZW4sIHNvIGVtaXR0aW5nIGFuIGFzeW5jIGVycm9yIGNhcnJpZXMgbm8gYm9va2tlZXBpbmcgb3ZlcmhlYWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9ycygpOiB2b2lkIHtcbiAgbW9kdWxlU3RhdGUuY29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMgPSBbXTtcbn1cblxuLyoqXG4gKiBDbG9zZXMgdGhlIHdpbmRvdyBvcGVuZWQgYnkge0BsaW5rIHN0YXJ0Q29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSBhbmQgcmV0dXJucyB0aGUgdW5oYW5kbGVkXG4gKiBhc3luYyBlcnJvcnMgY29sbGVjdGVkIHdoaWxlIGl0IHdhcyBvcGVuLlxuICpcbiAqIFVzZSB7QGxpbmsgZHJhaW5Db2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9yc30gaW5zdGVhZCB3aGVyZXZlciBjb2xsZWN0aW9uIG11c3QgY29udGludWUgYWZ0ZXJ3YXJkcyBcdTIwMTRcbiAqIG9uY2UgdGhlIHdpbmRvdyBpcyBjbG9zZWQsIGEgbGF0ZXIgYXN5bmMgZXJyb3IgaXMgbm90IGNvbGxlY3RlZCBieSBhbnlvbmUuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbGxlY3RlZCB1bmhhbmRsZWQgYXN5bmMgZXJyb3JzLCBvciBhbiBlbXB0eSBhcnJheSBpZiBubyB3aW5kb3cgd2FzIG9wZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdG9wQ29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzKCk6IHVua25vd25bXSB7XG4gIGNvbnN0IGNvbGxlY3RlZEVycm9ycyA9IG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzID8/IFtdO1xuICBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycyA9IG51bGw7XG4gIHJldHVybiBjb2xsZWN0ZWRFcnJvcnM7XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byB0aHJvdy5cbiAqIEB0aHJvd3NcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93RXhwcmVzc2lvbihlcnJvcjogdW5rbm93bik6IG5ldmVyIHtcbiAgdGhyb3cgZXJyb3I7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlTmVzdGVkRXJyb3JMaW5lcyhuZXN0ZWRFcnJvcjogdW5rbm93biwgdGl0bGU6IHN0cmluZyk6IEVycm9yTGluZVtdIHtcbiAgY29uc3QgbGluZXMgPSBbdG9UaXRsZUxpbmUodGl0bGUpLCAuLi5nZXRFcnJvckxpbmVzKG5lc3RlZEVycm9yKS5maWx0ZXIoKGxpbmUpID0+IGxpbmUudGV4dC50cmltKCkgIT09ICcnKV07XG4gIHJldHVybiBsaW5lcy5tYXAoKGxpbmUpID0+IGxpbmUuaXNGcmFtZSA/IGxpbmUgOiB7IGlzRnJhbWU6IHRydWUsIHRleHQ6IGdlbmVyYXRlU3RhY2tUcmFjZUxpbmUobGluZS50ZXh0KSB9KTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdGFja1RyYWNlTGluZSh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1NUQUNLX1RSQUNFX1BSRUZJWH0gLS0tICR7dGl0bGV9IC0tLSAoMClgO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgYE5hbWU6IG1lc3NhZ2VgIGhlYWRlciB0aGUgd2F5IFY4IHdyaXRlcyBpdCBpbnRvIGAuc3RhY2tgIChhIGJhcmUgYE5hbWVgIGZvciBhbiBlbXB0eSBtZXNzYWdlKS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IuXG4gKiBAcmV0dXJucyBUaGUgaGVhZGVyLCB3aGljaCBzcGFucyBzZXZlcmFsIGxpbmVzIHdoZW4gdGhlIG1lc3NhZ2UgZG9lcy5cbiAqL1xuZnVuY3Rpb24gZ2V0RXJyb3JIZWFkZXIoZXJyb3I6IEVycm9yKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVycm9yLm1lc3NhZ2UgPyBgJHtlcnJvci5uYW1lfTogJHtlcnJvci5tZXNzYWdlfWAgOiBlcnJvci5uYW1lO1xufVxuXG5mdW5jdGlvbiBnZXRFcnJvckxpbmVzKGVycm9yOiB1bmtub3duKTogRXJyb3JMaW5lW10ge1xuICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpLnNwbGl0KCdcXG4nKS5tYXAoKHRleHQpID0+IHRvVGl0bGVMaW5lKHRleHQpKTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzID0gZ2V0T3duRXJyb3JMaW5lcyhlcnJvcik7XG4gIGlmIChlcnJvci5jYXVzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbGluZXMucHVzaCguLi5nZW5lcmF0ZU5lc3RlZEVycm9yTGluZXMoZXJyb3IuY2F1c2UsICdDYXVzZWQgYnk6JykpO1xuICB9XG4gIC8vIEEgc3ViY2xhc3MsIGEgY3Jvc3MtcmVhbG0gaW5zdGFuY2Ugb3IgYSByZS13cmFwcGVkIG9uZSBjYW4gcGFzcyBgaW5zdGFuY2VvZiBBZ2dyZWdhdGVFcnJvcmAgd2l0aG91dCBhbiBgZXJyb3JzYCBhcnJheS5cbiAgY29uc3QgYWdncmVnYXRlZEVycm9yczogdW5rbm93biA9IGVycm9yIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IgPyBlcnJvci5lcnJvcnMgOiB1bmRlZmluZWQ7XG4gIGlmIChBcnJheS5pc0FycmF5KGFnZ3JlZ2F0ZWRFcnJvcnMpKSB7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGFnZ3JlZ2F0ZWRFcnJvcl0gb2YgYWdncmVnYXRlZEVycm9ycy5lbnRyaWVzKCkpIHtcbiAgICAgIGxpbmVzLnB1c2goLi4uZ2VuZXJhdGVOZXN0ZWRFcnJvckxpbmVzKGFnZ3JlZ2F0ZWRFcnJvciwgYEFnZ3JlZ2F0ZWQgZXJyb3IgIyR7U3RyaW5nKGluZGV4ICsgMSl9OmApKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpbmVzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgbGFzdC1yZXNvcnQgcmVwcmVzZW50YXRpb24gb2YgYW4gZXJyb3IgdGhhdCB7QGxpbmsgZXJyb3JUb1N0cmluZ30gZmFpbGVkIHRvIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdGhhdCBjb3VsZCBub3QgYmUgZm9ybWF0dGVkLlxuICogQHBhcmFtIGZvcm1hdHRpbmdFcnJvciAtIFdoYXQgdGhlIGZvcm1hdHRlciB0aHJldy5cbiAqIEByZXR1cm5zIFRoZSBlcnJvcidzIHN0cmluZywgaXRzIHN0YWNrIHdoZW4gaXQgaGFzIG9uZSwgYW5kIGEgbm90ZSBuYW1pbmcgdGhlIGZvcm1hdHRpbmcgZmFpbHVyZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RmFsbGJhY2tFcnJvclN0cmluZyhlcnJvcjogdW5rbm93biwgZm9ybWF0dGluZ0Vycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgY29uc3QgZXJyb3JTdHJpbmcgPSBzYWZlVG9TdHJpbmcoKCkgPT4gU3RyaW5nKGVycm9yKSk7XG4gIGNvbnN0IHN0YWNrID0gc2FmZVRvU3RyaW5nKCgpID0+IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5zdGFjayA/PyAnJyA6ICcnKTtcbiAgY29uc3QgbGluZXMgPSBzdGFjay5zdGFydHNXaXRoKGVycm9yU3RyaW5nKSA/IFtzdGFja10gOiBbZXJyb3JTdHJpbmcsIHN0YWNrXTtcbiAgbGluZXMucHVzaChgKGVycm9yVG9TdHJpbmcgY291bGQgbm90IGZvcm1hdCB0aGlzIGVycm9yOiAke3NhZmVUb1N0cmluZygoKSA9PiBTdHJpbmcoZm9ybWF0dGluZ0Vycm9yKSl9KWApO1xuICByZXR1cm4gbGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSAnJykuam9pbignXFxuJyk7XG59XG5cbmZ1bmN0aW9uIGdldE93bkVycm9yTGluZXMoZXJyb3I6IEVycm9yKTogRXJyb3JMaW5lW10ge1xuICBjb25zdCBoZWFkZXJMaW5lcyA9IGdldEVycm9ySGVhZGVyKGVycm9yKS5zcGxpdCgnXFxuJykubWFwKCh0ZXh0KSA9PiB0b1RpdGxlTGluZSh0ZXh0KSk7XG4gIGlmIChlcnJvci5zdGFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGhlYWRlckxpbmVzO1xuICB9XG5cbiAgY29uc3Qgc3RhY2tMaW5lcyA9IGVycm9yLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgaWYgKGhhc1N0YWNrSGVhZGVyKCkpIHtcbiAgICByZXR1cm4gc3RhY2tMaW5lcy5tYXAoKHRleHQpID0+ICh7IGlzRnJhbWU6IHRleHQuc3RhcnRzV2l0aChTVEFDS19UUkFDRV9QUkVGSVgpLCB0ZXh0IH0pKTtcbiAgfVxuXG4gIC8vIE9uIGFuIGVuZ2luZSB3aXRob3V0IGEgaGVhZGVyIGxpbmUsIHRoZSBgLnN0YWNrYCBpcyBmcmFtZXMgb25seSwgaW4gaXRzIG93biBgbmFtZUB1cmw6bGluZTpjb2xgIGZvcm0sIHNvIHRoZSBtZXNzYWdlIGlzIG5vd2hlcmUgaW4gaXQ6XG4gIC8vIFByZXBlbmQgdGhlIGhlYWRlciwgYW5kIHRha2UgZXZlcnkgc3RhY2sgbGluZSBhcyBhIGZyYW1lLlxuICByZXR1cm4gWy4uLmhlYWRlckxpbmVzLCAuLi5zdGFja0xpbmVzLmZpbHRlcigodGV4dCkgPT4gdGV4dC50cmltKCkgIT09ICcnKS5tYXAoKHRleHQpID0+ICh7IGlzRnJhbWU6IHRydWUsIHRleHQgfSkpXTtcbn1cblxuLyoqXG4gKiBIYW5kbGVzIGFzeW5jaHJvbm91cyBlcnJvcnMgYnkgcHJpbnRpbmcgdGhlbS5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBhc3luY2hyb25vdXMgZXJyb3IgdG8gaGFuZGxlLlxuICovXG5mdW5jdGlvbiBoYW5kbGVBc3luY0Vycm9yKGFzeW5jRXJyb3I6IHVua25vd24pOiB2b2lkIHtcbiAgcHJpbnRFcnJvcihhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBBbnN3ZXJzIHdoZXRoZXIgdGhpcyBlbmdpbmUncyBgLnN0YWNrYCBvcGVucyB3aXRoIHRoZSBlcnJvcidzIGBOYW1lOiBtZXNzYWdlYCBoZWFkZXIgbGluZS5cbiAqXG4gKiBWOCB3cml0ZXMgb25lOyBKYXZhU2NyaXB0Q29yZSAoZXZlcnkgQXBwbGUgcGxhdGZvcm0sIHNvIE9ic2lkaWFuIG9uIGlPUyBhbmQgaVBhZE9TKSBhbmQgU3BpZGVyTW9ua2V5IHdyaXRlIGZyYW1lcyBvbmx5LlxuICogVGhlIGFuc3dlciBiZWxvbmdzIHRvIHRoZSBlbmdpbmUsIG5vdCB0aGUgcGxhdGZvcm0sIHNvIGl0IGlzIHByb2JlZCByYXRoZXIgdGhhbiByZWFkIG9mZiBgUGxhdGZvcm1gLiBJdCBpcyBwcm9iZWQgb24gZXZlcnlcbiAqIGNhbGwgcmF0aGVyIHRoYW4gY2FjaGVkLCBiZWNhdXNlIGBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZWAgY2FuIHJlc2hhcGUgVjgncyBzdGFjayBhdCBydW50aW1lLCBhbmQgb25lIGV4dHJhIGBFcnJvcmAgY29zdHNcbiAqIG5vdGhpbmcgb24gYSBwYXRoIHRoYXQgaXMgYWxyZWFkeSBoYW5kbGluZyBvbmUuXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIGAuc3RhY2tgIGNhcnJpZXMgdGhlIGhlYWRlciBsaW5lLlxuICovXG5mdW5jdGlvbiBoYXNTdGFja0hlYWRlcigpOiBib29sZWFuIHtcbiAgY29uc3QgZmlyc3RMaW5lID0gbmV3IEVycm9yKFNUQUNLX0hFQURFUl9QUk9CRV9NRVNTQUdFKS5zdGFjaz8uc3BsaXQoJ1xcbicsIDEpWzBdO1xuICByZXR1cm4gZmlyc3RMaW5lID09PSBgRXJyb3I6ICR7U1RBQ0tfSEVBREVSX1BST0JFX01FU1NBR0V9YDtcbn1cblxuZnVuY3Rpb24gc2FmZVRvU3RyaW5nKHRvU3RyaW5nOiAoKSA9PiBzdHJpbmcpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiB0b1N0cmluZygpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJzx1bnByaW50YWJsZT4nO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvVGl0bGVMaW5lKHRleHQ6IHN0cmluZyk6IEVycm9yTGluZSB7XG4gIHJldHVybiB7IGlzRnJhbWU6IGZhbHNlLCB0ZXh0IH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQU1BLFNBQVMsbUJBQW1CO0FBQzVCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyx5QkFBeUI7QUFNbEMsTUFBTSxtQkFBbUIsSUFBSSxZQUFn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
|
|
240
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGVycm9yIGhhbmRsaW5nLlxuICovXG5cbmltcG9ydCB7IEFzeW5jRXZlbnRzIH0gZnJvbSAnLi9hc3luYy1ldmVudHMudHMnO1xuaW1wb3J0IHtcbiAgQ2FsbGJhY2tEaXNwb3NhYmxlLFxuICBNdWx0aXBsZURpc3Bvc2VCZWhhdmlvclxufSBmcm9tICcuL2Rpc3Bvc2FibGUudHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICcuL3R5cGUtZ3VhcmRzLnRzJztcblxuaW50ZXJmYWNlIEVycm9yQXN5bmNFdmVudE1hcCB7XG4gIHJlYWRvbmx5IGFzeW5jRXJyb3I6IFtlcnJvcjogdW5rbm93bl07XG59XG5cbmNvbnN0IGVycm9yQXN5bmNFdmVudHMgPSBuZXcgQXN5bmNFdmVudHM8RXJyb3JBc3luY0V2ZW50TWFwPigpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdG9wLWxldmVsLXNpZGUtZWZmZWN0cyAtLSBJbnN0YWxsaW5nIHRoZSBkZWZhdWx0IGhhbmRsZXIgb24gaW1wb3J0IGlzIHdoYXQgdGhpcyBtb2R1bGUgaXMgZm9yLiBEZWZlcnJpbmcgaXQgYmVoaW5kIGEgY2FsbCB3b3VsZCBtZWFuIGV2ZXJ5IGNvbnN1bWVyIGhhZCB0byByZW1lbWJlciB0byBtYWtlIHRoYXQgY2FsbCBiZWZvcmUgdGhlIGZpcnN0IGFzeW5jIGVycm9yLCB3aGljaCBpcyBwcmVjaXNlbHkgdGhlIG1vbWVudCB0aGUgaGFuZGxlciBuZWVkcyB0byBhbHJlYWR5IGV4aXN0LlxuZXJyb3JBc3luY0V2ZW50cy5vbignYXN5bmNFcnJvcicsIGhhbmRsZUFzeW5jRXJyb3IpO1xuXG5pbnRlcmZhY2UgTW9kdWxlU3RhdGUge1xuICAvKipcbiAgICogVGhlIG5lc3RpbmcgZGVwdGggb2YgYWN0aXZlIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZXMuIFdoaWxlIGdyZWF0ZXIgdGhhbiBgMGAsIGFuXG4gICAqIGFzeW5jIGVycm9yIGVtaXR0ZWQgKG9yIGEgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvbiB3aG9zZSByZWplY3Rpb24gd2FzIGNhcHR1cmVkKSB3aXRoaW4gdGhlIHNjb3BlIGlzXG4gICAqIHRyZWF0ZWQgYXMgZXhwZWN0ZWQgYW5kIG5vdCBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkLlxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVhZG9ubHktaW50ZXJmYWNlLW1lbWJlcnMgLS0gRW50ZXJpbmcgYW5kIGxlYXZpbmcgaWdub3JlIHNjb3BlcyB1cGRhdGVzIHRoZSBzaGFyZWQgbmVzdGluZyBkZXB0aC5cbiAgYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVmZmVyIHRoYXQgY29sbGVjdHMgdW5oYW5kbGVkIGFzeW5jIGVycm9ycyB3aGlsZSBhIGNvbGxlY3Rpb24gd2luZG93IGlzIG9wZW4sIG9yIGBudWxsYCB3aGVuXG4gICAqIG5vIHdpbmRvdyBpcyBvcGVuICh0aGUgZGVmYXVsdCBpbiBwcm9kdWN0aW9uKS4gT3BlbmVkIGJ5IHtAbGluayBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30sXG4gICAqIGVtcHRpZWQgd2l0aG91dCBjbG9zaW5nIGJ5IHtAbGluayBkcmFpbkNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzfSwgYW5kIGRyYWluZWQtYW5kLWNsb3NlZCBieVxuICAgKiB7QGxpbmsgc3RvcENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30gXHUyMDE0IHVzZWQgYnkgdGhlIHRlc3QgaGFybmVzcyB0byBmYWlsIGEgdGVzdCB0aGF0IHN3YWxsb3dlZFxuICAgKiBhbiBhc3luYyBlcnJvci5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LWludGVyZmFjZS1tZW1iZXJzIC0tIE9wZW5pbmcgYW5kIGNsb3NpbmcgY29sbGVjdGlvbiB3aW5kb3dzIHJlcGxhY2VzIHRoZSBzaGFyZWQgYnVmZmVyLlxuICBjb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9yczogbnVsbCB8IHVua25vd25bXTtcbn1cblxuLyoqXG5Nb2R1bGUtbGV2ZWwgbXV0YWJsZSBzdGF0ZSwgaGVsZCBpbiBvbmUgb2JqZWN0IHNvIGVhY2ggbXV0YXRpb24gbmFtZXMgaXQgZXhwbGljaXRseS5cbiAqL1xuY29uc3QgbW9kdWxlU3RhdGU6IE1vZHVsZVN0YXRlID0ge1xuICBhc3luY0Vycm9ySWdub3JlQ29udGV4dERlcHRoOiAwLFxuICBjb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9yczogbnVsbFxufTtcbi8qKlxuICogQSBtZXNzYWdlIG9mIHRoZSBBc3luY1dyYXBwZXJFcnJvci5cbiAqL1xuZXhwb3J0IGNvbnN0IEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSA9ICdBbiB1bmhhbmRsZWQgZXJyb3Igb2NjdXJyZWQgZXhlY3V0aW5nIGFzeW5jIG9wZXJhdGlvbic7XG5cbmNvbnN0IFNUQUNLX1RSQUNFX1BSRUZJWCA9ICcgICAgYXQnO1xuXG5jb25zdCBFUlJPUl9IRUFERVJfUkVHX0VYUCA9IC9eXFx3KkVycm9yKD86OiB8JCkvO1xuXG5jb25zdCBTVEFDS19IRUFERVJfUFJPQkVfTUVTU0FHRSA9ICdzdGFjayBoZWFkZXIgcHJvYmUnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgQ3VzdG9tU3RhY2tUcmFjZUVycm9yfSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21TdGFja1RyYWNlRXJyb3JDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY2F1c2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgY2F1c2U6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBlcnJvci5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrVHJhY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPbmUgbGluZSBvZiBhbiBlcnJvcidzIHN0cmluZyBmb3JtLCB0YWdnZWQgd2l0aCB3aGV0aGVyIGl0IGlzIGEgc3RhY2sgZnJhbWUuXG4gKlxuICogQSB0aXRsZSAoYW4gZXJyb3IgaGVhZGVyLCBhIGBDYXVzZWQgYnk6YCBtYXJrZXIsIGEgbGluZSBvZiBhIG11bHRpLWxpbmUgbWVzc2FnZSkgaXMgd3JhcHBlZCBpbnRvXG4gKiB7QGxpbmsgZ2VuZXJhdGVTdGFja1RyYWNlTGluZX0ncyBmb3JtIHdoZW4gdGhlIGVycm9yIGl0IGJlbG9uZ3MgdG8gaXMgbmVzdGVkOyBhIGZyYW1lIGlzIGtlcHQgdmVyYmF0aW0uXG4gKi9cbmludGVyZmFjZSBFcnJvckxpbmUge1xuICByZWFkb25seSBpc0ZyYW1lOiBib29sZWFuO1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gZXJyb3IgdGhhdCB3cmFwcyBhbiBlcnJvciB3aXRoIGEgY3VzdG9tIHN0YWNrIHRyYWNlLlxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tU3RhY2tUcmFjZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogQ3VzdG9tU3RhY2tUcmFjZUVycm9yQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBjb25zdCB7IGNhdXNlLCBtZXNzYWdlLCBzdGFja1RyYWNlIH0gPSBwYXJhbXM7XG4gICAgc3VwZXIobWVzc2FnZSwgeyBjYXVzZSB9KTtcbiAgICB0aGlzLm5hbWUgPSAnQ3VzdG9tU3RhY2tUcmFjZUVycm9yJztcblxuICAgIGxldCByb290Q2F1c2UgPSBjYXVzZTtcbiAgICBjb25zdCBwYXJlbnRDYXVzZXMgPSBuZXcgU2V0PEN1c3RvbVN0YWNrVHJhY2VFcnJvcj4oKTtcbiAgICB3aGlsZSAocm9vdENhdXNlIGluc3RhbmNlb2YgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKSB7XG4gICAgICBpZiAocGFyZW50Q2F1c2VzLmhhcyhyb290Q2F1c2UpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2lyY3VsYXIgY2F1c2UgZGV0ZWN0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHBhcmVudENhdXNlcy5hZGQocm9vdENhdXNlKTtcbiAgICAgIHJvb3RDYXVzZSA9IHJvb3RDYXVzZS5jYXVzZTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFja0xpbmVzID0gc3RhY2tUcmFjZS5zcGxpdCgnXFxuJyk7XG4gICAgaWYgKEVSUk9SX0hFQURFUl9SRUdfRVhQLnRlc3QoZW5zdXJlTm9uTnVsbGFibGUoc3RhY2tMaW5lc1swXSkpKSB7XG4gICAgICBzdGFja0xpbmVzLnNoaWZ0KCk7XG4gICAgfVxuICAgIC8vIEtlZXAgdGhlIGVuZ2luZSdzIG93biBgLnN0YWNrYCBzaGFwZTogYSBoZWFkZXIgb25seSB3aGVyZSB0aGUgZW5naW5lIHdyaXRlcyBvbmUgKFY4KSwgZnJhbWVzIG9ubHkgd2hlcmUgaXQgZG9lcyBub3QgKEphdmFTY3JpcHRDb3JlLCBTcGlkZXJNb25rZXkpLlxuICAgIGlmIChoYXNTdGFja0hlYWRlcigpKSB7XG4gICAgICBzdGFja0xpbmVzLnVuc2hpZnQoZ2V0RXJyb3JIZWFkZXIodGhpcykpO1xuICAgIH1cbiAgICB0aGlzLnN0YWNrID0gc3RhY2tMaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgd3JhcHMgYSBub24tYEVycm9yYCB2YWx1ZSB0aGF0IHdhcyB0aHJvd24sIHByZXNlcnZpbmcgdGhlIG9yaWdpbmFsIHZhbHVlIGluIGBjYXVzZWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBFcnJvcldyYXBwZXIgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEVycm9yV3JhcHBlci5cbiAgICpcbiAgICogQHBhcmFtIHRocm93blZhbHVlIC0gVGhlIG9yaWdpbmFsIG5vbi1gRXJyb3JgIHZhbHVlIHRoYXQgd2FzIHRocm93bi5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0aHJvd25WYWx1ZTogdW5rbm93bikge1xuICAgIHN1cGVyKGBBIG5vbi1FcnJvciB2YWx1ZSB3YXMgdGhyb3duOiAke1N0cmluZyh0aHJvd25WYWx1ZSl9YCwgeyBjYXVzZTogdGhyb3duVmFsdWUgfSk7XG4gICAgdGhpcy5uYW1lID0gJ0Vycm9yV3JhcHBlcic7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyBhbnkgdGhyb3duIHZhbHVlIHRvIGFuIGBFcnJvcmAuXG4gICAqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIHVuY2hhbmdlZCBpZiBpdCBpcyBhbHJlYWR5IGFuIGBFcnJvcmAsIG90aGVyd2lzZSB3cmFwcyBpdCBpbiBhbiB7QGxpbmsgRXJyb3JXcmFwcGVyfS5cbiAgICpcbiAgICogQHBhcmFtIHRocm93blZhbHVlIC0gVGhlIHRocm93biB2YWx1ZSB0byBub3JtYWxpemUuXG4gICAqIEByZXR1cm5zIEFuIGBFcnJvcmAgaW5zdGFuY2U6IHRoZSBvcmlnaW5hbCB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IGFuIGBFcnJvcmAsIG90aGVyd2lzZSBhbiB7QGxpbmsgRXJyb3JXcmFwcGVyfS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlKHRocm93blZhbHVlOiB1bmtub3duKTogRXJyb3Ige1xuICAgIHJldHVybiB0aHJvd25WYWx1ZSBpbnN0YW5jZW9mIEVycm9yID8gdGhyb3duVmFsdWUgOiBuZXcgRXJyb3JXcmFwcGVyKHRocm93blZhbHVlKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGVycm9yIHRoYXQgaXMgbm90IHByaW50ZWQgdG8gdGhlIGNvbnNvbGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBTaWxlbnRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgU2lsZW50RXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2Ugb2YgdGhlIGVycm9yLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdTaWxlbnRFcnJvcic7XG4gIH1cbn1cblxuLyoqXG4gKiBFbXB0aWVzIHRoZSBjb2xsZWN0aW9uIHdpbmRvdyBvcGVuZWQgYnkge0BsaW5rIHN0YXJ0Q29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSBhbmQgcmV0dXJucyB3aGF0IGl0XG4gKiBoZWxkLCBsZWF2aW5nIHRoZSB3aW5kb3cgKipvcGVuKiogc28gZXJyb3JzIGVtaXR0ZWQgYWZ0ZXJ3YXJkcyBrZWVwIGJlaW5nIGNvbGxlY3RlZC5cbiAqXG4gKiBUaGlzIGlzIHdoYXQgdGhlIHRlc3Qgc2V0dXAncyAoYEBtbmFvdW1vdi90eXBlc2NyaXB0LXRlc3QtdG9vbGtpdC9zZXR1cGApIGBiZWZvcmVFYWNoYCAvIGBhZnRlckVhY2hgIHVzZSwgcmF0aGVyIHRoYW5cbiAqIHtAbGluayBzdG9wQ29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfTogYW4gYXN5bmMgZXJyb3IgZW1pdHRlZCBpbiB0aGUgZ2FwIGJldHdlZW4gdHdvIHRlc3RzIChlLmcuIGJ5IGFcbiAqIGBzZXRUaW1lb3V0YCB0aGUgdGVzdCBsZWZ0IHBlbmRpbmcpIHdvdWxkIG90aGVyd2lzZSBsYW5kIG9uIGEgY2xvc2VkIHdpbmRvdyBhbmQgdmFuaXNoIHVucmVwb3J0ZWQuXG4gKlxuICogQHJldHVybnMgVGhlIHVuaGFuZGxlZCBhc3luYyBlcnJvcnMgY29sbGVjdGVkIHNvIGZhciwgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm8gd2luZG93IGlzIG9wZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcmFpbkNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzKCk6IHVua25vd25bXSB7XG4gIHJldHVybiBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycz8uc3BsaWNlKDApID8/IFtdO1xufVxuXG4vKipcbiAqIEVtaXRzIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudC5cbiAqXG4gKiBXaGVuIGEgY29sbGVjdGlvbiB3aW5kb3cgaXMgb3BlbiAoc2VlIHtAbGluayBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30pIHRoZSBlcnJvciBpc1xuICogY29sbGVjdGVkIGFzIHVuaGFuZGxlZCB1bmxlc3MgaXQgaXMgaWdub3JlZCBcdTIwMTQgZWl0aGVyIGJlY2F1c2UgYHNob3VsZElnbm9yZWAgaXMgYHRydWVgIG9yIGFuXG4gKiB7QGxpbmsgc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dH0gc2NvcGUgaXMgYWN0aXZlLiBBIHJlZ2lzdGVyZWQgY29uc3VtZXIgaGFuZGxlciBkZWxpYmVyYXRlbHkgZG9lc1xuICogKipub3QqKiBleGVtcHQgdGhlIGVycm9yOiBpbiBwcm9kdWN0aW9uIGl0IHNob3dzIHRoZSB1c2VyIGEgTm90aWNlLCB3aGljaCBpcyBub3QgYSB0ZXN0IGFzc2VydGluZyB0aGF0XG4gKiB0aGUgZXJyb3Igd2FzIGV4cGVjdGVkLiB7QGxpbmsgc3RhcnRBc3luY0Vycm9ySWdub3JlQ29udGV4dH0gaXMgdGhlIHNpbmdsZSwgZXhwbGljaXQgb3B0LW91dC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNFcnJvciAtIFRoZSBlcnJvciB0byBlbWl0IGFzIGFuIGFzeW5jaHJvbm91cyBlcnJvciBldmVudC5cbiAqIEBwYXJhbSBzaG91bGRJZ25vcmUgLSBXaGV0aGVyIHRvIHRyZWF0IHRoZSBlcnJvciBhcyBleHBlY3RlZCBhbmQgbmV2ZXIgY29sbGVjdCBpdCBhcyB1bmhhbmRsZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGl2ZSBpZ25vcmUgY29udGV4dC4gVXNlZCB0byBjYXJyeSB0aGUgc2NoZWR1bGUtdGltZSBpZ25vcmUgZGVjaXNpb24gb2YgYSBkZWZlcnJlZCBmaXJlLWFuZC1mb3JnZXQgcmVqZWN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEFzeW5jRXJyb3JFdmVudChhc3luY0Vycm9yOiB1bmtub3duLCBzaG91bGRJZ25vcmUgPSBmYWxzZSk6IHZvaWQge1xuICBjb25zdCBpc0lnbm9yZWQgPSBzaG91bGRJZ25vcmUgfHwgbW9kdWxlU3RhdGUuYXN5bmNFcnJvcklnbm9yZUNvbnRleHREZXB0aCA+IDA7XG4gIGlmIChtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycyAmJiAhaXNJZ25vcmVkKSB7XG4gICAgbW9kdWxlU3RhdGUuY29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMucHVzaChhc3luY0Vycm9yKTtcbiAgfVxuICBlcnJvckFzeW5jRXZlbnRzLnRyaWdnZXIoJ2FzeW5jRXJyb3InLCBhc3luY0Vycm9yKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlcnJvciB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMgYW5kIHRoZSBhZ2dyZWdhdGVkIGVycm9ycyBvZlxuICogYW4gYEFnZ3JlZ2F0ZUVycm9yYCwgd2l0aCBpbmRlbnRhdGlvbi5cbiAqXG4gKiBOZXZlciB0aHJvd3M6IGlmIHRoZSBlcnJvciBjYW5ub3QgYmUgZm9ybWF0dGVkIChhIHRocm93aW5nIGdldHRlciwgYSBtYWxmb3JtZWQgbmVzdGVkIGVycm9yKSwgaXQgZmFsbHMgYmFjayB0byB0aGVcbiAqIGVycm9yJ3Mgb3duIHN0cmluZyBhbmQgc3RhY2ssIHNvIHRoZSBlcnJvciBiZWluZyByZXBvcnRlZCBpcyBuZXZlciBoaWRkZW4gYmVoaW5kIGEgZmFpbHVyZSB0byByZXBvcnQgaXQuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVycm9yVG9TdHJpbmcoZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBnZXRFcnJvckxpbmVzKGVycm9yKS5tYXAoKGxpbmUpID0+IGxpbmUudGV4dCkuam9pbignXFxuJyk7XG4gIH0gY2F0Y2ggKGZvcm1hdHRpbmdFcnJvcikge1xuICAgIHJldHVybiBnZXRGYWxsYmFja0Vycm9yU3RyaW5nKGVycm9yLCBmb3JtYXR0aW5nRXJyb3IpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgY3VycmVudCBzdGFjayB0cmFjZSBhcyBhIHN0cmluZywgZXhjbHVkaW5nIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGNhbGwuXG4gKlxuICogQHBhcmFtIGZyYW1lc1RvU2tpcCAtIFRoZSBudW1iZXIgb2YgZnJhbWVzIHRvIHNraXAgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UsIGV4Y2x1ZGluZyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhY2tUcmFjZShmcmFtZXNUb1NraXAgPSAwKTogc3RyaW5nIHtcbiAgLy8gU2tpcHBpbmcgdGhlIGBnZXRTdGFja1RyYWNlYCBmcmFtZSBpdHNlbGYsIHBsdXMgdGhlIGBFcnJvcmAgaGVhZGVyIGxpbmUgb24gYW4gZW5naW5lIHRoYXQgd3JpdGVzIG9uZS5cbiAgY29uc3QgR0VUX1NUQUNLX1RSQUNFX0ZSQU1FX0NPVU5UID0gMTtcbiAgY29uc3QgYWRkaXRpb25hbExpbmVzVG9Ta2lwID0gR0VUX1NUQUNLX1RSQUNFX0ZSQU1FX0NPVU5UICsgKGhhc1N0YWNrSGVhZGVyKCkgPyAxIDogMCk7XG4gIGNvbnN0IHN0YWNrID0gZW5zdXJlTm9uTnVsbGFibGUobmV3IEVycm9yKCkuc3RhY2spO1xuICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgcmV0dXJuIGxpbmVzLnNsaWNlKGZyYW1lc1RvU2tpcCArIGFkZGl0aW9uYWxMaW5lc1RvU2tpcCkuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4ge0BsaW5rIHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHR9IHNjb3BlIGlzIGN1cnJlbnRseSBhY3RpdmUuXG4gKlxuICogQHJldHVybnMgYHRydWVgIGlmIGF0IGxlYXN0IG9uZSBpZ25vcmUgY29udGV4dCBpcyBhY3RpdmUsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBc3luY0Vycm9ySWdub3JlQ29udGV4dEFjdGl2ZSgpOiBib29sZWFuIHtcbiAgcmV0dXJuIG1vZHVsZVN0YXRlLmFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGggPiAwO1xufVxuXG4vKipcbiAqIFByaW50cyBhbiBlcnJvciB0byB0aGUgY29uc29sZSwgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMgYW5kIG9wdGlvbmFsIEFOU0kgc2VxdWVuY2UgY2xlYXJpbmcuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIHByaW50LlxuICogQHBhcmFtIGNvbnNvbGUgLSBUaGUgY29uc29sZSB0byBwcmludCB0byAoZGVmYXVsdDogYGdsb2JhbFRoaXMuY29uc29sZWApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRFcnJvcihlcnJvcjogdW5rbm93biwgY29uc29sZT86IENvbnNvbGUpOiB2b2lkIHtcbiAgY29uc29sZSA/Pz0gZ2xvYmFsVGhpcy5jb25zb2xlO1xuICBjb25zb2xlLmVycm9yKGVycm9yVG9TdHJpbmcoZXJyb3IpKTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYW4gZXZlbnQgaGFuZGxlciBmb3IgYXN5bmNocm9ub3VzIGVycm9ycy5cbiAqXG4gKiBSZWdpc3RlcmluZyBhIGhhbmRsZXIgZG9lcyBub3QgbWFyayB0aGUgZXJyb3JzIGl0IHJlY2VpdmVzIGFzIGV4cGVjdGVkIFx1MjAxNCBzZWVcbiAqIHtAbGluayBlbWl0QXN5bmNFcnJvckV2ZW50fS4gQSB0ZXN0IHRoYXQgZGVsaWJlcmF0ZWx5IHRyaWdnZXJzIGFuIGFzeW5jIGVycm9yIG9wZW5zIGFcbiAqIHtAbGluayBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0fSBzY29wZSByZWdhcmRsZXNzIG9mIHdobyBpcyBsaXN0ZW5pbmcuXG4gKlxuICogQHBhcmFtIGhhbmRsZXIgLSBUaGUgaGFuZGxlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiBhbiBhc3luY2hyb25vdXMgZXJyb3IgZXZlbnQgb2NjdXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgaGFuZGxlciB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQXN5bmNFcnJvckV2ZW50SGFuZGxlcihoYW5kbGVyOiAoYXN5bmNFcnJvcjogdW5rbm93bikgPT4gdm9pZCk6IERpc3Bvc2FibGUge1xuICBjb25zdCBldmVudFJlZiA9IGVycm9yQXN5bmNFdmVudHMub24oJ2FzeW5jRXJyb3InLCBoYW5kbGVyKTtcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBlcnJvckFzeW5jRXZlbnRzLm9mZnJlZihldmVudFJlZik7XG4gICAgfSxcbiAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGFuIGlnbm9yZSBjb250ZXh0IGluIHdoaWNoIGFzeW5jIGVycm9ycyBhcmUgdHJlYXRlZCBhcyBleHBlY3RlZCByYXRoZXIgdGhhbiB1bmhhbmRsZWQsIHNvIHRoZVxuICogdGVzdCBoYXJuZXNzIGRvZXMgbm90IGZhaWwgdGhlIHRlc3QuXG4gKlxuICogV2hpbGUgdGhlIHJldHVybmVkIGRpc3Bvc2FibGUgaXMgaGVsZCwgYW4gYXN5bmMgZXJyb3IgZW1pdHRlZCBkaXJlY3RseSAoc2VlXG4gKiB7QGxpbmsgZW1pdEFzeW5jRXJyb3JFdmVudH0pIGlzIG5vdCBjb2xsZWN0ZWQgYXMgdW5oYW5kbGVkLiBDcnVjaWFsbHksIGEgZmlyZS1hbmQtZm9yZ2V0IG9wZXJhdGlvblxuICogc2NoZWR1bGVkIHdpdGhpbiB0aGUgc2NvcGUgKGUuZy4gdmlhIHtAbGluayBhc3luYyFpbnZva2VBc3luY1NhZmVseX0pIGlzIGFsc28gaWdub3JlZCB3aGVuIGl0IGxhdGVyXG4gKiByZWplY3RzIFx1MjAxNCBldmVuIGFmdGVyIHRoZSBzY29wZSBoYXMgZXhpdGVkIFx1MjAxNCBiZWNhdXNlIHtAbGluayBhc3luYyFhZGRFcnJvckhhbmRsZXJ9IGNhcHR1cmVzIHRoZSBhY3RpdmVcbiAqIGlnbm9yZSBjb250ZXh0IGF0IHNjaGVkdWxlIHRpbWUuIEEgdGVzdCB0aGVyZWZvcmUgZG9lcyBub3QgbmVlZCB0byBkcmFpbiB0aGUgb3BlcmF0aW9uIGl0c2VsZjpcbiAqXG4gKiBgYGB0c1xuICogaXQoJ2RvZXMgbm90IGZhaWwnLCAoKSA9PiB7XG4gKiAgIHVzaW5nIF8gPSBzdGFydEFzeW5jRXJyb3JJZ25vcmVDb250ZXh0KCk7XG4gKiAgIGludm9rZUFzeW5jU2FmZWx5KCgpID0+IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignZGVsaWJlcmF0ZWx5IHN3YWxsb3dlZCcpKSk7XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIENvbnRleHRzIG5lc3Q7IHRoZSBpZ25vcmUgb25seSBlbmRzIG9uY2UgZXZlcnkgb3BlbiBjb250ZXh0IGhhcyBiZWVuIGRpc3Bvc2VkLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgY2xvc2VzIHRoZSBpZ25vcmUgY29udGV4dCB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0QXN5bmNFcnJvcklnbm9yZUNvbnRleHQoKTogRGlzcG9zYWJsZSB7XG4gIG1vZHVsZVN0YXRlLmFzeW5jRXJyb3JJZ25vcmVDb250ZXh0RGVwdGgrKztcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBtb2R1bGVTdGF0ZS5hc3luY0Vycm9ySWdub3JlQ29udGV4dERlcHRoLS07XG4gICAgfSxcbiAgICBtdWx0aXBsZURpc3Bvc2VCZWhhdmlvcjogTXVsdGlwbGVEaXNwb3NlQmVoYXZpb3IuSWdub3JlXG4gIH0pO1xufVxuXG4vKipcbiAqIE9wZW5zIGEgd2luZG93IGluIHdoaWNoIGFzeW5jIGVycm9ycyBlbWl0dGVkIG91dHNpZGUgYW4gaWdub3JlIGNvbnRleHQgYXJlIGNvbGxlY3RlZCBhcyB1bmhhbmRsZWRcbiAqIChzZWUge0BsaW5rIGVtaXRBc3luY0Vycm9yRXZlbnR9KSwgZGlzY2FyZGluZyBhbnl0aGluZyBjb2xsZWN0ZWQgYnkgYSBwcmV2aW91cyB3aW5kb3cuXG4gKlxuICogSW50ZW5kZWQgZm9yIHRoZSB0ZXN0IGhhcm5lc3Mgb25seTogdGhlIHBlci10ZXN0IHNldHVwIG9wZW5zIGEgd2luZG93IGJlZm9yZSBlYWNoIHRlc3QgYW5kIGVtcHRpZXMgaXRcbiAqIGFmdGVyIGVhY2ggdGVzdCB2aWEge0BsaW5rIGRyYWluQ29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnN9LCBjbG9zaW5nIGl0IGZvciBnb29kIHdpdGhcbiAqIHtAbGluayBzdG9wQ29sbGVjdGluZ1VuaGFuZGxlZEFzeW5jRXJyb3JzfSBvbmNlIHRoZSBmaWxlJ3MgbGFzdCB0ZXN0IGhhcyBydW4uIEluIHByb2R1Y3Rpb24gbm8gd2luZG93XG4gKiBpcyBvcGVuLCBzbyBlbWl0dGluZyBhbiBhc3luYyBlcnJvciBjYXJyaWVzIG5vIGJvb2trZWVwaW5nIG92ZXJoZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RhcnRDb2xsZWN0aW5nVW5oYW5kbGVkQXN5bmNFcnJvcnMoKTogdm9pZCB7XG4gIG1vZHVsZVN0YXRlLmNvbGxlY3RlZFVuaGFuZGxlZEFzeW5jRXJyb3JzID0gW107XG59XG5cbi8qKlxuICogQ2xvc2VzIHRoZSB3aW5kb3cgb3BlbmVkIGJ5IHtAbGluayBzdGFydENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9yc30gYW5kIHJldHVybnMgdGhlIHVuaGFuZGxlZFxuICogYXN5bmMgZXJyb3JzIGNvbGxlY3RlZCB3aGlsZSBpdCB3YXMgb3Blbi5cbiAqXG4gKiBVc2Uge0BsaW5rIGRyYWluQ29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnN9IGluc3RlYWQgd2hlcmV2ZXIgY29sbGVjdGlvbiBtdXN0IGNvbnRpbnVlIGFmdGVyd2FyZHMgXHUyMDE0XG4gKiBvbmNlIHRoZSB3aW5kb3cgaXMgY2xvc2VkLCBhIGxhdGVyIGFzeW5jIGVycm9yIGlzIG5vdCBjb2xsZWN0ZWQgYnkgYW55b25lLlxuICpcbiAqIEByZXR1cm5zIFRoZSBjb2xsZWN0ZWQgdW5oYW5kbGVkIGFzeW5jIGVycm9ycywgb3IgYW4gZW1wdHkgYXJyYXkgaWYgbm8gd2luZG93IHdhcyBvcGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RvcENvbGxlY3RpbmdVbmhhbmRsZWRBc3luY0Vycm9ycygpOiB1bmtub3duW10ge1xuICBjb25zdCBjb2xsZWN0ZWRFcnJvcnMgPSBtb2R1bGVTdGF0ZS5jb2xsZWN0ZWRVbmhhbmRsZWRBc3luY0Vycm9ycyA/PyBbXTtcbiAgbW9kdWxlU3RhdGUuY29sbGVjdGVkVW5oYW5kbGVkQXN5bmNFcnJvcnMgPSBudWxsO1xuICByZXR1cm4gY29sbGVjdGVkRXJyb3JzO1xufVxuXG4vKipcbiAqIFRocm93cyBhbiBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZS5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gdGhyb3cuXG4gKiBAdGhyb3dzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0V4cHJlc3Npb24oZXJyb3I6IHVua25vd24pOiBuZXZlciB7XG4gIHRocm93IGVycm9yO1xufVxuXG5mdW5jdGlvbiBnZW5lcmF0ZU5lc3RlZEVycm9yTGluZXMobmVzdGVkRXJyb3I6IHVua25vd24sIHRpdGxlOiBzdHJpbmcpOiBFcnJvckxpbmVbXSB7XG4gIGNvbnN0IGxpbmVzID0gW3RvVGl0bGVMaW5lKHRpdGxlKSwgLi4uZ2V0RXJyb3JMaW5lcyhuZXN0ZWRFcnJvcikuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRleHQudHJpbSgpICE9PSAnJyldO1xuICByZXR1cm4gbGluZXMubWFwKChsaW5lKSA9PiBsaW5lLmlzRnJhbWUgPyBsaW5lIDogeyBpc0ZyYW1lOiB0cnVlLCB0ZXh0OiBnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lKGxpbmUudGV4dCkgfSk7XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlU3RhY2tUcmFjZUxpbmUodGl0bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTVEFDS19UUkFDRV9QUkVGSVh9IC0tLSAke3RpdGxlfSAtLS0gKDApYDtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIGBOYW1lOiBtZXNzYWdlYCBoZWFkZXIgdGhlIHdheSBWOCB3cml0ZXMgaXQgaW50byBgLnN0YWNrYCAoYSBiYXJlIGBOYW1lYCBmb3IgYW4gZW1wdHkgbWVzc2FnZSkuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yLlxuICogQHJldHVybnMgVGhlIGhlYWRlciwgd2hpY2ggc3BhbnMgc2V2ZXJhbCBsaW5lcyB3aGVuIHRoZSBtZXNzYWdlIGRvZXMuXG4gKi9cbmZ1bmN0aW9uIGdldEVycm9ySGVhZGVyKGVycm9yOiBFcnJvcik6IHN0cmluZyB7XG4gIHJldHVybiBlcnJvci5tZXNzYWdlID8gYCR7ZXJyb3IubmFtZX06ICR7ZXJyb3IubWVzc2FnZX1gIDogZXJyb3IubmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXJyb3JMaW5lcyhlcnJvcjogdW5rbm93bik6IEVycm9yTGluZVtdIHtcbiAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICByZXR1cm4gU3RyaW5nKGVycm9yKS5zcGxpdCgnXFxuJykubWFwKCh0ZXh0KSA9PiB0b1RpdGxlTGluZSh0ZXh0KSk7XG4gIH1cblxuICBjb25zdCBsaW5lcyA9IGdldE93bkVycm9yTGluZXMoZXJyb3IpO1xuICBpZiAoZXJyb3IuY2F1c2UgIT09IHVuZGVmaW5lZCkge1xuICAgIGxpbmVzLnB1c2goLi4uZ2VuZXJhdGVOZXN0ZWRFcnJvckxpbmVzKGVycm9yLmNhdXNlLCAnQ2F1c2VkIGJ5OicpKTtcbiAgfVxuICAvLyBBIHN1YmNsYXNzLCBhIGNyb3NzLXJlYWxtIGluc3RhbmNlIG9yIGEgcmUtd3JhcHBlZCBvbmUgY2FuIHBhc3MgYGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3JgIHdpdGhvdXQgYW4gYGVycm9yc2AgYXJyYXkuXG4gIGNvbnN0IGFnZ3JlZ2F0ZWRFcnJvcnM6IHVua25vd24gPSBlcnJvciBpbnN0YW5jZW9mIEFnZ3JlZ2F0ZUVycm9yID8gZXJyb3IuZXJyb3JzIDogdW5kZWZpbmVkO1xuICBpZiAoQXJyYXkuaXNBcnJheShhZ2dyZWdhdGVkRXJyb3JzKSkge1xuICAgIGZvciAoY29uc3QgW2luZGV4LCBhZ2dyZWdhdGVkRXJyb3JdIG9mIGFnZ3JlZ2F0ZWRFcnJvcnMuZW50cmllcygpKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmdlbmVyYXRlTmVzdGVkRXJyb3JMaW5lcyhhZ2dyZWdhdGVkRXJyb3IsIGBBZ2dyZWdhdGVkIGVycm9yICMke1N0cmluZyhpbmRleCArIDEpfTpgKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBsaW5lcztcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgb3JpZ2luYWwgc3RhY2ssIHJldHJ5aW5nIHdpdGhvdXQgYSBicm9rZW4gVjggc291cmNlLW1hcCBob29rIHJhdGhlciB0aGFuIGxvc2luZyB0aGUgZnJhbWVzLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB3aG9zZSBzdGFjayB0byByZWFkLlxuICogQHJldHVybnMgVGhlIHN0YWNrLCB3aGVuIHRoZSBlbmdpbmUgc3VwcGxpZXMgb25lLlxuICovXG5mdW5jdGlvbiBnZXRFcnJvclN0YWNrKGVycm9yOiBFcnJvcik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVycm9yLnN0YWNrO1xuICB9IGNhdGNoIHtcbiAgICBjb25zdCBvcmlnaW5hbFByZXBhcmVTdGFja1RyYWNlID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFcnJvciwgJ3ByZXBhcmVTdGFja1RyYWNlJyk7XG4gICAgdHJ5IHtcbiAgICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoRXJyb3IsICdwcmVwYXJlU3RhY2tUcmFjZScpO1xuICAgICAgcmV0dXJuIGVycm9yLnN0YWNrO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAob3JpZ2luYWxQcmVwYXJlU3RhY2tUcmFjZSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRXJyb3IsICdwcmVwYXJlU3RhY2tUcmFjZScsIG9yaWdpbmFsUHJlcGFyZVN0YWNrVHJhY2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShFcnJvciwgJ3ByZXBhcmVTdGFja1RyYWNlJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBsYXN0LXJlc29ydCByZXByZXNlbnRhdGlvbiBvZiBhbiBlcnJvciB0aGF0IHtAbGluayBlcnJvclRvU3RyaW5nfSBmYWlsZWQgdG8gZm9ybWF0LlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0aGF0IGNvdWxkIG5vdCBiZSBmb3JtYXR0ZWQuXG4gKiBAcGFyYW0gZm9ybWF0dGluZ0Vycm9yIC0gV2hhdCB0aGUgZm9ybWF0dGVyIHRocmV3LlxuICogQHJldHVybnMgVGhlIGVycm9yJ3Mgc3RyaW5nLCBpdHMgc3RhY2sgd2hlbiBpdCBoYXMgb25lLCBhbmQgYSBub3RlIG5hbWluZyB0aGUgZm9ybWF0dGluZyBmYWlsdXJlLlxuICovXG5mdW5jdGlvbiBnZXRGYWxsYmFja0Vycm9yU3RyaW5nKGVycm9yOiB1bmtub3duLCBmb3JtYXR0aW5nRXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICBjb25zdCBlcnJvclN0cmluZyA9IHNhZmVUb1N0cmluZygoKSA9PiBTdHJpbmcoZXJyb3IpKTtcbiAgY29uc3Qgc3RhY2sgPSBzYWZlVG9TdHJpbmcoKCkgPT4gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGdldEVycm9yU3RhY2soZXJyb3IpID8/ICcnIDogJycpO1xuICBjb25zdCBsaW5lcyA9IHN0YWNrLnN0YXJ0c1dpdGgoZXJyb3JTdHJpbmcpID8gW3N0YWNrXSA6IFtlcnJvclN0cmluZywgc3RhY2tdO1xuICBsaW5lcy5wdXNoKGAoZXJyb3JUb1N0cmluZyBjb3VsZCBub3QgZm9ybWF0IHRoaXMgZXJyb3I6ICR7c2FmZVRvU3RyaW5nKCgpID0+IFN0cmluZyhmb3JtYXR0aW5nRXJyb3IpKX0pYCk7XG4gIHJldHVybiBsaW5lcy5maWx0ZXIoKGxpbmUpID0+IGxpbmUgIT09ICcnKS5qb2luKCdcXG4nKTtcbn1cblxuZnVuY3Rpb24gZ2V0T3duRXJyb3JMaW5lcyhlcnJvcjogRXJyb3IpOiBFcnJvckxpbmVbXSB7XG4gIGNvbnN0IGhlYWRlckxpbmVzID0gZ2V0RXJyb3JIZWFkZXIoZXJyb3IpLnNwbGl0KCdcXG4nKS5tYXAoKHRleHQpID0+IHRvVGl0bGVMaW5lKHRleHQpKTtcbiAgY29uc3Qgc3RhY2sgPSBnZXRFcnJvclN0YWNrKGVycm9yKTtcbiAgaWYgKHN0YWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gaGVhZGVyTGluZXM7XG4gIH1cblxuICBjb25zdCBzdGFja0xpbmVzID0gc3RhY2suc3BsaXQoJ1xcbicpO1xuICBpZiAoaGFzU3RhY2tIZWFkZXIoKSkge1xuICAgIHJldHVybiBzdGFja0xpbmVzLm1hcCgodGV4dCkgPT4gKHsgaXNGcmFtZTogdGV4dC5zdGFydHNXaXRoKFNUQUNLX1RSQUNFX1BSRUZJWCksIHRleHQgfSkpO1xuICB9XG5cbiAgLy8gT24gYW4gZW5naW5lIHdpdGhvdXQgYSBoZWFkZXIgbGluZSwgdGhlIGAuc3RhY2tgIGlzIGZyYW1lcyBvbmx5LCBpbiBpdHMgb3duIGBuYW1lQHVybDpsaW5lOmNvbGAgZm9ybSwgc28gdGhlIG1lc3NhZ2UgaXMgbm93aGVyZSBpbiBpdDpcbiAgLy8gUHJlcGVuZCB0aGUgaGVhZGVyLCBhbmQgdGFrZSBldmVyeSBzdGFjayBsaW5lIGFzIGEgZnJhbWUuXG4gIHJldHVybiBbLi4uaGVhZGVyTGluZXMsIC4uLnN0YWNrTGluZXMuZmlsdGVyKCh0ZXh0KSA9PiB0ZXh0LnRyaW0oKSAhPT0gJycpLm1hcCgodGV4dCkgPT4gKHsgaXNGcmFtZTogdHJ1ZSwgdGV4dCB9KSldO1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYXN5bmNocm9ub3VzIGVycm9ycyBieSBwcmludGluZyB0aGVtLlxuICpcbiAqIEBwYXJhbSBhc3luY0Vycm9yIC0gVGhlIGFzeW5jaHJvbm91cyBlcnJvciB0byBoYW5kbGUuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZUFzeW5jRXJyb3IoYXN5bmNFcnJvcjogdW5rbm93bik6IHZvaWQge1xuICBwcmludEVycm9yKGFzeW5jRXJyb3IpO1xufVxuXG4vKipcbiAqIEFuc3dlcnMgd2hldGhlciB0aGlzIGVuZ2luZSdzIGAuc3RhY2tgIG9wZW5zIHdpdGggdGhlIGVycm9yJ3MgYE5hbWU6IG1lc3NhZ2VgIGhlYWRlciBsaW5lLlxuICpcbiAqIFY4IHdyaXRlcyBvbmU7IEphdmFTY3JpcHRDb3JlIChldmVyeSBBcHBsZSBwbGF0Zm9ybSwgc28gT2JzaWRpYW4gb24gaU9TIGFuZCBpUGFkT1MpIGFuZCBTcGlkZXJNb25rZXkgd3JpdGUgZnJhbWVzIG9ubHkuXG4gKiBUaGUgYW5zd2VyIGJlbG9uZ3MgdG8gdGhlIGVuZ2luZSwgbm90IHRoZSBwbGF0Zm9ybSwgc28gaXQgaXMgcHJvYmVkIHJhdGhlciB0aGFuIHJlYWQgb2ZmIGBQbGF0Zm9ybWAuIEl0IGlzIHByb2JlZCBvbiBldmVyeVxuICogY2FsbCByYXRoZXIgdGhhbiBjYWNoZWQsIGJlY2F1c2UgYEVycm9yLnByZXBhcmVTdGFja1RyYWNlYCBjYW4gcmVzaGFwZSBWOCdzIHN0YWNrIGF0IHJ1bnRpbWUsIGFuZCBvbmUgZXh0cmEgYEVycm9yYCBjb3N0c1xuICogbm90aGluZyBvbiBhIHBhdGggdGhhdCBpcyBhbHJlYWR5IGhhbmRsaW5nIG9uZS5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYC5zdGFja2AgY2FycmllcyB0aGUgaGVhZGVyIGxpbmUuXG4gKi9cbmZ1bmN0aW9uIGhhc1N0YWNrSGVhZGVyKCk6IGJvb2xlYW4ge1xuICBjb25zdCBmaXJzdExpbmUgPSBnZXRFcnJvclN0YWNrKG5ldyBFcnJvcihTVEFDS19IRUFERVJfUFJPQkVfTUVTU0FHRSkpPy5zcGxpdCgnXFxuJywgMSlbMF07XG4gIHJldHVybiBmaXJzdExpbmUgPT09IGBFcnJvcjogJHtTVEFDS19IRUFERVJfUFJPQkVfTUVTU0FHRX1gO1xufVxuXG5mdW5jdGlvbiBzYWZlVG9TdHJpbmcodG9TdHJpbmc6ICgpID0+IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHRvU3RyaW5nKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnPHVucHJpbnRhYmxlPic7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9UaXRsZUxpbmUodGV4dDogc3RyaW5nKTogRXJyb3JMaW5lIHtcbiAgcmV0dXJuIHsgaXNGcmFtZTogZmFsc2UsIHRleHQgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBTUEsU0FBUyxtQkFBbUI7QUFDNUI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLHlCQUF5QjtBQU1sQyxNQUFNLG1CQUFtQixJQUFJLFlBQWdDO0FBRTdELGlCQUFpQixHQUFHLGNBQWMsZ0JBQWdCO0FBeUJsRCxNQUFNLGNBQTJCO0FBQUEsRUFDL0IsOEJBQThCO0FBQUEsRUFDOUIsK0JBQStCO0FBQ2pDO0FBSU8sTUFBTSw4QkFBOEI7QUFFM0MsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSx1QkFBdUI7QUFFN0IsTUFBTSw2QkFBNkI7QUFvQzVCLE1BQU0sOEJBQThCLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNeEMsWUFBWSxRQUFnRDtBQUNqRSxVQUFNLEVBQUUsT0FBTyxTQUFTLFdBQVcsSUFBSTtBQUN2QyxVQUFNLFNBQVMsRUFBRSxNQUFNLENBQUM7QUFDeEIsU0FBSyxPQUFPO0FBRVosUUFBSSxZQUFZO0FBQ2hCLFVBQU0sZUFBZSxvQkFBSSxJQUEyQjtBQUNwRCxXQUFPLHFCQUFxQix1QkFBdUI7QUFDakQsVUFBSSxhQUFhLElBQUksU0FBUyxHQUFHO0FBQy9CLGNBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLE1BQzNDO0FBQ0EsbUJBQWEsSUFBSSxTQUFTO0FBQzFCLGtCQUFZLFVBQVU7QUFBQSxJQUN4QjtBQUVBLFVBQU0sYUFBYSxXQUFXLE1BQU0sSUFBSTtBQUN4QyxRQUFJLHFCQUFxQixLQUFLLGtCQUFrQixXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUc7QUFDL0QsaUJBQVcsTUFBTTtBQUFBLElBQ25CO0FBRUEsUUFBSSxlQUFlLEdBQUc7QUFDcEIsaUJBQVcsUUFBUSxlQUFlLElBQUksQ0FB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
|
|
@@ -75,17 +75,17 @@ export interface ValidatorElement extends HTMLElement {
|
|
|
75
75
|
*
|
|
76
76
|
* @returns `true` if the element is valid, `false` otherwise.
|
|
77
77
|
*/
|
|
78
|
-
checkValidity: () => boolean;
|
|
78
|
+
readonly checkValidity: () => boolean;
|
|
79
79
|
/**
|
|
80
80
|
* Reports the validity of the element.
|
|
81
81
|
*/
|
|
82
|
-
reportValidity: () => boolean;
|
|
82
|
+
readonly reportValidity: () => boolean;
|
|
83
83
|
/**
|
|
84
84
|
* Sets a custom error message on the element.
|
|
85
85
|
*
|
|
86
86
|
* @param error - The error message to set on the element.
|
|
87
87
|
*/
|
|
88
|
-
setCustomValidity: (error: string) => void;
|
|
88
|
+
readonly setCustomValidity: (error: string) => void;
|
|
89
89
|
/**
|
|
90
90
|
* An error message of the element.
|
|
91
91
|
*/
|
|
@@ -244,4 +244,4 @@ export {
|
|
|
244
244
|
toPx,
|
|
245
245
|
waitUntilConnected
|
|
246
246
|
};
|
|
247
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0bWwtZWxlbWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9ic2lkaWFuLXJ1bnRpbWUtYWdub3N0aWMgaGVscGVycyBmb3Igd29ya2luZyB3aXRoIEhUTUwgZWxlbWVudHMuXG4gKlxuICogU2V2ZXJhbCBoZWxwZXJzIGhlcmUgbWlycm9yIGJlaGF2aW9yIHRoYXQgdGhlIE9ic2lkaWFuIHJ1bnRpbWUgaW5qZWN0cyBvbnRvIHRoZSBET00gcHJvdG90eXBlc1xuICogKGBjcmVhdGVFbGAvYGNyZWF0ZURpdmAvYGNyZWF0ZVNwYW5gL2BjcmVhdGVTdmdgL2BjcmVhdGVGcmFnbWVudGAsIGBOb2RlLnByb3RvdHlwZS5pbnN0YW5jZU9mYCxcbiAqIGBFbGVtZW50LnByb3RvdHlwZS5zZXRUZXh0YC9gc2V0QXR0cnNgKS4gVG8gc3RheSBpbmRlcGVuZGVudCBvZiB0aGUgT2JzaWRpYW4gcnVudGltZSwgdGhhdCBiZWhhdmlvclxuICogaXMgcmVpbXBsZW1lbnRlZCBoZXJlIGluIHN0YW5kYXJkIERPTSwgcG9ydGVkIGZyb20gT2JzaWRpYW4ncyBvd24gaW1wbGVtZW50YXRpb24gaW5cbiAqIGBvYnNpZGlhbi5hc2FyL2VuaGFuY2UuanNgLiBTZWUgdGhlIGBvYnNpZGlhbi12ZXJzaW9uc2AgcHJvamVjdDsgcmV2YWxpZGF0ZSB0aGUgcG9ydCB3aGVuIE9ic2lkaWFuXG4gKiBjaGFuZ2VzIGBlbmhhbmNlLmpzYCAodGhlcmUgaXMgYSByZW1pbmRlciBpbiBgQ0xBVURFLm1kYCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbmNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVFbEFzeW5jfSBhbmQgaXRzIHNpYmxpbmdzIGFwcGx5OiB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZlxuICogT2JzaWRpYW4ncyBgRG9tRWxlbWVudEluZm9gLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuIEFuIE9ic2lkaWFuXG4gKiBgRG9tRWxlbWVudEluZm9gIHZhbHVlIGlzIGFzc2lnbmFibGUgdG8gaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGVzIHRvIHNldDsgYG51bGxgIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGF0dHI/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbCB8IG51bWJlciB8IHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3Mgb3IgY2xhc3Nlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNscz86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHRvIGluc2VydCB0aGUgZWxlbWVudCBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogTm9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgdGhlIGVsZW1lbnQgYXMgdGhlIHBhcmVudCdzIGZpcnN0IGNoaWxkIGluc3RlYWQgb2YgaXRzIGxhc3QuXG4gICAqL1xuICByZWFkb25seSBwcmVwZW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ/OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHRpcCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIFNWRyBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVTdmdBc3luY30gYXBwbGllczogdGhlIHN1YnNldCBvZiBPYnNpZGlhbidzIGBTdmdFbGVtZW50SW5mb2AgaXRcbiAqIHN1cHBvcnRzLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU3ZnRWxlbWVudEluZm8ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZXMgdG8gc2V0OyBgbnVsbGAgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cj86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsIHwgbnVtYmVyIHwgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBvciBjbGFzc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdG8gaW5zZXJ0IHRoZSBlbGVtZW50IGludG8uXG4gICAqL1xuICByZWFkb25seSBwYXJlbnQ/OiBOb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCB0aGUgZWxlbWVudCBhcyB0aGUgcGFyZW50J3MgZmlyc3QgY2hpbGQgaW5zdGVhZCBvZiBpdHMgbGFzdC5cbiAgICovXG4gIHJlYWRvbmx5IHByZXBlbmQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgSFRNTCBlbGVtZW50IHRoYXQgY2FuIGJlIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAvKipcbiAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGNoZWNrVmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgdGhlIHZhbGlkaXR5IG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVwb3J0VmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gc2V0IG9uIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgc2V0Q3VzdG9tVmFsaWRpdHk6IChlcnJvcjogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciBtZXNzYWdlIG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGl2IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBkaXYgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRpdi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpdkFzeW5jKFxuICBvPzogQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHwgc3RyaW5nLFxuICBjYWxsYmFjaz86IChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICBjb25zdCBkaXYgPSBjcmVhdGVIdG1sRWxlbWVudCgnZGl2Jywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZGl2KTtcbiAgcmV0dXJuIGRpdjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVsZW1lbnQgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBIVE1MRWxlbWVudFRhZ05hbWVNYXBgLlxuICogQHBhcmFtIHRhZyAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcGFyYW0gbyAtIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZWxlbWVudC5cbiAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGggT2JzaWRpYW4ncyBgY3JlYXRlRWxgIChvciBjcmVhdGVTdmcsIGNvcnJlc3BvbmRpbmdseSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVFbEFzeW5jPEsgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuICB0YWc6IEssXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtLXSkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10+IHtcbiAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUh0bWxFbGVtZW50KHRhZywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZWxlbWVudCk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEb2N1bWVudEZyYWdtZW50IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIERvY3VtZW50RnJhZ21lbnQgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIERvY3VtZW50RnJhZ21lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudEFzeW5jKGNhbGxiYWNrPzogKGVsZW1lbnQ6IERvY3VtZW50RnJhZ21lbnQpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPERvY3VtZW50RnJhZ21lbnQ+IHtcbiAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIG8gLSBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHNwYW4gaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNwYW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcGFuQXN5bmMoXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MU3BhbkVsZW1lbnQ+IHtcbiAgY29uc3Qgc3BhbiA9IGNyZWF0ZUh0bWxFbGVtZW50KCdzcGFuJywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3Bhbik7XG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdmcgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBTVkdFbGVtZW50VGFnTmFtZU1hcGAuXG4gKiBAcGFyYW0gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBzdmcgdG8gY3JlYXRlLlxuICogQHBhcmFtIG8gLSBUaGUgc3ZnIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgc3ZnIGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdmcuXG4gKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIE9ic2lkaWFuJ3MgYGNyZWF0ZVN2Z2AgKG9yIGNyZWF0ZUVsLCBjb3JyZXNwb25kaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3ZnQXN5bmM8SyBleHRlbmRzIGtleW9mIFNWR0VsZW1lbnRUYWdOYW1lTWFwPihcbiAgdGFnOiBLLFxuICBvPzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdKSA9PiBQcm9taXNhYmxlPHZvaWQ+XG4pOiBQcm9taXNlPFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdPiB7XG4gIGNvbnN0IHN2ZyA9IGNyZWF0ZVN2Z0VsZW1lbnQodGFnLCBvKTtcbiAgYXdhaXQgY2FsbGJhY2s/LihzdmcpO1xuICByZXR1cm4gc3ZnO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBsb2FkZWQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBlbnN1cmUgaXMgbG9hZGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxvYWRlZChlbGVtZW50OiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0xvYWRlZChlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB3aW4gPSBnZXROb2RlV2luZG93KGVsZW1lbnQpO1xuICBpZiAoXG4gICAgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MQm9keUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSW1hZ2VFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTElGcmFtZUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MRW1iZWRFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTE9iamVjdEVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MU3R5bGVFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudClcbiAgKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc29sdmUpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlc29sdmUpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKGdldExvYWRhYmxlRWxlbWVudHMoZWxlbWVudCkubWFwKChsb2FkYWJsZUVsZW1lbnQpID0+IGVuc3VyZUxvYWRlZChsb2FkYWJsZUVsZW1lbnQpKSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgd2luZG93IGEgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqXG4gKiBBIGRvY3VtZW50IGlzIHRoZSBvbmUgbm9kZSB3aG9zZSBgb3duZXJEb2N1bWVudGAgaXMgYG51bGxgLCBzbyB0aGUgYG93bmVyRG9jdW1lbnRgLWNoYXNpbmcgbG9va3VwXG4gKiB1c2VkIGZvciBvcmRpbmFyeSBub2RlcyByZXNvbHZlcyBhIGRvY3VtZW50IHRvIHRoZSB3cm9uZyB3aW5kb3cuIFJlYWRpbmcgYGRlZmF1bHRWaWV3YCBvZmYgdGhlXG4gKiBkb2N1bWVudCBpdHNlbGYgaXMgd2hhdCBrZWVwcyBhIHBvcC1vdXQgd2luZG93J3MgY29vcmRpbmF0ZXMgbWVhc3VyZWQgYWdhaW5zdCB0aGF0IHdpbmRvdy5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRvIGdldCB0aGUgd2luZG93IG9mLlxuICogQHJldHVybnMgVGhlIHdpbmRvdyB0aGUgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgZG9jdW1lbnQgaXMgZGV0YWNoZWQgYW5kIHRoZXJlZm9yZSBoYXMgbm8gd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRXaW5kb3coZG9jOiBEb2N1bWVudCk6IFdpbmRvdyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShkb2MuZGVmYXVsdFZpZXcsICdUaGUgZG9jdW1lbnQgaGFzIG5vIHdpbmRvdycpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHotaW5kZXggb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBnZXQgdGhlIHotaW5kZXggb2YuXG4gKiBAcmV0dXJucyBUaGUgei1pbmRleCBvZiB0aGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpJbmRleChlbGVtZW50OiBFbGVtZW50KTogbnVtYmVyIHtcbiAgbGV0IGVsZW1lbnQyOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG5cbiAgd2hpbGUgKGVsZW1lbnQyKSB7XG4gICAgY29uc3QgekluZGV4U3RyaW5nID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50MikuekluZGV4O1xuICAgIGNvbnN0IHpJbmRleCA9IE51bWJlci5wYXJzZUludCh6SW5kZXhTdHJpbmcsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc05hTih6SW5kZXgpKSB7XG4gICAgICByZXR1cm4gekluZGV4O1xuICAgIH1cbiAgICBlbGVtZW50MiA9IGVsZW1lbnQyLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgb2Zmc2V0IHBhcmVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIG9mZnNldCBwYXJlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZUluT2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBwYXJlbnRFbGVtZW50UmVjdCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICBwYXJlbnRFbGVtZW50UmVjdC50b3AgPD0gZWxlbWVudFJlY3QudG9wXG4gICAgJiYgZWxlbWVudFJlY3QuYm90dG9tIDw9IHBhcmVudEVsZW1lbnRSZWN0LmJvdHRvbVxuICAgICYmIHBhcmVudEVsZW1lbnRSZWN0LmxlZnQgPD0gZWxlbWVudFJlY3QubGVmdFxuICAgICYmIGVsZW1lbnRSZWN0LnJpZ2h0IDw9IHBhcmVudEVsZW1lbnRSZWN0LnJpZ2h0XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvYWRlZChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3coZWxlbWVudCk7XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEJvZHlFbGVtZW50KSkge1xuICAgIGNvbnN0IHJlYWR5U3RhdGUgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZTtcbiAgICByZXR1cm4gcmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCByZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEltYWdlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jb21wbGV0ZSAmJiBlbGVtZW50Lm5hdHVyYWxXaWR0aCA+IDA7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxFbWJlZEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuICEhZWxlbWVudC5nZXRTVkdEb2N1bWVudCgpO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KSkge1xuICAgIHJldHVybiBlbGVtZW50LnJlbCAhPT0gJ3N0eWxlc2hlZXQnIHx8IGVsZW1lbnQuc2hlZXQgIT09IG51bGw7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MT2JqZWN0RWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudCB8fCAhIWVsZW1lbnQuZ2V0U1ZHRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxTY3JpcHRFbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFN0eWxlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LnNoZWV0O1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudCkpIHtcbiAgICBjb25zdCBSRUFEWV9TVEFURV9MT0FERUQgPSAyO1xuICAgIHJldHVybiBlbGVtZW50LnJlYWR5U3RhdGUgPT09IFJFQURZX1NUQVRFX0xPQURFRDtcbiAgfVxuXG4gIHJldHVybiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQpLmV2ZXJ5KChsb2FkYWJsZUVsZW1lbnQpID0+IGlzTG9hZGVkKGxvYWRhYmxlRWxlbWVudCkpO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGFuY2VzdG9yIG5vZGVzIG9mIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gYWRkIHRoZSBldmVudCBsaXN0ZW5lciB0by5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25BbmNlc3RvclNjcm9sbE9yUmVzaXplKG5vZGU6IE5vZGUsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3cobm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9yczogRXZlbnRUYXJnZXRbXSA9IFtub2RlLm93bmVyRG9jdW1lbnQgPz8gd2luLmRvY3VtZW50LCB3aW5dO1xuXG4gIGxldCBjdXJyZW50Tm9kZTogTm9kZSB8IG51bGwgPSBub2RlO1xuXG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGFuY2VzdG9ycy5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICBsZXQgaXNFdmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgYW5jZXN0b3Igb2YgYW5jZXN0b3JzKSB7XG4gICAgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2FsbGJhY2tTbW9vdGgsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIGFuY2VzdG9ycykge1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2FsbGJhY2tTbW9vdGgoKTogdm9pZCB7XG4gICAgaWYgKGlzRXZlbnRUcmlnZ2VyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc0V2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcblxuICAgIHdpbi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIGFzIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfXB4YDtcbn1cblxuLyoqXG4gKiBXYWl0cyB1bnRpbCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0VW50aWxDb25uZWN0ZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPYnNpZGlhbidzIGBlbC5vbk5vZGVJbnNlcnRlZGAgdXNlcyBhIGBub2RlLWluc2VydGVkYCBDU1Mga2V5ZnJhbWUgZnJvbSBPYnNpZGlhbidzIHN0eWxlc2hlZXQuXG4gICAgLy8gVGhlIGFnbm9zdGljIGVxdWl2YWxlbnQgaW5zdGVhZCBvYnNlcnZlcyB0aGUgZWxlbWVudCdzIGRvY3VtZW50IGZvciBpdCBiZWNvbWluZyBjb25uZWN0ZWQuXG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyAoZ2V0Tm9kZVdpbmRvdyhlbGVtZW50KSkuTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShvd25lckRvY3VtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZiBPYnNpZGlhbidzIGBEb21FbGVtZW50SW5mb2AgdGhhdCBpdHMgYGNyZWF0ZUVsYFxuICogc3VwcG9ydHMgXHUyMDE0IGBjbHNgLCBgdGV4dGAsIGBhdHRyYCwgYHRpdGxlYCwgYW5kIGBwYXJlbnRgL2BwcmVwZW5kYC4gVGhlIGVsZW1lbnQtdHlwZS1zcGVjaWZpY1xuICogZmllbGRzIChgdmFsdWVgLCBgdHlwZWAsIGBwbGFjZWhvbGRlcmAsIGBocmVmYCkgYW5kIHRoZSBgb24qYCBldmVudC1oYW5kbGVyIGtleXMgYXJlIGludGVudGlvbmFsbHlcbiAqIE5PVCBwb3J0ZWQgKG5vIGludGVybmFsIGNhbGxlciBuZWVkcyB0aGVtKTsgZXh0ZW5kIHRoaXMgaWYgYSBjb25zdW1lciBkb2VzIFx1MjAxNCBhbmQgcmV2YWxpZGF0ZSBhZ2FpbnN0XG4gKiBgZW5oYW5jZS5qc2AgKHNlZSB0aGUgYEBmaWxlYCBub3RlIGFuZCBgQ0xBVURFLm1kYCkuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhcHBseSB0aGUgaW5mbyB0by5cbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mbyAob3IgYSBiYXJlIGNsYXNzIHN0cmluZykuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5RG9tRWxlbWVudEluZm8oZWxlbWVudDogSFRNTEVsZW1lbnQsIG86IENyZWF0ZUh0bWxFbGVtZW50SW5mbyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBjb25zdCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQXJyYXkuaXNBcnJheShpbmZvLmNscykgPyBpbmZvLmNscy5qb2luKCcgJykgOiBpbmZvLmNscztcbiAgfVxuICBpZiAoaW5mby50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXRFbGVtZW50VGV4dChlbGVtZW50LCBpbmZvLnRleHQpO1xuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50LCBpbmZvLmF0dHIpO1xuICB9XG4gIGlmIChpbmZvLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50LnRpdGxlID0gaW5mby50aXRsZTtcbiAgfVxuICBpbnNlcnRJbnRvUGFyZW50KGVsZW1lbnQsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIdG1sRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPih0YWc6IEssIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcpOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICBhcHBseURvbUVsZW1lbnRJbmZvKGVsZW1lbnQsIG8pO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgU1ZHRWxlbWVudFRhZ05hbWVNYXA+KHRhZzogSywgbz86IENyZWF0ZVN2Z0VsZW1lbnRJbmZvIHwgc3RyaW5nKTogU1ZHRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRSwgdGFnKTtcbiAgY29uc3QgaW5mbzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGluZm8uY2xzKSkge1xuICAgICAgc3ZnLmNsYXNzTGlzdC5hZGQoLi4uaW5mby5jbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmcuY2xhc3NMaXN0LmFkZChpbmZvLmNscyk7XG4gICAgfVxuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhzdmcsIGluZm8uYXR0cik7XG4gIH1cbiAgaW5zZXJ0SW50b1BhcmVudChzdmcsIGluZm8pO1xuICByZXR1cm4gc3ZnO1xufVxuXG5mdW5jdGlvbiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50W10ge1xuICByZXR1cm4gWy4uLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYm9keSwgaW1nLCBpZnJhbWUsIGVtYmVkLCBsaW5rLCBvYmplY3QsIHNjcmlwdCwgc3R5bGUsIHRyYWNrJyldO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlV2luZG93KG5vZGU6IE5vZGUpOiB0eXBlb2YgZ2xvYmFsVGhpcyAmIFdpbmRvdyB7XG4gIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3ID8/IHdpbmRvdztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SW50b1BhcmVudChlbGVtZW50OiBFbGVtZW50LCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBDcmVhdGVTdmdFbGVtZW50SW5mbyk6IHZvaWQge1xuICBpZiAoIWluZm8ucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLnByZXBlbmQpIHtcbiAgICBpbmZvLnBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgaW5mby5wYXJlbnQuZmlyc3RDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZCAtLSBgcGFyZW50YCBpcyBhIGBOb2RlYCwgYW5kIGBhcHBlbmRgIGlzIGRlY2xhcmVkIG9uIGBQYXJlbnROb2RlYCwgbm90IG9uIGBOb2RlYC5cbiAgICBpbmZvLnBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luc3RhbmNlT2Y8VCBleHRlbmRzIE5vZGU+KG5vZGU6IE5vZGUsIGN0b3I6IGFic3RyYWN0IG5ldyAoLi4uJGFyZ3VtZW50czogbmV2ZXJbXSkgPT4gVCk6IG5vZGUgaXMgVCB7XG4gIC8vIEFnbm9zdGljIHJlaW1wbGVtZW50YXRpb24gb2YgT2JzaWRpYW4ncyBgTm9kZS5wcm90b3R5cGUuaW5zdGFuY2VPZmAgKGVuaGFuY2UuanMpLlxuICAvLyBUaGUgY2FsbGVyIHJlc29sdmVzIGBjdG9yYCBpbiB0aGUgbm9kZSdzIG93biByZWFsbSAodmlhIGBnZXROb2RlV2luZG93YCksIGtlZXBpbmcgaXQgY3Jvc3Mtd2luZG93IHNhZmUuXG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgY3Rvcjtcbn1cblxuZnVuY3Rpb24gc2V0RWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudDogRWxlbWVudCwgYXR0cmlidXRlOiBOb25OdWxsYWJsZTxDcmVhdGVIdG1sRWxlbWVudEluZm9bJ2F0dHInXT4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItdG9nZ2xlLWF0dHJpYnV0ZSAtLSBgdG9nZ2xlQXR0cmlidXRlYCBvbmx5IGV2ZXIgc2V0cyB0aGUgZW1wdHkgc3RyaW5nLCBzbyBpdCBjYW5ub3QgY2FycnkgYFN0cmluZyh2YWx1ZSlgLiBUaGUgcnVsZSBtYXRjaGVzIHRoZSByZW1vdmUvc2V0IHNoYXBlIHdpdGhvdXQgc2VlaW5nIHRoYXQgdGhlIHZhbHVlIGlzIHdoYXQgdGhpcyBicmFuY2ggZXhpc3RzIHRvIHdyaXRlLlxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFbGVtZW50VGV4dChlbGVtZW50OiBIVE1MRWxlbWVudCwgdGV4dDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQge1xuICBpZiAodGV4dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICBlbGVtZW50LnJlcGxhY2VDaGlsZHJlbih0ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFlQSxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLHlCQUF5QjtBQUVsQyxNQUFNLGdCQUFnQjtBQXFHdEIsZUFBc0IsZUFDcEIsR0FDQSxVQUN5QjtBQUN6QixRQUFNLE1BQU0sa0JBQWtCLE9BQU8sQ0FBQztBQUN0QyxRQUFNLFdBQVcsR0FBRztBQUNwQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixjQUNwQixLQUNBLEdBQ0EsVUFDbUM7QUFDbkMsUUFBTSxVQUFVLGtCQUFrQixLQUFLLENBQUM7QUFDeEMsUUFBTSxXQUFXLE9BQU87QUFDeEIsU0FBTztBQUNUO0FBUUEsZUFBc0Isb0JBQW9CLFVBQXVGO0FBQy9ILFFBQU0sV0FBVyxTQUFTLHVCQUF1QjtBQUNqRCxRQUFNLFdBQVcsUUFBUTtBQUN6QixTQUFPO0FBQ1Q7QUFTQSxlQUFzQixnQkFDcEIsR0FDQSxVQUMwQjtBQUMxQixRQUFNLE9BQU8sa0JBQWtCLFFBQVEsQ0FBQztBQUN4QyxRQUFNLFdBQVcsSUFBSTtBQUNyQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixlQUNwQixLQUNBLEdBQ0EsVUFDa0M7QUFDbEMsUUFBTSxNQUFNLGlCQUFpQixLQUFLLENBQUM7QUFDbkMsUUFBTSxXQUFXLEdBQUc7QUFDcEIsU0FBTztBQUNUO0FBUUEsZUFBc0IsYUFBYSxTQUFpQztBQUNsRSxNQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3JCO0FBQUEsRUFDRjtBQUNBLFFBQU0sTUFBTSxjQUFjLE9BQU87QUFDakMsTUFDRSxhQUFhLFNBQVMsSUFBSSxlQUFlLEtBQ3RDLGFBQWEsU0FBUyxJQUFJLGdCQUFnQixLQUMxQyxhQUFhLFNBQVMsSUFBSSxpQkFBaUIsS0FDM0MsYUFBYSxTQUFTLElBQUksZ0JBQWdCLEtBQzFDLGFBQWEsU0FBUyxJQUFJLGVBQWUsS0FDekMsYUFBYSxTQUFTLElBQUksaUJBQWlCLEtBQzNDLGFB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
|
|
247
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0bWwtZWxlbWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9ic2lkaWFuLXJ1bnRpbWUtYWdub3N0aWMgaGVscGVycyBmb3Igd29ya2luZyB3aXRoIEhUTUwgZWxlbWVudHMuXG4gKlxuICogU2V2ZXJhbCBoZWxwZXJzIGhlcmUgbWlycm9yIGJlaGF2aW9yIHRoYXQgdGhlIE9ic2lkaWFuIHJ1bnRpbWUgaW5qZWN0cyBvbnRvIHRoZSBET00gcHJvdG90eXBlc1xuICogKGBjcmVhdGVFbGAvYGNyZWF0ZURpdmAvYGNyZWF0ZVNwYW5gL2BjcmVhdGVTdmdgL2BjcmVhdGVGcmFnbWVudGAsIGBOb2RlLnByb3RvdHlwZS5pbnN0YW5jZU9mYCxcbiAqIGBFbGVtZW50LnByb3RvdHlwZS5zZXRUZXh0YC9gc2V0QXR0cnNgKS4gVG8gc3RheSBpbmRlcGVuZGVudCBvZiB0aGUgT2JzaWRpYW4gcnVudGltZSwgdGhhdCBiZWhhdmlvclxuICogaXMgcmVpbXBsZW1lbnRlZCBoZXJlIGluIHN0YW5kYXJkIERPTSwgcG9ydGVkIGZyb20gT2JzaWRpYW4ncyBvd24gaW1wbGVtZW50YXRpb24gaW5cbiAqIGBvYnNpZGlhbi5hc2FyL2VuaGFuY2UuanNgLiBTZWUgdGhlIGBvYnNpZGlhbi12ZXJzaW9uc2AgcHJvamVjdDsgcmV2YWxpZGF0ZSB0aGUgcG9ydCB3aGVuIE9ic2lkaWFuXG4gKiBjaGFuZ2VzIGBlbmhhbmNlLmpzYCAodGhlcmUgaXMgYSByZW1pbmRlciBpbiBgQ0xBVURFLm1kYCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbmNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVFbEFzeW5jfSBhbmQgaXRzIHNpYmxpbmdzIGFwcGx5OiB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZlxuICogT2JzaWRpYW4ncyBgRG9tRWxlbWVudEluZm9gLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuIEFuIE9ic2lkaWFuXG4gKiBgRG9tRWxlbWVudEluZm9gIHZhbHVlIGlzIGFzc2lnbmFibGUgdG8gaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGVzIHRvIHNldDsgYG51bGxgIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGF0dHI/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbCB8IG51bWJlciB8IHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3Mgb3IgY2xhc3Nlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNscz86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHRvIGluc2VydCB0aGUgZWxlbWVudCBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogTm9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgdGhlIGVsZW1lbnQgYXMgdGhlIHBhcmVudCdzIGZpcnN0IGNoaWxkIGluc3RlYWQgb2YgaXRzIGxhc3QuXG4gICAqL1xuICByZWFkb25seSBwcmVwZW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ/OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHRpcCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIFNWRyBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVTdmdBc3luY30gYXBwbGllczogdGhlIHN1YnNldCBvZiBPYnNpZGlhbidzIGBTdmdFbGVtZW50SW5mb2AgaXRcbiAqIHN1cHBvcnRzLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU3ZnRWxlbWVudEluZm8ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZXMgdG8gc2V0OyBgbnVsbGAgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cj86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsIHwgbnVtYmVyIHwgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBvciBjbGFzc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdG8gaW5zZXJ0IHRoZSBlbGVtZW50IGludG8uXG4gICAqL1xuICByZWFkb25seSBwYXJlbnQ/OiBOb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCB0aGUgZWxlbWVudCBhcyB0aGUgcGFyZW50J3MgZmlyc3QgY2hpbGQgaW5zdGVhZCBvZiBpdHMgbGFzdC5cbiAgICovXG4gIHJlYWRvbmx5IHByZXBlbmQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgSFRNTCBlbGVtZW50IHRoYXQgY2FuIGJlIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAvKipcbiAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrVmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgdGhlIHZhbGlkaXR5IG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0VmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gc2V0IG9uIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0Q3VzdG9tVmFsaWRpdHk6IChlcnJvcjogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciBtZXNzYWdlIG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGl2IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBkaXYgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRpdi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpdkFzeW5jKFxuICBvPzogQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHwgc3RyaW5nLFxuICBjYWxsYmFjaz86IChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICBjb25zdCBkaXYgPSBjcmVhdGVIdG1sRWxlbWVudCgnZGl2Jywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZGl2KTtcbiAgcmV0dXJuIGRpdjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVsZW1lbnQgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBIVE1MRWxlbWVudFRhZ05hbWVNYXBgLlxuICogQHBhcmFtIHRhZyAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcGFyYW0gbyAtIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZWxlbWVudC5cbiAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGggT2JzaWRpYW4ncyBgY3JlYXRlRWxgIChvciBjcmVhdGVTdmcsIGNvcnJlc3BvbmRpbmdseSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVFbEFzeW5jPEsgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuICB0YWc6IEssXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtLXSkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10+IHtcbiAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUh0bWxFbGVtZW50KHRhZywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZWxlbWVudCk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEb2N1bWVudEZyYWdtZW50IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIERvY3VtZW50RnJhZ21lbnQgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIERvY3VtZW50RnJhZ21lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudEFzeW5jKGNhbGxiYWNrPzogKGVsZW1lbnQ6IERvY3VtZW50RnJhZ21lbnQpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPERvY3VtZW50RnJhZ21lbnQ+IHtcbiAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIG8gLSBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHNwYW4gaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNwYW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcGFuQXN5bmMoXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MU3BhbkVsZW1lbnQ+IHtcbiAgY29uc3Qgc3BhbiA9IGNyZWF0ZUh0bWxFbGVtZW50KCdzcGFuJywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3Bhbik7XG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdmcgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBTVkdFbGVtZW50VGFnTmFtZU1hcGAuXG4gKiBAcGFyYW0gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBzdmcgdG8gY3JlYXRlLlxuICogQHBhcmFtIG8gLSBUaGUgc3ZnIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgc3ZnIGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdmcuXG4gKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIE9ic2lkaWFuJ3MgYGNyZWF0ZVN2Z2AgKG9yIGNyZWF0ZUVsLCBjb3JyZXNwb25kaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3ZnQXN5bmM8SyBleHRlbmRzIGtleW9mIFNWR0VsZW1lbnRUYWdOYW1lTWFwPihcbiAgdGFnOiBLLFxuICBvPzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdKSA9PiBQcm9taXNhYmxlPHZvaWQ+XG4pOiBQcm9taXNlPFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdPiB7XG4gIGNvbnN0IHN2ZyA9IGNyZWF0ZVN2Z0VsZW1lbnQodGFnLCBvKTtcbiAgYXdhaXQgY2FsbGJhY2s/LihzdmcpO1xuICByZXR1cm4gc3ZnO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBsb2FkZWQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBlbnN1cmUgaXMgbG9hZGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxvYWRlZChlbGVtZW50OiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0xvYWRlZChlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB3aW4gPSBnZXROb2RlV2luZG93KGVsZW1lbnQpO1xuICBpZiAoXG4gICAgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MQm9keUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSW1hZ2VFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTElGcmFtZUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MRW1iZWRFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTE9iamVjdEVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MU3R5bGVFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudClcbiAgKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc29sdmUpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlc29sdmUpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKGdldExvYWRhYmxlRWxlbWVudHMoZWxlbWVudCkubWFwKChsb2FkYWJsZUVsZW1lbnQpID0+IGVuc3VyZUxvYWRlZChsb2FkYWJsZUVsZW1lbnQpKSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgd2luZG93IGEgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqXG4gKiBBIGRvY3VtZW50IGlzIHRoZSBvbmUgbm9kZSB3aG9zZSBgb3duZXJEb2N1bWVudGAgaXMgYG51bGxgLCBzbyB0aGUgYG93bmVyRG9jdW1lbnRgLWNoYXNpbmcgbG9va3VwXG4gKiB1c2VkIGZvciBvcmRpbmFyeSBub2RlcyByZXNvbHZlcyBhIGRvY3VtZW50IHRvIHRoZSB3cm9uZyB3aW5kb3cuIFJlYWRpbmcgYGRlZmF1bHRWaWV3YCBvZmYgdGhlXG4gKiBkb2N1bWVudCBpdHNlbGYgaXMgd2hhdCBrZWVwcyBhIHBvcC1vdXQgd2luZG93J3MgY29vcmRpbmF0ZXMgbWVhc3VyZWQgYWdhaW5zdCB0aGF0IHdpbmRvdy5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRvIGdldCB0aGUgd2luZG93IG9mLlxuICogQHJldHVybnMgVGhlIHdpbmRvdyB0aGUgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgZG9jdW1lbnQgaXMgZGV0YWNoZWQgYW5kIHRoZXJlZm9yZSBoYXMgbm8gd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRXaW5kb3coZG9jOiBEb2N1bWVudCk6IFdpbmRvdyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShkb2MuZGVmYXVsdFZpZXcsICdUaGUgZG9jdW1lbnQgaGFzIG5vIHdpbmRvdycpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHotaW5kZXggb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBnZXQgdGhlIHotaW5kZXggb2YuXG4gKiBAcmV0dXJucyBUaGUgei1pbmRleCBvZiB0aGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpJbmRleChlbGVtZW50OiBFbGVtZW50KTogbnVtYmVyIHtcbiAgbGV0IGVsZW1lbnQyOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG5cbiAgd2hpbGUgKGVsZW1lbnQyKSB7XG4gICAgY29uc3QgekluZGV4U3RyaW5nID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50MikuekluZGV4O1xuICAgIGNvbnN0IHpJbmRleCA9IE51bWJlci5wYXJzZUludCh6SW5kZXhTdHJpbmcsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc05hTih6SW5kZXgpKSB7XG4gICAgICByZXR1cm4gekluZGV4O1xuICAgIH1cbiAgICBlbGVtZW50MiA9IGVsZW1lbnQyLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgb2Zmc2V0IHBhcmVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIG9mZnNldCBwYXJlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZUluT2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBwYXJlbnRFbGVtZW50UmVjdCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICBwYXJlbnRFbGVtZW50UmVjdC50b3AgPD0gZWxlbWVudFJlY3QudG9wXG4gICAgJiYgZWxlbWVudFJlY3QuYm90dG9tIDw9IHBhcmVudEVsZW1lbnRSZWN0LmJvdHRvbVxuICAgICYmIHBhcmVudEVsZW1lbnRSZWN0LmxlZnQgPD0gZWxlbWVudFJlY3QubGVmdFxuICAgICYmIGVsZW1lbnRSZWN0LnJpZ2h0IDw9IHBhcmVudEVsZW1lbnRSZWN0LnJpZ2h0XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvYWRlZChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3coZWxlbWVudCk7XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEJvZHlFbGVtZW50KSkge1xuICAgIGNvbnN0IHJlYWR5U3RhdGUgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZTtcbiAgICByZXR1cm4gcmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCByZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEltYWdlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jb21wbGV0ZSAmJiBlbGVtZW50Lm5hdHVyYWxXaWR0aCA+IDA7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxFbWJlZEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuICEhZWxlbWVudC5nZXRTVkdEb2N1bWVudCgpO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KSkge1xuICAgIHJldHVybiBlbGVtZW50LnJlbCAhPT0gJ3N0eWxlc2hlZXQnIHx8IGVsZW1lbnQuc2hlZXQgIT09IG51bGw7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MT2JqZWN0RWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudCB8fCAhIWVsZW1lbnQuZ2V0U1ZHRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxTY3JpcHRFbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFN0eWxlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LnNoZWV0O1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudCkpIHtcbiAgICBjb25zdCBSRUFEWV9TVEFURV9MT0FERUQgPSAyO1xuICAgIHJldHVybiBlbGVtZW50LnJlYWR5U3RhdGUgPT09IFJFQURZX1NUQVRFX0xPQURFRDtcbiAgfVxuXG4gIHJldHVybiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQpLmV2ZXJ5KChsb2FkYWJsZUVsZW1lbnQpID0+IGlzTG9hZGVkKGxvYWRhYmxlRWxlbWVudCkpO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGFuY2VzdG9yIG5vZGVzIG9mIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gYWRkIHRoZSBldmVudCBsaXN0ZW5lciB0by5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25BbmNlc3RvclNjcm9sbE9yUmVzaXplKG5vZGU6IE5vZGUsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3cobm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9yczogRXZlbnRUYXJnZXRbXSA9IFtub2RlLm93bmVyRG9jdW1lbnQgPz8gd2luLmRvY3VtZW50LCB3aW5dO1xuXG4gIGxldCBjdXJyZW50Tm9kZTogTm9kZSB8IG51bGwgPSBub2RlO1xuXG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGFuY2VzdG9ycy5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICBsZXQgaXNFdmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgYW5jZXN0b3Igb2YgYW5jZXN0b3JzKSB7XG4gICAgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2FsbGJhY2tTbW9vdGgsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIGFuY2VzdG9ycykge1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2FsbGJhY2tTbW9vdGgoKTogdm9pZCB7XG4gICAgaWYgKGlzRXZlbnRUcmlnZ2VyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc0V2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcblxuICAgIHdpbi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIGFzIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfXB4YDtcbn1cblxuLyoqXG4gKiBXYWl0cyB1bnRpbCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0VW50aWxDb25uZWN0ZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPYnNpZGlhbidzIGBlbC5vbk5vZGVJbnNlcnRlZGAgdXNlcyBhIGBub2RlLWluc2VydGVkYCBDU1Mga2V5ZnJhbWUgZnJvbSBPYnNpZGlhbidzIHN0eWxlc2hlZXQuXG4gICAgLy8gVGhlIGFnbm9zdGljIGVxdWl2YWxlbnQgaW5zdGVhZCBvYnNlcnZlcyB0aGUgZWxlbWVudCdzIGRvY3VtZW50IGZvciBpdCBiZWNvbWluZyBjb25uZWN0ZWQuXG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyAoZ2V0Tm9kZVdpbmRvdyhlbGVtZW50KSkuTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShvd25lckRvY3VtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZiBPYnNpZGlhbidzIGBEb21FbGVtZW50SW5mb2AgdGhhdCBpdHMgYGNyZWF0ZUVsYFxuICogc3VwcG9ydHMgXHUyMDE0IGBjbHNgLCBgdGV4dGAsIGBhdHRyYCwgYHRpdGxlYCwgYW5kIGBwYXJlbnRgL2BwcmVwZW5kYC4gVGhlIGVsZW1lbnQtdHlwZS1zcGVjaWZpY1xuICogZmllbGRzIChgdmFsdWVgLCBgdHlwZWAsIGBwbGFjZWhvbGRlcmAsIGBocmVmYCkgYW5kIHRoZSBgb24qYCBldmVudC1oYW5kbGVyIGtleXMgYXJlIGludGVudGlvbmFsbHlcbiAqIE5PVCBwb3J0ZWQgKG5vIGludGVybmFsIGNhbGxlciBuZWVkcyB0aGVtKTsgZXh0ZW5kIHRoaXMgaWYgYSBjb25zdW1lciBkb2VzIFx1MjAxNCBhbmQgcmV2YWxpZGF0ZSBhZ2FpbnN0XG4gKiBgZW5oYW5jZS5qc2AgKHNlZSB0aGUgYEBmaWxlYCBub3RlIGFuZCBgQ0xBVURFLm1kYCkuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhcHBseSB0aGUgaW5mbyB0by5cbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mbyAob3IgYSBiYXJlIGNsYXNzIHN0cmluZykuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5RG9tRWxlbWVudEluZm8oZWxlbWVudDogSFRNTEVsZW1lbnQsIG86IENyZWF0ZUh0bWxFbGVtZW50SW5mbyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBjb25zdCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQXJyYXkuaXNBcnJheShpbmZvLmNscykgPyBpbmZvLmNscy5qb2luKCcgJykgOiBpbmZvLmNscztcbiAgfVxuICBpZiAoaW5mby50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXRFbGVtZW50VGV4dChlbGVtZW50LCBpbmZvLnRleHQpO1xuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50LCBpbmZvLmF0dHIpO1xuICB9XG4gIGlmIChpbmZvLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50LnRpdGxlID0gaW5mby50aXRsZTtcbiAgfVxuICBpbnNlcnRJbnRvUGFyZW50KGVsZW1lbnQsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIdG1sRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPih0YWc6IEssIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcpOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICBhcHBseURvbUVsZW1lbnRJbmZvKGVsZW1lbnQsIG8pO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgU1ZHRWxlbWVudFRhZ05hbWVNYXA+KHRhZzogSywgbz86IENyZWF0ZVN2Z0VsZW1lbnRJbmZvIHwgc3RyaW5nKTogU1ZHRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRSwgdGFnKTtcbiAgY29uc3QgaW5mbzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGluZm8uY2xzKSkge1xuICAgICAgc3ZnLmNsYXNzTGlzdC5hZGQoLi4uaW5mby5jbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmcuY2xhc3NMaXN0LmFkZChpbmZvLmNscyk7XG4gICAgfVxuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhzdmcsIGluZm8uYXR0cik7XG4gIH1cbiAgaW5zZXJ0SW50b1BhcmVudChzdmcsIGluZm8pO1xuICByZXR1cm4gc3ZnO1xufVxuXG5mdW5jdGlvbiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50W10ge1xuICByZXR1cm4gWy4uLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYm9keSwgaW1nLCBpZnJhbWUsIGVtYmVkLCBsaW5rLCBvYmplY3QsIHNjcmlwdCwgc3R5bGUsIHRyYWNrJyldO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlV2luZG93KG5vZGU6IE5vZGUpOiB0eXBlb2YgZ2xvYmFsVGhpcyAmIFdpbmRvdyB7XG4gIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3ID8/IHdpbmRvdztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SW50b1BhcmVudChlbGVtZW50OiBFbGVtZW50LCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBDcmVhdGVTdmdFbGVtZW50SW5mbyk6IHZvaWQge1xuICBpZiAoIWluZm8ucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLnByZXBlbmQpIHtcbiAgICBpbmZvLnBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgaW5mby5wYXJlbnQuZmlyc3RDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZCAtLSBgcGFyZW50YCBpcyBhIGBOb2RlYCwgYW5kIGBhcHBlbmRgIGlzIGRlY2xhcmVkIG9uIGBQYXJlbnROb2RlYCwgbm90IG9uIGBOb2RlYC5cbiAgICBpbmZvLnBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luc3RhbmNlT2Y8VCBleHRlbmRzIE5vZGU+KG5vZGU6IE5vZGUsIGN0b3I6IGFic3RyYWN0IG5ldyAoLi4uJGFyZ3VtZW50czogbmV2ZXJbXSkgPT4gVCk6IG5vZGUgaXMgVCB7XG4gIC8vIEFnbm9zdGljIHJlaW1wbGVtZW50YXRpb24gb2YgT2JzaWRpYW4ncyBgTm9kZS5wcm90b3R5cGUuaW5zdGFuY2VPZmAgKGVuaGFuY2UuanMpLlxuICAvLyBUaGUgY2FsbGVyIHJlc29sdmVzIGBjdG9yYCBpbiB0aGUgbm9kZSdzIG93biByZWFsbSAodmlhIGBnZXROb2RlV2luZG93YCksIGtlZXBpbmcgaXQgY3Jvc3Mtd2luZG93IHNhZmUuXG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgY3Rvcjtcbn1cblxuZnVuY3Rpb24gc2V0RWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudDogRWxlbWVudCwgYXR0cmlidXRlOiBOb25OdWxsYWJsZTxDcmVhdGVIdG1sRWxlbWVudEluZm9bJ2F0dHInXT4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItdG9nZ2xlLWF0dHJpYnV0ZSAtLSBgdG9nZ2xlQXR0cmlidXRlYCBvbmx5IGV2ZXIgc2V0cyB0aGUgZW1wdHkgc3RyaW5nLCBzbyBpdCBjYW5ub3QgY2FycnkgYFN0cmluZyh2YWx1ZSlgLiBUaGUgcnVsZSBtYXRjaGVzIHRoZSByZW1vdmUvc2V0IHNoYXBlIHdpdGhvdXQgc2VlaW5nIHRoYXQgdGhlIHZhbHVlIGlzIHdoYXQgdGhpcyBicmFuY2ggZXhpc3RzIHRvIHdyaXRlLlxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFbGVtZW50VGV4dChlbGVtZW50OiBIVE1MRWxlbWVudCwgdGV4dDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQge1xuICBpZiAodGV4dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICBlbGVtZW50LnJlcGxhY2VDaGlsZHJlbih0ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFlQSxTQUFTLDBCQUEwQjtBQUNuQyxTQUFTLHlCQUF5QjtBQUVsQyxNQUFNLGdCQUFnQjtBQXFHdEIsZUFBc0IsZUFDcEIsR0FDQSxVQUN5QjtBQUN6QixRQUFNLE1BQU0sa0JBQWtCLE9BQU8sQ0FBQztBQUN0QyxRQUFNLFdBQVcsR0FBRztBQUNwQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixjQUNwQixLQUNBLEdBQ0EsVUFDbUM7QUFDbkMsUUFBTSxVQUFVLGtCQUFrQixLQUFLLENBQUM7QUFDeEMsUUFBTSxXQUFXLE9BQU87QUFDeEIsU0FBTztBQUNUO0FBUUEsZUFBc0Isb0JBQW9CLFVBQXVGO0FBQy9ILFFBQU0sV0FBVyxTQUFTLHVCQUF1QjtBQUNqRCxRQUFNLFdBQVcsUUFBUTtBQUN6QixTQUFPO0FBQ1Q7QUFTQSxlQUFzQixnQkFDcEIsR0FDQSxVQUMwQjtBQUMxQixRQUFNLE9BQU8sa0JBQWtCLFFBQVEsQ0FBQztBQUN4QyxRQUFNLFdBQVcsSUFBSTtBQUNyQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixlQUNwQixLQUNBLEdBQ0EsVUFDa0M7QUFDbEMsUUFBTSxNQUFNLGlCQUFpQixLQUFLLENBQUM7QUFDbkMsUUFBTSxXQUFXLEdBQUc7QUFDcEIsU0FBTztBQUNUO0FBUUEsZUFBc0IsYUFBYSxTQUFpQztBQUNsRSxNQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3JCO0FBQUEsRUFDRjtBQUNBLFFBQU0sTUFBTSxjQUFjLE9BQU87QUFDakMsTUFDRSxhQUFhLFNBQVMsSUFBSSxlQUFlLEtBQ3RDLGFBQWEsU0FBUyxJQUFJLGdCQUFnQixLQUMxQyxhQUFhLFNBQVMsSUFBSSxpQkFBaUIsS0FDM0MsYUFBYSxTQUFTLElBQUksZ0JBQWdCLEtBQzFDLGFBQWEsU0FBUyxJQUFJLGVBQWUsS0FDekMsYUFB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
|
|
@@ -83,12 +83,12 @@ export interface ToJsonOptions {
|
|
|
83
83
|
readonly tokenSubstitutions: Partial<TokenSubstitutions>;
|
|
84
84
|
}
|
|
85
85
|
interface ModuleWithDefaultExport<T> {
|
|
86
|
-
default: T;
|
|
86
|
+
readonly default: T;
|
|
87
87
|
}
|
|
88
88
|
interface TokenSubstitutions {
|
|
89
|
-
circularReference: string;
|
|
90
|
-
maxDepthLimitReached: string;
|
|
91
|
-
toJSONFailed: string;
|
|
89
|
+
readonly circularReference: string;
|
|
90
|
+
readonly maxDepthLimitReached: string;
|
|
91
|
+
readonly toJSONFailed: string;
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* Parameters for {@link setNestedPropertyValue}.
|
|
@@ -190,10 +190,10 @@ export declare function deleteProperty<T extends object>($object: T, propertyNam
|
|
|
190
190
|
* Useful to handle incorrect default export interop between ESM and CJS.
|
|
191
191
|
*
|
|
192
192
|
* @typeParam T - The type of the default export.
|
|
193
|
-
* @param module - The module to extract the default export from.
|
|
193
|
+
* @param $module - The module to extract the default export from.
|
|
194
194
|
* @returns The default export.
|
|
195
195
|
*/
|
|
196
|
-
export declare function extractDefaultExportInterop<T>(module: ModuleWithDefaultExport<T> | T): T;
|
|
196
|
+
export declare function extractDefaultExportInterop<T>($module: ModuleWithDefaultExport<T> | T): T;
|
|
197
197
|
/**
|
|
198
198
|
* Gets all entries of an object.
|
|
199
199
|
*
|