@ultipa-graph/ultipa-driver 6.0.0 → 6.0.4
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/LICENSE +21 -21
- package/dist/client.d.ts +3 -1
- package/dist/client.js +5 -1
- package/dist/config.js +1 -1
- package/dist/connection.js +1 -1
- package/dist/errors.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/printers.js +1 -1
- package/dist/proto/gqldb.proto +689 -632
- package/dist/response.js +1 -1
- package/dist/services/admin-service.d.ts +5 -1
- package/dist/services/admin-service.js +54 -1
- package/dist/services/bulk-import-service.js +2 -5
- package/dist/services/converters.js +1 -1
- package/dist/services/data-service.js +1 -1
- package/dist/services/graph-service.js +1 -1
- package/dist/services/health-service.js +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/query-service.js +1 -1
- package/dist/services/service-context.js +1 -1
- package/dist/services/session-service.js +1 -1
- package/dist/services/transaction-service.js +1 -1
- package/dist/services.js +1 -1
- package/dist/session.js +1 -1
- package/dist/transaction.js +1 -1
- package/dist/types/bulk_import.js +1 -1
- package/dist/types/data_types.js +1 -1
- package/dist/types/enums.js +1 -1
- package/dist/types/graph_models.js +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/metadata.d.ts +47 -0
- package/dist/types/metadata.js +1 -1
- package/dist/types/schema.js +1 -1
- package/dist/types/typed_value.js +1 -1
- package/dist/types/wrappers.js +1 -1
- package/dist/types.js +1 -1
- package/package.json +50 -50
package/dist/response.js
CHANGED
|
@@ -720,4 +720,4 @@ class Response {
|
|
|
720
720
|
}
|
|
721
721
|
}
|
|
722
722
|
exports.Response = Response;
|
|
723
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCxtQ0FBOEk7QUFFOUksa0RBQWtEO0FBQ2xELE1BQWEsR0FBRztJQUVJO0lBQ0E7SUFGbEIsWUFDa0IsTUFBYSxFQUNiLFFBQXdCLEVBQUU7UUFEMUIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLFVBQUssR0FBTCxLQUFLLENBQXFCO0lBQ3pDLENBQUM7SUFFSiw4Q0FBOEM7SUFDOUMsR0FBRyxDQUFDLEtBQWE7UUFDZixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyw4Q0FBOEM7UUFDOUMsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7WUFDbEcsT0FBTyxJQUFBLHNCQUFjLEVBQUMsS0FBbUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsT0FBTyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVDLE9BQU8sb0JBQVksQ0FBQyxLQUFLLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJ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LElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RixJQUFJO1lBQ0osSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7U0FDcEMsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBVTtRQUNsQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxPQUFPLG9CQUFZLENBQUMsSUFBSSxDQUFDO1FBQ3BFLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUztZQUFFLE9BQU8sb0JBQVksQ0FBQyxJQUFJLENBQUM7UUFDekQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQUUsT0FBTyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztRQUMxRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQztRQUNyRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQztRQUNuRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLG9CQUFZLENBQUMsR0FBRyxDQUFDO1FBQ3ZELE9BQU8sb0JBQVksQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBcFhELDRCQW9YQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBSZXNwb25zZSBoYW5kbGluZyBmb3IgR1FMREIgTm9kZS5qcyBkcml2ZXIuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgVHlwZWRWYWx1ZSwgdHlwZWRWYWx1ZVRvSlMsIFByb3BlcnR5VHlwZSwgU2NoZW1hLCBQcm9wZXJ0eURlZiwgVGFibGUsIEhlYWRlciwgQXR0ciwgR3FsZGJOb2RlLCBHcWxkYkVkZ2UsIEdxbGRiUGF0aCB9IGZyb20gJy4vdHlwZXMnO1xyXG5cclxuLyoqIFJlcHJlc2VudHMgYSBzaW5nbGUgcm93IGluIHRoZSBxdWVyeSByZXN1bHQgKi9cclxuZXhwb3J0IGNsYXNzIFJvdyB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVzOiBhbnlbXSxcclxuICAgIHB1YmxpYyByZWFkb25seSB0eXBlczogUHJvcGVydHlUeXBlW10gPSBbXVxyXG4gICkge31cclxuXHJcbiAgLyoqIEdldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCAqL1xyXG4gIGdldChpbmRleDogbnVtYmVyKTogYW55IHtcclxuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uIGluZGV4IG91dCBvZiByYW5nZTogJHtpbmRleH1gKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZXNbaW5kZXhdO1xyXG4gICAgLy8gSWYgdmFsdWUgaXMgYSBUeXBlZFZhbHVlIG9iamVjdCwgY29udmVydCBpdFxyXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHZhbHVlICYmICdkYXRhJyBpbiB2YWx1ZSAmJiAnaXNOdWxsJyBpbiB2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gdHlwZWRWYWx1ZVRvSlModmFsdWUgYXMgVHlwZWRWYWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSBQcm9wZXJ0eVR5cGUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCAqL1xyXG4gIGdldFR5cGUoaW5kZXg6IG51bWJlcik6IFByb3BlcnR5VHlwZSB7XHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHRoaXMudHlwZXMubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBQcm9wZXJ0eVR5cGUuVU5TRVQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy50eXBlc1tpbmRleF07XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4IGFzIGEgc3RyaW5nICovXHJcbiAgZ2V0U3RyaW5nKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXQoaW5kZXgpO1xyXG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuICcnO1xyXG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSByZXR1cm4gdmFsO1xyXG4gICAgcmV0dXJuIFN0cmluZyh2YWwpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCBhcyBhIG51bWJlciAqL1xyXG4gIGdldE51bWJlcihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0KGluZGV4KTtcclxuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xyXG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSByZXR1cm4gdmFsO1xyXG4gICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbCk7XHJcbiAgICBpZiAoaXNOYU4obnVtKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAke3R5cGVvZiB2YWx9IHRvIG51bWJlcmApO1xyXG4gICAgcmV0dXJuIG51bTtcclxuICB9XHJcblxyXG4gIC8qKiBHZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBjb2x1bW4gaW5kZXggYXMgYSBib29sZWFuICovXHJcbiAgZ2V0Qm9vbGVhbihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLmdldChpbmRleCk7XHJcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gdmFsO1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAke3R5cGVvZiB2YWx9IHRvIGJvb2xlYW5gKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBSZXByZXNlbnRzIGEgc2luZ2xlIGNvbHVtbidzIGRhdGEgZnJvbSB0aGUgcmVzcG9uc2UuXHJcbiAqIEFsbG93cyBjaGFpbmluZyBvcGVyYXRpb25zIGxpa2UgcmVzcC5hbGlhcyhcIm5cIikuYXNOb2RlcygpIG9yIHJlc3AuZ2V0KDApLmFzTm9kZXMoKS5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBbGlhc1Jlc3VsdCB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsaWFzTmFtZTogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb2x1bW5JZHg6IG51bWJlcixcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzcG9uc2U6IFJlc3BvbnNlXHJcbiAgKSB7fVxyXG5cclxuICAvKiogR2V0IHRoZSBhbGlhcyBuYW1lICovXHJcbiAgZ2V0IGFsaWFzKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5hbGlhc05hbWU7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSBjb2x1bW4gaW5kZXggKi9cclxuICBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNvbHVtbklkeDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3Qgbm9kZXMgZnJvbSB0aGUgYWxpYXNlZCBjb2x1bW4gd2l0aCBzY2hlbWEgaW5mby5cclxuICAgKiBUaHJvd3MgVHlwZUVycm9yIGlmIHRoZSBjb2x1bW4gY29udGFpbnMgbm9uLU5PREUgdHlwZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb2xsZWN0Tm9kZSh2YWw6IGFueSwgbm9kZXM6IE5vZGVbXSwgc2NoZW1hczogTWFwPHN0cmluZywgU2NoZW1hPik6IHZvaWQge1xyXG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsLmlkID09PSAnc3RyaW5nJyAmJiAnbGFiZWxzJyBpbiB2YWwpIHtcclxuICAgICAgY29uc3Qgbm9kZTogTm9kZSA9IHtcclxuICAgICAgICBpZDogdmFsLmlkLFxyXG4gICAgICAgIGxhYmVsczogdmFsLmxhYmVscyB8fCBbXSxcclxuICAgICAgICBwcm9wZXJ0aWVzOiB2YWwucHJvcGVydGllcyB8fCB7fSxcclxuICAgICAgfTtcclxuICAgICAgbm9kZXMucHVzaChub2RlKTtcclxuICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiBub2RlLmxhYmVscykge1xyXG4gICAgICAgIGlmICghc2NoZW1hcy5oYXMobGFiZWwpKSB7XHJcbiAgICAgICAgICBzY2hlbWFzLnNldChsYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21Ob2RlKGxhYmVsLCBub2RlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbGxlY3RFZGdlKHZhbDogYW55LCBlZGdlczogRWRnZVtdLCBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+KTogdm9pZCB7XHJcbiAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwuaWQgPT09ICdzdHJpbmcnICYmICdsYWJlbCcgaW4gdmFsKSB7XHJcbiAgICAgIGNvbnN0IGVkZ2U6IEVkZ2UgPSB7XHJcbiAgICAgICAgaWQ6IHZhbC5pZCxcclxuICAgICAgICBsYWJlbDogdmFsLmxhYmVsIHx8ICcnLFxyXG4gICAgICAgIGZyb21Ob2RlSWQ6IHZhbC5mcm9tTm9kZUlkIHx8ICcnLFxyXG4gICAgICAgIHRvTm9kZUlkOiB2YWwudG9Ob2RlSWQgfHwgJycsXHJcbiAgICAgICAgcHJvcGVydGllczogdmFsLnByb3BlcnRpZXMgfHwge30sXHJcbiAgICAgIH07XHJcbiAgICAgIGVkZ2VzLnB1c2goZWRnZSk7XHJcbiAgICAgIGlmIChlZGdlLmxhYmVsICYmICFzY2hlbWFzLmhhcyhlZGdlLmxhYmVsKSkge1xyXG4gICAgICAgIHNjaGVtYXMuc2V0KGVkZ2UubGFiZWwsIHRoaXMuYnVpbGRTY2hlbWFGcm9tRWRnZShlZGdlLmxhYmVsLCBlZGdlKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEV4dHJhY3Qgbm9kZXMgZnJvbSB0aGUgYWxpYXNlZCBjb2x1bW4gd2l0aCBzY2hlbWEgaW5mby5cclxuICAgKiBTdXBwb3J0cyBib3RoIGRpcmVjdCBOT0RFIGNvbHVtbnMgYW5kIExJU1Qgb2YgTk9ERSBjb2x1bW5zXHJcbiAgICogKGUuZy4sIGdyb3VwIHZhcmlhYmxlcyBmcm9tIHF1YW50aWZpZWQgcGF0dGVybnMpLlxyXG4gICAqL1xyXG4gIGFzTm9kZXMoKTogTm9kZVJlc3VsdCB7XHJcbiAgICBjb25zdCBub2RlczogTm9kZVtdID0gW107XHJcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIFNjaGVtYT4oKTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcclxuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4ID49IHJvdy52YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKHRoaXMuY29sdW1uSWR4KTtcclxuICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW3RoaXMuY29sdW1uSWR4XTtcclxuICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQgJiYgcmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcclxuICAgICAgICBpdGVtVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghcmF3VmFsdWUgfHwgKHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2lzTnVsbCcgaW4gcmF3VmFsdWUgJiYgcmF3VmFsdWUuaXNOdWxsKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5OT0RFKSB7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0Tm9kZShyb3cuZ2V0KHRoaXMuY29sdW1uSWR4KSwgbm9kZXMsIHNjaGVtYXMpO1xyXG4gICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTElTVCkge1xyXG4gICAgICAgIC8vIExJU1Qgb2YgTk9ERSAoZ3JvdXAgdmFyaWFibGUgZnJvbSBxdWFudGlmaWVkIHBhdHRlcm4pXHJcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbGxlY3ROb2RlKGl0ZW0sIG5vZGVzLCBzY2hlbWFzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcclxuICAgICAgICAgIGBUeXBlIG1pc21hdGNoOiBjb2x1bW4gJyR7dGhpcy5hbGlhc05hbWV9JyAoaW5kZXggJHt0aGlzLmNvbHVtbklkeH0pIGNvbnRhaW5zICR7UHJvcGVydHlUeXBlW2l0ZW1UeXBlXX0sIGV4cGVjdGVkIE5PREUgb3IgTElTVCBvZiBOT0RFYFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBub2Rlcywgc2NoZW1hcyB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXh0cmFjdCBlZGdlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiB3aXRoIHNjaGVtYSBpbmZvLlxyXG4gICAqIFN1cHBvcnRzIGJvdGggZGlyZWN0IEVER0UgY29sdW1ucyBhbmQgTElTVCBvZiBFREdFIGNvbHVtbnNcclxuICAgKiAoZS5nLiwgZ3JvdXAgdmFyaWFibGVzIGZyb20gcXVhbnRpZmllZCBwYXR0ZXJucykuXHJcbiAgICovXHJcbiAgYXNFZGdlcygpOiBFZGdlUmVzdWx0IHtcclxuICAgIGNvbnN0IGVkZ2VzOiBFZGdlW10gPSBbXTtcclxuICAgIGNvbnN0IHNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgU2NoZW1hPigpO1xyXG5cclxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xyXG4gICAgICBpZiAodGhpcy5jb2x1bW5JZHggPj0gcm93LnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGl0ZW1UeXBlID0gcm93LmdldFR5cGUodGhpcy5jb2x1bW5JZHgpO1xyXG4gICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbdGhpcy5jb2x1bW5JZHhdO1xyXG4gICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xyXG4gICAgICAgIGl0ZW1UeXBlID0gcmF3VmFsdWUudHlwZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFyYXdWYWx1ZSB8fCAodHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAnaXNOdWxsJyBpbiByYXdWYWx1ZSAmJiByYXdWYWx1ZS5pc051bGwpKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkVER0UpIHtcclxuICAgICAgICB0aGlzLmNvbGxlY3RFZGdlKHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpLCBlZGdlcywgc2NoZW1hcyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5MSVNUKSB7XHJcbiAgICAgICAgLy8gTElTVCBvZiBFREdFIChncm91cCB2YXJpYWJsZSBmcm9tIHF1YW50aWZpZWQgcGF0dGVybilcclxuICAgICAgICBjb25zdCBsaXN0ID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCk7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcclxuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdEVkZ2UoaXRlbSwgZWRnZXMsIHNjaGVtYXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxyXG4gICAgICAgICAgYFR5cGUgbWlzbWF0Y2g6IGNvbHVtbiAnJHt0aGlzLmFsaWFzTmFtZX0nIChpbmRleCAke3RoaXMuY29sdW1uSWR4fSkgY29udGFpbnMgJHtQcm9wZXJ0eVR5cGVbaXRlbVR5cGVdfSwgZXhwZWN0ZWQgRURHRSBvciBMSVNUIG9mIEVER0VgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IGVkZ2VzLCBzY2hlbWFzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBFeHRyYWN0IHBhdGhzIGZyb20gdGhlIGFsaWFzZWQgY29sdW1uLlxyXG4gICAqIFRocm93cyBUeXBlRXJyb3IgaWYgdGhlIGNvbHVtbiBjb250YWlucyBub24tUEFUSCB0eXBlcy5cclxuICAgKi9cclxuICBhc1BhdGhzKCk6IFBhdGhbXSB7XHJcbiAgICBjb25zdCBwYXRoczogUGF0aFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yZXNwb25zZS5yb3dzKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA+PSByb3cudmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayB0eXBlIGZyb20gdHlwZXMgYXJyYXkgb3IgZnJvbSBUeXBlZFZhbHVlIG9iamVjdFxyXG4gICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XHJcbiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93LnZhbHVlc1t0aGlzLmNvbHVtbklkeF07XHJcbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XHJcbiAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTa2lwIG51bGwgdmFsdWVzXHJcbiAgICAgIGlmICghcmF3VmFsdWUgfHwgKHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2lzTnVsbCcgaW4gcmF3VmFsdWUgJiYgcmF3VmFsdWUuaXNOdWxsKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBUeXBlIGNoZWNraW5nOiBtdXN0IGJlIFBBVEggdHlwZVxyXG4gICAgICBpZiAoaXRlbVR5cGUgIT09IFByb3BlcnR5VHlwZS5QQVRIKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcclxuICAgICAgICAgIGBUeXBlIG1pc21hdGNoOiBjb2x1bW4gJyR7dGhpcy5hbGlhc05hbWV9JyAoaW5kZXggJHt0aGlzLmNvbHVtbklkeH0pIGNvbnRhaW5zICR7UHJvcGVydHlUeXBlW2l0ZW1UeXBlXX0sIGV4cGVjdGVkIFBBVEhgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ29udmVydCBUeXBlZFZhbHVlIHRvIEdxbGRiUGF0aFxyXG4gICAgICBjb25zdCB2YWwgPSByb3cuZ2V0KHRoaXMuY29sdW1uSWR4KSBhcyBHcWxkYlBhdGg7XHJcbiAgICAgIGlmICh2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwubm9kZXMpKSB7XHJcbiAgICAgICAgLy8gQ29udmVydCBHcWxkYk5vZGUvR3FsZGJFZGdlIHRvIE5vZGUvRWRnZVxyXG4gICAgICAgIGNvbnN0IG5vZGVzOiBOb2RlW10gPSAodmFsLm5vZGVzIHx8IFtdKS5tYXAoKG46IEdxbGRiTm9kZSkgPT4gKHtcclxuICAgICAgICAgIGlkOiBuLmlkIHx8ICcnLFxyXG4gICAgICAgICAgbGFiZWxzOiBuLmxhYmVscyB8fCBbXSxcclxuICAgICAgICAgIHByb3BlcnRpZXM6IG4ucHJvcGVydGllcyB8fCB7fSxcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgY29uc3QgZWRnZXM6IEVkZ2VbXSA9ICh2YWwuZWRnZXMgfHwgW10pLm1hcCgoZTogR3FsZGJFZGdlKSA9PiAoe1xyXG4gICAgICAgICAgaWQ6IGUuaWQgfHwgJycsXHJcbiAgICAgICAgICBsYWJlbDogZS5sYWJlbCB8fCAnJyxcclxuICAgICAgICAgIGZyb21Ob2RlSWQ6IGUuZnJvbU5vZGVJZCB8fCAnJyxcclxuICAgICAgICAgIHRvTm9kZUlkOiBlLnRvTm9kZUlkIHx8ICcnLFxyXG4gICAgICAgICAgcHJvcGVydGllczogZS5wcm9wZXJ0aWVzIHx8IHt9LFxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICBwYXRocy5wdXNoKHsgbm9kZXMsIGVkZ2VzIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdGhzO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbnZlcnQgdGhlIGFsaWFzZWQgY29sdW1uIHRvIGEgc2luZ2xlLWNvbHVtbiB0YWJsZSAqL1xyXG4gIGFzVGFibGUoKTogVGFibGUge1xyXG4gICAgLy8gQ2hlY2sgaWYgZmlyc3Qgbm9uLW51bGwgdmFsdWUgaXMgYSBHcWxkYlRhYmxlIOKAlCBpZiBzbywgdW53cmFwIGl0XHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcclxuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKHRoaXMuY29sdW1uSWR4KTtcclxuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5UQUJMRSkge1xyXG4gICAgICAgICAgY29uc3QgdmFsID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCkgYXMgYW55O1xyXG4gICAgICAgICAgaWYgKHZhbCAmJiAnY29sdW1ucycgaW4gdmFsICYmICdyb3dzJyBpbiB2YWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW53cmFwR3FsZGJUYWJsZSh2YWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBicmVhazsgLy8gb25seSBjaGVjayBmaXJzdCByb3dcclxuICAgIH1cclxuXHJcbiAgICAvLyBGYWxsYmFjazogZ2VuZXJpYyBzaW5nbGUtY29sdW1uIHRhYmxlXHJcbiAgICBjb25zdCBoZWFkZXJzOiBIZWFkZXJbXSA9IFt7XHJcbiAgICAgIG5hbWU6IHRoaXMuYWxpYXNOYW1lLFxyXG4gICAgICB0eXBlOiBQcm9wZXJ0eVR5cGUuVU5TRVQsXHJcbiAgICB9XTtcclxuXHJcbiAgICBpZiAodGhpcy5yZXNwb25zZS5yb3dzLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yZXNwb25zZS5yb3dzKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XHJcbiAgICAgICAgICBpZiAodHlwZSAhPT0gUHJvcGVydHlUeXBlLlVOU0VUKSB7XHJcbiAgICAgICAgICAgIGhlYWRlcnNbMF0udHlwZSA9IHR5cGU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHRhYmxlUm93czogYW55W11bXSA9IHRoaXMucmVzcG9uc2Uucm93cy5tYXAocm93ID0+IHtcclxuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gW3Jvdy5nZXQodGhpcy5jb2x1bW5JZHgpXTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gW251bGxdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHsgbmFtZTogJycsIGhlYWRlcnMsIHJvd3M6IHRhYmxlUm93cyB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1bndyYXBHcWxkYlRhYmxlKGd0OiB7IGNvbHVtbnM6IHN0cmluZ1tdOyByb3dzOiBhbnlbXVtdIH0pOiBUYWJsZSB7XHJcbiAgICBjb25zdCBoZWFkZXJzOiBIZWFkZXJbXSA9IGd0LmNvbHVtbnMubWFwKChjb2wsIGkpID0+IHtcclxuICAgICAgbGV0IGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuVU5TRVQ7XHJcbiAgICAgIGlmIChndC5yb3dzLmxlbmd0aCA+IDAgJiYgaSA8IGd0LnJvd3NbMF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgdiA9IGd0LnJvd3NbMF1baV07XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykgY29sVHlwZSA9IE51bWJlci5pc0ludGVnZXIodikgPyBQcm9wZXJ0eVR5cGUuSU5UNjQgOiBQcm9wZXJ0eVR5cGUuRE9VQkxFO1xyXG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5TVFJJTkc7XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5CT09MO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB7IG5hbWU6IGNvbCwgdHlwZTogY29sVHlwZSB9O1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLmFsaWFzTmFtZSwgaGVhZGVycywgcm93czogZ3Qucm93cyB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIEV4dHJhY3Qgc2NhbGFyIG9yIGxpc3QgYXR0cmlidXRlIHZhbHVlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiAqL1xyXG4gIGFzQXR0cigpOiBBdHRyIHtcclxuICAgIGNvbnN0IHZhbHVlczogYW55W10gPSBbXTtcclxuICAgIGxldCBhdHRyVHlwZSA9IFByb3BlcnR5VHlwZS5VTlNFVDtcclxuXHJcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcclxuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAvLyBUcnkgdG8gZ2V0IHR5cGUgZnJvbSByb3cudHlwZXMgZmlyc3QsIHRoZW4gZnJvbSBUeXBlZFZhbHVlIG9iamVjdFxyXG4gICAgICAgIGlmIChhdHRyVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUKSB7XHJcbiAgICAgICAgICBhdHRyVHlwZSA9IHJvdy5nZXRUeXBlKHRoaXMuY29sdW1uSWR4KTtcclxuICAgICAgICAgIGlmIChhdHRyVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93LnZhbHVlc1t0aGlzLmNvbHVtbklkeF07XHJcbiAgICAgICAgICAgIGlmIChyYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGF0dHJUeXBlID0gcmF3VmFsdWUudHlwZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpOyAgLy8gVXNlIGdldCgpIHRvIGNvbnZlcnQgVHlwZWRWYWx1ZVxyXG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IG5hbWU6IHRoaXMuYWxpYXNOYW1lLCB0eXBlOiBhdHRyVHlwZSwgdmFsdWVzIH07XHJcbiAgfVxyXG5cclxuICAvKiogRXh0cmFjdCByYXcgSmF2YVNjcmlwdCB2YWx1ZXMgZnJvbSB0aGUgYWxpYXNlZCBjb2x1bW4gKi9cclxuICBhc1ZhbHVlcygpOiBhbnlbXSB7XHJcbiAgICBjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yZXNwb25zZS5yb3dzKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA8IHJvdy52YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgdmFsdWVzLnB1c2gocm93LmdldCh0aGlzLmNvbHVtbklkeCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHZhbHVlcztcclxuICB9XHJcblxyXG4gIC8vIEhlbHBlciBtZXRob2RzXHJcblxyXG4gIHByaXZhdGUgYnVpbGRTY2hlbWFGcm9tTm9kZShsYWJlbDogc3RyaW5nLCBub2RlOiBOb2RlKTogU2NoZW1hIHtcclxuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVmW10gPSBPYmplY3QuZW50cmllcyhub2RlLnByb3BlcnRpZXMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcclxuICAgICAgbmFtZSxcclxuICAgICAgdHlwZTogdGhpcy5pbmZlclByb3BlcnR5VHlwZSh2YWx1ZSksXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4geyBuYW1lOiBsYWJlbCwgcHJvcGVydGllcyB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFNjaGVtYUZyb21FZGdlKGxhYmVsOiBzdHJpbmcsIGVkZ2U6IEVkZ2UpOiBTY2hlbWEge1xyXG4gICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlEZWZbXSA9IE9iamVjdC5lbnRyaWVzKGVkZ2UucHJvcGVydGllcykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiAoe1xyXG4gICAgICBuYW1lLFxyXG4gICAgICB0eXBlOiB0aGlzLmluZmVyUHJvcGVydHlUeXBlKHZhbHVlKSxcclxuICAgIH0pKTtcclxuICAgIHJldHVybiB7IG5hbWU6IGxhYmVsLCBwcm9wZXJ0aWVzIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluZmVyUHJvcGVydHlUeXBlKHZhbHVlOiBhbnkpOiBQcm9wZXJ0eVR5cGUge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBQcm9wZXJ0eVR5cGUuTlVMTDtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykgcmV0dXJuIFByb3BlcnR5VHlwZS5CT09MO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpID8gUHJvcGVydHlUeXBlLklOVDY0IDogUHJvcGVydHlUeXBlLkRPVUJMRTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gUHJvcGVydHlUeXBlLlNUUklORztcclxuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSByZXR1cm4gUHJvcGVydHlUeXBlLkJMT0I7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBQcm9wZXJ0eVR5cGUuTElTVDtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gUHJvcGVydHlUeXBlLk1BUDtcclxuICAgIHJldHVybiBQcm9wZXJ0eVR5cGUuVU5TRVQ7XHJcbiAgfVxyXG59XHJcblxyXG4vKiogUmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGEgR1FMIHF1ZXJ5ICovXHJcbmV4cG9ydCBjbGFzcyBSZXNwb25zZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29sdW1uczogc3RyaW5nW10sXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93czogUm93W10sXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93Q291bnQ6IG51bWJlcixcclxuICAgIHB1YmxpYyByZWFkb25seSBoYXNNb3JlOiBib29sZWFuLFxyXG4gICAgcHVibGljIHJlYWRvbmx5IHdhcm5pbmdzOiBzdHJpbmdbXSxcclxuICAgIHB1YmxpYyByZWFkb25seSByb3dzQWZmZWN0ZWQ6IG51bWJlciA9IDBcclxuICApIHt9XHJcblxyXG4gIC8qKiBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaGFzIG5vIHJvd3MgKi9cclxuICBpc0VtcHR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm93cy5sZW5ndGggPT09IDA7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSBmaXJzdCByb3cgKi9cclxuICBmaXJzdCgpOiBSb3cgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMucm93c1swXTtcclxuICB9XHJcblxyXG4gIC8qKiBHZXQgdGhlIGxhc3Qgcm93ICovXHJcbiAgbGFzdCgpOiBSb3cgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMucm93c1t0aGlzLnJvd3MubGVuZ3RoIC0gMV07XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSB2YWx1ZSBmb3IgYSBjb2x1bW4gYnkgbmFtZSAqL1xyXG4gIGdldEJ5TmFtZShyb3c6IFJvdywgY29sdW1uTmFtZTogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29sdW1uTmFtZSk7XHJcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uIG5vdCBmb3VuZDogJHtjb2x1bW5OYW1lfWApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvdy5nZXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEl0ZXJhdGUgb3ZlciBhbGwgcm93cyB3aXRoIGEgY2FsbGJhY2sgKi9cclxuICBmb3JFYWNoKGZuOiAocm93OiBSb3csIGluZGV4OiBudW1iZXIpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMucm93cy5mb3JFYWNoKGZuKTtcclxuICB9XHJcblxyXG4gIC8qKiBUcmFuc2Zvcm0gZWFjaCByb3cgdXNpbmcgYSBjYWxsYmFjayAqL1xyXG4gIG1hcDxUPihmbjogKHJvdzogUm93KSA9PiBUKTogVFtdIHtcclxuICAgIHJldHVybiB0aGlzLnJvd3MubWFwKGZuKTtcclxuICB9XHJcblxyXG4gIC8qKiBDb252ZXJ0IHRoZSByZXNwb25zZSB0byBhbiBhcnJheSBvZiBvYmplY3RzICovXHJcbiAgdG9PYmplY3RzKCk6IFJlY29yZDxzdHJpbmcsIGFueT5bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3dzLm1hcChyb3cgPT4ge1xyXG4gICAgICBjb25zdCBvYmo6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbCwgaSkgPT4ge1xyXG4gICAgICAgIC8vIEFkZCBib3VuZGFyeSBjaGVjayB0byBoYW5kbGUgbWlzbWF0Y2hlZCBjb2x1bW5zL3ZhbHVlc1xyXG4gICAgICAgIG9ialtjb2xdID0gaSA8IHJvdy52YWx1ZXMubGVuZ3RoID8gcm93LmdldChpKSA6IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKiogQ29udmVydCB0aGUgcmVzcG9uc2UgdG8gSlNPTiAqL1xyXG4gIHRvSlNPTigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9PYmplY3RzKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEdldCB0aGUgc2luZ2xlIHZhbHVlIGZyb20gYSBzaW5nbGUtcm93LCBzaW5nbGUtY29sdW1uIHJlc3BvbnNlICovXHJcbiAgc2luZ2xlVmFsdWUoKTogYW55IHtcclxuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHNpbmdsZSByb3csIGdvdCAke3RoaXMucm93cy5sZW5ndGh9YCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yb3dzWzBdLnZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMucm93c1swXS52YWx1ZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIHNpbmdsZSBjb2x1bW4sIGdvdCAke3RoaXMucm93c1swXS52YWx1ZXMubGVuZ3RofWApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMucm93c1swXS5nZXQoMCk7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSBzaW5nbGUgbnVtYmVyIHZhbHVlICovXHJcbiAgc2luZ2xlTnVtYmVyKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLnNpbmdsZVZhbHVlKCk7XHJcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcclxuICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbDtcclxuICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWwpO1xyXG4gICAgaWYgKGlzTmFOKG51bSkpIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGNvbnZlcnQgJHt0eXBlb2YgdmFsfSB0byBudW1iZXJgKTtcclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSBzaW5nbGUgc3RyaW5nIHZhbHVlICovXHJcbiAgc2luZ2xlU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB2YWwgPSB0aGlzLnNpbmdsZVZhbHVlKCk7XHJcbiAgICBpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJyc7XHJcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHJldHVybiB2YWw7XHJcbiAgICByZXR1cm4gU3RyaW5nKHZhbCk7XHJcbiAgfVxyXG5cclxuICAvKiogSXRlcmF0b3Igc3VwcG9ydCAqL1xyXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhdG9yPFJvdz4ge1xyXG4gICAgcmV0dXJuIHRoaXMucm93c1tTeW1ib2wuaXRlcmF0b3JdKCk7XHJcbiAgfVxyXG5cclxuICAvKiogR2V0IHRoZSBudW1iZXIgb2Ygcm93cyAqL1xyXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnJvd3MubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGFuIEFsaWFzUmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiBuYW1lLlxyXG4gICAqIFVzZSB0aGlzIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGEgc3BlY2lmaWMgY29sdW1uIGJ5IG5hbWUuXHJcbiAgICogRXhhbXBsZTogcmVzcC5hbGlhcyhcIm5cIikuYXNOb2RlcygpXHJcbiAgICovXHJcbiAgYWxpYXMoY29sdW1uTmFtZTogc3RyaW5nKTogQWxpYXNSZXN1bHQge1xyXG4gICAgY29uc3QgY29sSWR4ID0gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29sdW1uTmFtZSk7XHJcbiAgICBpZiAoY29sSWR4ID09PSAtMSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBhbGlhcyBub3QgZm91bmQ6ICR7Y29sdW1uTmFtZX1gKTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgQWxpYXNSZXN1bHQoY29sdW1uTmFtZSwgY29sSWR4LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhbiBBbGlhc1Jlc3VsdCBmb3IgdGhlIGNvbHVtbiBhdCB0aGUgc3BlY2lmaWVkIGluZGV4LlxyXG4gICAqIFVzZSB0aGlzIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGEgc3BlY2lmaWMgY29sdW1uIGJ5IGluZGV4LlxyXG4gICAqIEV4YW1wbGU6IHJlc3AuZ2V0KDApLmFzTm9kZXMoKVxyXG4gICAqL1xyXG4gIGdldChpbmRleDogbnVtYmVyKTogQWxpYXNSZXN1bHQge1xyXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29sdW1uIGluZGV4IG91dCBvZiByYW5nZTogJHtpbmRleH0gKHRvdGFsOiAke3RoaXMuY29sdW1ucy5sZW5ndGh9KWApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBBbGlhc1Jlc3VsdCh0aGlzLmNvbHVtbnNbaW5kZXhdLCBpbmRleCwgdGhpcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cclxuICAgKiBFeHRyYWN0IG5vZGVzIGZyb20gcmVzcG9uc2Ugd2l0aCBzY2hlbWEgaW5mby5cclxuICAgKiBTdXBwb3J0cyBib3RoIE5PREUgYW5kIExJU1Qgb2YgTk9ERSBjb2x1bW5zLlxyXG4gICAqL1xyXG4gIGFzTm9kZXMoKTogTm9kZVJlc3VsdCB7XHJcbiAgICBjb25zdCBub2RlczogTm9kZVtdID0gW107XHJcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIFNjaGVtYT4oKTtcclxuXHJcbiAgICBjb25zdCBjb2xsZWN0Tm9kZSA9ICh2YWw6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwuaWQgPT09ICdzdHJpbmcnICYmICdsYWJlbHMnIGluIHZhbCkge1xyXG4gICAgICAgIGNvbnN0IG5vZGU6IE5vZGUgPSB7XHJcbiAgICAgICAgICBpZDogdmFsLmlkLFxyXG4gICAgICAgICAgbGFiZWxzOiB2YWwubGFiZWxzIHx8IFtdLFxyXG4gICAgICAgICAgcHJvcGVydGllczogdmFsLnByb3BlcnRpZXMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGFiZWwgb2Ygbm9kZS5sYWJlbHMpIHtcclxuICAgICAgICAgIGlmICghc2NoZW1hcy5oYXMobGFiZWwpKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYXMuc2V0KGxhYmVsLCB0aGlzLmJ1aWxkU2NoZW1hRnJvbU5vZGUobGFiZWwsIG5vZGUpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKGkpO1xyXG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93LnZhbHVlc1tpXTtcclxuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xyXG4gICAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTk9ERSkge1xyXG4gICAgICAgICAgY29sbGVjdE5vZGUocm93LmdldChpKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkxJU1QpIHtcclxuICAgICAgICAgIGNvbnN0IGxpc3QgPSByb3cuZ2V0KGkpO1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcclxuICAgICAgICAgICAgICBjb2xsZWN0Tm9kZShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IG5vZGVzLCBzY2hlbWFzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cclxuICAgKiBFeHRyYWN0IGVkZ2VzIGZyb20gcmVzcG9uc2Ugd2l0aCBzY2hlbWEgaW5mby5cclxuICAgKiBTdXBwb3J0cyBib3RoIEVER0UgYW5kIExJU1Qgb2YgRURHRSBjb2x1bW5zLlxyXG4gICAqL1xyXG4gIGFzRWRnZXMoKTogRWRnZVJlc3VsdCB7XHJcbiAgICBjb25zdCBlZGdlczogRWRnZVtdID0gW107XHJcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIFNjaGVtYT4oKTtcclxuXHJcbiAgICBjb25zdCBjb2xsZWN0RWRnZSA9ICh2YWw6IGFueSkgPT4ge1xyXG4gICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwuaWQgPT09ICdzdHJpbmcnICYmICdsYWJlbCcgaW4gdmFsKSB7XHJcbiAgICAgICAgY29uc3QgZWRnZTogRWRnZSA9IHtcclxuICAgICAgICAgIGlkOiB2YWwuaWQsXHJcbiAgICAgICAgICBsYWJlbDogdmFsLmxhYmVsIHx8ICcnLFxyXG4gICAgICAgICAgZnJvbU5vZGVJZDogdmFsLmZyb21Ob2RlSWQgfHwgJycsXHJcbiAgICAgICAgICB0b05vZGVJZDogdmFsLnRvTm9kZUlkIHx8ICcnLFxyXG4gICAgICAgICAgcHJvcGVydGllczogdmFsLnByb3BlcnRpZXMgfHwge30sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xyXG4gICAgICAgIGlmIChlZGdlLmxhYmVsICYmICFzY2hlbWFzLmhhcyhlZGdlLmxhYmVsKSkge1xyXG4gICAgICAgICAgc2NoZW1hcy5zZXQoZWRnZS5sYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21FZGdlKGVkZ2UubGFiZWwsIGVkZ2UpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKGkpO1xyXG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93LnZhbHVlc1tpXTtcclxuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xyXG4gICAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuRURHRSkge1xyXG4gICAgICAgICAgY29sbGVjdEVkZ2Uocm93LmdldChpKSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkxJU1QpIHtcclxuICAgICAgICAgIGNvbnN0IGxpc3QgPSByb3cuZ2V0KGkpO1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcclxuICAgICAgICAgICAgICBjb2xsZWN0RWRnZShpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IGVkZ2VzLCBzY2hlbWFzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cclxuICAgKiBFeHRyYWN0IHBhdGhzIGZyb20gcmVzcG9uc2UuXHJcbiAgICogUGF0aHMgYXJlIGlkZW50aWZpZWQgYnkgUHJvcGVydHlUeXBlLlBBVEggdHlwZSBpbiB0aGUgVHlwZWRWYWx1ZS5cclxuICAgKi9cclxuICBhc1BhdGhzKCk6IFBhdGhbXSB7XHJcbiAgICBjb25zdCBwYXRoczogUGF0aFtdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LnZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vIENoZWNrIHR5cGUgZnJvbSB0eXBlcyBhcnJheSBvciBmcm9tIFR5cGVkVmFsdWUgb2JqZWN0XHJcbiAgICAgICAgbGV0IGl0ZW1UeXBlID0gcm93LmdldFR5cGUoaSk7XHJcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW2ldO1xyXG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XHJcbiAgICAgICAgICBpdGVtVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5QQVRIKSB7XHJcbiAgICAgICAgICAvLyBDb252ZXJ0IFR5cGVkVmFsdWUgdG8gR3FsZGJQYXRoXHJcbiAgICAgICAgICBjb25zdCB2YWwgPSByb3cuZ2V0KGkpIGFzIEdxbGRiUGF0aDtcclxuICAgICAgICAgIGlmICh2YWwgJiYgQXJyYXkuaXNBcnJheSh2YWwubm9kZXMpKSB7XHJcbiAgICAgICAgICAgIC8vIENvbnZlcnQgR3FsZGJOb2RlL0dxbGRiRWRnZSB0byBOb2RlL0VkZ2VcclxuICAgICAgICAgICAgY29uc3Qgbm9kZXM6IE5vZGVbXSA9ICh2YWwubm9kZXMgfHwgW10pLm1hcCgobjogR3FsZGJOb2RlKSA9PiAoe1xyXG4gICAgICAgICAgICAgIGlkOiBuLmlkIHx8ICcnLFxyXG4gICAgICAgICAgICAgIGxhYmVsczogbi5sYWJlbHMgfHwgW10sXHJcbiAgICAgICAgICAgICAgcHJvcGVydGllczogbi5wcm9wZXJ0aWVzIHx8IHt9LFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VzOiBFZGdlW10gPSAodmFsLmVkZ2VzIHx8IFtdKS5tYXAoKGU6IEdxbGRiRWRnZSkgPT4gKHtcclxuICAgICAgICAgICAgICBpZDogZS5pZCB8fCAnJyxcclxuICAgICAgICAgICAgICBsYWJlbDogZS5sYWJlbCB8fCAnJyxcclxuICAgICAgICAgICAgICBmcm9tTm9kZUlkOiBlLmZyb21Ob2RlSWQgfHwgJycsXHJcbiAgICAgICAgICAgICAgdG9Ob2RlSWQ6IGUudG9Ob2RlSWQgfHwgJycsXHJcbiAgICAgICAgICAgICAgcHJvcGVydGllczogZS5wcm9wZXJ0aWVzIHx8IHt9LFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIHBhdGhzLnB1c2goeyBub2RlcywgZWRnZXMgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdGhzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFsaWFzKCkgb3IgZ2V0KCkgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXHJcbiAgICogUmV0dXJuIHJlc3BvbnNlIGFzIGdlbmVyaWMgdGFibGUuXHJcbiAgICogSWYgcmVzcG9uc2UgaXMgYSBzaW5nbGUgVEFCTEUgY29sdW1uLCB1bndyYXBzIHRoZSBHcWxkYlRhYmxlIGludG8gcHJvcGVyIGhlYWRlcnMvcm93cy5cclxuICAgKi9cclxuICBhc1RhYmxlKCk6IFRhYmxlIHtcclxuICAgIC8vIElmIHNpbmdsZSBjb2x1bW4gb2YgVEFCTEUgdHlwZSwgdW53cmFwIEdxbGRiVGFibGVcclxuICAgIGlmICh0aGlzLmNvbHVtbnMubGVuZ3RoID09PSAxICYmIHRoaXMucm93cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1UeXBlID0gdGhpcy5yb3dzWzBdLmdldFR5cGUoMCk7XHJcbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlRBQkxFKSB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gdGhpcy5yb3dzWzBdLmdldCgwKSBhcyBhbnk7XHJcbiAgICAgICAgaWYgKHZhbCAmJiAnY29sdW1ucycgaW4gdmFsICYmICdyb3dzJyBpbiB2YWwpIHtcclxuICAgICAgICAgIGNvbnN0IGd0ID0gdmFsIGFzIHsgY29sdW1uczogc3RyaW5nW107IHJvd3M6IGFueVtdW10gfTtcclxuICAgICAgICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcltdID0gZ3QuY29sdW1ucy5tYXAoKGNvbDogc3RyaW5nLCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgbGV0IGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuVU5TRVQ7XHJcbiAgICAgICAgICAgIGlmIChndC5yb3dzLmxlbmd0aCA+IDAgJiYgaSA8IGd0LnJvd3NbMF0ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdiA9IGd0LnJvd3NbMF1baV07XHJcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykgY29sVHlwZSA9IE51bWJlci5pc0ludGVnZXIodikgPyBQcm9wZXJ0eVR5cGUuSU5UNjQgOiBQcm9wZXJ0eVR5cGUuRE9VQkxFO1xyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5TVFJJTkc7XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdib29sZWFuJykgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5CT09MO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IGNvbCwgdHlwZTogY29sVHlwZSB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4geyBuYW1lOiB0aGlzLmNvbHVtbnNbMF0sIGhlYWRlcnMsIHJvd3M6IGd0LnJvd3MgfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBGYWxsYmFjazogZ2VuZXJpYyBtdWx0aS1jb2x1bW4gdGFibGVcclxuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcltdID0gdGhpcy5jb2x1bW5zLm1hcChjb2wgPT4gKHtcclxuICAgICAgbmFtZTogY29sLFxyXG4gICAgICB0eXBlOiBQcm9wZXJ0eVR5cGUuVU5TRVQsXHJcbiAgICB9KSk7XHJcblxyXG4gICAgY29uc3QgdGFibGVSb3dzOiBhbnlbXVtdID0gdGhpcy5yb3dzLm1hcChyb3cgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLm1hcCgoXywgaSkgPT4gKGkgPCByb3cudmFsdWVzLmxlbmd0aCA/IHJvdy5nZXQoaSkgOiBudWxsKSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4geyBuYW1lOiAnJywgaGVhZGVycywgcm93czogdGFibGVSb3dzIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cclxuICAgKiBFeHRyYWN0IHNjYWxhciBvciBsaXN0IGF0dHJpYnV0ZSB2YWx1ZXNcclxuICAgKi9cclxuICBhc0F0dHIoY29sdW1uTmFtZTogc3RyaW5nKTogQXR0ciB7XHJcbiAgICBjb25zdCBjb2xJbmRleCA9IHRoaXMuY29sdW1ucy5pbmRleE9mKGNvbHVtbk5hbWUpO1xyXG4gICAgaWYgKGNvbEluZGV4ID09PSAtMSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBub3QgZm91bmQ6ICR7Y29sdW1uTmFtZX1gKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XHJcbiAgICBsZXQgYXR0clR5cGUgPSBQcm9wZXJ0eVR5cGUuVU5TRVQ7XHJcblxyXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XHJcbiAgICAgIGlmIChjb2xJbmRleCA8IHJvdy52YWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgLy8gVHJ5IHRvIGdldCB0eXBlIGZyb20gcm93LnR5cGVzIGZpcnN0LCB0aGVuIGZyb20gVHlwZWRWYWx1ZSBvYmplY3RcclxuICAgICAgICBpZiAoYXR0clR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xyXG4gICAgICAgICAgYXR0clR5cGUgPSByb3cuZ2V0VHlwZShjb2xJbmRleCk7XHJcbiAgICAgICAgICBpZiAoYXR0clR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xyXG4gICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbY29sSW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAocmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcclxuICAgICAgICAgICAgICBhdHRyVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3cuZ2V0KGNvbEluZGV4KTsgIC8vIFVzZSBnZXQoKSB0byBjb252ZXJ0IFR5cGVkVmFsdWVcclxuICAgICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyBuYW1lOiBjb2x1bW5OYW1lLCB0eXBlOiBhdHRyVHlwZSwgdmFsdWVzIH07XHJcbiAgfVxyXG5cclxuICAvLyBIZWxwZXIgbWV0aG9kc1xyXG5cclxuICBwcml2YXRlIGJ1aWxkU2NoZW1hRnJvbU5vZGUobGFiZWw6IHN0cmluZywgbm9kZTogTm9kZSk6IFNjaGVtYSB7XHJcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eURlZltdID0gT2JqZWN0LmVudHJpZXMobm9kZS5wcm9wZXJ0aWVzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7XHJcbiAgICAgIG5hbWUsXHJcbiAgICAgIHR5cGU6IHRoaXMuaW5mZXJQcm9wZXJ0eVR5cGUodmFsdWUpLFxyXG4gICAgfSkpO1xyXG4gICAgcmV0dXJuIHsgbmFtZTogbGFiZWwsIHByb3BlcnRpZXMgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRTY2hlbWFGcm9tRWRnZShsYWJlbDogc3RyaW5nLCBlZGdlOiBFZGdlKTogU2NoZW1hIHtcclxuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVmW10gPSBPYmplY3QuZW50cmllcyhlZGdlLnByb3BlcnRpZXMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcclxuICAgICAgbmFtZSxcclxuICAgICAgdHlwZTogdGhpcy5pbmZlclByb3BlcnR5VHlwZSh2YWx1ZSksXHJcbiAgICB9KSk7XHJcbiAgICByZXR1cm4geyBuYW1lOiBsYWJlbCwgcHJvcGVydGllcyB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbmZlclByb3BlcnR5VHlwZSh2YWx1ZTogYW55KTogUHJvcGVydHlUeXBlIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gUHJvcGVydHlUeXBlLk5VTEw7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiBQcm9wZXJ0eVR5cGUuQk9PTDtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSA/IFByb3BlcnR5VHlwZS5JTlQ2NCA6IFByb3BlcnR5VHlwZS5ET1VCTEU7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgcmV0dXJuIFByb3BlcnR5VHlwZS5TVFJJTkc7XHJcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkgcmV0dXJuIFByb3BlcnR5VHlwZS5CTE9CO1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gUHJvcGVydHlUeXBlLkxJU1Q7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JykgcmV0dXJuIFByb3BlcnR5VHlwZS5NQVA7XHJcbiAgICByZXR1cm4gUHJvcGVydHlUeXBlLlVOU0VUO1xyXG4gIH1cclxufVxyXG5cclxuLyoqIFJlc3VsdCBvZiBhbiBpbnNlcnQgbm9kZXMgb3BlcmF0aW9uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0Tm9kZXNSZXN1bHQge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgbm9kZUlkczogc3RyaW5nW107XHJcbiAgbm9kZUNvdW50OiBudW1iZXI7XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG59XHJcblxyXG4vKiogUmVzdWx0IG9mIGFuIGluc2VydCBlZGdlcyBvcGVyYXRpb24gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJbnNlcnRFZGdlc1Jlc3VsdCB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBlZGdlSWRzOiBzdHJpbmdbXTtcclxuICBlZGdlQ291bnQ6IG51bWJlcjtcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgc2tpcHBlZENvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKiBSZXN1bHQgb2YgYSBkZWxldGUgb3BlcmF0aW9uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGVsZXRlUmVzdWx0IHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIGRlbGV0ZWRDb3VudDogbnVtYmVyO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxufVxyXG5cclxuLyoqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB1bmlmaWVkIEV4cG9ydCBvcGVyYXRpb24gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDb25maWcge1xyXG4gIGdyYXBoTmFtZTogc3RyaW5nO1xyXG4gIGJhdGNoU2l6ZT86IG51bWJlcjtcclxuICBleHBvcnROb2Rlcz86IGJvb2xlYW47XHJcbiAgZXhwb3J0RWRnZXM/OiBib29sZWFuO1xyXG4gIG5vZGVMYWJlbHM/OiBzdHJpbmdbXTtcclxuICBlZGdlTGFiZWxzPzogc3RyaW5nW107XHJcbiAgaW5jbHVkZU1ldGFkYXRhPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqIFN0YXRpc3RpY3MgZm9yIGFuIGV4cG9ydCBvcGVyYXRpb24gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRTdGF0cyB7XHJcbiAgbm9kZXNFeHBvcnRlZDogbnVtYmVyO1xyXG4gIGVkZ2VzRXhwb3J0ZWQ6IG51bWJlcjtcclxuICBieXRlc1dyaXR0ZW46IG51bWJlcjtcclxuICBkdXJhdGlvbk1zOiBudW1iZXI7XHJcbn1cclxuXHJcbi8qKiBBIGNodW5rIG9mIGV4cG9ydGVkIGRhdGEgaW4gSlNPTiBMaW5lcyBmb3JtYXQgKi9cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDaHVuayB7XHJcbiAgZGF0YTogQnVmZmVyO1xyXG4gIGlzRmluYWw6IGJvb2xlYW47XHJcbiAgc3RhdHM/OiBFeHBvcnRTdGF0cztcclxufVxyXG5cclxuLyoqXHJcbiAqIEEgYmF0Y2ggb2YgZXhwb3J0ZWQgbm9kZXNcclxuICogQGRlcHJlY2F0ZWQgVXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0Tm9kZXNSZXN1bHQge1xyXG4gIG5vZGVzOiBFeHBvcnRlZE5vZGVbXTtcclxuICBoYXNNb3JlOiBib29sZWFuO1xyXG59XHJcblxyXG4vKipcclxuICogQSBiYXRjaCBvZiBleHBvcnRlZCBlZGdlc1xyXG4gKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0KCkgd2l0aCBFeHBvcnRDb25maWcgaW5zdGVhZFxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRFZGdlc1Jlc3VsdCB7XHJcbiAgZWRnZXM6IEV4cG9ydGVkRWRnZVtdO1xyXG4gIGhhc01vcmU6IGJvb2xlYW47XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBIG5vZGUgZXhwb3J0ZWQgZnJvbSB0aGUgZGF0YWJhc2VcclxuICogQGRlcHJlY2F0ZWQgVXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0ZWROb2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGxhYmVsczogc3RyaW5nW107XHJcbiAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PjtcclxufVxyXG5cclxuLyoqXHJcbiAqIEFuIGVkZ2UgZXhwb3J0ZWQgZnJvbSB0aGUgZGF0YWJhc2VcclxuICogQGRlcHJlY2F0ZWQgVXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0ZWRFZGdlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgZnJvbU5vZGVJZDogc3RyaW5nO1xyXG4gIHRvTm9kZUlkOiBzdHJpbmc7XHJcbiAgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PjtcclxufVxyXG5cclxuLyoqIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBncmFwaCBkYXRhYmFzZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIE5vZGUge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbGFiZWxzOiBzdHJpbmdbXTtcclxuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG59XHJcblxyXG4vKiogUmVwcmVzZW50cyBhbiBlZGdlIGluIHRoZSBncmFwaCBkYXRhYmFzZSAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2Uge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbGFiZWw6IHN0cmluZztcclxuICBmcm9tTm9kZUlkOiBzdHJpbmc7XHJcbiAgdG9Ob2RlSWQ6IHN0cmluZztcclxuICBwcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG59XHJcblxyXG4vKiogUmVwcmVzZW50cyBhIHBhdGggaW4gdGhlIGdyYXBoIGRhdGFiYXNlICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGF0aCB7XHJcbiAgbm9kZXM6IE5vZGVbXTtcclxuICBlZGdlczogRWRnZVtdO1xyXG59XHJcblxyXG4vKiogUmVzdWx0IHdyYXBwZXIgZm9yIG5vZGVzIHdpdGggc2NoZW1hIGluZm9ybWF0aW9uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVJlc3VsdCB7XHJcbiAgbm9kZXM6IE5vZGVbXTtcclxuICBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+O1xyXG59XHJcblxyXG4vKiogUmVzdWx0IHdyYXBwZXIgZm9yIGVkZ2VzIHdpdGggc2NoZW1hIGluZm9ybWF0aW9uICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRWRnZVJlc3VsdCB7XHJcbiAgZWRnZXM6IEVkZ2VbXTtcclxuICBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+O1xyXG59XHJcbiJdfQ==
|
|
723
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzcG9uc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVzcG9uc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7QUFFSCxtQ0FBOEk7QUFFOUksa0RBQWtEO0FBQ2xELE1BQWEsR0FBRztJQUVJO0lBQ0E7SUFGbEIsWUFDa0IsTUFBYSxFQUNiLFFBQXdCLEVBQUU7UUFEMUIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLFVBQUssR0FBTCxLQUFLLENBQXFCO0lBQ3pDLENBQUM7SUFFSiw4Q0FBOEM7SUFDOUMsR0FBRyxDQUFDLEtBQWE7UUFDZixJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyw4Q0FBOEM7UUFDOUMsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7WUFDbEcsT0FBTyxJQUFBLHNCQUFjLEVBQUMsS0FBbUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsT0FBTyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzVDLE9BQU8sb0JBQVksQ0FBQyxLQUFLLENBQUM7UUFDNUIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsMERBQTBEO0lBQzFELFNBQVMsQ0FBQyxLQUFhO1FBQ3JCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDakQsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDeEMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxTQUFTLENBQUMsS0FBYTtRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUztZQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixPQUFPLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDMUUsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsMkRBQTJEO0lBQzNELFVBQVUsQ0FBQyxLQUFhO1FBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUIsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxTQUFTO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsT0FBTyxHQUFHLGFBQWEsQ0FBQyxDQUFDO0lBQzdELENBQUM7Q0FDRjtBQXBERCxrQkFvREM7QUFFRDs7O0dBR0c7QUFDSCxNQUFhLFdBQVc7SUFFSDtJQUNBO0lBQ0E7SUFIbkIsWUFDbUIsU0FBaUIsRUFDakIsU0FBaUIsRUFDakIsUUFBa0I7UUFGbEIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQVU7SUFDbEMsQ0FBQztJQUVKLHlCQUF5QjtJQUN6QixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELDJCQUEyQjtJQUMzQixJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFdBQVcsQ0FBQyxHQUFRLEVBQUUsS0FBYSxFQUFFLE9BQTRCO1FBQ3ZFLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxHQUFTO2dCQUNqQixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFDeEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRTthQUNqQyxDQUFDO1lBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVEsRUFBRSxLQUFhLEVBQUUsT0FBNEI7UUFDdkUsSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEdBQVM7Z0JBQ2pCLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDVixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUN0QixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFO2dCQUNoQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsSUFBSSxFQUFFO2dCQUM1QixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsSUFBSSxFQUFFO2FBQ2pDLENBQUM7WUFDRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0wsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBRTFDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEMsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM1QyxJQUFJLFFBQVEsS0FBSyxvQkFBWSxDQUFDLEtBQUssSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDdEcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDM0IsQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDM0YsU0FBUztZQUNYLENBQUM7WUFFRCxJQUFJLFFBQVEsS0FBSyxvQkFBWSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1RCxDQUFDO2lCQUFNLElBQUksUUFBUSxLQUFLLG9CQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzFDLHdEQUF3RDtnQkFDeEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUN4QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO3dCQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQ3pDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLElBQUksU0FBUyxDQUNqQiwwQkFBMEIsSUFBSSxDQUFDLFNBQVMsWUFBWSxJQUFJLENBQUMsU0FBUyxjQUFjLG9CQUFZLENBQUMsUUFBUSxDQUFDLGlDQUFpQyxDQUN4SSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTztRQUNMLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUUxQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hDLFNBQVM7WUFDWCxDQUFDO1lBRUQsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUMsSUFBSSxRQUFRLEtBQUssb0JBQVksQ0FBQyxLQUFLLElBQUksUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3RHLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQzNCLENBQUM7WUFFRCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzNGLFNBQVM7WUFDWCxDQUFDO1lBRUQsSUFBSSxRQUFRLEtBQUssb0JBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUQsQ0FBQztpQkFBTSxJQUFJLFFBQVEsS0FBSyxvQkFBWSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUMxQyx3REFBd0Q7Z0JBQ3hELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN6QyxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxJQUFJLFNBQVMsQ0FDakIsMEJBQTBCLElBQUksQ0FBQyxTQUFTLFlBQVksSUFBSSxDQUFDLFNBQVMsY0FBYyxvQkFBWSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FDeEksQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTztRQUNMLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckMsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3hDLFNBQVM7WUFDWCxDQUFDO1lBRUQsd0RBQXdEO1lBQ3hELElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzVDLElBQUksUUFBUSxLQUFLLG9CQUFZLENBQUMsS0FBSyxJQUFJLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUN0RyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUMzQixDQUFDO1lBRUQsbUJBQW1CO1lBQ25CLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDM0YsU0FBUztZQUNYLENBQUM7WUFFRCxtQ0FBbUM7WUFDbkMsSUFBSSxRQUFRLEtBQUssb0JBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxJQUFJLFNBQVMsQ0FDakIsMEJBQTBCLElBQUksQ0FBQyxTQUFTLFlBQVksSUFBSSxDQUFDLFNBQVMsY0FBYyxvQkFBWSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FDeEgsQ0FBQztZQUNKLENBQUM7WUFFRCxrQ0FBa0M7WUFDbEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFjLENBQUM7WUFDakQsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsMkNBQTJDO2dCQUMzQyxNQUFNLEtBQUssR0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM3RCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFO29CQUNkLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxJQUFJLEVBQUU7b0JBQ3RCLFVBQVUsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUU7aUJBQy9CLENBQUMsQ0FBQyxDQUFDO2dCQUNKLE1BQU0sS0FBSyxHQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzdELEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUU7b0JBQ2QsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtvQkFDcEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBRTtvQkFDOUIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksRUFBRTtvQkFDMUIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBRTtpQkFDL0IsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsMERBQTBEO0lBQzFELE9BQU87UUFDTCxtRUFBbUU7UUFDbkUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxRQUFRLEtBQUssb0JBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDcEMsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFRLENBQUM7b0JBQzNDLElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO3dCQUM3QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDcEMsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUNELE1BQU0sQ0FBQyx1QkFBdUI7UUFDaEMsQ0FBQztRQUVELHdDQUF3QztRQUN4QyxNQUFNLE9BQU8sR0FBYSxDQUFDO2dCQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3BCLElBQUksRUFBRSxvQkFBWSxDQUFDLEtBQUs7YUFDekIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDdkMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3pDLElBQUksSUFBSSxLQUFLLG9CQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2hDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO3dCQUN2QixNQUFNO29CQUNSLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ3RELElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsRUFBd0M7UUFDL0QsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEQsSUFBSSxPQUFPLEdBQUcsb0JBQVksQ0FBQyxLQUFLLENBQUM7WUFDakMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUTtvQkFBRSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsb0JBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLG9CQUFZLENBQUMsTUFBTSxDQUFDO3FCQUMvRixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7b0JBQUUsT0FBTyxHQUFHLG9CQUFZLENBQUMsTUFBTSxDQUFDO3FCQUN6RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLFNBQVM7b0JBQUUsT0FBTyxHQUFHLG9CQUFZLENBQUMsSUFBSSxDQUFDO1lBQy9ELENBQUM7WUFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQUVELHNFQUFzRTtJQUN0RSxNQUFNO1FBQ0osTUFBTSxNQUFNLEdBQVUsRUFBRSxDQUFDO1FBQ3pCLElBQUksUUFBUSxHQUFHLG9CQUFZLENBQUMsS0FBSyxDQUFDO1FBRWxDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNyQyxJQUFJLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdkMsb0VBQW9FO2dCQUNwRSxJQUFJLFFBQVEsS0FBSyxvQkFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNwQyxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3ZDLElBQUksUUFBUSxLQUFLLG9CQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ3BDLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUM1QyxJQUFJLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDOzRCQUNuRSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQzt3QkFDM0IsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBRSxrQ0FBa0M7Z0JBQzFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMxRCxDQUFDO0lBRUQsNERBQTREO0lBQzVELFFBQVE7UUFDTixNQUFNLE1BQU0sR0FBVSxFQUFFLENBQUM7UUFFekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsaUJBQWlCO0lBRVQsbUJBQW1CLENBQUMsS0FBYSxFQUFFLElBQVU7UUFDbkQsTUFBTSxVQUFVLEdBQWtCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hGLElBQUk7WUFDSixJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztTQUNwQyxDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsSUFBVTtRQUNuRCxNQUFNLFVBQVUsR0FBa0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEYsSUFBSTtZQUNKLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1NBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0osT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEtBQVU7UUFDbEMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQUUsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQztRQUNwRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVM7WUFBRSxPQUFPLG9CQUFZLENBQUMsSUFBSSxDQUFDO1FBQ3pELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxvQkFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsb0JBQVksQ0FBQyxNQUFNLENBQUM7UUFDNUUsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUFFLE9BQU8sb0JBQVksQ0FBQyxNQUFNLENBQUM7UUFDMUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sb0JBQVksQ0FBQyxJQUFJLENBQUM7UUFDckQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sb0JBQVksQ0FBQyxJQUFJLENBQUM7UUFDbkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQUUsT0FBTyxvQkFBWSxDQUFDLEdBQUcsQ0FBQztRQUN2RCxPQUFPLG9CQUFZLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQWpVRCxrQ0FpVUM7QUFFRCwyQ0FBMkM7QUFDM0MsTUFBYSxRQUFRO0lBRUQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBTmxCLFlBQ2tCLE9BQWlCLEVBQ2pCLElBQVcsRUFDWCxRQUFnQixFQUNoQixPQUFnQixFQUNoQixRQUFrQixFQUNsQixlQUF1QixDQUFDO1FBTHhCLFlBQU8sR0FBUCxPQUFPLENBQVU7UUFDakIsU0FBSSxHQUFKLElBQUksQ0FBTztRQUNYLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDaEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGlCQUFZLEdBQVosWUFBWSxDQUFZO0lBQ3ZDLENBQUM7SUFFSix3Q0FBd0M7SUFDeEMsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsS0FBSztRQUNILE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLElBQUk7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxTQUFTLENBQUMsR0FBUSxFQUFFLFVBQWtCO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQy9DLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsT0FBTyxDQUFDLEVBQXFDO1FBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsR0FBRyxDQUFJLEVBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELGtEQUFrRDtJQUNsRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN6QixNQUFNLEdBQUcsR0FBd0IsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM5Qix5REFBeUQ7Z0JBQ3pELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELHFFQUFxRTtJQUNyRSxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLDRCQUE0QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsWUFBWTtRQUNWLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLFNBQVM7WUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUN4QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDO1FBQzFFLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxZQUFZO1FBQ1YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9CLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssU0FBUztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2pELElBQUksT0FBTyxHQUFHLEtBQUssUUFBUTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ3hDLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxVQUFrQjtRQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNoRCxJQUFJLE1BQU0sS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUNELE9BQU8sSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBQyxLQUFhO1FBQ2YsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLEtBQUssWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDekYsQ0FBQztRQUNELE9BQU8sSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxPQUFPO1FBQ0wsTUFBTSxLQUFLLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBRTFDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxLQUFLLFFBQVEsSUFBSSxRQUFRLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sSUFBSSxHQUFTO29CQUNqQixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLElBQUksRUFBRTtvQkFDeEIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVLElBQUksRUFBRTtpQkFDakMsQ0FBQztnQkFDRixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLElBQUksUUFBUSxLQUFLLG9CQUFZLENBQUMsS0FBSyxJQUFJLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUN0RyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDM0IsQ0FBQztnQkFFRCxJQUFJLFFBQVEsS0FBSyxvQkFBWSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNuQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO3FCQUFNLElBQUksUUFBUSxLQUFLLG9CQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzFDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUN4QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDOzRCQUN4QixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTztRQUNMLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUUxQyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQy9CLElBQUksR0FBRyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLElBQUksR0FBUztvQkFDakIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNWLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUU7b0JBQ3RCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUU7b0JBQ2hDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUU7b0JBQzVCLFVBQVUsRUFBRSxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUU7aUJBQ2pDLENBQUM7Z0JBQ0YsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzNDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLElBQUksUUFBUSxLQUFLLG9CQUFZLENBQUMsS0FBSyxJQUFJLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUN0RyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDM0IsQ0FBQztnQkFFRCxJQUFJLFFBQVEsS0FBSyxvQkFBWSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNuQyxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixDQUFDO3FCQUFNLElBQUksUUFBUSxLQUFLLG9CQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzFDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUN4QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDOzRCQUN4QixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3BCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTztRQUNMLE1BQU0sS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUV6QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDM0Msd0RBQXdEO2dCQUN4RCxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLFFBQVEsS0FBSyxvQkFBWSxDQUFDLEtBQUssSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDdEcsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQzNCLENBQUM7Z0JBRUQsSUFBSSxRQUFRLEtBQUssb0JBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbkMsa0NBQWtDO29CQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBYyxDQUFDO29CQUNwQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO3dCQUNwQywyQ0FBMkM7d0JBQzNDLE1BQU0sS0FBSyxHQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7NEJBQzdELEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUU7NEJBQ2QsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLElBQUksRUFBRTs0QkFDdEIsVUFBVSxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBRTt5QkFDL0IsQ0FBQyxDQUFDLENBQUM7d0JBQ0osTUFBTSxLQUFLLEdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQVksRUFBRSxFQUFFLENBQUMsQ0FBQzs0QkFDN0QsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRTs0QkFDZCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFOzRCQUNwQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFOzRCQUM5QixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxFQUFFOzRCQUMxQixVQUFVLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxFQUFFO3lCQUMvQixDQUFDLENBQUMsQ0FBQzt3QkFDSixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBQy9CLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU87UUFDTCxvREFBb0Q7UUFDcEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxRQUFRLEtBQUssb0JBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFRLENBQUM7Z0JBQ3ZDLElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUM3QyxNQUFNLEVBQUUsR0FBRyxHQUEyQyxDQUFDO29CQUN2RCxNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVcsRUFBRSxDQUFTLEVBQUUsRUFBRTt3QkFDbEUsSUFBSSxPQUFPLEdBQUcsb0JBQVksQ0FBQyxLQUFLLENBQUM7d0JBQ2pDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNoRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUN4QixJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVE7Z0NBQUUsT0FBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztpQ0FDL0YsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRO2dDQUFFLE9BQU8sR0FBRyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztpQ0FDekQsSUFBSSxPQUFPLENBQUMsS0FBSyxTQUFTO2dDQUFFLE9BQU8sR0FBRyxvQkFBWSxDQUFDLElBQUksQ0FBQzt3QkFDL0QsQ0FBQzt3QkFDRCxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7b0JBQ3RDLENBQUMsQ0FBQyxDQUFDO29CQUNILE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDM0QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsdUNBQXVDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRCxJQUFJLEVBQUUsR0FBRztZQUNULElBQUksRUFBRSxvQkFBWSxDQUFDLEtBQUs7U0FDekIsQ0FBQyxDQUFDLENBQUM7UUFFSixNQUFNLFNBQVMsR0FBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakYsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBa0I7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBVSxFQUFFLENBQUM7UUFDekIsSUFBSSxRQUFRLEdBQUcsb0JBQVksQ0FBQyxLQUFLLENBQUM7UUFFbEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakMsb0VBQW9FO2dCQUNwRSxJQUFJLFFBQVEsS0FBSyxvQkFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNwQyxRQUFRLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDakMsSUFBSSxRQUFRLEtBQUssb0JBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDcEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDdEMsSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQzs0QkFDbkUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7d0JBQzNCLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxrQ0FBa0M7Z0JBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRCxpQkFBaUI7SUFFVCxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsSUFBVTtRQUNuRCxNQUFNLFVBQVUsR0FBa0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEYsSUFBSTtZQUNKLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1NBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0osT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLG1CQUFtQixDQUFDLEtBQWEsRUFBRSxJQUFVO1FBQ25ELE1BQU0sVUFBVSxHQUFrQixNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN4RixJQUFJO1lBQ0osSUFBSSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7U0FDcEMsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBVTtRQUNsQyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxPQUFPLG9CQUFZLENBQUMsSUFBSSxDQUFDO1FBQ3BFLElBQUksT0FBTyxLQUFLLEtBQUssU0FBUztZQUFFLE9BQU8sb0JBQVksQ0FBQyxJQUFJLENBQUM7UUFDekQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUM5QixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1lBQUUsT0FBTyxvQkFBWSxDQUFDLE1BQU0sQ0FBQztRQUMxRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQztRQUNyRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxvQkFBWSxDQUFDLElBQUksQ0FBQztRQUNuRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7WUFBRSxPQUFPLG9CQUFZLENBQUMsR0FBRyxDQUFDO1FBQ3ZELE9BQU8sb0JBQVksQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBcFhELDRCQW9YQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVzcG9uc2UgaGFuZGxpbmcgZm9yIEdRTERCIE5vZGUuanMgZHJpdmVyLlxuICovXG5cbmltcG9ydCB7IFR5cGVkVmFsdWUsIHR5cGVkVmFsdWVUb0pTLCBQcm9wZXJ0eVR5cGUsIFNjaGVtYSwgUHJvcGVydHlEZWYsIFRhYmxlLCBIZWFkZXIsIEF0dHIsIEdxbGRiTm9kZSwgR3FsZGJFZGdlLCBHcWxkYlBhdGggfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIFJlcHJlc2VudHMgYSBzaW5nbGUgcm93IGluIHRoZSBxdWVyeSByZXN1bHQgKi9cbmV4cG9ydCBjbGFzcyBSb3cge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgdmFsdWVzOiBhbnlbXSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgdHlwZXM6IFByb3BlcnR5VHlwZVtdID0gW11cbiAgKSB7fVxuXG4gIC8qKiBHZXQgdGhlIHZhbHVlIGF0IHRoZSBnaXZlbiBjb2x1bW4gaW5kZXggKi9cbiAgZ2V0KGluZGV4OiBudW1iZXIpOiBhbnkge1xuICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kZXh9YCk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZXNbaW5kZXhdO1xuICAgIC8vIElmIHZhbHVlIGlzIGEgVHlwZWRWYWx1ZSBvYmplY3QsIGNvbnZlcnQgaXRcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gdmFsdWUgJiYgJ2RhdGEnIGluIHZhbHVlICYmICdpc051bGwnIGluIHZhbHVlKSB7XG4gICAgICByZXR1cm4gdHlwZWRWYWx1ZVRvSlModmFsdWUgYXMgVHlwZWRWYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIFByb3BlcnR5VHlwZSBhdCB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4ICovXG4gIGdldFR5cGUoaW5kZXg6IG51bWJlcik6IFByb3BlcnR5VHlwZSB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLnR5cGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIFByb3BlcnR5VHlwZS5VTlNFVDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudHlwZXNbaW5kZXhdO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCBhcyBhIHN0cmluZyAqL1xuICBnZXRTdHJpbmcoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgdmFsdWUgYXQgdGhlIGdpdmVuIGNvbHVtbiBpbmRleCBhcyBhIG51bWJlciAqL1xuICBnZXROdW1iZXIoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5nZXQoaW5kZXgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykgcmV0dXJuIHZhbDtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICBpZiAoaXNOYU4obnVtKSkgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAke3R5cGVvZiB2YWx9IHRvIG51bWJlcmApO1xuICAgIHJldHVybiBudW07XG4gIH1cblxuICAvKiogR2V0IHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gY29sdW1uIGluZGV4IGFzIGEgYm9vbGVhbiAqL1xuICBnZXRCb29sZWFuKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLmdldChpbmRleCk7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0eXBlb2YgdmFsID09PSAnYm9vbGVhbicpIHJldHVybiB2YWw7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY29udmVydCAke3R5cGVvZiB2YWx9IHRvIGJvb2xlYW5gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgY29sdW1uJ3MgZGF0YSBmcm9tIHRoZSByZXNwb25zZS5cbiAqIEFsbG93cyBjaGFpbmluZyBvcGVyYXRpb25zIGxpa2UgcmVzcC5hbGlhcyhcIm5cIikuYXNOb2RlcygpIG9yIHJlc3AuZ2V0KDApLmFzTm9kZXMoKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFsaWFzUmVzdWx0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGlhc05hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtbklkeDogbnVtYmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzcG9uc2U6IFJlc3BvbnNlXG4gICkge31cblxuICAvKiogR2V0IHRoZSBhbGlhcyBuYW1lICovXG4gIGdldCBhbGlhcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFsaWFzTmFtZTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGNvbHVtbiBpbmRleCAqL1xuICBnZXQgY29sdW1uSW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5JZHg7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBub2RlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiB3aXRoIHNjaGVtYSBpbmZvLlxuICAgKiBUaHJvd3MgVHlwZUVycm9yIGlmIHRoZSBjb2x1bW4gY29udGFpbnMgbm9uLU5PREUgdHlwZXMuXG4gICAqL1xuICBwcml2YXRlIGNvbGxlY3ROb2RlKHZhbDogYW55LCBub2RlczogTm9kZVtdLCBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+KTogdm9pZCB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsLmlkID09PSAnc3RyaW5nJyAmJiAnbGFiZWxzJyBpbiB2YWwpIHtcbiAgICAgIGNvbnN0IG5vZGU6IE5vZGUgPSB7XG4gICAgICAgIGlkOiB2YWwuaWQsXG4gICAgICAgIGxhYmVsczogdmFsLmxhYmVscyB8fCBbXSxcbiAgICAgICAgcHJvcGVydGllczogdmFsLnByb3BlcnRpZXMgfHwge30sXG4gICAgICB9O1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgIGZvciAoY29uc3QgbGFiZWwgb2Ygbm9kZS5sYWJlbHMpIHtcbiAgICAgICAgaWYgKCFzY2hlbWFzLmhhcyhsYWJlbCkpIHtcbiAgICAgICAgICBzY2hlbWFzLnNldChsYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21Ob2RlKGxhYmVsLCBub2RlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbGxlY3RFZGdlKHZhbDogYW55LCBlZGdlczogRWRnZVtdLCBzY2hlbWFzOiBNYXA8c3RyaW5nLCBTY2hlbWE+KTogdm9pZCB7XG4gICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsLmlkID09PSAnc3RyaW5nJyAmJiAnbGFiZWwnIGluIHZhbCkge1xuICAgICAgY29uc3QgZWRnZTogRWRnZSA9IHtcbiAgICAgICAgaWQ6IHZhbC5pZCxcbiAgICAgICAgbGFiZWw6IHZhbC5sYWJlbCB8fCAnJyxcbiAgICAgICAgZnJvbU5vZGVJZDogdmFsLmZyb21Ob2RlSWQgfHwgJycsXG4gICAgICAgIHRvTm9kZUlkOiB2YWwudG9Ob2RlSWQgfHwgJycsXG4gICAgICAgIHByb3BlcnRpZXM6IHZhbC5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgfTtcbiAgICAgIGVkZ2VzLnB1c2goZWRnZSk7XG4gICAgICBpZiAoZWRnZS5sYWJlbCAmJiAhc2NoZW1hcy5oYXMoZWRnZS5sYWJlbCkpIHtcbiAgICAgICAgc2NoZW1hcy5zZXQoZWRnZS5sYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21FZGdlKGVkZ2UubGFiZWwsIGVkZ2UpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBub2RlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiB3aXRoIHNjaGVtYSBpbmZvLlxuICAgKiBTdXBwb3J0cyBib3RoIGRpcmVjdCBOT0RFIGNvbHVtbnMgYW5kIExJU1Qgb2YgTk9ERSBjb2x1bW5zXG4gICAqIChlLmcuLCBncm91cCB2YXJpYWJsZXMgZnJvbSBxdWFudGlmaWVkIHBhdHRlcm5zKS5cbiAgICovXG4gIGFzTm9kZXMoKTogTm9kZVJlc3VsdCB7XG4gICAgY29uc3Qgbm9kZXM6IE5vZGVbXSA9IFtdO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgU2NoZW1hPigpO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yZXNwb25zZS5yb3dzKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5JZHggPj0gcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKHRoaXMuY29sdW1uSWR4KTtcbiAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcm93LnZhbHVlc1t0aGlzLmNvbHVtbklkeF07XG4gICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICBpdGVtVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmF3VmFsdWUgfHwgKHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2lzTnVsbCcgaW4gcmF3VmFsdWUgJiYgcmF3VmFsdWUuaXNOdWxsKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTk9ERSkge1xuICAgICAgICB0aGlzLmNvbGxlY3ROb2RlKHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpLCBub2Rlcywgc2NoZW1hcyk7XG4gICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTElTVCkge1xuICAgICAgICAvLyBMSVNUIG9mIE5PREUgKGdyb3VwIHZhcmlhYmxlIGZyb20gcXVhbnRpZmllZCBwYXR0ZXJuKVxuICAgICAgICBjb25zdCBsaXN0ID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY29sbGVjdE5vZGUoaXRlbSwgbm9kZXMsIHNjaGVtYXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgVHlwZSBtaXNtYXRjaDogY29sdW1uICcke3RoaXMuYWxpYXNOYW1lfScgKGluZGV4ICR7dGhpcy5jb2x1bW5JZHh9KSBjb250YWlucyAke1Byb3BlcnR5VHlwZVtpdGVtVHlwZV19LCBleHBlY3RlZCBOT0RFIG9yIExJU1Qgb2YgTk9ERWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBub2Rlcywgc2NoZW1hcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZWRnZXMgZnJvbSB0aGUgYWxpYXNlZCBjb2x1bW4gd2l0aCBzY2hlbWEgaW5mby5cbiAgICogU3VwcG9ydHMgYm90aCBkaXJlY3QgRURHRSBjb2x1bW5zIGFuZCBMSVNUIG9mIEVER0UgY29sdW1uc1xuICAgKiAoZS5nLiwgZ3JvdXAgdmFyaWFibGVzIGZyb20gcXVhbnRpZmllZCBwYXR0ZXJucykuXG4gICAqL1xuICBhc0VkZ2VzKCk6IEVkZ2VSZXN1bHQge1xuICAgIGNvbnN0IGVkZ2VzOiBFZGdlW10gPSBbXTtcbiAgICBjb25zdCBzY2hlbWFzID0gbmV3IE1hcDxzdHJpbmcsIFNjaGVtYT4oKTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4ID49IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbdGhpcy5jb2x1bW5JZHhdO1xuICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQgJiYgcmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcbiAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXJhd1ZhbHVlIHx8ICh0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICdpc051bGwnIGluIHJhd1ZhbHVlICYmIHJhd1ZhbHVlLmlzTnVsbCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkVER0UpIHtcbiAgICAgICAgdGhpcy5jb2xsZWN0RWRnZShyb3cuZ2V0KHRoaXMuY29sdW1uSWR4KSwgZWRnZXMsIHNjaGVtYXMpO1xuICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkxJU1QpIHtcbiAgICAgICAgLy8gTElTVCBvZiBFREdFIChncm91cCB2YXJpYWJsZSBmcm9tIHF1YW50aWZpZWQgcGF0dGVybilcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBsaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbGxlY3RFZGdlKGl0ZW0sIGVkZ2VzLCBzY2hlbWFzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYFR5cGUgbWlzbWF0Y2g6IGNvbHVtbiAnJHt0aGlzLmFsaWFzTmFtZX0nIChpbmRleCAke3RoaXMuY29sdW1uSWR4fSkgY29udGFpbnMgJHtQcm9wZXJ0eVR5cGVbaXRlbVR5cGVdfSwgZXhwZWN0ZWQgRURHRSBvciBMSVNUIG9mIEVER0VgXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZWRnZXMsIHNjaGVtYXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHBhdGhzIGZyb20gdGhlIGFsaWFzZWQgY29sdW1uLlxuICAgKiBUaHJvd3MgVHlwZUVycm9yIGlmIHRoZSBjb2x1bW4gY29udGFpbnMgbm9uLVBBVEggdHlwZXMuXG4gICAqL1xuICBhc1BhdGhzKCk6IFBhdGhbXSB7XG4gICAgY29uc3QgcGF0aHM6IFBhdGhbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yZXNwb25zZS5yb3dzKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5JZHggPj0gcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIHR5cGUgZnJvbSB0eXBlcyBhcnJheSBvciBmcm9tIFR5cGVkVmFsdWUgb2JqZWN0XG4gICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbdGhpcy5jb2x1bW5JZHhdO1xuICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQgJiYgcmF3VmFsdWUgJiYgdHlwZW9mIHJhd1ZhbHVlID09PSAnb2JqZWN0JyAmJiAndHlwZScgaW4gcmF3VmFsdWUpIHtcbiAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgfVxuXG4gICAgICAvLyBTa2lwIG51bGwgdmFsdWVzXG4gICAgICBpZiAoIXJhd1ZhbHVlIHx8ICh0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICdpc051bGwnIGluIHJhd1ZhbHVlICYmIHJhd1ZhbHVlLmlzTnVsbCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFR5cGUgY2hlY2tpbmc6IG11c3QgYmUgUEFUSCB0eXBlXG4gICAgICBpZiAoaXRlbVR5cGUgIT09IFByb3BlcnR5VHlwZS5QQVRIKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYFR5cGUgbWlzbWF0Y2g6IGNvbHVtbiAnJHt0aGlzLmFsaWFzTmFtZX0nIChpbmRleCAke3RoaXMuY29sdW1uSWR4fSkgY29udGFpbnMgJHtQcm9wZXJ0eVR5cGVbaXRlbVR5cGVdfSwgZXhwZWN0ZWQgUEFUSGBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29udmVydCBUeXBlZFZhbHVlIHRvIEdxbGRiUGF0aFxuICAgICAgY29uc3QgdmFsID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCkgYXMgR3FsZGJQYXRoO1xuICAgICAgaWYgKHZhbCAmJiBBcnJheS5pc0FycmF5KHZhbC5ub2RlcykpIHtcbiAgICAgICAgLy8gQ29udmVydCBHcWxkYk5vZGUvR3FsZGJFZGdlIHRvIE5vZGUvRWRnZVxuICAgICAgICBjb25zdCBub2RlczogTm9kZVtdID0gKHZhbC5ub2RlcyB8fCBbXSkubWFwKChuOiBHcWxkYk5vZGUpID0+ICh7XG4gICAgICAgICAgaWQ6IG4uaWQgfHwgJycsXG4gICAgICAgICAgbGFiZWxzOiBuLmxhYmVscyB8fCBbXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBuLnByb3BlcnRpZXMgfHwge30sXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29uc3QgZWRnZXM6IEVkZ2VbXSA9ICh2YWwuZWRnZXMgfHwgW10pLm1hcCgoZTogR3FsZGJFZGdlKSA9PiAoe1xuICAgICAgICAgIGlkOiBlLmlkIHx8ICcnLFxuICAgICAgICAgIGxhYmVsOiBlLmxhYmVsIHx8ICcnLFxuICAgICAgICAgIGZyb21Ob2RlSWQ6IGUuZnJvbU5vZGVJZCB8fCAnJyxcbiAgICAgICAgICB0b05vZGVJZDogZS50b05vZGVJZCB8fCAnJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBlLnByb3BlcnRpZXMgfHwge30sXG4gICAgICAgIH0pKTtcbiAgICAgICAgcGF0aHMucHVzaCh7IG5vZGVzLCBlZGdlcyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGF0aHM7XG4gIH1cblxuICAvKiogQ29udmVydCB0aGUgYWxpYXNlZCBjb2x1bW4gdG8gYSBzaW5nbGUtY29sdW1uIHRhYmxlICovXG4gIGFzVGFibGUoKTogVGFibGUge1xuICAgIC8vIENoZWNrIGlmIGZpcnN0IG5vbi1udWxsIHZhbHVlIGlzIGEgR3FsZGJUYWJsZSDigJQgaWYgc28sIHVud3JhcCBpdFxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlRBQkxFKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCkgYXMgYW55O1xuICAgICAgICAgIGlmICh2YWwgJiYgJ2NvbHVtbnMnIGluIHZhbCAmJiAncm93cycgaW4gdmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy51bndyYXBHcWxkYlRhYmxlKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBicmVhazsgLy8gb25seSBjaGVjayBmaXJzdCByb3dcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogZ2VuZXJpYyBzaW5nbGUtY29sdW1uIHRhYmxlXG4gICAgY29uc3QgaGVhZGVyczogSGVhZGVyW10gPSBbe1xuICAgICAgbmFtZTogdGhpcy5hbGlhc05hbWUsXG4gICAgICB0eXBlOiBQcm9wZXJ0eVR5cGUuVU5TRVQsXG4gICAgfV07XG5cbiAgICBpZiAodGhpcy5yZXNwb25zZS5yb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5JZHggPCByb3cudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSByb3cuZ2V0VHlwZSh0aGlzLmNvbHVtbklkeCk7XG4gICAgICAgICAgaWYgKHR5cGUgIT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xuICAgICAgICAgICAgaGVhZGVyc1swXS50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHRhYmxlUm93czogYW55W11bXSA9IHRoaXMucmVzcG9uc2Uucm93cy5tYXAocm93ID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA8IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBbcm93LmdldCh0aGlzLmNvbHVtbklkeCldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtudWxsXTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IG5hbWU6ICcnLCBoZWFkZXJzLCByb3dzOiB0YWJsZVJvd3MgfTtcbiAgfVxuXG4gIHByaXZhdGUgdW53cmFwR3FsZGJUYWJsZShndDogeyBjb2x1bW5zOiBzdHJpbmdbXTsgcm93czogYW55W11bXSB9KTogVGFibGUge1xuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcltdID0gZ3QuY29sdW1ucy5tYXAoKGNvbCwgaSkgPT4ge1xuICAgICAgbGV0IGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuVU5TRVQ7XG4gICAgICBpZiAoZ3Qucm93cy5sZW5ndGggPiAwICYmIGkgPCBndC5yb3dzWzBdLmxlbmd0aCkge1xuICAgICAgICBjb25zdCB2ID0gZ3Qucm93c1swXVtpXTtcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJykgY29sVHlwZSA9IE51bWJlci5pc0ludGVnZXIodikgPyBQcm9wZXJ0eVR5cGUuSU5UNjQgOiBQcm9wZXJ0eVR5cGUuRE9VQkxFO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ3N0cmluZycpIGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuU1RSSU5HO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nKSBjb2xUeXBlID0gUHJvcGVydHlUeXBlLkJPT0w7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBuYW1lOiBjb2wsIHR5cGU6IGNvbFR5cGUgfTtcbiAgICB9KTtcbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLmFsaWFzTmFtZSwgaGVhZGVycywgcm93czogZ3Qucm93cyB9O1xuICB9XG5cbiAgLyoqIEV4dHJhY3Qgc2NhbGFyIG9yIGxpc3QgYXR0cmlidXRlIHZhbHVlcyBmcm9tIHRoZSBhbGlhc2VkIGNvbHVtbiAqL1xuICBhc0F0dHIoKTogQXR0ciB7XG4gICAgY29uc3QgdmFsdWVzOiBhbnlbXSA9IFtdO1xuICAgIGxldCBhdHRyVHlwZSA9IFByb3BlcnR5VHlwZS5VTlNFVDtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucmVzcG9uc2Uucm93cykge1xuICAgICAgaWYgKHRoaXMuY29sdW1uSWR4IDwgcm93LnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gVHJ5IHRvIGdldCB0eXBlIGZyb20gcm93LnR5cGVzIGZpcnN0LCB0aGVuIGZyb20gVHlwZWRWYWx1ZSBvYmplY3RcbiAgICAgICAgaWYgKGF0dHJUeXBlID09PSBQcm9wZXJ0eVR5cGUuVU5TRVQpIHtcbiAgICAgICAgICBhdHRyVHlwZSA9IHJvdy5nZXRUeXBlKHRoaXMuY29sdW1uSWR4KTtcbiAgICAgICAgICBpZiAoYXR0clR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xuICAgICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW3RoaXMuY29sdW1uSWR4XTtcbiAgICAgICAgICAgIGlmIChyYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICAgICAgICBhdHRyVHlwZSA9IHJhd1ZhbHVlLnR5cGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gcm93LmdldCh0aGlzLmNvbHVtbklkeCk7ICAvLyBVc2UgZ2V0KCkgdG8gY29udmVydCBUeXBlZFZhbHVlXG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBuYW1lOiB0aGlzLmFsaWFzTmFtZSwgdHlwZTogYXR0clR5cGUsIHZhbHVlcyB9O1xuICB9XG5cbiAgLyoqIEV4dHJhY3QgcmF3IEphdmFTY3JpcHQgdmFsdWVzIGZyb20gdGhlIGFsaWFzZWQgY29sdW1uICovXG4gIGFzVmFsdWVzKCk6IGFueVtdIHtcbiAgICBjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJlc3BvbnNlLnJvd3MpIHtcbiAgICAgIGlmICh0aGlzLmNvbHVtbklkeCA8IHJvdy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHJvdy5nZXQodGhpcy5jb2x1bW5JZHgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWVzO1xuICB9XG5cbiAgLy8gSGVscGVyIG1ldGhvZHNcblxuICBwcml2YXRlIGJ1aWxkU2NoZW1hRnJvbU5vZGUobGFiZWw6IHN0cmluZywgbm9kZTogTm9kZSk6IFNjaGVtYSB7XG4gICAgY29uc3QgcHJvcGVydGllczogUHJvcGVydHlEZWZbXSA9IE9iamVjdC5lbnRyaWVzKG5vZGUucHJvcGVydGllcykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiAoe1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6IHRoaXMuaW5mZXJQcm9wZXJ0eVR5cGUodmFsdWUpLFxuICAgIH0pKTtcbiAgICByZXR1cm4geyBuYW1lOiBsYWJlbCwgcHJvcGVydGllcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNjaGVtYUZyb21FZGdlKGxhYmVsOiBzdHJpbmcsIGVkZ2U6IEVkZ2UpOiBTY2hlbWEge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVmW10gPSBPYmplY3QuZW50cmllcyhlZGdlLnByb3BlcnRpZXMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiB0aGlzLmluZmVyUHJvcGVydHlUeXBlKHZhbHVlKSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHsgbmFtZTogbGFiZWwsIHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5mZXJQcm9wZXJ0eVR5cGUodmFsdWU6IGFueSk6IFByb3BlcnR5VHlwZSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBQcm9wZXJ0eVR5cGUuTlVMTDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHJldHVybiBQcm9wZXJ0eVR5cGUuQk9PTDtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIE51bWJlci5pc0ludGVnZXIodmFsdWUpID8gUHJvcGVydHlUeXBlLklOVDY0IDogUHJvcGVydHlUeXBlLkRPVUJMRTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHJldHVybiBQcm9wZXJ0eVR5cGUuU1RSSU5HO1xuICAgIGlmIChCdWZmZXIuaXNCdWZmZXIodmFsdWUpKSByZXR1cm4gUHJvcGVydHlUeXBlLkJMT0I7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gUHJvcGVydHlUeXBlLkxJU1Q7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHJldHVybiBQcm9wZXJ0eVR5cGUuTUFQO1xuICAgIHJldHVybiBQcm9wZXJ0eVR5cGUuVU5TRVQ7XG4gIH1cbn1cblxuLyoqIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBhIEdRTCBxdWVyeSAqL1xuZXhwb3J0IGNsYXNzIFJlc3BvbnNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdLFxuICAgIHB1YmxpYyByZWFkb25seSByb3dzOiBSb3dbXSxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm93Q291bnQ6IG51bWJlcixcbiAgICBwdWJsaWMgcmVhZG9ubHkgaGFzTW9yZTogYm9vbGVhbixcbiAgICBwdWJsaWMgcmVhZG9ubHkgd2FybmluZ3M6IHN0cmluZ1tdLFxuICAgIHB1YmxpYyByZWFkb25seSByb3dzQWZmZWN0ZWQ6IG51bWJlciA9IDBcbiAgKSB7fVxuXG4gIC8qKiBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaGFzIG5vIHJvd3MgKi9cbiAgaXNFbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIGZpcnN0IHJvdyAqL1xuICBmaXJzdCgpOiBSb3cgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJvd3NbMF07XG4gIH1cblxuICAvKiogR2V0IHRoZSBsYXN0IHJvdyAqL1xuICBsYXN0KCk6IFJvdyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucm93c1t0aGlzLnJvd3MubGVuZ3RoIC0gMV07XG4gIH1cblxuICAvKiogR2V0IHRoZSB2YWx1ZSBmb3IgYSBjb2x1bW4gYnkgbmFtZSAqL1xuICBnZXRCeU5hbWUocm93OiBSb3csIGNvbHVtbk5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW5OYW1lKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBub3QgZm91bmQ6ICR7Y29sdW1uTmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvdy5nZXQoaW5kZXgpO1xuICB9XG5cbiAgLyoqIEl0ZXJhdGUgb3ZlciBhbGwgcm93cyB3aXRoIGEgY2FsbGJhY2sgKi9cbiAgZm9yRWFjaChmbjogKHJvdzogUm93LCBpbmRleDogbnVtYmVyKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5yb3dzLmZvckVhY2goZm4pO1xuICB9XG5cbiAgLyoqIFRyYW5zZm9ybSBlYWNoIHJvdyB1c2luZyBhIGNhbGxiYWNrICovXG4gIG1hcDxUPihmbjogKHJvdzogUm93KSA9PiBUKTogVFtdIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzLm1hcChmbik7XG4gIH1cblxuICAvKiogQ29udmVydCB0aGUgcmVzcG9uc2UgdG8gYW4gYXJyYXkgb2Ygb2JqZWN0cyAqL1xuICB0b09iamVjdHMoKTogUmVjb3JkPHN0cmluZywgYW55PltdIHtcbiAgICByZXR1cm4gdGhpcy5yb3dzLm1hcChyb3cgPT4ge1xuICAgICAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaCgoY29sLCBpKSA9PiB7XG4gICAgICAgIC8vIEFkZCBib3VuZGFyeSBjaGVjayB0byBoYW5kbGUgbWlzbWF0Y2hlZCBjb2x1bW5zL3ZhbHVlc1xuICAgICAgICBvYmpbY29sXSA9IGkgPCByb3cudmFsdWVzLmxlbmd0aCA/IHJvdy5nZXQoaSkgOiBudWxsO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENvbnZlcnQgdGhlIHJlc3BvbnNlIHRvIEpTT04gKi9cbiAgdG9KU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMudG9PYmplY3RzKCkpO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgc2luZ2xlIHZhbHVlIGZyb20gYSBzaW5nbGUtcm93LCBzaW5nbGUtY29sdW1uIHJlc3BvbnNlICovXG4gIHNpbmdsZVZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMucm93cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnJvd3MubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBzaW5nbGUgcm93LCBnb3QgJHt0aGlzLnJvd3MubGVuZ3RofWApO1xuICAgIH1cbiAgICBpZiAodGhpcy5yb3dzWzBdLnZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIGlmICh0aGlzLnJvd3NbMF0udmFsdWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgc2luZ2xlIGNvbHVtbiwgZ290ICR7dGhpcy5yb3dzWzBdLnZhbHVlcy5sZW5ndGh9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnJvd3NbMF0uZ2V0KDApO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgc2luZ2xlIG51bWJlciB2YWx1ZSAqL1xuICBzaW5nbGVOdW1iZXIoKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWwgPSB0aGlzLnNpbmdsZVZhbHVlKCk7XG4gICAgaWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSByZXR1cm4gdmFsO1xuICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWwpO1xuICAgIGlmIChpc05hTihudW0pKSB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0ICR7dHlwZW9mIHZhbH0gdG8gbnVtYmVyYCk7XG4gICAgcmV0dXJuIG51bTtcbiAgfVxuXG4gIC8qKiBHZXQgdGhlIHNpbmdsZSBzdHJpbmcgdmFsdWUgKi9cbiAgc2luZ2xlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID0gdGhpcy5zaW5nbGVWYWx1ZSgpO1xuICAgIGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHJldHVybiAnJztcbiAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHJldHVybiB2YWw7XG4gICAgcmV0dXJuIFN0cmluZyh2YWwpO1xuICB9XG5cbiAgLyoqIEl0ZXJhdG9yIHN1cHBvcnQgKi9cbiAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmF0b3I8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMucm93c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG4gIH1cblxuICAvKiogR2V0IHRoZSBudW1iZXIgb2Ygcm93cyAqL1xuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucm93cy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIEFsaWFzUmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIGNvbHVtbiBuYW1lLlxuICAgKiBVc2UgdGhpcyB0byBleHRyYWN0IGRhdGEgZnJvbSBhIHNwZWNpZmljIGNvbHVtbiBieSBuYW1lLlxuICAgKiBFeGFtcGxlOiByZXNwLmFsaWFzKFwiblwiKS5hc05vZGVzKClcbiAgICovXG4gIGFsaWFzKGNvbHVtbk5hbWU6IHN0cmluZyk6IEFsaWFzUmVzdWx0IHtcbiAgICBjb25zdCBjb2xJZHggPSB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW5OYW1lKTtcbiAgICBpZiAoY29sSWR4ID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gYWxpYXMgbm90IGZvdW5kOiAke2NvbHVtbk5hbWV9YCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQWxpYXNSZXN1bHQoY29sdW1uTmFtZSwgY29sSWR4LCB0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gQWxpYXNSZXN1bHQgZm9yIHRoZSBjb2x1bW4gYXQgdGhlIHNwZWNpZmllZCBpbmRleC5cbiAgICogVXNlIHRoaXMgdG8gZXh0cmFjdCBkYXRhIGZyb20gYSBzcGVjaWZpYyBjb2x1bW4gYnkgaW5kZXguXG4gICAqIEV4YW1wbGU6IHJlc3AuZ2V0KDApLmFzTm9kZXMoKVxuICAgKi9cbiAgZ2V0KGluZGV4OiBudW1iZXIpOiBBbGlhc1Jlc3VsdCB7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBpbmRleCBvdXQgb2YgcmFuZ2U6ICR7aW5kZXh9ICh0b3RhbDogJHt0aGlzLmNvbHVtbnMubGVuZ3RofSlgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBbGlhc1Jlc3VsdCh0aGlzLmNvbHVtbnNbaW5kZXhdLCBpbmRleCwgdGhpcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFsaWFzKCkgb3IgZ2V0KCkgaW5zdGVhZC4gVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uXG4gICAqIEV4dHJhY3Qgbm9kZXMgZnJvbSByZXNwb25zZSB3aXRoIHNjaGVtYSBpbmZvLlxuICAgKiBTdXBwb3J0cyBib3RoIE5PREUgYW5kIExJU1Qgb2YgTk9ERSBjb2x1bW5zLlxuICAgKi9cbiAgYXNOb2RlcygpOiBOb2RlUmVzdWx0IHtcbiAgICBjb25zdCBub2RlczogTm9kZVtdID0gW107XG4gICAgY29uc3Qgc2NoZW1hcyA9IG5ldyBNYXA8c3RyaW5nLCBTY2hlbWE+KCk7XG5cbiAgICBjb25zdCBjb2xsZWN0Tm9kZSA9ICh2YWw6IGFueSkgPT4ge1xuICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsLmlkID09PSAnc3RyaW5nJyAmJiAnbGFiZWxzJyBpbiB2YWwpIHtcbiAgICAgICAgY29uc3Qgbm9kZTogTm9kZSA9IHtcbiAgICAgICAgICBpZDogdmFsLmlkLFxuICAgICAgICAgIGxhYmVsczogdmFsLmxhYmVscyB8fCBbXSxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB2YWwucHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgZm9yIChjb25zdCBsYWJlbCBvZiBub2RlLmxhYmVscykge1xuICAgICAgICAgIGlmICghc2NoZW1hcy5oYXMobGFiZWwpKSB7XG4gICAgICAgICAgICBzY2hlbWFzLnNldChsYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21Ob2RlKGxhYmVsLCBub2RlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucm93cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKGkpO1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbaV07XG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTk9ERSkge1xuICAgICAgICAgIGNvbGxlY3ROb2RlKHJvdy5nZXQoaSkpO1xuICAgICAgICB9IGVsc2UgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuTElTVCkge1xuICAgICAgICAgIGNvbnN0IGxpc3QgPSByb3cuZ2V0KGkpO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbGlzdCkge1xuICAgICAgICAgICAgICBjb2xsZWN0Tm9kZShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBub2Rlcywgc2NoZW1hcyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhbGlhcygpIG9yIGdldCgpIGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBFeHRyYWN0IGVkZ2VzIGZyb20gcmVzcG9uc2Ugd2l0aCBzY2hlbWEgaW5mby5cbiAgICogU3VwcG9ydHMgYm90aCBFREdFIGFuZCBMSVNUIG9mIEVER0UgY29sdW1ucy5cbiAgICovXG4gIGFzRWRnZXMoKTogRWRnZVJlc3VsdCB7XG4gICAgY29uc3QgZWRnZXM6IEVkZ2VbXSA9IFtdO1xuICAgIGNvbnN0IHNjaGVtYXMgPSBuZXcgTWFwPHN0cmluZywgU2NoZW1hPigpO1xuXG4gICAgY29uc3QgY29sbGVjdEVkZ2UgPSAodmFsOiBhbnkpID0+IHtcbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbC5pZCA9PT0gJ3N0cmluZycgJiYgJ2xhYmVsJyBpbiB2YWwpIHtcbiAgICAgICAgY29uc3QgZWRnZTogRWRnZSA9IHtcbiAgICAgICAgICBpZDogdmFsLmlkLFxuICAgICAgICAgIGxhYmVsOiB2YWwubGFiZWwgfHwgJycsXG4gICAgICAgICAgZnJvbU5vZGVJZDogdmFsLmZyb21Ob2RlSWQgfHwgJycsXG4gICAgICAgICAgdG9Ob2RlSWQ6IHZhbC50b05vZGVJZCB8fCAnJyxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB2YWwucHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgZWRnZXMucHVzaChlZGdlKTtcbiAgICAgICAgaWYgKGVkZ2UubGFiZWwgJiYgIXNjaGVtYXMuaGFzKGVkZ2UubGFiZWwpKSB7XG4gICAgICAgICAgc2NoZW1hcy5zZXQoZWRnZS5sYWJlbCwgdGhpcy5idWlsZFNjaGVtYUZyb21FZGdlKGVkZ2UubGFiZWwsIGVkZ2UpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiB0aGlzLnJvd3MpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93LnZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgaXRlbVR5cGUgPSByb3cuZ2V0VHlwZShpKTtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSByb3cudmFsdWVzW2ldO1xuICAgICAgICBpZiAoaXRlbVR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCAmJiByYXdWYWx1ZSAmJiB0eXBlb2YgcmF3VmFsdWUgPT09ICdvYmplY3QnICYmICd0eXBlJyBpbiByYXdWYWx1ZSkge1xuICAgICAgICAgIGl0ZW1UeXBlID0gcmF3VmFsdWUudHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkVER0UpIHtcbiAgICAgICAgICBjb2xsZWN0RWRnZShyb3cuZ2V0KGkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLkxJU1QpIHtcbiAgICAgICAgICBjb25zdCBsaXN0ID0gcm93LmdldChpKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGxpc3QpIHtcbiAgICAgICAgICAgICAgY29sbGVjdEVkZ2UoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgZWRnZXMsIHNjaGVtYXMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogRXh0cmFjdCBwYXRocyBmcm9tIHJlc3BvbnNlLlxuICAgKiBQYXRocyBhcmUgaWRlbnRpZmllZCBieSBQcm9wZXJ0eVR5cGUuUEFUSCB0eXBlIGluIHRoZSBUeXBlZFZhbHVlLlxuICAgKi9cbiAgYXNQYXRocygpOiBQYXRoW10ge1xuICAgIGNvbnN0IHBhdGhzOiBQYXRoW10gPSBbXTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHRoaXMucm93cykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3cudmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIENoZWNrIHR5cGUgZnJvbSB0eXBlcyBhcnJheSBvciBmcm9tIFR5cGVkVmFsdWUgb2JqZWN0XG4gICAgICAgIGxldCBpdGVtVHlwZSA9IHJvdy5nZXRUeXBlKGkpO1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbaV07XG4gICAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUICYmIHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgaXRlbVR5cGUgPSByYXdWYWx1ZS50eXBlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW1UeXBlID09PSBQcm9wZXJ0eVR5cGUuUEFUSCkge1xuICAgICAgICAgIC8vIENvbnZlcnQgVHlwZWRWYWx1ZSB0byBHcWxkYlBhdGhcbiAgICAgICAgICBjb25zdCB2YWwgPSByb3cuZ2V0KGkpIGFzIEdxbGRiUGF0aDtcbiAgICAgICAgICBpZiAodmFsICYmIEFycmF5LmlzQXJyYXkodmFsLm5vZGVzKSkge1xuICAgICAgICAgICAgLy8gQ29udmVydCBHcWxkYk5vZGUvR3FsZGJFZGdlIHRvIE5vZGUvRWRnZVxuICAgICAgICAgICAgY29uc3Qgbm9kZXM6IE5vZGVbXSA9ICh2YWwubm9kZXMgfHwgW10pLm1hcCgobjogR3FsZGJOb2RlKSA9PiAoe1xuICAgICAgICAgICAgICBpZDogbi5pZCB8fCAnJyxcbiAgICAgICAgICAgICAgbGFiZWxzOiBuLmxhYmVscyB8fCBbXSxcbiAgICAgICAgICAgICAgcHJvcGVydGllczogbi5wcm9wZXJ0aWVzIHx8IHt9LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc3QgZWRnZXM6IEVkZ2VbXSA9ICh2YWwuZWRnZXMgfHwgW10pLm1hcCgoZTogR3FsZGJFZGdlKSA9PiAoe1xuICAgICAgICAgICAgICBpZDogZS5pZCB8fCAnJyxcbiAgICAgICAgICAgICAgbGFiZWw6IGUubGFiZWwgfHwgJycsXG4gICAgICAgICAgICAgIGZyb21Ob2RlSWQ6IGUuZnJvbU5vZGVJZCB8fCAnJyxcbiAgICAgICAgICAgICAgdG9Ob2RlSWQ6IGUudG9Ob2RlSWQgfHwgJycsXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IGUucHJvcGVydGllcyB8fCB7fSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHBhdGhzLnB1c2goeyBub2RlcywgZWRnZXMgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBhbGlhcygpIG9yIGdldCgpIGluc3RlYWQuIFRoaXMgbWV0aG9kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLlxuICAgKiBSZXR1cm4gcmVzcG9uc2UgYXMgZ2VuZXJpYyB0YWJsZS5cbiAgICogSWYgcmVzcG9uc2UgaXMgYSBzaW5nbGUgVEFCTEUgY29sdW1uLCB1bndyYXBzIHRoZSBHcWxkYlRhYmxlIGludG8gcHJvcGVyIGhlYWRlcnMvcm93cy5cbiAgICovXG4gIGFzVGFibGUoKTogVGFibGUge1xuICAgIC8vIElmIHNpbmdsZSBjb2x1bW4gb2YgVEFCTEUgdHlwZSwgdW53cmFwIEdxbGRiVGFibGVcbiAgICBpZiAodGhpcy5jb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnJvd3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgaXRlbVR5cGUgPSB0aGlzLnJvd3NbMF0uZ2V0VHlwZSgwKTtcbiAgICAgIGlmIChpdGVtVHlwZSA9PT0gUHJvcGVydHlUeXBlLlRBQkxFKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucm93c1swXS5nZXQoMCkgYXMgYW55O1xuICAgICAgICBpZiAodmFsICYmICdjb2x1bW5zJyBpbiB2YWwgJiYgJ3Jvd3MnIGluIHZhbCkge1xuICAgICAgICAgIGNvbnN0IGd0ID0gdmFsIGFzIHsgY29sdW1uczogc3RyaW5nW107IHJvd3M6IGFueVtdW10gfTtcbiAgICAgICAgICBjb25zdCBoZWFkZXJzOiBIZWFkZXJbXSA9IGd0LmNvbHVtbnMubWFwKChjb2w6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBsZXQgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5VTlNFVDtcbiAgICAgICAgICAgIGlmIChndC5yb3dzLmxlbmd0aCA+IDAgJiYgaSA8IGd0LnJvd3NbMF0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHYgPSBndC5yb3dzWzBdW2ldO1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHYgPT09ICdudW1iZXInKSBjb2xUeXBlID0gTnVtYmVyLmlzSW50ZWdlcih2KSA/IFByb3BlcnR5VHlwZS5JTlQ2NCA6IFByb3BlcnR5VHlwZS5ET1VCTEU7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnc3RyaW5nJykgY29sVHlwZSA9IFByb3BlcnR5VHlwZS5TVFJJTkc7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2ID09PSAnYm9vbGVhbicpIGNvbFR5cGUgPSBQcm9wZXJ0eVR5cGUuQk9PTDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IGNvbCwgdHlwZTogY29sVHlwZSB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7IG5hbWU6IHRoaXMuY29sdW1uc1swXSwgaGVhZGVycywgcm93czogZ3Qucm93cyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2s6IGdlbmVyaWMgbXVsdGktY29sdW1uIHRhYmxlXG4gICAgY29uc3QgaGVhZGVyczogSGVhZGVyW10gPSB0aGlzLmNvbHVtbnMubWFwKGNvbCA9PiAoe1xuICAgICAgbmFtZTogY29sLFxuICAgICAgdHlwZTogUHJvcGVydHlUeXBlLlVOU0VULFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHRhYmxlUm93czogYW55W11bXSA9IHRoaXMucm93cy5tYXAocm93ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMubWFwKChfLCBpKSA9PiAoaSA8IHJvdy52YWx1ZXMubGVuZ3RoID8gcm93LmdldChpKSA6IG51bGwpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7IG5hbWU6ICcnLCBoZWFkZXJzLCByb3dzOiB0YWJsZVJvd3MgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYWxpYXMoKSBvciBnZXQoKSBpbnN0ZWFkLiBUaGlzIG1ldGhvZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi5cbiAgICogRXh0cmFjdCBzY2FsYXIgb3IgbGlzdCBhdHRyaWJ1dGUgdmFsdWVzXG4gICAqL1xuICBhc0F0dHIoY29sdW1uTmFtZTogc3RyaW5nKTogQXR0ciB7XG4gICAgY29uc3QgY29sSW5kZXggPSB0aGlzLmNvbHVtbnMuaW5kZXhPZihjb2x1bW5OYW1lKTtcbiAgICBpZiAoY29sSW5kZXggPT09IC0xKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbHVtbiBub3QgZm91bmQ6ICR7Y29sdW1uTmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZXM6IGFueVtdID0gW107XG4gICAgbGV0IGF0dHJUeXBlID0gUHJvcGVydHlUeXBlLlVOU0VUO1xuXG4gICAgZm9yIChjb25zdCByb3cgb2YgdGhpcy5yb3dzKSB7XG4gICAgICBpZiAoY29sSW5kZXggPCByb3cudmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBUcnkgdG8gZ2V0IHR5cGUgZnJvbSByb3cudHlwZXMgZmlyc3QsIHRoZW4gZnJvbSBUeXBlZFZhbHVlIG9iamVjdFxuICAgICAgICBpZiAoYXR0clR5cGUgPT09IFByb3BlcnR5VHlwZS5VTlNFVCkge1xuICAgICAgICAgIGF0dHJUeXBlID0gcm93LmdldFR5cGUoY29sSW5kZXgpO1xuICAgICAgICAgIGlmIChhdHRyVHlwZSA9PT0gUHJvcGVydHlUeXBlLlVOU0VUKSB7XG4gICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHJvdy52YWx1ZXNbY29sSW5kZXhdO1xuICAgICAgICAgICAgaWYgKHJhd1ZhbHVlICYmIHR5cGVvZiByYXdWYWx1ZSA9PT0gJ29iamVjdCcgJiYgJ3R5cGUnIGluIHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICAgIGF0dHJUeXBlID0gcmF3VmFsdWUudHlwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSByb3cuZ2V0KGNvbEluZGV4KTsgIC8vIFVzZSBnZXQoKSB0byBjb252ZXJ0IFR5cGVkVmFsdWVcbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IG5hbWU6IGNvbHVtbk5hbWUsIHR5cGU6IGF0dHJUeXBlLCB2YWx1ZXMgfTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzXG5cbiAgcHJpdmF0ZSBidWlsZFNjaGVtYUZyb21Ob2RlKGxhYmVsOiBzdHJpbmcsIG5vZGU6IE5vZGUpOiBTY2hlbWEge1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IFByb3BlcnR5RGVmW10gPSBPYmplY3QuZW50cmllcyhub2RlLnByb3BlcnRpZXMpLm1hcCgoW25hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICB0eXBlOiB0aGlzLmluZmVyUHJvcGVydHlUeXBlKHZhbHVlKSxcbiAgICB9KSk7XG4gICAgcmV0dXJuIHsgbmFtZTogbGFiZWwsIHByb3BlcnRpZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTY2hlbWFGcm9tRWRnZShsYWJlbDogc3RyaW5nLCBlZGdlOiBFZGdlKTogU2NoZW1hIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzOiBQcm9wZXJ0eURlZltdID0gT2JqZWN0LmVudHJpZXMoZWRnZS5wcm9wZXJ0aWVzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogdGhpcy5pbmZlclByb3BlcnR5VHlwZSh2YWx1ZSksXG4gICAgfSkpO1xuICAgIHJldHVybiB7IG5hbWU6IGxhYmVsLCBwcm9wZXJ0aWVzIH07XG4gIH1cblxuICBwcml2YXRlIGluZmVyUHJvcGVydHlUeXBlKHZhbHVlOiBhbnkpOiBQcm9wZXJ0eVR5cGUge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gUHJvcGVydHlUeXBlLk5VTEw7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gUHJvcGVydHlUeXBlLkJPT0w7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSA/IFByb3BlcnR5VHlwZS5JTlQ2NCA6IFByb3BlcnR5VHlwZS5ET1VCTEU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSByZXR1cm4gUHJvcGVydHlUeXBlLlNUUklORztcbiAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkgcmV0dXJuIFByb3BlcnR5VHlwZS5CTE9CO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIFByb3BlcnR5VHlwZS5MSVNUO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSByZXR1cm4gUHJvcGVydHlUeXBlLk1BUDtcbiAgICByZXR1cm4gUHJvcGVydHlUeXBlLlVOU0VUO1xuICB9XG59XG5cbi8qKiBSZXN1bHQgb2YgYW4gaW5zZXJ0IG5vZGVzIG9wZXJhdGlvbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnNlcnROb2Rlc1Jlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIG5vZGVJZHM6IHN0cmluZ1tdO1xuICBub2RlQ291bnQ6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufVxuXG4vKiogUmVzdWx0IG9mIGFuIGluc2VydCBlZGdlcyBvcGVyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5zZXJ0RWRnZXNSZXN1bHQge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICBlZGdlSWRzOiBzdHJpbmdbXTtcbiAgZWRnZUNvdW50OiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2tpcHBlZENvdW50OiBudW1iZXI7XG59XG5cbi8qKiBSZXN1bHQgb2YgYSBkZWxldGUgb3BlcmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIERlbGV0ZVJlc3VsdCB7XG4gIHN1Y2Nlc3M6IGJvb2xlYW47XG4gIGRlbGV0ZWRDb3VudDogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59XG5cbi8qKiBDb25maWd1cmF0aW9uIGZvciB0aGUgdW5pZmllZCBFeHBvcnQgb3BlcmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydENvbmZpZyB7XG4gIGdyYXBoTmFtZTogc3RyaW5nO1xuICBiYXRjaFNpemU/OiBudW1iZXI7XG4gIGV4cG9ydE5vZGVzPzogYm9vbGVhbjtcbiAgZXhwb3J0RWRnZXM/OiBib29sZWFuO1xuICBub2RlTGFiZWxzPzogc3RyaW5nW107XG4gIGVkZ2VMYWJlbHM/OiBzdHJpbmdbXTtcbiAgaW5jbHVkZU1ldGFkYXRhPzogYm9vbGVhbjtcbn1cblxuLyoqIFN0YXRpc3RpY3MgZm9yIGFuIGV4cG9ydCBvcGVyYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0U3RhdHMge1xuICBub2Rlc0V4cG9ydGVkOiBudW1iZXI7XG4gIGVkZ2VzRXhwb3J0ZWQ6IG51bWJlcjtcbiAgYnl0ZXNXcml0dGVuOiBudW1iZXI7XG4gIGR1cmF0aW9uTXM6IG51bWJlcjtcbn1cblxuLyoqIEEgY2h1bmsgb2YgZXhwb3J0ZWQgZGF0YSBpbiBKU09OIExpbmVzIGZvcm1hdCAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRDaHVuayB7XG4gIGRhdGE6IEJ1ZmZlcjtcbiAgaXNGaW5hbDogYm9vbGVhbjtcbiAgc3RhdHM/OiBFeHBvcnRTdGF0cztcbn1cblxuLyoqXG4gKiBBIGJhdGNoIG9mIGV4cG9ydGVkIG5vZGVzXG4gKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0KCkgd2l0aCBFeHBvcnRDb25maWcgaW5zdGVhZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydE5vZGVzUmVzdWx0IHtcbiAgbm9kZXM6IEV4cG9ydGVkTm9kZVtdO1xuICBoYXNNb3JlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgYmF0Y2ggb2YgZXhwb3J0ZWQgZWRnZXNcbiAqIEBkZXByZWNhdGVkIFVzZSBleHBvcnQoKSB3aXRoIEV4cG9ydENvbmZpZyBpbnN0ZWFkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0RWRnZXNSZXN1bHQge1xuICBlZGdlczogRXhwb3J0ZWRFZGdlW107XG4gIGhhc01vcmU6IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBub2RlIGV4cG9ydGVkIGZyb20gdGhlIGRhdGFiYXNlXG4gKiBAZGVwcmVjYXRlZCBVc2UgZXhwb3J0KCkgd2l0aCBFeHBvcnRDb25maWcgaW5zdGVhZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV4cG9ydGVkTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsczogc3RyaW5nW107XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKlxuICogQW4gZWRnZSBleHBvcnRlZCBmcm9tIHRoZSBkYXRhYmFzZVxuICogQGRlcHJlY2F0ZWQgVXNlIGV4cG9ydCgpIHdpdGggRXhwb3J0Q29uZmlnIGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeHBvcnRlZEVkZ2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBmcm9tTm9kZUlkOiBzdHJpbmc7XG4gIHRvTm9kZUlkOiBzdHJpbmc7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKiBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgZ3JhcGggZGF0YWJhc2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsczogc3RyaW5nW107XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKiBSZXByZXNlbnRzIGFuIGVkZ2UgaW4gdGhlIGdyYXBoIGRhdGFiYXNlICovXG5leHBvcnQgaW50ZXJmYWNlIEVkZ2Uge1xuICBpZDogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBmcm9tTm9kZUlkOiBzdHJpbmc7XG4gIHRvTm9kZUlkOiBzdHJpbmc7XG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG5cbi8qKiBSZXByZXNlbnRzIGEgcGF0aCBpbiB0aGUgZ3JhcGggZGF0YWJhc2UgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aCB7XG4gIG5vZGVzOiBOb2RlW107XG4gIGVkZ2VzOiBFZGdlW107XG59XG5cbi8qKiBSZXN1bHQgd3JhcHBlciBmb3Igbm9kZXMgd2l0aCBzY2hlbWEgaW5mb3JtYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVJlc3VsdCB7XG4gIG5vZGVzOiBOb2RlW107XG4gIHNjaGVtYXM6IE1hcDxzdHJpbmcsIFNjaGVtYT47XG59XG5cbi8qKiBSZXN1bHQgd3JhcHBlciBmb3IgZWRnZXMgd2l0aCBzY2hlbWEgaW5mb3JtYXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWRnZVJlc3VsdCB7XG4gIGVkZ2VzOiBFZGdlW107XG4gIHNjaGVtYXM6IE1hcDxzdHJpbmcsIFNjaGVtYT47XG59XG4iXX0=
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Admin service handles administrative operations.
|
|
3
3
|
*/
|
|
4
4
|
import { ServiceContext } from './service-context';
|
|
5
|
-
import { CacheStats, CacheType, Statistics, CompactResult, ComputeTopologyResult } from '../types';
|
|
5
|
+
import { CacheStats, CacheType, Statistics, CompactResult, ComputeTopologyResult, SystemMetrics } from '../types';
|
|
6
6
|
/**
|
|
7
7
|
* Admin service for administrative operations.
|
|
8
8
|
*/
|
|
@@ -33,6 +33,10 @@ export declare class AdminService {
|
|
|
33
33
|
* Trigger manual compaction of the database storage.
|
|
34
34
|
*/
|
|
35
35
|
compact(): Promise<CompactResult>;
|
|
36
|
+
/**
|
|
37
|
+
* Return system-level metrics (CPU, memory, disk I/O, storage, network).
|
|
38
|
+
*/
|
|
39
|
+
getSystemMetrics(): Promise<SystemMetrics>;
|
|
36
40
|
/**
|
|
37
41
|
* Wait for the computing engine topology to be ready.
|
|
38
42
|
*/
|
|
@@ -99,6 +99,59 @@ class AdminService {
|
|
|
99
99
|
message: response.message || '',
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Return system-level metrics (CPU, memory, disk I/O, storage, network).
|
|
104
|
+
*/
|
|
105
|
+
async getSystemMetrics() {
|
|
106
|
+
const metadata = this.ctx.getSessionMetadata();
|
|
107
|
+
const response = await (0, services_1.promisifyCall)(this.ctx.clients.adminService, 'GetSystemMetrics', {}, metadata);
|
|
108
|
+
return {
|
|
109
|
+
cpu: response.cpu
|
|
110
|
+
? {
|
|
111
|
+
processPercent: response.cpu.process_percent || 0,
|
|
112
|
+
systemPercent: response.cpu.system_percent || 0,
|
|
113
|
+
numCores: response.cpu.num_cores || 0,
|
|
114
|
+
}
|
|
115
|
+
: undefined,
|
|
116
|
+
memory: response.memory
|
|
117
|
+
? {
|
|
118
|
+
processRss: parseInt(response.memory.process_rss || '0', 10),
|
|
119
|
+
heapAlloc: parseInt(response.memory.heap_alloc || '0', 10),
|
|
120
|
+
heapSys: parseInt(response.memory.heap_sys || '0', 10),
|
|
121
|
+
stackInUse: parseInt(response.memory.stack_in_use || '0', 10),
|
|
122
|
+
systemTotal: parseInt(response.memory.system_total || '0', 10),
|
|
123
|
+
systemAvailable: parseInt(response.memory.system_available || '0', 10),
|
|
124
|
+
systemUsed: parseInt(response.memory.system_used || '0', 10),
|
|
125
|
+
systemUsedPercent: response.memory.system_used_percent || 0,
|
|
126
|
+
}
|
|
127
|
+
: undefined,
|
|
128
|
+
diskIO: response.disk_io
|
|
129
|
+
? {
|
|
130
|
+
readBytes: parseInt(response.disk_io.read_bytes || '0', 10),
|
|
131
|
+
writeBytes: parseInt(response.disk_io.write_bytes || '0', 10),
|
|
132
|
+
readCount: parseInt(response.disk_io.read_count || '0', 10),
|
|
133
|
+
writeCount: parseInt(response.disk_io.write_count || '0', 10),
|
|
134
|
+
}
|
|
135
|
+
: undefined,
|
|
136
|
+
storage: response.storage
|
|
137
|
+
? {
|
|
138
|
+
dbPath: response.storage.db_path || '',
|
|
139
|
+
dbSizeBytes: parseInt(response.storage.db_size_bytes || '0', 10),
|
|
140
|
+
volumeTotal: parseInt(response.storage.volume_total || '0', 10),
|
|
141
|
+
volumeFree: parseInt(response.storage.volume_free || '0', 10),
|
|
142
|
+
volumeUsed: parseInt(response.storage.volume_used || '0', 10),
|
|
143
|
+
}
|
|
144
|
+
: undefined,
|
|
145
|
+
network: response.network
|
|
146
|
+
? {
|
|
147
|
+
bytesSent: parseInt(response.network.bytes_sent || '0', 10),
|
|
148
|
+
bytesRecv: parseInt(response.network.bytes_recv || '0', 10),
|
|
149
|
+
packetsSent: parseInt(response.network.packets_sent || '0', 10),
|
|
150
|
+
packetsRecv: parseInt(response.network.packets_recv || '0', 10),
|
|
151
|
+
}
|
|
152
|
+
: undefined,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
102
155
|
/**
|
|
103
156
|
* Wait for the computing engine topology to be ready.
|
|
104
157
|
*/
|
|
@@ -112,4 +165,4 @@ class AdminService {
|
|
|
112
165
|
}
|
|
113
166
|
}
|
|
114
167
|
exports.AdminService = AdminService;
|
|
115
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hZG1pbi1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBR0gsb0NBQW1HO0FBQ25HLDBDQUE0QztBQUM1Qyw2Q0FBZ0Q7QUFFaEQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFDSDtJQUFwQixZQUFvQixHQUFtQjtRQUFuQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtJQUFHLENBQUM7SUFFM0M7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBQSx3QkFBYSxFQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQzdCLGNBQWMsRUFDZCxFQUFFLEtBQUssRUFBRSxFQUNULFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUF1QixpQkFBUyxDQUFDLEdBQUc7UUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFRLE1BQU0sSUFBQSx3QkFBYSxFQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQzdCLGVBQWUsRUFDZixFQUFFLFVBQVUsRUFBRSxJQUFBLDZCQUFnQixFQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQzNDLFFBQVEsQ0FDVCxDQUFDO1FBRUYsT0FBTztZQUNMLFFBQVEsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDMUIsQ0FBQyxDQUFDO29CQUNFLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FB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RSxTQUFTLEVBQUUsRUFDaEQsUUFBUSxDQUNULENBQUM7UUFDRixPQUFPO1lBQ0wsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLElBQUksS0FBSztZQUM5QixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxFQUFFO1NBQ2hDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFoSkQsb0NBZ0pDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIEFkbWluIHNlcnZpY2UgaGFuZGxlcyBhZG1pbmlzdHJhdGl2ZSBvcGVyYXRpb25zLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSAnLi9zZXJ2aWNlLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBDYWNoZVN0YXRzLCBDYWNoZVR5cGUsIFN0YXRpc3RpY3MsIENvbXBhY3RSZXN1bHQsIENvbXB1dGVUb3BvbG9neVJlc3VsdCB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgcHJvbWlzaWZ5Q2FsbCB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgY2FjaGVUeXBlVG9Qcm90byB9IGZyb20gJy4vY29udmVydGVycyc7XHJcblxyXG4vKipcclxuICogQWRtaW4gc2VydmljZSBmb3IgYWRtaW5pc3RyYXRpdmUgb3BlcmF0aW9ucy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBBZG1pblNlcnZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY3R4OiBTZXJ2aWNlQ29udGV4dCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogUHJlLWFsbG9jYXRlIHBhcnNlciBpbnN0YW5jZXMuXHJcbiAgICovXHJcbiAgYXN5bmMgd2FybXVwUGFyc2VyKGNvdW50OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XHJcbiAgICBhd2FpdCBwcm9taXNpZnlDYWxsKFxyXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmFkbWluU2VydmljZSxcclxuICAgICAgJ1dhcm11cFBhcnNlcicsXHJcbiAgICAgIHsgY291bnQgfSxcclxuICAgICAgbWV0YWRhdGFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gY2FjaGUgc3RhdGlzdGljcy5cclxuICAgKi9cclxuICBhc3luYyBnZXRDYWNoZVN0YXRzKGNhY2hlVHlwZTogQ2FjaGVUeXBlID0gQ2FjaGVUeXBlLkFMTCk6IFByb21pc2U8Q2FjaGVTdGF0cz4ge1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcclxuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsKFxyXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmFkbWluU2VydmljZSxcclxuICAgICAgJ0dldENhY2hlU3RhdHMnLFxyXG4gICAgICB7IGNhY2hlX3R5cGU6IGNhY2hlVHlwZVRvUHJvdG8oY2FjaGVUeXBlKSB9LFxyXG4gICAgICBtZXRhZGF0YVxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBhc3RTdGF0czogcmVzcG9uc2UuYXN0X3N0YXRzXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGhpdHM6IHBhcnNlSW50KHJlc3BvbnNlLmFzdF9zdGF0cy5oaXRzIHx8ICcwJywgMTApLFxyXG4gICAgICAgICAgICBtaXNzZXM6IHBhcnNlSW50KHJlc3BvbnNlLmFzdF9zdGF0cy5taXNzZXMgfHwgJzAnLCAxMCksXHJcbiAgICAgICAgICAgIGV2aWN0aW9uczogcGFyc2VJbnQocmVzcG9uc2UuYXN0X3N0YXRzLmV2aWN0aW9ucyB8fCAnMCcsIDEwKSxcclxuICAgICAgICAgICAgZW50cmllczogcmVzcG9uc2UuYXN0X3N0YXRzLmVudHJpZXMgfHwgMCxcclxuICAgICAgICAgICAgaGl0UmF0ZTogcmVzcG9uc2UuYXN0X3N0YXRzLmhpdF9yYXRlIHx8IDAsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICAgIHBsYW5TdGF0czogcmVzcG9uc2UucGxhbl9zdGF0c1xyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBzaXplOiByZXNwb25zZS5wbGFuX3N0YXRzLnNpemUgfHwgMCxcclxuICAgICAgICAgICAgY2FwYWNpdHk6IHJlc3BvbnNlLnBsYW5fc3RhdHMuY2FwYWNpdHkgfHwgMCxcclxuICAgICAgICAgICAgaGl0czogcGFyc2VJbnQocmVzcG9uc2UucGxhbl9zdGF0cy5oaXRzIHx8ICcwJywgMTApLFxyXG4gICAgICAgICAgICBtaXNzZXM6IHBhcnNlSW50KHJlc3BvbnNlLnBsYW5fc3RhdHMubWlzc2VzIHx8ICcwJywgMTApLFxyXG4gICAgICAgICAgICBoaXRSYXRlOiByZXNwb25zZS5wbGFuX3N0YXRzLmhpdF9yYXRlIHx8IDAsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB1bmRlZmluZWQsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgdGhlIHNwZWNpZmllZCBjYWNoZS5cclxuICAgKi9cclxuICBhc3luYyBjbGVhckNhY2hlKGNhY2hlVHlwZTogQ2FjaGVUeXBlID0gQ2FjaGVUeXBlLkFMTCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcclxuICAgIGF3YWl0IHByb21pc2lmeUNhbGwoXHJcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuYWRtaW5TZXJ2aWNlLFxyXG4gICAgICAnQ2xlYXJDYWNoZScsXHJcbiAgICAgIHsgY2FjaGVfdHlwZTogY2FjaGVUeXBlVG9Qcm90byhjYWNoZVR5cGUpIH0sXHJcbiAgICAgIG1ldGFkYXRhXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGRhdGFiYXNlIHN0YXRpc3RpY3MuXHJcbiAgICovXHJcbiAgYXN5bmMgZ2V0U3RhdGlzdGljcyhncmFwaE5hbWU6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxTdGF0aXN0aWNzPiB7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXHJcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuYWRtaW5TZXJ2aWNlLFxyXG4gICAgICAnR2V0U3RhdGlzdGljcycsXHJcbiAgICAgIHsgZ3JhcGhfbmFtZTogZ3JhcGhOYW1lIH0sXHJcbiAgICAgIG1ldGFkYXRhXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGxhYmVsQ291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XHJcbiAgICBjb25zdCBlZGdlTGFiZWxDb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcclxuXHJcbiAgICBpZiAocmVzcG9uc2UubGFiZWxfY291bnRzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJlc3BvbnNlLmxhYmVsX2NvdW50cykpIHtcclxuICAgICAgICBsYWJlbENvdW50c1trZXldID0gcGFyc2VJbnQodmFsdWUgYXMgc3RyaW5nLCAxMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzcG9uc2UuZWRnZV9sYWJlbF9jb3VudHMpIHtcclxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UuZWRnZV9sYWJlbF9jb3VudHMpKSB7XHJcbiAgICAgICAgZWRnZUxhYmVsQ291bnRzW2tleV0gPSBwYXJzZUludCh2YWx1ZSBhcyBzdHJpbmcsIDEwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5vZGVDb3VudDogcGFyc2VJbnQocmVzcG9uc2Uubm9kZV9jb3VudCB8fCAnMCcsIDEwKSxcclxuICAgICAgZWRnZUNvdW50OiBwYXJzZUludChyZXNwb25zZS5lZGdlX2NvdW50IHx8ICcwJywgMTApLFxyXG4gICAgICBsYWJlbENvdW50cyxcclxuICAgICAgZWRnZUxhYmVsQ291bnRzLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEludmFsaWRhdGUgdGhlIFJCQUMgcGVybWlzc2lvbiBjYWNoZS5cclxuICAgKi9cclxuICBhc3luYyBpbnZhbGlkYXRlUGVybWlzc2lvbkNhY2hlKHVzZXJuYW1lOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcclxuICAgIGF3YWl0IHByb21pc2lmeUNhbGwoXHJcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuYWRtaW5TZXJ2aWNlLFxyXG4gICAgICAnSW52YWxpZGF0ZVBlcm1pc3Npb25DYWNoZScsXHJcbiAgICAgIHsgdXNlcm5hbWUgfSxcclxuICAgICAgbWV0YWRhdGFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VyIG1hbnVhbCBjb21wYWN0aW9uIG9mIHRoZSBkYXRhYmFzZSBzdG9yYWdlLlxyXG4gICAqL1xyXG4gIGFzeW5jIGNvbXBhY3QoKTogUHJvbWlzZTxDb21wYWN0UmVzdWx0PiB7XHJcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xyXG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXHJcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuYWRtaW5TZXJ2aWNlLFxyXG4gICAgICAnQ29tcGFjdCcsXHJcbiAgICAgIHt9LFxyXG4gICAgICBtZXRhZGF0YVxyXG4gICAgKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHN1Y2Nlc3M6IHJlc3BvbnNlLnN1Y2Nlc3MgfHwgZmFsc2UsXHJcbiAgICAgIG1lc3NhZ2U6IHJlc3BvbnNlLm1lc3NhZ2UgfHwgJycsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogV2FpdCBmb3IgdGhlIGNvbXB1dGluZyBlbmdpbmUgdG9wb2xvZ3kgdG8gYmUgcmVhZHkuXHJcbiAgICovXHJcbiAgYXN5bmMgd2FpdEZvckNvbXB1dGVUb3BvbG9neShncmFwaE5hbWU6IHN0cmluZywgdGltZW91dE1zOiBudW1iZXIgPSAwKTogUHJvbWlzZTxDb21wdXRlVG9wb2xvZ3lSZXN1bHQ+IHtcclxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XHJcbiAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgcHJvbWlzaWZ5Q2FsbChcclxuICAgICAgdGhpcy5jdHguY2xpZW50cy5hZG1pblNlcnZpY2UsXHJcbiAgICAgICdXYWl0Rm9yQ29tcHV0ZVRvcG9sb2d5JyxcclxuICAgICAgeyBncmFwaF9uYW1lOiBncmFwaE5hbWUsIHRpbWVvdXRfbXM6IHRpbWVvdXRNcyB9LFxyXG4gICAgICBtZXRhZGF0YVxyXG4gICAgKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlYWR5OiByZXNwb25zZS5yZWFkeSB8fCBmYWxzZSxcclxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaW4tc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9hZG1pbi1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBR0gsb0NBQWtIO0FBQ2xILDBDQUE0QztBQUM1Qyw2Q0FBZ0Q7QUFFaEQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7SUFDSDtJQUFwQixZQUFvQixHQUFtQjtRQUFuQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtJQUFHLENBQUM7SUFFM0M7O09BRUc7SUFDSCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBQSx3QkFBYSxFQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQzdCLGNBQWMsRUFDZCxFQUFFLEtBQUssRUFBRSxFQUNULFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUF1QixpQkFBUyxDQUFDLEdBQUc7UUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFRLE1BQU0sSUFBQSx3QkFBYSxFQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQzdCLGVBQWUsRUFDZixFQUFFLFVBQVUsRUFBRSxJQUFBLDZCQUFnQixFQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQzNDLFFBQVEsQ0FDVCxDQUFDO1FBRUYsT0FBTztZQUNMLFFBQVEsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDMUIsQ0FBQyxDQUFDO29CQUNFLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDbEQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUN0RCxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzVELE9BQU8sRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDO29CQUN4QyxPQUFPLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksQ0FBQztpQkFDMUM7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7WUFDYixTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVU7Z0JBQzVCLENBQUMsQ0FBQztvQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQztvQkFDbkMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLENBQUM7b0JBQzNDLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDbkQsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUN2RCxPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQztpQkFDM0M7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxZQUF1QixpQkFBUyxDQUFDLEdBQUc7UUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sSUFBQSx3QkFBYSxFQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQzdCLFlBQVksRUFDWixFQUFFLFVBQVUsRUFBRSxJQUFBLDZCQUFnQixFQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQzNDLFFBQVEsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFvQixFQUFFO1FBQ3hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUEsd0JBQWEsRUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUM3QixlQUFlLEVBQ2YsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQ3pCLFFBQVEsQ0FDVCxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQTJCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLGVBQWUsR0FBMkIsRUFBRSxDQUFDO1FBRW5ELElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzFCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUNqRSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDL0IsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDdEUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFlLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPO1lBQ0wsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDbkQsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDbkQsV0FBVztZQUNYLGVBQWU7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxXQUFtQixFQUFFO1FBQ25ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLElBQUEsd0JBQWEsRUFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUM3QiwyQkFBMkIsRUFDM0IsRUFBRSxRQUFRLEVBQUUsRUFDWixRQUFRLENBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxPQUFPO1FBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFRLE1BQU0sSUFBQSx3QkFBYSxFQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQzdCLFNBQVMsRUFDVCxFQUFFLEVBQ0YsUUFBUSxDQUNULENBQUM7UUFDRixPQUFPO1lBQ0wsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLElBQUksS0FBSztZQUNsQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxFQUFFO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsZ0JBQWdCO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUEsd0JBQWEsRUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUM3QixrQkFBa0IsRUFDbEIsRUFBRSxFQUNGLFFBQVEsQ0FDVCxDQUFDO1FBRUYsT0FBTztZQUNMLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDZixDQUFDLENBQUM7b0JBQ0UsY0FBYyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUM7b0JBQ2pELGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsSUFBSSxDQUFDO29CQUMvQyxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQztpQkFDdEM7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7WUFDYixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQ3JCLENBQUMsQ0FBQztvQkFDRSxVQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzVELFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDMUQsT0FBTyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUN0RCxVQUFVLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzdELFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDOUQsZUFBZSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGdCQUFnQixJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQ3RFLFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDNUQsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsSUFBSSxDQUFDO2lCQUM1RDtnQkFDSCxDQUFDLENBQUMsU0FBUztZQUNiLE1BQU0sRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDdEIsQ0FBQyxDQUFDO29CQUNFLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDM0QsVUFBVSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUM3RCxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQzNELFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztpQkFDOUQ7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7WUFDYixPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU87Z0JBQ3ZCLENBQUMsQ0FBQztvQkFDRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRTtvQkFDdEMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUNoRSxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQy9ELFVBQVUsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDN0QsVUFBVSxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO2lCQUM5RDtnQkFDSCxDQUFDLENBQUMsU0FBUztZQUNiLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztnQkFDdkIsQ0FBQyxDQUFDO29CQUNFLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztvQkFDM0QsU0FBUyxFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO29CQUMzRCxXQUFXLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUM7b0JBQy9ELFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztpQkFDaEU7Z0JBQ0gsQ0FBQyxDQUFDLFNBQVM7U0FDZCxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFNBQWlCLEVBQUUsWUFBb0IsQ0FBQztRQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsTUFBTSxRQUFRLEdBQVEsTUFBTSxJQUFBLHdCQUFhLEVBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFlBQVksRUFDN0Isd0JBQXdCLEVBQ3hCLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLEVBQ2hELFFBQVEsQ0FDVCxDQUFDO1FBQ0YsT0FBTztZQUNMLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxJQUFJLEtBQUs7WUFDOUIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLElBQUksRUFBRTtTQUNoQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBNU1ELG9DQTRNQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWRtaW4gc2VydmljZSBoYW5kbGVzIGFkbWluaXN0cmF0aXZlIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHsgU2VydmljZUNvbnRleHQgfSBmcm9tICcuL3NlcnZpY2UtY29udGV4dCc7XG5pbXBvcnQgeyBDYWNoZVN0YXRzLCBDYWNoZVR5cGUsIFN0YXRpc3RpY3MsIENvbXBhY3RSZXN1bHQsIENvbXB1dGVUb3BvbG9neVJlc3VsdCwgU3lzdGVtTWV0cmljcyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IHByb21pc2lmeUNhbGwgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBjYWNoZVR5cGVUb1Byb3RvIH0gZnJvbSAnLi9jb252ZXJ0ZXJzJztcblxuLyoqXG4gKiBBZG1pbiBzZXJ2aWNlIGZvciBhZG1pbmlzdHJhdGl2ZSBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgY2xhc3MgQWRtaW5TZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjdHg6IFNlcnZpY2VDb250ZXh0KSB7fVxuXG4gIC8qKlxuICAgKiBQcmUtYWxsb2NhdGUgcGFyc2VyIGluc3RhbmNlcy5cbiAgICovXG4gIGFzeW5jIHdhcm11cFBhcnNlcihjb3VudDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcbiAgICBhd2FpdCBwcm9taXNpZnlDYWxsKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5hZG1pblNlcnZpY2UsXG4gICAgICAnV2FybXVwUGFyc2VyJyxcbiAgICAgIHsgY291bnQgfSxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gY2FjaGUgc3RhdGlzdGljcy5cbiAgICovXG4gIGFzeW5jIGdldENhY2hlU3RhdHMoY2FjaGVUeXBlOiBDYWNoZVR5cGUgPSBDYWNoZVR5cGUuQUxMKTogUHJvbWlzZTxDYWNoZVN0YXRzPiB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcbiAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgcHJvbWlzaWZ5Q2FsbChcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuYWRtaW5TZXJ2aWNlLFxuICAgICAgJ0dldENhY2hlU3RhdHMnLFxuICAgICAgeyBjYWNoZV90eXBlOiBjYWNoZVR5cGVUb1Byb3RvKGNhY2hlVHlwZSkgfSxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBhc3RTdGF0czogcmVzcG9uc2UuYXN0X3N0YXRzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaGl0czogcGFyc2VJbnQocmVzcG9uc2UuYXN0X3N0YXRzLmhpdHMgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICBtaXNzZXM6IHBhcnNlSW50KHJlc3BvbnNlLmFzdF9zdGF0cy5taXNzZXMgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICBldmljdGlvbnM6IHBhcnNlSW50KHJlc3BvbnNlLmFzdF9zdGF0cy5ldmljdGlvbnMgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICBlbnRyaWVzOiByZXNwb25zZS5hc3Rfc3RhdHMuZW50cmllcyB8fCAwLFxuICAgICAgICAgICAgaGl0UmF0ZTogcmVzcG9uc2UuYXN0X3N0YXRzLmhpdF9yYXRlIHx8IDAsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHBsYW5TdGF0czogcmVzcG9uc2UucGxhbl9zdGF0c1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHNpemU6IHJlc3BvbnNlLnBsYW5fc3RhdHMuc2l6ZSB8fCAwLFxuICAgICAgICAgICAgY2FwYWNpdHk6IHJlc3BvbnNlLnBsYW5fc3RhdHMuY2FwYWNpdHkgfHwgMCxcbiAgICAgICAgICAgIGhpdHM6IHBhcnNlSW50KHJlc3BvbnNlLnBsYW5fc3RhdHMuaGl0cyB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIG1pc3NlczogcGFyc2VJbnQocmVzcG9uc2UucGxhbl9zdGF0cy5taXNzZXMgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICBoaXRSYXRlOiByZXNwb25zZS5wbGFuX3N0YXRzLmhpdF9yYXRlIHx8IDAsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIHRoZSBzcGVjaWZpZWQgY2FjaGUuXG4gICAqL1xuICBhc3luYyBjbGVhckNhY2hlKGNhY2hlVHlwZTogQ2FjaGVUeXBlID0gQ2FjaGVUeXBlLkFMTCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgYXdhaXQgcHJvbWlzaWZ5Q2FsbChcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuYWRtaW5TZXJ2aWNlLFxuICAgICAgJ0NsZWFyQ2FjaGUnLFxuICAgICAgeyBjYWNoZV90eXBlOiBjYWNoZVR5cGVUb1Byb3RvKGNhY2hlVHlwZSkgfSxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gZGF0YWJhc2Ugc3RhdGlzdGljcy5cbiAgICovXG4gIGFzeW5jIGdldFN0YXRpc3RpY3MoZ3JhcGhOYW1lOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8U3RhdGlzdGljcz4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmFkbWluU2VydmljZSxcbiAgICAgICdHZXRTdGF0aXN0aWNzJyxcbiAgICAgIHsgZ3JhcGhfbmFtZTogZ3JhcGhOYW1lIH0sXG4gICAgICBtZXRhZGF0YVxuICAgICk7XG5cbiAgICBjb25zdCBsYWJlbENvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIGNvbnN0IGVkZ2VMYWJlbENvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gICAgaWYgKHJlc3BvbnNlLmxhYmVsX2NvdW50cykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzcG9uc2UubGFiZWxfY291bnRzKSkge1xuICAgICAgICBsYWJlbENvdW50c1trZXldID0gcGFyc2VJbnQodmFsdWUgYXMgc3RyaW5nLCAxMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmVkZ2VfbGFiZWxfY291bnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyZXNwb25zZS5lZGdlX2xhYmVsX2NvdW50cykpIHtcbiAgICAgICAgZWRnZUxhYmVsQ291bnRzW2tleV0gPSBwYXJzZUludCh2YWx1ZSBhcyBzdHJpbmcsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgbm9kZUNvdW50OiBwYXJzZUludChyZXNwb25zZS5ub2RlX2NvdW50IHx8ICcwJywgMTApLFxuICAgICAgZWRnZUNvdW50OiBwYXJzZUludChyZXNwb25zZS5lZGdlX2NvdW50IHx8ICcwJywgMTApLFxuICAgICAgbGFiZWxDb3VudHMsXG4gICAgICBlZGdlTGFiZWxDb3VudHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZhbGlkYXRlIHRoZSBSQkFDIHBlcm1pc3Npb24gY2FjaGUuXG4gICAqL1xuICBhc3luYyBpbnZhbGlkYXRlUGVybWlzc2lvbkNhY2hlKHVzZXJuYW1lOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgYXdhaXQgcHJvbWlzaWZ5Q2FsbChcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuYWRtaW5TZXJ2aWNlLFxuICAgICAgJ0ludmFsaWRhdGVQZXJtaXNzaW9uQ2FjaGUnLFxuICAgICAgeyB1c2VybmFtZSB9LFxuICAgICAgbWV0YWRhdGFcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXIgbWFudWFsIGNvbXBhY3Rpb24gb2YgdGhlIGRhdGFiYXNlIHN0b3JhZ2UuXG4gICAqL1xuICBhc3luYyBjb21wYWN0KCk6IFByb21pc2U8Q29tcGFjdFJlc3VsdD4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmFkbWluU2VydmljZSxcbiAgICAgICdDb21wYWN0JyxcbiAgICAgIHt9LFxuICAgICAgbWV0YWRhdGFcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdWNjZXNzIHx8IGZhbHNlLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBzeXN0ZW0tbGV2ZWwgbWV0cmljcyAoQ1BVLCBtZW1vcnksIGRpc2sgSS9PLCBzdG9yYWdlLCBuZXR3b3JrKS5cbiAgICovXG4gIGFzeW5jIGdldFN5c3RlbU1ldHJpY3MoKTogUHJvbWlzZTxTeXN0ZW1NZXRyaWNzPiB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmN0eC5nZXRTZXNzaW9uTWV0YWRhdGEoKTtcbiAgICBjb25zdCByZXNwb25zZTogYW55ID0gYXdhaXQgcHJvbWlzaWZ5Q2FsbChcbiAgICAgIHRoaXMuY3R4LmNsaWVudHMuYWRtaW5TZXJ2aWNlLFxuICAgICAgJ0dldFN5c3RlbU1ldHJpY3MnLFxuICAgICAge30sXG4gICAgICBtZXRhZGF0YVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3B1OiByZXNwb25zZS5jcHVcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBwcm9jZXNzUGVyY2VudDogcmVzcG9uc2UuY3B1LnByb2Nlc3NfcGVyY2VudCB8fCAwLFxuICAgICAgICAgICAgc3lzdGVtUGVyY2VudDogcmVzcG9uc2UuY3B1LnN5c3RlbV9wZXJjZW50IHx8IDAsXG4gICAgICAgICAgICBudW1Db3JlczogcmVzcG9uc2UuY3B1Lm51bV9jb3JlcyB8fCAwLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBtZW1vcnk6IHJlc3BvbnNlLm1lbW9yeVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHByb2Nlc3NSc3M6IHBhcnNlSW50KHJlc3BvbnNlLm1lbW9yeS5wcm9jZXNzX3JzcyB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIGhlYXBBbGxvYzogcGFyc2VJbnQocmVzcG9uc2UubWVtb3J5LmhlYXBfYWxsb2MgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICBoZWFwU3lzOiBwYXJzZUludChyZXNwb25zZS5tZW1vcnkuaGVhcF9zeXMgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICBzdGFja0luVXNlOiBwYXJzZUludChyZXNwb25zZS5tZW1vcnkuc3RhY2tfaW5fdXNlIHx8ICcwJywgMTApLFxuICAgICAgICAgICAgc3lzdGVtVG90YWw6IHBhcnNlSW50KHJlc3BvbnNlLm1lbW9yeS5zeXN0ZW1fdG90YWwgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICBzeXN0ZW1BdmFpbGFibGU6IHBhcnNlSW50KHJlc3BvbnNlLm1lbW9yeS5zeXN0ZW1fYXZhaWxhYmxlIHx8ICcwJywgMTApLFxuICAgICAgICAgICAgc3lzdGVtVXNlZDogcGFyc2VJbnQocmVzcG9uc2UubWVtb3J5LnN5c3RlbV91c2VkIHx8ICcwJywgMTApLFxuICAgICAgICAgICAgc3lzdGVtVXNlZFBlcmNlbnQ6IHJlc3BvbnNlLm1lbW9yeS5zeXN0ZW1fdXNlZF9wZXJjZW50IHx8IDAsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGRpc2tJTzogcmVzcG9uc2UuZGlza19pb1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHJlYWRCeXRlczogcGFyc2VJbnQocmVzcG9uc2UuZGlza19pby5yZWFkX2J5dGVzIHx8ICcwJywgMTApLFxuICAgICAgICAgICAgd3JpdGVCeXRlczogcGFyc2VJbnQocmVzcG9uc2UuZGlza19pby53cml0ZV9ieXRlcyB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIHJlYWRDb3VudDogcGFyc2VJbnQocmVzcG9uc2UuZGlza19pby5yZWFkX2NvdW50IHx8ICcwJywgMTApLFxuICAgICAgICAgICAgd3JpdGVDb3VudDogcGFyc2VJbnQocmVzcG9uc2UuZGlza19pby53cml0ZV9jb3VudCB8fCAnMCcsIDEwKSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgc3RvcmFnZTogcmVzcG9uc2Uuc3RvcmFnZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIGRiUGF0aDogcmVzcG9uc2Uuc3RvcmFnZS5kYl9wYXRoIHx8ICcnLFxuICAgICAgICAgICAgZGJTaXplQnl0ZXM6IHBhcnNlSW50KHJlc3BvbnNlLnN0b3JhZ2UuZGJfc2l6ZV9ieXRlcyB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIHZvbHVtZVRvdGFsOiBwYXJzZUludChyZXNwb25zZS5zdG9yYWdlLnZvbHVtZV90b3RhbCB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIHZvbHVtZUZyZWU6IHBhcnNlSW50KHJlc3BvbnNlLnN0b3JhZ2Uudm9sdW1lX2ZyZWUgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICB2b2x1bWVVc2VkOiBwYXJzZUludChyZXNwb25zZS5zdG9yYWdlLnZvbHVtZV91c2VkIHx8ICcwJywgMTApLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBuZXR3b3JrOiByZXNwb25zZS5uZXR3b3JrXG4gICAgICAgID8ge1xuICAgICAgICAgICAgYnl0ZXNTZW50OiBwYXJzZUludChyZXNwb25zZS5uZXR3b3JrLmJ5dGVzX3NlbnQgfHwgJzAnLCAxMCksXG4gICAgICAgICAgICBieXRlc1JlY3Y6IHBhcnNlSW50KHJlc3BvbnNlLm5ldHdvcmsuYnl0ZXNfcmVjdiB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIHBhY2tldHNTZW50OiBwYXJzZUludChyZXNwb25zZS5uZXR3b3JrLnBhY2tldHNfc2VudCB8fCAnMCcsIDEwKSxcbiAgICAgICAgICAgIHBhY2tldHNSZWN2OiBwYXJzZUludChyZXNwb25zZS5uZXR3b3JrLnBhY2tldHNfcmVjdiB8fCAnMCcsIDEwKSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogV2FpdCBmb3IgdGhlIGNvbXB1dGluZyBlbmdpbmUgdG9wb2xvZ3kgdG8gYmUgcmVhZHkuXG4gICAqL1xuICBhc3luYyB3YWl0Rm9yQ29tcHV0ZVRvcG9sb2d5KGdyYXBoTmFtZTogc3RyaW5nLCB0aW1lb3V0TXM6IG51bWJlciA9IDApOiBQcm9taXNlPENvbXB1dGVUb3BvbG9neVJlc3VsdD4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmFkbWluU2VydmljZSxcbiAgICAgICdXYWl0Rm9yQ29tcHV0ZVRvcG9sb2d5JyxcbiAgICAgIHsgZ3JhcGhfbmFtZTogZ3JhcGhOYW1lLCB0aW1lb3V0X21zOiB0aW1lb3V0TXMgfSxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVhZHk6IHJlc3BvbnNlLnJlYWR5IHx8IGZhbHNlLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -35,11 +35,8 @@ class BulkImportService {
|
|
|
35
35
|
}
|
|
36
36
|
const metadata = this.ctx.getSessionMetadata();
|
|
37
37
|
const response = await (0, services_1.promisifyCall)(this.ctx.clients.bulkImportService, 'StartBulkImport', request, metadata);
|
|
38
|
-
if (!response.success) {
|
|
39
|
-
throw new Error(`Start bulk import failed: ${response.message || 'unknown error'}`);
|
|
40
|
-
}
|
|
41
38
|
return {
|
|
42
|
-
success:
|
|
39
|
+
success: response.success || false,
|
|
43
40
|
sessionId: response.session_id || '',
|
|
44
41
|
message: response.message || '',
|
|
45
42
|
};
|
|
@@ -105,4 +102,4 @@ class BulkImportService {
|
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
104
|
exports.BulkImportService = BulkImportService;
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVsay1pbXBvcnQtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9idWxrLWltcG9ydC1zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7R0FFRzs7O0FBV0gsMENBQTRDO0FBRTVDOztHQUVHO0FBQ0gsTUFBYSxpQkFBaUI7SUFDUjtJQUFwQixZQUFvQixHQUFtQjtRQUFuQixRQUFHLEdBQUgsR0FBRyxDQUFnQjtJQUFHLENBQUM7SUFFM0M7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBaUIsRUFBRSxPQUEyQjtRQUNsRSxNQUFNLE9BQU8sR0FBUTtZQUNuQixVQUFVLEVBQUUsU0FBUztTQUN0QixDQUFDO1FBRUYsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksT0FBTyxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDMUMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEUsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzlELENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUEsd0JBQWEsRUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQ2xDLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUM7UUFFRixPQUFPO1lBQ0wsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLElBQUksS0FBSztZQUNsQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ3BDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUU7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFpQjtRQUNoQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUk7WUFDYixXQUFXLEVBQUUsQ0FBQztZQUNkLG1CQUFtQixFQUFFLENBQUM7WUFDdEIsT0FBTyxFQUFFLDZFQUE2RTtTQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxhQUFhLENBQUMsU0FBaUI7UUFDbkMsTUFBTSxPQUFPLEdBQUc7WUFDZCxVQUFVLEVBQUUsU0FBUztTQUN0QixDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE1BQU0sUUFBUSxHQUFRLE1BQU0sSUFBQSx3QkFBYSxFQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFDbEMsZUFBZSxFQUNmLE9BQU8sRUFDUCxRQUFRLENBQ1QsQ0FBQztRQUVGLE9BQU87WUFDTCxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxLQUFLO1lBQ2xDLFlBQVksRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3pELE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLEVBQUU7U0FDaEMsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFNBQWlCO1FBQ3JDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsVUFBVSxFQUFFLFNBQVM7U0FDdEIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUEsd0JBQWEsRUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQ2xDLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUM7UUFFRixPQUFPO1lBQ0wsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPLElBQUksS0FBSztZQUNsQyxPQUFPLEVBQUUsUUFBUSxDQUFDLE9BQU8sSUFBSSxFQUFFO1NBQ2hDLENBQUM7SUFDSixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQWlCO1FBQ3pDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsVUFBVSxFQUFFLFNBQVM7U0FDdEIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBUSxNQUFNLElBQUEsd0JBQWEsRUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQ2xDLHFCQUFxQixFQUNyQixPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUM7UUFFRixPQUFPO1lBQ0wsUUFBUSxFQUFFLFFBQVEsQ0FBQyxTQUFTLElBQUksS0FBSztZQUNyQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ3BDLFdBQVcsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLFlBQVksSUFBSSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxRQUFRLENBQUMscUJBQXFCLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUN4RSxTQUFTLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNuRCxZQUFZLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxhQUFhLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQztTQUMxRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBM0hELDhDQTJIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQnVsayBpbXBvcnQgc2VydmljZSBoYW5kbGVzIGJ1bGsgaW1wb3J0IHNlc3Npb24gbWFuYWdlbWVudC5cbiAqL1xuXG5pbXBvcnQgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gJy4vc2VydmljZS1jb250ZXh0JztcbmltcG9ydCB7XG4gIEJ1bGtJbXBvcnRPcHRpb25zLFxuICBCdWxrSW1wb3J0U2Vzc2lvbixcbiAgQ2hlY2twb2ludFJlc3VsdCxcbiAgRW5kQnVsa0ltcG9ydFJlc3VsdCxcbiAgQWJvcnRCdWxrSW1wb3J0UmVzdWx0LFxuICBCdWxrSW1wb3J0U3RhdHVzLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBwcm9taXNpZnlDYWxsIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuXG4vKipcbiAqIEJ1bGsgaW1wb3J0IHNlcnZpY2UgZm9yIG1hbmFnaW5nIGJ1bGsgaW1wb3J0IHNlc3Npb25zLlxuICovXG5leHBvcnQgY2xhc3MgQnVsa0ltcG9ydFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGN0eDogU2VydmljZUNvbnRleHQpIHt9XG5cbiAgLyoqXG4gICAqIFN0YXJ0IGEgYnVsayBpbXBvcnQgc2Vzc2lvbiBmb3Igb3B0aW1pemVkIGhpZ2gtdGhyb3VnaHB1dCBpbnNlcnRzLlxuICAgKiBAcGFyYW0gZ3JhcGhOYW1lIFRhcmdldCBncmFwaCBuYW1lXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGJ1bGsgaW1wb3J0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFzeW5jIHN0YXJ0QnVsa0ltcG9ydChncmFwaE5hbWU6IHN0cmluZywgb3B0aW9ucz86IEJ1bGtJbXBvcnRPcHRpb25zKTogUHJvbWlzZTxCdWxrSW1wb3J0U2Vzc2lvbj4ge1xuICAgIGNvbnN0IHJlcXVlc3Q6IGFueSA9IHtcbiAgICAgIGdyYXBoX25hbWU6IGdyYXBoTmFtZSxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmNoZWNrcG9pbnRFdmVyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3QuY2hlY2twb2ludF9ldmVyeSA9IG9wdGlvbnMuY2hlY2twb2ludEV2ZXJ5LnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgICBpZiAob3B0aW9ucy5lc3RpbWF0ZWROb2RlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlcXVlc3QuZXN0aW1hdGVkX25vZGVzID0gb3B0aW9ucy5lc3RpbWF0ZWROb2Rlcy50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuZXN0aW1hdGVkRWRnZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXF1ZXN0LmVzdGltYXRlZF9lZGdlcyA9IG9wdGlvbnMuZXN0aW1hdGVkRWRnZXMudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5idWxrSW1wb3J0U2VydmljZSxcbiAgICAgICdTdGFydEJ1bGtJbXBvcnQnLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdWNjZXNzIHx8IGZhbHNlLFxuICAgICAgc2Vzc2lvbklkOiByZXNwb25zZS5zZXNzaW9uX2lkIHx8ICcnLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIENoZWNrcG9pbnQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gKi9cbiAgYXN5bmMgY2hlY2twb2ludChzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8Q2hlY2twb2ludFJlc3VsdD4ge1xuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgcmVjb3JkQ291bnQ6IDAsXG4gICAgICBsYXN0Q2hlY2twb2ludENvdW50OiAwLFxuICAgICAgbWVzc2FnZTogJ0NoZWNrcG9pbnQgaGFzIGJlZW4gcmVtb3ZlZDsgdXNlIGVuZEJ1bGtJbXBvcnQgd2hpY2ggcGVyZm9ybXMgYSBmaW5hbCBmbHVzaCcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmQgdGhlIGJ1bGsgaW1wb3J0IHNlc3Npb24gd2l0aCBhIGZpbmFsIGNoZWNrcG9pbnQuXG4gICAqIEBwYXJhbSBzZXNzaW9uSWQgQnVsayBpbXBvcnQgc2Vzc2lvbiBJRFxuICAgKi9cbiAgYXN5bmMgZW5kQnVsa0ltcG9ydChzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8RW5kQnVsa0ltcG9ydFJlc3VsdD4ge1xuICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICBzZXNzaW9uX2lkOiBzZXNzaW9uSWQsXG4gICAgfTtcblxuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5jdHguZ2V0U2Vzc2lvbk1ldGFkYXRhKCk7XG4gICAgY29uc3QgcmVzcG9uc2U6IGFueSA9IGF3YWl0IHByb21pc2lmeUNhbGwoXG4gICAgICB0aGlzLmN0eC5jbGllbnRzLmJ1bGtJbXBvcnRTZXJ2aWNlLFxuICAgICAgJ0VuZEJ1bGtJbXBvcnQnLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdWNjZXNzIHx8IGZhbHNlLFxuICAgICAgdG90YWxSZWNvcmRzOiBwYXJzZUludChyZXNwb25zZS50b3RhbF9yZWNvcmRzIHx8ICcwJywgMTApLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbCB0aGUgYnVsayBpbXBvcnQgc2Vzc2lvbiB3aXRob3V0IGZpbmFsIHN5bmMuXG4gICAqIEBwYXJhbSBzZXNzaW9uSWQgQnVsayBpbXBvcnQgc2Vzc2lvbiBJRFxuICAgKi9cbiAgYXN5bmMgYWJvcnRCdWxrSW1wb3J0KHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxBYm9ydEJ1bGtJbXBvcnRSZXN1bHQ+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgIH07XG5cbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5idWxrSW1wb3J0U2VydmljZSxcbiAgICAgICdBYm9ydEJ1bGtJbXBvcnQnLFxuICAgICAgcmVxdWVzdCxcbiAgICAgIG1ldGFkYXRhXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiByZXNwb25zZS5zdWNjZXNzIHx8IGZhbHNlLFxuICAgICAgbWVzc2FnZTogcmVzcG9uc2UubWVzc2FnZSB8fCAnJyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY3VycmVudCBzdGF0dXMgb2YgYSBidWxrIGltcG9ydCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gc2Vzc2lvbklkIEJ1bGsgaW1wb3J0IHNlc3Npb24gSURcbiAgICovXG4gIGFzeW5jIGdldEJ1bGtJbXBvcnRTdGF0dXMoc2Vzc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPEJ1bGtJbXBvcnRTdGF0dXM+IHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgc2Vzc2lvbl9pZDogc2Vzc2lvbklkLFxuICAgIH07XG5cbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuY3R4LmdldFNlc3Npb25NZXRhZGF0YSgpO1xuICAgIGNvbnN0IHJlc3BvbnNlOiBhbnkgPSBhd2FpdCBwcm9taXNpZnlDYWxsKFxuICAgICAgdGhpcy5jdHguY2xpZW50cy5idWxrSW1wb3J0U2VydmljZSxcbiAgICAgICdHZXRCdWxrSW1wb3J0U3RhdHVzJyxcbiAgICAgIHJlcXVlc3QsXG4gICAgICBtZXRhZGF0YVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXNBY3RpdmU6IHJlc3BvbnNlLmlzX2FjdGl2ZSB8fCBmYWxzZSxcbiAgICAgIGdyYXBoTmFtZTogcmVzcG9uc2UuZ3JhcGhfbmFtZSB8fCAnJyxcbiAgICAgIHJlY29yZENvdW50OiBwYXJzZUludChyZXNwb25zZS5yZWNvcmRfY291bnQgfHwgJzAnLCAxMCksXG4gICAgICBsYXN0Q2hlY2twb2ludENvdW50OiBwYXJzZUludChyZXNwb25zZS5sYXN0X2NoZWNrcG9pbnRfY291bnQgfHwgJzAnLCAxMCksXG4gICAgICBjcmVhdGVkQXQ6IHBhcnNlSW50KHJlc3BvbnNlLmNyZWF0ZWRfYXQgfHwgJzAnLCAxMCksXG4gICAgICBsYXN0QWN0aXZpdHk6IHBhcnNlSW50KHJlc3BvbnNlLmxhc3RfYWN0aXZpdHkgfHwgJzAnLCAxMCksXG4gICAgfTtcbiAgfVxufVxuIl19
|