@decaf-ts/core 0.5.23 → 0.5.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core.cjs +427 -411
- package/dist/core.esm.cjs +429 -414
- package/lib/esm/identity/utils.d.ts +1 -0
- package/lib/esm/identity/utils.js +7 -3
- package/lib/esm/index.d.ts +2 -2
- package/lib/esm/index.js +4 -3
- package/lib/esm/model/BaseModel.js +1 -1
- package/lib/esm/persistence/Adapter.d.ts +8 -5
- package/lib/esm/persistence/Adapter.js +14 -12
- package/lib/esm/persistence/Dispatch.d.ts +6 -11
- package/lib/esm/persistence/Dispatch.js +15 -7
- package/lib/esm/persistence/Sequence.js +1 -1
- package/lib/esm/persistence/index.d.ts +1 -1
- package/lib/esm/persistence/index.js +3 -2
- package/lib/esm/persistence/types.d.ts +5 -0
- package/lib/esm/persistence/types.js +1 -1
- package/lib/esm/ram/RamSequence.d.ts +2 -2
- package/lib/esm/ram/RamSequence.js +5 -5
- package/lib/esm/ram/model/{RamSequence.d.ts → RamSequenceModel.d.ts} +2 -2
- package/lib/esm/ram/model/RamSequenceModel.js +51 -0
- package/lib/esm/ram/model/index.d.ts +1 -1
- package/lib/esm/ram/model/index.js +2 -2
- package/lib/esm/repository/Repository.js +5 -4
- package/lib/esm/repository/injectables.js +2 -2
- package/lib/esm/repository/utils.js +3 -3
- package/lib/identity/utils.cjs +8 -3
- package/lib/identity/utils.d.ts +1 -0
- package/lib/index.cjs +4 -3
- package/lib/index.d.ts +2 -2
- package/lib/model/BaseModel.cjs +1 -1
- package/lib/persistence/Adapter.cjs +14 -12
- package/lib/persistence/Adapter.d.ts +8 -5
- package/lib/persistence/Dispatch.cjs +15 -7
- package/lib/persistence/Dispatch.d.ts +6 -11
- package/lib/persistence/Sequence.cjs +1 -1
- package/lib/persistence/index.cjs +3 -2
- package/lib/persistence/index.d.ts +1 -1
- package/lib/persistence/types.cjs +1 -1
- package/lib/persistence/types.d.ts +5 -0
- package/lib/ram/RamSequence.cjs +5 -5
- package/lib/ram/RamSequence.d.ts +2 -2
- package/lib/ram/model/RamSequenceModel.cjs +54 -0
- package/lib/ram/model/{RamSequence.d.ts → RamSequenceModel.d.ts} +2 -2
- package/lib/ram/model/index.cjs +2 -2
- package/lib/ram/model/index.d.ts +1 -1
- package/lib/repository/Repository.cjs +4 -3
- package/lib/repository/injectables.cjs +2 -2
- package/lib/repository/utils.cjs +3 -3
- package/package.json +1 -1
- package/lib/esm/ram/model/RamSequence.js +0 -51
- package/lib/ram/model/RamSequence.cjs +0 -54
@@ -786,8 +786,7 @@ class Repository extends db_decorators_1.Repository {
|
|
786
786
|
* @return {string} The column name for the attribute.
|
787
787
|
*/
|
788
788
|
static column(model, attribute) {
|
789
|
-
|
790
|
-
return metadata ? metadata : attribute;
|
789
|
+
return (0, utils_1.getColumnName)(model, attribute);
|
791
790
|
}
|
792
791
|
}
|
793
792
|
exports.Repository = Repository;
|
@@ -803,4 +802,6 @@ __decorate([
|
|
803
802
|
__metadata("design:paramtypes", [Object]),
|
804
803
|
__metadata("design:returntype", void 0)
|
805
804
|
], Repository.prototype, "unObserve", null);
|
806
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvc2l0b3J5L1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkRBY2lDO0FBR2pDLDBEQUFpRDtBQUNqRCx5RUFBb0U7QUFDcEUsOERBQTJEO0FBQzNELCtDQUE2QztBQUc3QyxxREFBa0Q7QUFFbEQsNERBQW1EO0FBSW5ELG1EQUFpRDtBQUNqRCxnRUFBaUQ7QUFFakQsMEVBQWlFO0FBQ2pFLGdEQUFpQztBQTBCakM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxNQUFhLFVBT1gsU0FBUSwwQkFBWTthQUdMLFdBQU0sR0FHakIsRUFBRSxBQUhlLENBR2Q7SUFZUDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FDVCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQWtDLENBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBYyxPQUFPO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNoQixNQUFNLElBQUksNkJBQWEsQ0FDckIsc0dBQXNHLENBQ3ZHLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFjLFNBQVM7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQyxV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USxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQ2xDLGlCQUFPLENBQUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsTUFBTSxDQUFDLEVBQ25DLEtBQUssRUFDTCxTQUFTLENBQ1YsQ0FBQztRQUNGLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN6QyxDQUFDOztBQXppQ0gsZ0NBMGlDQztBQW5WQztJQURDLElBQUEsYUFBSyxHQUFFOzs7O3lDQWVQO0FBV0Q7SUFEQyxJQUFBLGFBQUssR0FBRTs7OzsyQ0FpQlAiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsXG4gIENvbnRleHQsXG4gIERCS2V5cyxcbiAgRGVmYXVsdFNlcGFyYXRvcixcbiAgZW5mb3JjZURCRGVjb3JhdG9ycyxcbiAgZmluZFByaW1hcnlLZXksXG4gIEludGVybmFsRXJyb3IsXG4gIElSZXBvc2l0b3J5LFxuICBPcGVyYXRpb25LZXlzLFxuICBSZXBvc2l0b3J5IGFzIFJlcCxcbiAgUmVwb3NpdG9yeUZsYWdzLFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIHdyYXBNZXRob2RXaXRoQ29udGV4dCxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvT2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBPYnNlcnZlciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL09ic2VydmVyXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9yZGVyRGlyZWN0aW9uIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZXF1ZW5jZU9wdGlvbnNcIjtcbmltcG9ydCB7IFF1ZXJpYWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1F1ZXJpYWJsZVwiO1xuaW1wb3J0IHsgUmVmbGVjdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgSW5kZXhNZXRhZGF0YSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZSB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9TZXF1ZW5jZVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4uL3F1ZXJ5L0NvbmRpdGlvblwiO1xuaW1wb3J0IHsgV2hlcmVPcHRpb24gfSBmcm9tIFwiLi4vcXVlcnkvb3B0aW9uc1wiO1xuaW1wb3J0IHsgT3JkZXJCeVNlbGVjdG9yLCBTZWxlY3RTZWxlY3RvciB9IGZyb20gXCIuLi9xdWVyeS9zZWxlY3RvcnNcIjtcbmltcG9ydCB7IGdldFRhYmxlTmFtZSB9IGZyb20gXCIuLi9pZGVudGl0eS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlcyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IE9ic2VydmVySGFuZGxlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9PYnNlcnZlckhhbmRsZXJcIjtcbmltcG9ydCB7IGZpbmFsIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQge1xuICBFdmVudElkcyxcbiAgSW5mZXJyZWRBZGFwdGVyQ29uZmlnLFxuICB0eXBlIE9ic2VydmVyRmlsdGVyLFxufSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSBhbGlhcyBmb3IgUmVwb3NpdG9yeSBjbGFzcyB3aXRoIHNpbXBsaWZpZWQgZ2VuZXJpYyBwYXJhbWV0ZXJzLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBtb3JlIGNvbmNpc2Ugd2F5IHRvIHJlZmVyZW5jZSB0aGUgUmVwb3NpdG9yeSBjbGFzcyB3aXRoIGl0cyBnZW5lcmljIHBhcmFtZXRlcnMuXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZS5cbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZS5cbiAqIEB0ZW1wbGF0ZSBRIC0gVGhlIHF1ZXJ5IHR5cGUuXG4gKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUuXG4gKiBAdHlwZWRlZiBSZXBvXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IHR5cGUgUmVwbzxcbiAgTSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+LFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzID0gYW55LFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPiA9IGFueSxcbiAgUSA9IGFueSxcbiAgQSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIFEsIEYsIEM+ID0gYW55LFxuPiA9IFJlcG9zaXRvcnk8TSwgUSwgQSwgRiwgQz47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvcmUgcmVwb3NpdG9yeSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YWJhc2Ugb3BlcmF0aW9ucyBvbiBtb2RlbHMgb24gYSB0YWJsZSBieSB0YWJsZSB3YXkuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBDUlVEIG9wZXJhdGlvbnMsIHF1ZXJ5aW5nIGNhcGFiaWxpdGllcywgYW5kIG9ic2VydmVyIHBhdHRlcm4gaW1wbGVtZW50YXRpb24gZm9yIG1vZGVsIHBlcnNpc3RlbmNlLlxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gKiBAdGVtcGxhdGUgUSAtIFRoZSBxdWVyeSB0eXBlIHVzZWQgYnkgdGhlIGFkYXB0ZXIuXG4gKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGUuXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgZm9yIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge0F9IFthZGFwdGVyXSAtIE9wdGlvbmFsIGFkYXB0ZXIgaW5zdGFuY2UgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBbY2xhenpdIC0gT3B0aW9uYWwgY29uc3RydWN0b3IgZm9yIHRoZSBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7Li4uYW55W119IFthcmdzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciByZXBvc2l0b3J5IGluaXRpYWxpemF0aW9uLlxuICogQGNsYXNzIFJlcG9zaXRvcnlcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGluZyBhIHJlcG9zaXRvcnkgZm9yIFVzZXIgbW9kZWxcbiAqIGNvbnN0IHVzZXJSZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbChVc2VyKTtcbiAqXG4gKiAvLyBVc2luZyB0aGUgcmVwb3NpdG9yeSBmb3IgQ1JVRCBvcGVyYXRpb25zXG4gKiBjb25zdCB1c2VyID0gYXdhaXQgdXNlclJlcG8uY3JlYXRlKG5ldyBVc2VyKHsgbmFtZTogJ0pvaG4nIH0pKTtcbiAqIGNvbnN0IHJldHJpZXZlZFVzZXIgPSBhd2FpdCB1c2VyUmVwby5yZWFkKHVzZXIuaWQpO1xuICogdXNlci5uYW1lID0gJ0phbmUnO1xuICogYXdhaXQgdXNlclJlcG8udXBkYXRlKHVzZXIpO1xuICogYXdhaXQgdXNlclJlcG8uZGVsZXRlKHVzZXIuaWQpO1xuICpcbiAqIC8vIFF1ZXJ5aW5nIHdpdGggY29uZGl0aW9uc1xuICogY29uc3QgdXNlcnMgPSBhd2FpdCB1c2VyUmVwb1xuICogICAuc2VsZWN0KClcbiAqICAgLndoZXJlKHsgbmFtZTogJ0phbmUnIH0pXG4gKiAgIC5vcmRlckJ5KCdjcmVhdGVkQXQnLCBPcmRlckRpcmVjdGlvbi5EU0MpXG4gKiAgIC5saW1pdCgxMClcbiAqICAgLmV4ZWN1dGUoKTtcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDbGllbnQgQ29kZVxuICogICBwYXJ0aWNpcGFudCBSIGFzIFJlcG9zaXRvcnlcbiAqICAgcGFydGljaXBhbnQgQSBhcyBBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IERCIGFzIERhdGFiYXNlXG4gKiAgIHBhcnRpY2lwYW50IE8gYXMgT2JzZXJ2ZXJzXG4gKlxuICogICBDLT4+K1I6IGNyZWF0ZShtb2RlbClcbiAqICAgUi0+PlI6IGNyZWF0ZVByZWZpeChtb2RlbClcbiAqICAgUi0+PitBOiBwcmVwYXJlKG1vZGVsKVxuICogICBBLS0+Pi1SOiBwcmVwYXJlZCBkYXRhXG4gKiAgIFItPj4rQTogY3JlYXRlKHRhYmxlLCBpZCwgcmVjb3JkKVxuICogICBBLT4+K0RCOiBJbnNlcnQgT3BlcmF0aW9uXG4gKiAgIERCLS0+Pi1BOiBSZXN1bHRcbiAqICAgQS0tPj4tUjogcmVjb3JkXG4gKiAgIFItPj4rQTogcmV2ZXJ0KHJlY29yZClcbiAqICAgQS0tPj4tUjogbW9kZWwgaW5zdGFuY2VcbiAqICAgUi0+PlI6IGNyZWF0ZVN1ZmZpeChtb2RlbClcbiAqICAgUi0+PitPOiB1cGRhdGVPYnNlcnZlcnModGFibGUsIENSRUFURSwgaWQpXG4gKiAgIE8tLT4+LVI6IE5vdGlmaWNhdGlvbiBjb21wbGV0ZVxuICogICBSLS0+Pi1DOiBjcmVhdGVkIG1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXBvc2l0b3J5PFxuICAgIE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPixcbiAgICBRLFxuICAgIEEgZXh0ZW5kcyBBZGFwdGVyPGFueSwgYW55LCBRLCBGLCBDPixcbiAgICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzID0gUmVwb3NpdG9yeUZsYWdzLFxuICAgIEMgZXh0ZW5kcyBDb250ZXh0PEY+ID0gQ29udGV4dDxGPixcbiAgPlxuICBleHRlbmRzIFJlcDxNLCBGLCBDPlxuICBpbXBsZW1lbnRzIE9ic2VydmFibGUsIE9ic2VydmVyLCBRdWVyaWFibGU8TT4sIElSZXBvc2l0b3J5PE0sIEYsIEM+XG57XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICBDb25zdHJ1Y3RvcjxSZXBvPE1vZGVsPj4gfCBSZXBvPE1vZGVsPlxuICA+ID0ge307XG5cbiAgcHJvdGVjdGVkIG9ic2VydmVyczogT2JzZXJ2ZXJbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBvYnNlcnZlckhhbmRsZXI/OiBPYnNlcnZlckhhbmRsZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWRhcHRlciE6IEE7XG4gIHByaXZhdGUgX3RhYmxlTmFtZSE6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9vdmVycmlkZXM/OiBQYXJ0aWFsPEY+O1xuXG4gIHByaXZhdGUgbG9nZ2VyITogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9nZ2VyIGluc3RhbmNlIGZvciB0aGlzIHJlcG9zaXRvcnkuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbG9nZ2VyIGZvciB0aGlzIHJlcG9zaXRvcnkgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4ge0xvZ2dlcn0gVGhlIGxvZ2dlciBpbnN0YW5jZS5cbiAgICovXG4gIGdldCBsb2coKTogTG9nZ2VyIHtcbiAgICBpZiAoIXRoaXMubG9nZ2VyKVxuICAgICAgdGhpcy5sb2dnZXIgPSAoXG4gICAgICAgIHRoaXMuYWRhcHRlcltcImxvZ1wiIGFzIGtleW9mIHR5cGVvZiB0aGlzLmFkYXB0ZXJdIGFzIExvZ2dlclxuICAgICAgKS5mb3IodGhpcy50b1N0cmluZygpKTtcbiAgICByZXR1cm4gdGhpcy5sb2dnZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkYXB0ZXIgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYWRhcHRlciBpbnN0YW5jZSBmb3IgdGhpcyByZXBvc2l0b3J5LlxuICAgKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUuXG4gICAqIEByZXR1cm4ge0F9IFRoZSBhZGFwdGVyIGluc3RhbmNlLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBubyBhZGFwdGVyIGlzIGZvdW5kLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBhZGFwdGVyKCk6IEEge1xuICAgIGlmICghdGhpcy5fYWRhcHRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgTm8gYWRhcHRlciBmb3VuZCBmb3IgdGhpcyByZXBvc2l0b3J5LiBkaWQgeW91IHVzZSB0aGUgQHVzZXMgZGVjb3JhdG9yIG9yIHBhc3MgaXQgaW4gdGhlIGNvbnN0cnVjdG9yP2BcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRhYmxlIG5hbWUgZm9yIHRoaXMgcmVwb3NpdG9yeSdzIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBHZXRzIHRoZSBkYXRhYmFzZSB0YWJsZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcG9zaXRvcnkncyBtb2RlbC5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFibGUgbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl90YWJsZU5hbWUpIHRoaXMuX3RhYmxlTmFtZSA9IFJlcG9zaXRvcnkudGFibGUodGhpcy5jbGFzcyk7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJpbWFyeSBrZXkgcHJvcGVydGllcyBmb3IgdGhpcyByZXBvc2l0b3J5J3MgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IEdldHMgdGhlIHNlcXVlbmNlIG9wdGlvbnMgY29udGFpbmluZyBwcmltYXJ5IGtleSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybiB7U2VxdWVuY2VPcHRpb25zfSBUaGUgcHJpbWFyeSBrZXkgcHJvcGVydGllcy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgcGtQcm9wcygpOiBTZXF1ZW5jZU9wdGlvbnMge1xuICAgIHJldHVybiBzdXBlci5wa1Byb3BzO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyPzogQSwgY2xheno/OiBDb25zdHJ1Y3RvcjxNPiwgLi4uYXJnczogYW55W10pIHtcbiAgICBzdXBlcihjbGF6eik7XG4gICAgaWYgKGFkYXB0ZXIpIHRoaXMuX2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIGlmIChjbGF6eikge1xuICAgICAgUmVwb3NpdG9yeS5yZWdpc3RlcihjbGF6eiwgdGhpcywgdGhpcy5hZGFwdGVyLmFsaWFzKTtcbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGNvbnN0IGZsYXZvdXIgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICAgIEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSxcbiAgICAgICAgICBjbGF6elxuICAgICAgICApO1xuICAgICAgICBpZiAoZmxhdm91ciAmJiBmbGF2b3VyICE9PSBhZGFwdGVyLmZsYXZvdXIpXG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJbmNvbXBhdGlibGUgZmxhdm91cnNcIik7XG4gICAgICAgIHVzZXMoYWRhcHRlci5mbGF2b3VyKShjbGF6eik7XG4gICAgICB9XG4gICAgfVxuICAgIFt0aGlzLmNyZWF0ZUFsbCwgdGhpcy5yZWFkQWxsLCB0aGlzLnVwZGF0ZUFsbCwgdGhpcy5kZWxldGVBbGxdLmZvckVhY2goXG4gICAgICAobSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gbS5uYW1lO1xuICAgICAgICB3cmFwTWV0aG9kV2l0aENvbnRleHQoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAodGhpcyBhcyBhbnkpW25hbWUgKyBcIlByZWZpeFwiXSxcbiAgICAgICAgICBtLFxuICAgICAgICAgICh0aGlzIGFzIGFueSlbbmFtZSArIFwiU3VmZml4XCJdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHByb3h5IHdpdGggb3ZlcnJpZGRlbiByZXBvc2l0b3J5IGZsYWdzLlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgcHJveHkgb2YgdGhpcyByZXBvc2l0b3J5IHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyBvdmVycmlkZGVuLlxuICAgKiBAcGFyYW0ge1BhcnRpYWw8Rj59IGZsYWdzIC0gVGhlIGZsYWdzIHRvIG92ZXJyaWRlLlxuICAgKiBAcmV0dXJuIHtSZXBvc2l0b3J5fSBBIHByb3h5IG9mIHRoaXMgcmVwb3NpdG9yeSB3aXRoIG92ZXJyaWRkZW4gZmxhZ3MuXG4gICAqL1xuICBvdmVycmlkZShmbGFnczogUGFydGlhbDxGPik6IFJlcG9zaXRvcnk8TSwgUSwgQSwgRiwgQz4ge1xuICAgIHRoaXMubG9nXG4gICAgICAuZm9yKHRoaXMub3ZlcnJpZGUpXG4gICAgICAuZGVidWcoYE92ZXJyaWRpbmcgcmVwb3NpdG9yeSBmbGFncyB3aXRoICR7SlNPTi5zdHJpbmdpZnkoZmxhZ3MpfWApO1xuICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgZ2V0OiAodGFyZ2V0OiB0eXBlb2YgdGhpcywgcDogc3RyaW5nIHwgc3ltYm9sLCByZWNlaXZlcjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICBpZiAocCAhPT0gXCJfb3ZlcnJpZGVzXCIpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZXN1bHQsIGZsYWdzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFJlcG9zaXRvcnkgY2xhc3Mgd2l0aCBhIHNwZWNpZmljIGFkYXB0ZXIgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHRlbXBsYXRlIEEgLSBUaGUgdHlwZSBvZiB0aGUgYWRhcHRlci5cbiAgICogQHRlbXBsYXRlIFEgLSBUaGUgdHlwZSBvZiB0aGUgcXVlcnkgYnVpbGRlci5cbiAgICogQHRlbXBsYXRlIEYgLSBUaGUgdHlwZSBvZiB0aGUgZmlsdGVyLlxuICAgKiBAdGVtcGxhdGUgQyAtIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpYWw8SW5mZXJyZWRBZGFwdGVyQ29uZmlnPEE+Pn0gY29uZiAtIGFkYXB0ZXIgY29uZmlndXJhdGlvbnMgdG8gb3ZlcnJpZGUuXG4gICAqIEBwYXJhbSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHJldHVybiBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgUmVwb3NpdG9yeSBjbGFzcyB3aXRoIHRoZSBzcGVjaWZpZWQgYWRhcHRlciBhbmQgYXJndW1lbnRzLlxuICAgKi9cbiAgZm9yKFxuICAgIGNvbmY6IFBhcnRpYWw8SW5mZXJyZWRBZGFwdGVyQ29uZmlnPEE+PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBSZXBvc2l0b3J5PE0sIFEsIEEsIEYsIEM+IHtcbiAgICByZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldDogKHRhcmdldDogYW55LCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHAgPT09IFwiYWRhcHRlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5mb3IoY29uZiwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBvYnNlcnZlciBoYW5kbGVyLlxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYW4gb2JzZXJ2ZXIgaGFuZGxlciBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7T2JzZXJ2ZXJIYW5kbGVyfSBBIG5ldyBvYnNlcnZlciBoYW5kbGVyIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIE9ic2VydmVySGFuZGxlcigpOiBPYnNlcnZlckhhbmRsZXIge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2ZXJIYW5kbGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIGNyZWF0aW9uLlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhlIG1vZGVsIGFuZCBwcmVwYXJlcyBpdCBmb3IgY3JlYXRpb24gaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBtb2RlbCBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gSWYgdGhlIG1vZGVsIGZhaWxzIHZhbGlkYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlUHJlZml4KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8W00sIC4uLmFueVtdXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzPE0sIEMsIEY+KFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgbW9kZWwgPSBuZXcgdGhpcy5jbGFzcyhtb2RlbCk7XG4gICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgIHRoaXMsXG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICApO1xuXG4gICAgY29uc3QgZXJyb3JzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgbW9kZWwuaGFzRXJyb3JzKFxuICAgICAgICAuLi4oY29udGV4dEFyZ3MuY29udGV4dC5nZXQoXCJpZ25vcmVkVmFsaWRhdGlvblByb3BlcnRpZXNcIikgfHwgW10pXG4gICAgICApXG4gICAgKTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy50b1N0cmluZygpKTtcblxuICAgIHJldHVybiBbbW9kZWwsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbW9kZWwgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAc3VtbWFyeSBQZXJzaXN0cyBhIG1vZGVsIGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gVGhlIGNyZWF0ZWQgbW9kZWwgd2l0aCB1cGRhdGVkIHByb3BlcnRpZXMuXG4gICAqL1xuICBhc3luYyBjcmVhdGUobW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQsIHRyYW5zaWVudCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIHRoaXMucGspO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGUodGhpcy50YWJsZU5hbWUsIGlkLCByZWNvcmQsIC4uLmFyZ3MpO1xuICAgIGxldCBjOiBDIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChhcmdzLmxlbmd0aCkgYyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXSBhcyBDO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KFxuICAgICAgcmVjb3JkLFxuICAgICAgdGhpcy5jbGFzcyxcbiAgICAgIHRoaXMucGssXG4gICAgICBpZCxcbiAgICAgIGMgJiYgYy5nZXQoXCJyZWJ1aWxkV2l0aFRyYW5zaWVudFwiKSA/IHRyYW5zaWVudCA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBvc3QtY3JlYXRpb24gaG9vay5cbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgYWZ0ZXIgYSBtb2RlbCBpcyBjcmVhdGVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIGNyZWF0ZWQgbW9kZWwuXG4gICAqIEBwYXJhbSB7Q30gY29udGV4dCAtIFRoZSBvcGVyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gVGhlIHByb2Nlc3NlZCBtb2RlbC5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZVN1ZmZpeChtb2RlbDogTSwgY29udGV4dDogQyk6IFByb21pc2U8TT4ge1xuICAgIHJldHVybiBzdXBlci5jcmVhdGVTdWZmaXgobW9kZWwsIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG11bHRpcGxlIG1vZGVscyBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBzdW1tYXJ5IFBlcnNpc3RzIG11bHRpcGxlIG1vZGVsIGluc3RhbmNlcyB0byB0aGUgZGF0YWJhc2UgaW4gYSBiYXRjaCBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7TVtdfSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFRoZSBjcmVhdGVkIG1vZGVscyB3aXRoIHVwZGF0ZWQgcHJvcGVydGllcy5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZUFsbChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE1bXT4ge1xuICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIG1vZGVscztcbiAgICBjb25zdCBwcmVwYXJlZCA9IG1vZGVscy5tYXAoKG0pID0+IHRoaXMuYWRhcHRlci5wcmVwYXJlKG0sIHRoaXMucGspKTtcbiAgICBjb25zdCBpZHMgPSBwcmVwYXJlZC5tYXAoKHApID0+IHAuaWQpO1xuICAgIGxldCByZWNvcmRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLnJlY29yZCk7XG4gICAgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVBbGwoXG4gICAgICB0aGlzLnRhYmxlTmFtZSxcbiAgICAgIGlkcyBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgICAgcmVjb3JkcyxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiByZWNvcmRzLm1hcCgociwgaSkgPT5cbiAgICAgIHRoaXMuYWRhcHRlci5yZXZlcnQociwgdGhpcy5jbGFzcywgdGhpcy5waywgaWRzW2ldIGFzIHN0cmluZyB8IG51bWJlcilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBtdWx0aXBsZSBtb2RlbHMgZm9yIGNyZWF0aW9uLlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgbXVsdGlwbGUgbW9kZWxzIGFuZCBwcmVwYXJlcyB0aGVtIGZvciBjcmVhdGlvbiBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7TVtdfSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBtb2RlbHMgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIGFueSBtb2RlbCBmYWlscyB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZUFsbFByZWZpeChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGF3YWl0IENvbnRleHQuYXJncyhcbiAgICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgICAgdGhpcy5jbGFzcyxcbiAgICAgIGFyZ3MsXG4gICAgICB0aGlzLmFkYXB0ZXIsXG4gICAgICB0aGlzLl9vdmVycmlkZXMgfHwge31cbiAgICApO1xuICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICAgIGNvbnN0IG9wdHMgPSBSZXBvc2l0b3J5LmdldFNlcXVlbmNlT3B0aW9ucyhtb2RlbHNbMF0pO1xuICAgIGxldCBpZHM6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCB1bmRlZmluZWQpW10gPSBbXTtcbiAgICBpZiAob3B0cy50eXBlKSB7XG4gICAgICBpZiAoIW9wdHMubmFtZSkgb3B0cy5uYW1lID0gU2VxdWVuY2UucGsobW9kZWxzWzBdKTtcbiAgICAgIGlkcyA9IGF3YWl0IChhd2FpdCB0aGlzLmFkYXB0ZXIuU2VxdWVuY2Uob3B0cykpLnJhbmdlKG1vZGVscy5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZHMgPSBtb2RlbHMubWFwKChtLCBpKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbVt0aGlzLnBrXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIGBQcmltYXJ5IGtleSBpcyBub3QgZGVmaW5lZCBmb3IgbW9kZWwgaW4gcG9zaXRpb24gJHtpfWBcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gbVt0aGlzLnBrXSBhcyBzdHJpbmc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtb2RlbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1vZGVscy5tYXAoYXN5bmMgKG0sIGkpID0+IHtcbiAgICAgICAgbSA9IG5ldyB0aGlzLmNsYXNzKG0pO1xuICAgICAgICBpZiAob3B0cy50eXBlKSBtW3RoaXMucGtdID0gaWRzW2ldIGFzIE1ba2V5b2YgTV07XG4gICAgICAgIGF3YWl0IGVuZm9yY2VEQkRlY29yYXRvcnMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgICAgIG0sXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5PTlxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGlnbm9yZWRQcm9wcyA9XG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LmdldChcImlnbm9yZWRWYWxpZGF0aW9uUHJvcGVydGllc1wiKSB8fCBbXTtcblxuICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcCgobSkgPT4gUHJvbWlzZS5yZXNvbHZlKG0uaGFzRXJyb3JzKC4uLmlnbm9yZWRQcm9wcykpKVxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gZXJyb3JzLnJlZHVjZSgoYWNjdW06IHN0cmluZyB8IHVuZGVmaW5lZCwgZSwgaSkgPT4ge1xuICAgICAgaWYgKGUpXG4gICAgICAgIGFjY3VtID1cbiAgICAgICAgICB0eXBlb2YgYWNjdW0gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gYWNjdW0gKyBgXFxuIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgOiBgIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YDtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCB1bmRlZmluZWQpO1xuXG4gICAgaWYgKGVycm9yTWVzc2FnZXMpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoZXJyb3JNZXNzYWdlcyk7XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBmb3IgcmVhZGluZyBhIG1vZGVsIGJ5IElELlxuICAgKiBAc3VtbWFyeSBQcmVwYXJlcyB0aGUgY29udGV4dCBhbmQgZW5mb3JjZXMgZGVjb3JhdG9ycyBiZWZvcmUgcmVhZGluZyBhIG1vZGVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHByaW1hcnkga2V5IG9mIHRoZSBtb2RlbCB0byByZWFkLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIGtleSBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVhZFByZWZpeChrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGF3YWl0IENvbnRleHQuYXJncyhcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICBjb25zdCBtb2RlbDogTSA9IG5ldyB0aGlzLmNsYXNzKCk7XG4gICAgbW9kZWxbdGhpcy5wa10gPSBrZXkgYXMgTVtrZXlvZiBNXTtcbiAgICBhd2FpdCBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICBtb2RlbCxcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICApO1xuICAgIHJldHVybiBba2V5LCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgYSBtb2RlbCBmcm9tIHRoZSBkYXRhYmFzZSBieSBJRC5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIGEgbW9kZWwgaW5zdGFuY2UgZnJvbSB0aGUgZGF0YWJhc2UgdXNpbmcgaXRzIHByaW1hcnkga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8YmlnaW50fSBpZCAtIFRoZSBwcmltYXJ5IGtleSBvZiB0aGUgbW9kZWwgdG8gcmVhZC5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE0+fSBUaGUgcmV0cmlldmVkIG1vZGVsIGluc3RhbmNlLlxuICAgKi9cbiAgYXN5bmMgcmVhZChpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIGNvbnN0IG0gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmVhZCh0aGlzLnRhYmxlTmFtZSwgaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KG0sIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgZm9yIHJlYWRpbmcgbXVsdGlwbGUgbW9kZWxzIGJ5IElEcy5cbiAgICogQHN1bW1hcnkgUHJlcGFyZXMgdGhlIGNvbnRleHQgYW5kIGVuZm9yY2VzIGRlY29yYXRvcnMgYmVmb3JlIHJlYWRpbmcgbXVsdGlwbGUgbW9kZWxzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfG51bWJlcltdfSBrZXlzIC0gVGhlIHByaW1hcnkga2V5cyBvZiB0aGUgbW9kZWxzIHRvIHJlYWQuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiBUaGUga2V5cyBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVhZEFsbFByZWZpeChcbiAgICBrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5SRUFELFxuICAgICAgdGhpcy5jbGFzcyxcbiAgICAgIGFyZ3MsXG4gICAgICB0aGlzLmFkYXB0ZXIsXG4gICAgICB0aGlzLl9vdmVycmlkZXMgfHwge31cbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKGspID0+IHtcbiAgICAgICAgY29uc3QgbSA9IG5ldyB0aGlzLmNsYXNzKCk7XG4gICAgICAgIG1bdGhpcy5wa10gPSBrIGFzIE1ba2V5b2YgTV07XG4gICAgICAgIHJldHVybiBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgY29udGV4dEFyZ3MuY29udGV4dCxcbiAgICAgICAgICBtLFxuICAgICAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIFtrZXlzLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgbXVsdGlwbGUgbW9kZWxzIGZyb20gdGhlIGRhdGFiYXNlIGJ5IElEcy5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIG11bHRpcGxlIG1vZGVsIGluc3RhbmNlcyBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyB0aGVpciBwcmltYXJ5IGtleXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGtleXMgLSBUaGUgcHJpbWFyeSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gcmVhZC5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFRoZSByZXRyaWV2ZWQgbW9kZWwgaW5zdGFuY2VzLlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgcmVhZEFsbChcbiAgICBrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5yZWFkQWxsKHRoaXMudGFibGVOYW1lLCBrZXlzLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gcmVjb3Jkcy5tYXAoKHIsIGkpID0+XG4gICAgICB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHIsIHRoaXMuY2xhc3MsIHRoaXMucGssIGtleXNbaV0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhIG1vZGVsIGluIHRoZSBkYXRhYmFzZS5cbiAgICogQHN1bW1hcnkgUGVyc2lzdHMgY2hhbmdlcyB0byBhbiBleGlzdGluZyBtb2RlbCBpbnN0YW5jZSBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TT59IFRoZSB1cGRhdGVkIG1vZGVsIHdpdGggcmVmcmVzaGVkIHByb3BlcnRpZXMuXG4gICAqL1xuICBhc3luYyB1cGRhdGUobW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQsIHRyYW5zaWVudCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIHRoaXMucGspO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci51cGRhdGUodGhpcy50YWJsZU5hbWUsIGlkLCByZWNvcmQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KHJlY29yZCwgdGhpcy5jbGFzcywgdGhpcy5waywgaWQsIHRyYW5zaWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIHVwZGF0ZS5cbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoZSBtb2RlbCBhbmQgcHJlcGFyZXMgaXQgZm9yIHVwZGF0ZSBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIHByZXBhcmVkIG1vZGVsIGFuZCBjb250ZXh0IGFyZ3VtZW50cy5cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgdGhlIG1vZGVsIGhhcyBubyBwcmltYXJ5IGtleSB2YWx1ZS5cbiAgICogQHRocm93cyB7VmFsaWRhdGlvbkVycm9yfSBJZiB0aGUgbW9kZWwgZmFpbHMgdmFsaWRhdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB1cGRhdGVQcmVmaXgoXG4gICAgbW9kZWw6IE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxbTSwgLi4uYXJnczogYW55W11dPiB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICBjb25zdCBwayA9IG1vZGVsW3RoaXMucGtdIGFzIHN0cmluZztcbiAgICBpZiAoIXBrKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyB2YWx1ZSBmb3IgdGhlIElkIGlzIGRlZmluZWQgdW5kZXIgdGhlIHByb3BlcnR5ICR7dGhpcy5wayBhcyBzdHJpbmd9YFxuICAgICAgKTtcbiAgICBjb25zdCBvbGRNb2RlbCA9IGF3YWl0IHRoaXMucmVhZChwaywgLi4uY29udGV4dEFyZ3MuYXJncyk7XG4gICAgbW9kZWwgPSB0aGlzLm1lcmdlKG9sZE1vZGVsLCBtb2RlbCk7XG4gICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgIHRoaXMsXG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT04sXG4gICAgICBvbGRNb2RlbFxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG4gICAgICBtb2RlbC5oYXNFcnJvcnMoXG4gICAgICAgIG9sZE1vZGVsLFxuICAgICAgICAuLi5SZXBvc2l0b3J5LnJlbGF0aW9ucyh0aGlzLmNsYXNzKSxcbiAgICAgICAgLi4uKGNvbnRleHRBcmdzLmNvbnRleHQuZ2V0KFwiaWdub3JlZFZhbGlkYXRpb25Qcm9wZXJ0aWVzXCIpIHx8IFtdKVxuICAgICAgKVxuICAgICk7XG4gICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMudG9TdHJpbmcoKSk7XG4gICAgaWYgKFJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEob2xkTW9kZWwpKSB7XG4gICAgICBpZiAoIVJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEobW9kZWwpKVxuICAgICAgICBSZXBvc2l0b3J5LnNldE1ldGFkYXRhKG1vZGVsLCBSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsKSk7XG4gICAgfVxuICAgIHJldHVybiBbbW9kZWwsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIG11bHRpcGxlIG1vZGVscyBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBzdW1tYXJ5IFBlcnNpc3RzIGNoYW5nZXMgdG8gbXVsdGlwbGUgZXhpc3RpbmcgbW9kZWwgaW5zdGFuY2VzIGluIHRoZSBkYXRhYmFzZSBpbiBhIGJhdGNoIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtNW119IG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TVtdPn0gVGhlIHVwZGF0ZWQgbW9kZWxzIHdpdGggcmVmcmVzaGVkIHByb3BlcnRpZXMuXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyB1cGRhdGVBbGwobW9kZWxzOiBNW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICBjb25zdCByZWNvcmRzID0gbW9kZWxzLm1hcCgobSkgPT4gdGhpcy5hZGFwdGVyLnByZXBhcmUobSwgdGhpcy5waykpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB0aGlzLmFkYXB0ZXIudXBkYXRlQWxsKFxuICAgICAgdGhpcy50YWJsZU5hbWUsXG4gICAgICByZWNvcmRzLm1hcCgocikgPT4gci5pZCksXG4gICAgICByZWNvcmRzLm1hcCgocikgPT4gci5yZWNvcmQpLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgcmV0dXJuIHVwZGF0ZWQubWFwKCh1LCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydCh1LCB0aGlzLmNsYXNzLCB0aGlzLnBrLCByZWNvcmRzW2ldLmlkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIG11bHRpcGxlIG1vZGVscyBmb3IgdXBkYXRlLlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgbXVsdGlwbGUgbW9kZWxzIGFuZCBwcmVwYXJlcyB0aGVtIGZvciB1cGRhdGUgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnlbXT59IFRoZSBwcmVwYXJlZCBtb2RlbHMgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBhbnkgbW9kZWwgaGFzIG5vIHByaW1hcnkga2V5IHZhbHVlLlxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIGFueSBtb2RlbCBmYWlscyB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZUFsbFByZWZpeChcbiAgICBtb2RlbHM6IE1bXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICBjb25zdCBpZHMgPSBtb2RlbHMubWFwKChtKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IG1bdGhpcy5wa10gYXMgc3RyaW5nO1xuICAgICAgaWYgKCFpZCkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJtaXNzaW5nIGlkIG9uIHVwZGF0ZSBvcGVyYXRpb25cIik7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSk7XG4gICAgY29uc3Qgb2xkTW9kZWxzID0gYXdhaXQgdGhpcy5yZWFkQWxsKGlkcywgLi4uY29udGV4dEFyZ3MuYXJncyk7XG4gICAgbW9kZWxzID0gbW9kZWxzLm1hcCgobSwgaSkgPT4ge1xuICAgICAgbSA9IHRoaXMubWVyZ2Uob2xkTW9kZWxzW2ldLCBtKTtcbiAgICAgIGlmIChSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsc1tpXSkpIHtcbiAgICAgICAgaWYgKCFSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG0pKVxuICAgICAgICAgIFJlcG9zaXRvcnkuc2V0TWV0YWRhdGEobSwgUmVwb3NpdG9yeS5nZXRNZXRhZGF0YShvbGRNb2RlbHNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtO1xuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcCgobSwgaSkgPT5cbiAgICAgICAgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICAgICAgbSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OLFxuICAgICAgICAgIG9sZE1vZGVsc1tpXVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGlnbm9yZWRQcm9wcyA9XG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LmdldChcImlnbm9yZWRWYWxpZGF0aW9uUHJvcGVydGllc1wiKSB8fCBbXTtcblxuICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcCgobSwgaSkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG0uaGFzRXJyb3JzKG9sZE1vZGVsc1tpXSwgbSwgLi4uaWdub3JlZFByb3BzKSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGVycm9ycy5yZWR1Y2UoKGFjY3VtOiBzdHJpbmcgfCB1bmRlZmluZWQsIGUsIGkpID0+IHtcbiAgICAgIGlmIChlKVxuICAgICAgICBhY2N1bSA9XG4gICAgICAgICAgdHlwZW9mIGFjY3VtID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IGFjY3VtICsgYFxcbiAtICR7aX06ICR7ZS50b1N0cmluZygpfWBcbiAgICAgICAgICAgIDogYCAtICR7aX06ICR7ZS50b1N0cmluZygpfWA7XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgdW5kZWZpbmVkKTtcblxuICAgIGlmIChlcnJvck1lc3NhZ2VzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9yTWVzc2FnZXMpO1xuXG4gICAgbW9kZWxzLmZvckVhY2goKG0sIGkpID0+IHtcbiAgICAgIGlmIChSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsc1tpXSkpIHtcbiAgICAgICAgaWYgKCFSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG0pKVxuICAgICAgICAgIFJlcG9zaXRvcnkuc2V0TWV0YWRhdGEobSwgUmVwb3NpdG9yeS5nZXRNZXRhZGF0YShvbGRNb2RlbHNbaV0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW21vZGVscywgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGZvciBkZWxldGluZyBhIG1vZGVsIGJ5IElELlxuICAgKiBAc3VtbWFyeSBQcmVwYXJlcyB0aGUgY29udGV4dCBhbmQgZW5mb3JjZXMgZGVjb3JhdG9ycyBiZWZvcmUgZGVsZXRpbmcgYSBtb2RlbC5cbiAgICogQHBhcmFtIHthbnl9IGtleSAtIFRoZSBwcmltYXJ5IGtleSBvZiB0aGUgbW9kZWwgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIGtleSBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlUHJlZml4KGtleTogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgY29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLnJlYWQoa2V5LCAuLi5jb250ZXh0QXJncy5hcmdzKTtcbiAgICBhd2FpdCBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICBtb2RlbCxcbiAgICAgIE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgICAgT3BlcmF0aW9uS2V5cy5PTlxuICAgICk7XG4gICAgcmV0dXJuIFtrZXksIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWxldGVzIGEgbW9kZWwgZnJvbSB0aGUgZGF0YWJhc2UgYnkgSUQuXG4gICAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBtb2RlbCBpbnN0YW5jZSBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyBpdHMgcHJpbWFyeSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxiaWdpbnR9IGlkIC0gVGhlIHByaW1hcnkga2V5IG9mIHRoZSBtb2RlbCB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gVGhlIGRlbGV0ZWQgbW9kZWwgaW5zdGFuY2UuXG4gICAqL1xuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCBtID0gYXdhaXQgdGhpcy5hZGFwdGVyLmRlbGV0ZSh0aGlzLnRhYmxlTmFtZSwgaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KG0sIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgZm9yIGRlbGV0aW5nIG11bHRpcGxlIG1vZGVscyBieSBJRHMuXG4gICAqIEBzdW1tYXJ5IFByZXBhcmVzIHRoZSBjb250ZXh0IGFuZCBlbmZvcmNlcyBkZWNvcmF0b3JzIGJlZm9yZSBkZWxldGluZyBtdWx0aXBsZSBtb2RlbHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGtleXMgLSBUaGUgcHJpbWFyeSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIGtleXMgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUFsbFByZWZpeChcbiAgICBrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgY29uc3QgbW9kZWxzID0gYXdhaXQgdGhpcy5yZWFkQWxsKGtleXMsIC4uLmNvbnRleHRBcmdzLmFyZ3MpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcChhc3luYyAobSkgPT4ge1xuICAgICAgICByZXR1cm4gZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICAgICAgbSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIFtrZXlzLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBtdWx0aXBsZSBtb2RlbHMgZnJvbSB0aGUgZGF0YWJhc2UgYnkgSURzLlxuICAgKiBAc3VtbWFyeSBSZW1vdmVzIG11bHRpcGxlIG1vZGVsIGluc3RhbmNlcyBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyB0aGVpciBwcmltYXJ5IGtleXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGtleXMgLSBUaGUgcHJpbWFyeSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TVtdPn0gVGhlIGRlbGV0ZWQgbW9kZWwgaW5zdGFuY2VzLlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlQWxsKFxuICAgIGtleXM6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxNW10+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5hZGFwdGVyLmRlbGV0ZUFsbCh0aGlzLnRhYmxlTmFtZSwga2V5cywgLi4uYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdHMubWFwKChyLCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydChyLCB0aGlzLmNsYXNzLCB0aGlzLnBrLCBrZXlzW2ldKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgc2VsZWN0IHF1ZXJ5IHdpdGhvdXQgc3BlY2lmeWluZyBmaWVsZHMuXG4gICAqIEBzdW1tYXJ5IFN0YXJ0cyBidWlsZGluZyBhIHF1ZXJ5IHRoYXQgd2lsbCByZXR1cm4gYWxsIGZpZWxkcyBvZiB0aGUgbW9kZWwuXG4gICAqIEB0ZW1wbGF0ZSBTIC0gVGhlIGFycmF5IHR5cGUgb2Ygc2VsZWN0IHNlbGVjdG9ycy5cbiAgICogQHJldHVybiBBIHF1ZXJ5IGJ1aWxkZXIgZm9yIHRoZSBtb2RlbC5cbiAgICovXG4gIHNlbGVjdDxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgUyBleHRlbmRzIHJlYWRvbmx5IFNlbGVjdFNlbGVjdG9yPE0+W10sXG4gID4oKTogV2hlcmVPcHRpb248TSwgTVtdPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBzZWxlY3QgcXVlcnkgd2l0aCBzcGVjaWZpYyBmaWVsZHMuXG4gICAqIEBzdW1tYXJ5IFN0YXJ0cyBidWlsZGluZyBhIHF1ZXJ5IHRoYXQgd2lsbCByZXR1cm4gb25seSB0aGUgc3BlY2lmaWVkIGZpZWxkcyBvZiB0aGUgbW9kZWwuXG4gICAqIEB0ZW1wbGF0ZSBTIC0gVGhlIGFycmF5IHR5cGUgb2Ygc2VsZWN0IHNlbGVjdG9ycy5cbiAgICogQHBhcmFtIHNlbGVjdG9yIC0gVGhlIGZpZWxkcyB0byBzZWxlY3QuXG4gICAqIEByZXR1cm4gQSBxdWVyeSBidWlsZGVyIGZvciB0aGUgc2VsZWN0ZWQgZmllbGRzLlxuICAgKi9cbiAgc2VsZWN0PFMgZXh0ZW5kcyByZWFkb25seSBTZWxlY3RTZWxlY3RvcjxNPltdPihcbiAgICBzZWxlY3RvcjogcmVhZG9ubHkgWy4uLlNdXG4gICk6IFdoZXJlT3B0aW9uPE0sIFBpY2s8TSwgU1tudW1iZXJdPltdPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZWxlY3QgbWV0aG9kLlxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgcXVlcnkgYnVpbGRlciBmb3IgdGhlIG1vZGVsIHdpdGggb3B0aW9uYWwgZmllbGQgc2VsZWN0aW9uLlxuICAgKiBAdGVtcGxhdGUgUyAtIFRoZSBhcnJheSB0eXBlIG9mIHNlbGVjdCBzZWxlY3RvcnMuXG4gICAqIEBwYXJhbSBbc2VsZWN0b3JdIC0gT3B0aW9uYWwgZmllbGRzIHRvIHNlbGVjdC5cbiAgICogQHJldHVybiBBIHF1ZXJ5IGJ1aWxkZXIuXG4gICAqL1xuICBzZWxlY3Q8UyBleHRlbmRzIHJlYWRvbmx5IFNlbGVjdFNlbGVjdG9yPE0+W10+KFxuICAgIHNlbGVjdG9yPzogcmVhZG9ubHkgWy4uLlNdXG4gICk6IFdoZXJlT3B0aW9uPE0sIE1bXT4gfCBXaGVyZU9wdGlvbjxNLCBQaWNrPE0sIFNbbnVtYmVyXT5bXT4ge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXJcbiAgICAgIC5TdGF0ZW1lbnQ8TT4oKVxuICAgICAgLnNlbGVjdChzZWxlY3RvciBhcyByZWFkb25seSBbLi4uU10pXG4gICAgICAuZnJvbSh0aGlzLmNsYXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBxdWVyeSB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9ucyBhbmQgb3B0aW9ucy5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYSBzaW1wbGlmaWVkIHdheSB0byBxdWVyeSB0aGUgZGF0YWJhc2Ugd2l0aCBjb21tb24gcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtDb25kaXRpb248TT59IGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gdG8gZmlsdGVyIHJlY29yZHMuXG4gICAqIEBwYXJhbSBvcmRlckJ5IC0gVGhlIGZpZWxkIHRvIG9yZGVyIHJlc3VsdHMgYnkuXG4gICAqIEBwYXJhbSB7T3JkZXJEaXJlY3Rpb259IFtvcmRlcj1PcmRlckRpcmVjdGlvbi5BU0NdIC0gVGhlIHNvcnQgZGlyZWN0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xpbWl0XSAtIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NraXBdIC0gT3B0aW9uYWwgbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2tpcC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNW10+fSBUaGUgcXVlcnkgcmVzdWx0cyBhcyBtb2RlbCBpbnN0YW5jZXMuXG4gICAqL1xuICBhc3luYyBxdWVyeShcbiAgICBjb25kaXRpb246IENvbmRpdGlvbjxNPixcbiAgICBvcmRlckJ5OiBrZXlvZiBNLFxuICAgIG9yZGVyOiBPcmRlckRpcmVjdGlvbiA9IE9yZGVyRGlyZWN0aW9uLkFTQyxcbiAgICBsaW1pdD86IG51bWJlcixcbiAgICBza2lwPzogbnVtYmVyXG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3Qgc29ydDogT3JkZXJCeVNlbGVjdG9yPE0+ID0gW29yZGVyQnksIG9yZGVyIGFzIE9yZGVyRGlyZWN0aW9uXTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VsZWN0KCkud2hlcmUoY29uZGl0aW9uKS5vcmRlckJ5KHNvcnQpO1xuICAgIGlmIChsaW1pdCkgcXVlcnkubGltaXQobGltaXQpO1xuICAgIGlmIChza2lwKSBxdWVyeS5vZmZzZXQoc2tpcCk7XG4gICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGFuIG9ic2VydmVyIGZvciB0aGlzIHJlcG9zaXRvcnkuXG4gICAqIEBzdW1tYXJ5IEFkZHMgYW4gb2JzZXJ2ZXIgdGhhdCB3aWxsIGJlIG5vdGlmaWVkIG9mIGNoYW5nZXMgdG8gbW9kZWxzIGluIHRoaXMgcmVwb3NpdG9yeS5cbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXIgLSBUaGUgb2JzZXJ2ZXIgdG8gcmVnaXN0ZXIuXG4gICAqIEBwYXJhbSB7T2JzZXJ2ZXJGaWx0ZXJ9IFtmaWx0ZXJdIC0gT3B0aW9uYWwgZmlsdGVyIHRvIGxpbWl0IHdoaWNoIGV2ZW50cyB0aGUgb2JzZXJ2ZXIgcmVjZWl2ZXMuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBzZWUge09ic2VydmFibGUjb2JzZXJ2ZX1cbiAgICovXG4gIEBmaW5hbCgpXG4gIG9ic2VydmUob2JzZXJ2ZXI6IE9ic2VydmVyLCBmaWx0ZXI/OiBPYnNlcnZlckZpbHRlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5vYnNlcnZlckhhbmRsZXIpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJvYnNlcnZlckhhbmRsZXJcIiwge1xuICAgICAgICB2YWx1ZTogdGhpcy5PYnNlcnZlckhhbmRsZXIoKSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMub2JzZXJ2ZSk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gUmVwb3NpdG9yeS50YWJsZSh0aGlzLmNsYXNzKTtcbiAgICB0aGlzLmFkYXB0ZXIub2JzZXJ2ZSh0aGlzLCAodGFibGU6IHN0cmluZykgPT4gdGFibGVOYW1lID09PSB0YWJsZSk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgbm93IG9ic2VydmluZyAke3RoaXMuYWRhcHRlcn0gZmlsdGVyaW5nIG9uIHRhYmxlID09PSAke3RhYmxlTmFtZX1gXG4gICAgKTtcbiAgICB0aGlzLm9ic2VydmVySGFuZGxlciEub2JzZXJ2ZShvYnNlcnZlciwgZmlsdGVyKTtcbiAgICBsb2cudmVyYm9zZShgUmVnaXN0ZXJlZCBuZXcgb2JzZXJ2ZXIgJHtvYnNlcnZlci50b1N0cmluZygpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbnJlZ2lzdGVycyBhbiBvYnNlcnZlciBmcm9tIHRoaXMgcmVwb3NpdG9yeS5cbiAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbiBvYnNlcnZlciBzbyBpdCB3aWxsIG5vIGxvbmdlciByZWNlaXZlIG5vdGlmaWNhdGlvbnMgb2YgY2hhbmdlcy5cbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXIgLSBUaGUgb2JzZXJ2ZXIgdG8gdW5yZWdpc3Rlci5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgdGhlIG9ic2VydmVyIGhhbmRsZXIgaXMgbm90IGluaXRpYWxpemVkLlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI3VuT2JzZXJ2ZX1cbiAgICovXG4gIEBmaW5hbCgpXG4gIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJIYW5kbGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiT2JzZXJ2ZXJIYW5kbGVyIG5vdCBpbml0aWFsaXplZC4gRGlkIHlvdSByZWdpc3RlciBhbnkgb2JzZXJ2YWJsZXM/XCJcbiAgICAgICk7XG4gICAgdGhpcy5vYnNlcnZlckhhbmRsZXIudW5PYnNlcnZlKG9ic2VydmVyKTtcbiAgICB0aGlzLmxvZ1xuICAgICAgLmZvcih0aGlzLnVuT2JzZXJ2ZSlcbiAgICAgIC52ZXJib3NlKGBPYnNlcnZlciAke29ic2VydmVyLnRvU3RyaW5nKCl9IHJlbW92ZWRgKTtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJIYW5kbGVyLmNvdW50KCkpIHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoXG4gICAgICAgIGBObyBtb3JlIG9ic2VydmVycyByZWdpc3RlcmVkIGZvciAke3RoaXMuYWRhcHRlcn0sIHVuc3Vic2NyaWJpbmdgXG4gICAgICApO1xuICAgICAgdGhpcy5hZGFwdGVyLnVuT2JzZXJ2ZSh0aGlzKTtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYE5vIGxvbmdlciBvYnNlcnZpbmcgYWRhcHRlciAke3RoaXMuYWRhcHRlci5mbGF2b3VyfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTm90aWZpZXMgYWxsIG9ic2VydmVycyBvZiBhbiBldmVudC5cbiAgICogQHN1bW1hcnkgVXBkYXRlcyBhbGwgcmVnaXN0ZXJlZCBvYnNlcnZlcnMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBhIGRhdGFiYXNlIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGUgLSBUaGUgdGFibGUgbmFtZSB3aGVyZSB0aGUgZXZlbnQgb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5c3xCdWxrQ3J1ZE9wZXJhdGlvbktleXN8c3RyaW5nfSBldmVudCAtIFRoZSB0eXBlIG9mIGV2ZW50IHRoYXQgb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7RXZlbnRJZHN9IGlkIC0gVGhlIElEIG9yIElEcyBvZiB0aGUgYWZmZWN0ZWQgcmVjb3Jkcy5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBvYnNlcnZlcnMgaGF2ZSBiZWVuIG5vdGlmaWVkLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiB0aGUgb2JzZXJ2ZXIgaGFuZGxlciBpcyBub3QgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVPYnNlcnZlcnMoXG4gICAgdGFibGU6IHN0cmluZyxcbiAgICBldmVudDogT3BlcmF0aW9uS2V5cyB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyB8IHN0cmluZyxcbiAgICBpZDogRXZlbnRJZHMsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVySGFuZGxlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBcIk9ic2VydmVySGFuZGxlciBub3QgaW5pdGlhbGl6ZWQuIERpZCB5b3UgcmVnaXN0ZXIgYW55IG9ic2VydmFibGVzP1wiXG4gICAgICApO1xuICAgIHRoaXMubG9nXG4gICAgICAuZm9yKHRoaXMudXBkYXRlT2JzZXJ2ZXJzKVxuICAgICAgLnZlcmJvc2UoXG4gICAgICAgIGBVcGRhdGluZyAke3RoaXMub2JzZXJ2ZXJIYW5kbGVyLmNvdW50KCl9IG9ic2VydmVycyBmb3IgJHt0aGlzfWBcbiAgICAgICk7XG4gICAgYXdhaXQgdGhpcy5vYnNlcnZlckhhbmRsZXIudXBkYXRlT2JzZXJ2ZXJzKFxuICAgICAgdGhpcy5sb2csXG4gICAgICB0YWJsZSxcbiAgICAgIGV2ZW50LFxuICAgICAgQXJyYXkuaXNBcnJheShpZClcbiAgICAgICAgPyBpZC5tYXAoKGkpID0+IFNlcXVlbmNlLnBhcnNlVmFsdWUodGhpcy5wa1Byb3BzLnR5cGUsIGkpIGFzIHN0cmluZylcbiAgICAgICAgOiAoU2VxdWVuY2UucGFyc2VWYWx1ZSh0aGlzLnBrUHJvcHMudHlwZSwgaWQpIGFzIHN0cmluZyksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWxpYXMgZm9yIHVwZGF0ZU9ic2VydmVycy5cbiAgICogQHN1bW1hcnkgTm90aWZpZXMgYWxsIG9ic2VydmVycyBvZiBhbiBldmVudCAoYWxpYXMgZm9yIHVwZGF0ZU9ic2VydmVycykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZSAtIFRoZSB0YWJsZSBuYW1lIHdoZXJlIHRoZSBldmVudCBvY2N1cnJlZC5cbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzfEJ1bGtDcnVkT3BlcmF0aW9uS2V5c3xzdHJpbmd9IGV2ZW50IC0gVGhlIHR5cGUgb2YgZXZlbnQgdGhhdCBvY2N1cnJlZC5cbiAgICogQHBhcmFtIHtFdmVudElkc30gaWQgLSBUaGUgSUQgb3IgSURzIG9mIHRoZSBhZmZlY3RlZCByZWNvcmRzLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIG9ic2VydmVycyBoYXZlIGJlZW4gbm90aWZpZWQuXG4gICAqL1xuICBhc3luYyByZWZyZXNoKFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgZXZlbnQ6IE9wZXJhdGlvbktleXMgfCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMgfCBzdHJpbmcsXG4gICAgaWQ6IEV2ZW50SWRzLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9ic2VydmVycyh0YWJsZSwgZXZlbnQsIGlkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBvciByZXRyaWV2ZXMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IHJldHVybnMgYSByZXBvc2l0b3J5IGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIG1vZGVsLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIHRoYXQgZXh0ZW5kcyBSZXBvPE0+LlxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSBPcHRpb25hbCBkZWZhdWx0IGFkYXB0ZXIgZmxhdm91ciBpZiBub3Qgc3BlY2lmaWVkIG9uIHRoZSBtb2RlbC5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gW2FyZ3NdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgcmVwb3NpdG9yeSBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybiB7Un0gQSByZXBvc2l0b3J5IGluc3RhbmNlIGZvciB0aGUgbW9kZWwuXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIG5vIGFkYXB0ZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGZsYXZvdXIuXG4gICAqL1xuICBzdGF0aWMgZm9yTW9kZWw8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+LFxuICAgIGFsaWFzPzogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFIge1xuICAgIGxldCByZXBvOiBSIHwgQ29uc3RydWN0b3I8Uj4gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBfYWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBhbGlhcyB8fFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUiksIG1vZGVsKSB8fFxuICAgICAgQWRhcHRlci5jdXJyZW50Rmxhdm91cjtcbiAgICB0cnkge1xuICAgICAgcmVwbyA9IHRoaXMuZ2V0KG1vZGVsLCBfYWxpYXMpIGFzIENvbnN0cnVjdG9yPFI+IHwgUjtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHJlcG8gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHJlcG8gaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSByZXR1cm4gcmVwbyBhcyBSO1xuXG4gICAgY29uc3QgZmxhdm91cjogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIGFsaWFzIHx8XG4gICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSwgbW9kZWwpIHx8XG4gICAgICAocmVwbyAmJlxuICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSwgcmVwbykpIHx8XG4gICAgICBBZGFwdGVyLmN1cnJlbnRGbGF2b3VyO1xuICAgIGNvbnN0IGFkYXB0ZXI6IEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55PiB8IHVuZGVmaW5lZCA9IGZsYXZvdXJcbiAgICAgID8gQWRhcHRlci5nZXQoZmxhdm91cilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFhZGFwdGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyByZWdpc3RlcmVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIgZm91bmQgZmxhdm91ciAke2ZsYXZvdXJ9YFxuICAgICAgKTtcblxuICAgIHJlcG8gPSByZXBvIHx8IChhZGFwdGVyLnJlcG9zaXRvcnkoKSBhcyBDb25zdHJ1Y3RvcjxSPik7XG4gICAgcmV0dXJuIG5ldyByZXBvKGFkYXB0ZXIsIG1vZGVsLCAuLi5hcmdzKSBhcyBSO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsIGZyb20gdGhlIGNhY2hlLlxuICAgKiBAc3VtbWFyeSBHZXRzIGEgcmVwb3NpdG9yeSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCBtb2RlbCBmcm9tIHRoZSBpbnRlcm5hbCBjYWNoZS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIFRoZSBhZGFwdGVyIGFsaWFzLlxuICAgKiBAcmV0dXJuIHtDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT59IFRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBubyByZXBvc2l0b3J5IGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBtb2RlbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICBhbGlhcz86IHN0cmluZ1xuICApOiBDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT4ge1xuICAgIGxldCBuYW1lID0gUmVwb3NpdG9yeS50YWJsZShtb2RlbCk7XG4gICAgaWYgKGFsaWFzKSB7XG4gICAgICBuYW1lID0gW25hbWUsIGFsaWFzXS5qb2luKERlZmF1bHRTZXBhcmF0b3IpO1xuICAgIH1cbiAgICBpZiAobmFtZSBpbiB0aGlzLl9jYWNoZSlcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZVtuYW1lXSBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFJlcG88TT4+IHwgUmVwbzxNPjtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBDb3VsZCBub3QgZmluZCByZXBvc2l0b3J5IHJlZ2lzdGVyZWQgdW5kZXIgJHtuYW1lfWBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBBc3NvY2lhdGVzIGEgcmVwb3NpdG9yeSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSB3aXRoIGEgbW9kZWwgaW4gdGhlIGludGVybmFsIGNhY2hlLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8UmVwbzxNPj4gfCBSZXBvPE0+fSByZXBvIC0gVGhlIHJlcG9zaXRvcnkgY29uc3RydWN0b3Igb3IgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdIHRoZSBhZGFwdGVyIGFsaWFzL2ZsYXZvdXIuXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIGEgcmVwb3NpdG9yeSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIHRoZSBtb2RlbC5cbiAgICovXG4gIHN0YXRpYyByZWdpc3RlcjxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICByZXBvOiBDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT4sXG4gICAgYWxpYXM/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IG5hbWUgPSBSZXBvc2l0b3J5LnRhYmxlKG1vZGVsKTtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIG5hbWUgPSBbbmFtZSwgYWxpYXNdLmpvaW4oRGVmYXVsdFNlcGFyYXRvcik7XG4gICAgfVxuICAgIGlmIChuYW1lIGluIHRoaXMuX2NhY2hlKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYCR7bmFtZX0gYWxyZWFkeSByZWdpc3RlcmVkIGFzIGEgcmVwb3NpdG9yeWApO1xuICAgIHRoaXMuX2NhY2hlW25hbWVdID0gcmVwbyBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgbWV0YWRhdGEgb24gYSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgQXR0YWNoZXMgbWV0YWRhdGEgdG8gYSBtb2RlbCBpbnN0YW5jZSB1c2luZyBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5LlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHthbnl9IG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIHRvIGF0dGFjaCB0byB0aGUgbW9kZWwuXG4gICAqL1xuICBzdGF0aWMgc2V0TWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSwgbWV0YWRhdGE6IGFueSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBtZXRhZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBtZXRhZGF0YSBmcm9tIGEgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBwcmV2aW91c2x5IGF0dGFjaGVkIG1ldGFkYXRhIGZyb20gYSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4ge2FueX0gVGhlIG1ldGFkYXRhIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBzdGF0aWMgZ2V0TWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgbW9kZWwsXG4gICAgICBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFcbiAgICApO1xuICAgIHJldHVybiBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBtZXRhZGF0YSBmcm9tIGEgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IERlbGV0ZXMgdGhlIG1ldGFkYXRhIHByb3BlcnR5IGZyb20gYSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UuXG4gICAqL1xuICBzdGF0aWMgcmVtb3ZlTWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgbW9kZWwsXG4gICAgICBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFcbiAgICApO1xuICAgIGlmIChkZXNjcmlwdG9yKSBkZWxldGUgKG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBzZXF1ZW5jZSBvcHRpb25zIGZvciBhIG1vZGVsJ3MgcHJpbWFyeSBrZXkuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgc2VxdWVuY2UgY29uZmlndXJhdGlvbiBmb3IgYSBtb2RlbCdzIHByaW1hcnkga2V5IGZyb20gbWV0YWRhdGEuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlLlxuICAgKiBAcmV0dXJuIHtTZXF1ZW5jZU9wdGlvbnN9IFRoZSBzZXF1ZW5jZSBvcHRpb25zIGZvciB0aGUgbW9kZWwncyBwcmltYXJ5IGtleS5cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgbm8gc2VxdWVuY2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIG1vZGVsLlxuICAgKi9cbiAgc3RhdGljIGdldFNlcXVlbmNlT3B0aW9uczxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNKSB7XG4gICAgY29uc3QgcGsgPSBmaW5kUHJpbWFyeUtleShtb2RlbCkuaWQ7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgUmVwb3NpdG9yeS5rZXkoREJLZXlzLklEKSxcbiAgICAgIG1vZGVsLFxuICAgICAgcGsgYXMgc3RyaW5nXG4gICAgKTtcbiAgICBpZiAoIW1ldGFkYXRhKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiTm8gc2VxdWVuY2Ugb3B0aW9ucyBkZWZpbmVkIGZvciBtb2RlbC4gZGlkIHlvdSB1c2UgdGhlIEBwayBkZWNvcmF0b3I/XCJcbiAgICAgICk7XG4gICAgcmV0dXJuIG1ldGFkYXRhIGFzIFNlcXVlbmNlT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgaW5kZXhlcyBkZWZpbmVkIG9uIGEgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbGwgaW5kZXggbWV0YWRhdGEgZnJvbSBhIG1vZGVsJ3MgcHJvcGVydHkgZGVjb3JhdG9ycy5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgSW5kZXhNZXRhZGF0YT4+fSBBIG5lc3RlZCByZWNvcmQgb2YgcHJvcGVydHkgbmFtZXMgdG8gaW5kZXggbWV0YWRhdGEuXG4gICAqL1xuICBzdGF0aWMgaW5kZXhlczxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT4pIHtcbiAgICBjb25zdCBpbmRleERlY29yYXRvcnMgPSBSZWZsZWN0aW9uLmdldEFsbFByb3BlcnR5RGVjb3JhdG9ycyhcbiAgICAgIG1vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbCA6IG5ldyBtb2RlbCgpLFxuICAgICAgREJLZXlzLlJFRkxFQ1RcbiAgICApO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbmRleERlY29yYXRvcnMgfHwge30pLnJlZHVjZShcbiAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgSW5kZXhNZXRhZGF0YT4+LCBbaywgdmFsXSkgPT4ge1xuICAgICAgICBjb25zdCBkZWNzID0gdmFsLmZpbHRlcigodikgPT4gdi5rZXkuc3RhcnRzV2l0aChQZXJzaXN0ZW5jZUtleXMuSU5ERVgpKTtcbiAgICAgICAgaWYgKGRlY3MgJiYgZGVjcy5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRlYyBvZiBkZWNzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGtleSwgcHJvcHMgfSA9IGRlYztcbiAgICAgICAgICAgIGFjY3VtW2tdID0gYWNjdW1ba10gfHwge307XG4gICAgICAgICAgICBhY2N1bVtrXVtrZXldID0gcHJvcHMgYXMgSW5kZXhNZXRhZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgcmVsYXRpb24gcHJvcGVydGllcyBkZWZpbmVkIG9uIGEgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgbWFya2VkIGFzIHJlbGF0aW9ucyBpbiB0aGUgbW9kZWwgaGllcmFyY2h5LlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICogQHBhcmFtIHtNIHwgQ29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yLlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBhcmUgcmVsYXRpb25zLlxuICAgKi9cbiAgc3RhdGljIHJlbGF0aW9uczxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBwcm90b3R5cGUgPVxuICAgICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbFxuICAgICAgICA/IE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2RlbClcbiAgICAgICAgOiAobW9kZWwgYXMgYW55KS5wcm90b3R5cGU7XG4gICAgd2hpbGUgKHByb3RvdHlwZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wczogc3RyaW5nW10gPSBwcm90b3R5cGVbUGVyc2lzdGVuY2VLZXlzLlJFTEFUSU9OU107XG4gICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ucHJvcHMpO1xuICAgICAgfVxuICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHRhYmxlIG5hbWUgZm9yIGEgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgZGF0YWJhc2UgdGFibGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggYSBtb2RlbC5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFibGUgbmFtZSBmb3IgdGhlIG1vZGVsLlxuICAgKi9cbiAgc3RhdGljIHRhYmxlPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldFRhYmxlTmFtZShtb2RlbCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGNvbHVtbiBuYW1lIGZvciBhIG1vZGVsIGF0dHJpYnV0ZS5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBkYXRhYmFzZSBjb2x1bW4gbmFtZSBmb3IgYSBtb2RlbCBwcm9wZXJ0eS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBUaGUgYXR0cmlidXRlL3Byb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbHVtbiBuYW1lIGZvciB0aGUgYXR0cmlidXRlLlxuICAgKi9cbiAgc3RhdGljIGNvbHVtbjxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNLCBhdHRyaWJ1dGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkNPTFVNTiksXG4gICAgICBtb2RlbCxcbiAgICAgIGF0dHJpYnV0ZVxuICAgICk7XG4gICAgcmV0dXJuIG1ldGFkYXRhID8gbWV0YWRhdGEgOiBhdHRyaWJ1dGU7XG4gIH1cbn1cbiJdfQ==
|
805
|
+
if (Adapter_1.Adapter)
|
806
|
+
Adapter_1.Adapter["_baseRepository"] = Repository;
|
807
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZXBvc2l0b3J5L1JlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsMkRBY2lDO0FBR2pDLDBEQUFpRDtBQUNqRCx5RUFBb0U7QUFDcEUsOERBQTJEO0FBQzNELCtDQUE2QztBQUc3QyxxREFBa0Q7QUFFbEQsNERBQW1EO0FBSW5ELG1EQUFnRTtBQUNoRSxnRUFBaUQ7QUFFakQsMEVBQWlFO0FBQ2pFLGdEQUFpQztBQTBCakM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvREc7QUFDSCxNQUFhLFVBT1gsU0FBUSwwQkFBWTthQUdMLFdBQU0sR0FHakIsRUFBRSxBQUhlLENBR2Q7SUFZUDs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQ2QsSUFBSSxDQUFDLE1BQU0sR0FDVCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQWtDLENBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsSUFBYyxPQUFPO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtZQUNoQixNQUFNLElBQUksNkJBQWEsQ0FDckIsc0dBQXNHLENBQ3ZHLENBQUM7UUFDSixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFjLFNBQVM7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRSxPQUFPLElBQUksQ0FBQyxV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QSxxQkFBYSxFQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDOztBQXBpQ0gsZ0NBcWlDQztBQTlVQztJQURDLElBQUEsYUFBSyxHQUFFOzs7O3lDQWVQO0FBV0Q7SUFEQyxJQUFBLGFBQUssR0FBRTs7OzsyQ0FpQlA7QUF1U0gsSUFBSSxpQkFBTztJQUFFLGlCQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsXG4gIENvbnRleHQsXG4gIERCS2V5cyxcbiAgRGVmYXVsdFNlcGFyYXRvcixcbiAgZW5mb3JjZURCRGVjb3JhdG9ycyxcbiAgZmluZFByaW1hcnlLZXksXG4gIEludGVybmFsRXJyb3IsXG4gIElSZXBvc2l0b3J5LFxuICBPcGVyYXRpb25LZXlzLFxuICBSZXBvc2l0b3J5IGFzIFJlcCxcbiAgUmVwb3NpdG9yeUZsYWdzLFxuICBWYWxpZGF0aW9uRXJyb3IsXG4gIHdyYXBNZXRob2RXaXRoQ29udGV4dCxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvT2JzZXJ2YWJsZVwiO1xuaW1wb3J0IHsgdHlwZSBPYnNlcnZlciB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL09ic2VydmVyXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9yZGVyRGlyZWN0aW9uIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlcy9TZXF1ZW5jZU9wdGlvbnNcIjtcbmltcG9ydCB7IFF1ZXJpYWJsZSB9IGZyb20gXCIuLi9pbnRlcmZhY2VzL1F1ZXJpYWJsZVwiO1xuaW1wb3J0IHsgUmVmbGVjdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgSW5kZXhNZXRhZGF0YSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZSB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9TZXF1ZW5jZVwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uIH0gZnJvbSBcIi4uL3F1ZXJ5L0NvbmRpdGlvblwiO1xuaW1wb3J0IHsgV2hlcmVPcHRpb24gfSBmcm9tIFwiLi4vcXVlcnkvb3B0aW9uc1wiO1xuaW1wb3J0IHsgT3JkZXJCeVNlbGVjdG9yLCBTZWxlY3RTZWxlY3RvciB9IGZyb20gXCIuLi9xdWVyeS9zZWxlY3RvcnNcIjtcbmltcG9ydCB7IGdldENvbHVtbk5hbWUsIGdldFRhYmxlTmFtZSB9IGZyb20gXCIuLi9pZGVudGl0eS91dGlsc1wiO1xuaW1wb3J0IHsgdXNlcyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IE9ic2VydmVySGFuZGxlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9PYnNlcnZlckhhbmRsZXJcIjtcbmltcG9ydCB7IGZpbmFsIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQge1xuICBFdmVudElkcyxcbiAgSW5mZXJyZWRBZGFwdGVyQ29uZmlnLFxuICB0eXBlIE9ic2VydmVyRmlsdGVyLFxufSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVHlwZSBhbGlhcyBmb3IgUmVwb3NpdG9yeSBjbGFzcyB3aXRoIHNpbXBsaWZpZWQgZ2VuZXJpYyBwYXJhbWV0ZXJzLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBtb3JlIGNvbmNpc2Ugd2F5IHRvIHJlZmVyZW5jZSB0aGUgUmVwb3NpdG9yeSBjbGFzcyB3aXRoIGl0cyBnZW5lcmljIHBhcmFtZXRlcnMuXG4gKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAqIEB0ZW1wbGF0ZSBGIC0gVGhlIHJlcG9zaXRvcnkgZmxhZ3MgdHlwZS5cbiAqIEB0ZW1wbGF0ZSBDIC0gVGhlIGNvbnRleHQgdHlwZS5cbiAqIEB0ZW1wbGF0ZSBRIC0gVGhlIHF1ZXJ5IHR5cGUuXG4gKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUuXG4gKiBAdHlwZWRlZiBSZXBvXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmNvcmVcbiAqL1xuZXhwb3J0IHR5cGUgUmVwbzxcbiAgTSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+LFxuICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzID0gYW55LFxuICBDIGV4dGVuZHMgQ29udGV4dDxGPiA9IGFueSxcbiAgUSA9IGFueSxcbiAgQSBleHRlbmRzIEFkYXB0ZXI8YW55LCBhbnksIFEsIEYsIEM+ID0gYW55LFxuPiA9IFJlcG9zaXRvcnk8TSwgUSwgQSwgRiwgQz47XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvcmUgcmVwb3NpdG9yeSBpbXBsZW1lbnRhdGlvbiBmb3IgZGF0YWJhc2Ugb3BlcmF0aW9ucyBvbiBtb2RlbHMgb24gYSB0YWJsZSBieSB0YWJsZSB3YXkuXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBDUlVEIG9wZXJhdGlvbnMsIHF1ZXJ5aW5nIGNhcGFiaWxpdGllcywgYW5kIG9ic2VydmVyIHBhdHRlcm4gaW1wbGVtZW50YXRpb24gZm9yIG1vZGVsIHBlcnNpc3RlbmNlLlxuICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gKiBAdGVtcGxhdGUgUSAtIFRoZSBxdWVyeSB0eXBlIHVzZWQgYnkgdGhlIGFkYXB0ZXIuXG4gKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBAdGVtcGxhdGUgRiAtIFRoZSByZXBvc2l0b3J5IGZsYWdzIHR5cGUuXG4gKiBAdGVtcGxhdGUgQyAtIFRoZSBjb250ZXh0IHR5cGUgZm9yIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge0F9IFthZGFwdGVyXSAtIE9wdGlvbmFsIGFkYXB0ZXIgaW5zdGFuY2UgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBbY2xhenpdIC0gT3B0aW9uYWwgY29uc3RydWN0b3IgZm9yIHRoZSBtb2RlbCBjbGFzcy5cbiAqIEBwYXJhbSB7Li4uYW55W119IFthcmdzXSAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIGZvciByZXBvc2l0b3J5IGluaXRpYWxpemF0aW9uLlxuICogQGNsYXNzIFJlcG9zaXRvcnlcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGluZyBhIHJlcG9zaXRvcnkgZm9yIFVzZXIgbW9kZWxcbiAqIGNvbnN0IHVzZXJSZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbChVc2VyKTtcbiAqXG4gKiAvLyBVc2luZyB0aGUgcmVwb3NpdG9yeSBmb3IgQ1JVRCBvcGVyYXRpb25zXG4gKiBjb25zdCB1c2VyID0gYXdhaXQgdXNlclJlcG8uY3JlYXRlKG5ldyBVc2VyKHsgbmFtZTogJ0pvaG4nIH0pKTtcbiAqIGNvbnN0IHJldHJpZXZlZFVzZXIgPSBhd2FpdCB1c2VyUmVwby5yZWFkKHVzZXIuaWQpO1xuICogdXNlci5uYW1lID0gJ0phbmUnO1xuICogYXdhaXQgdXNlclJlcG8udXBkYXRlKHVzZXIpO1xuICogYXdhaXQgdXNlclJlcG8uZGVsZXRlKHVzZXIuaWQpO1xuICpcbiAqIC8vIFF1ZXJ5aW5nIHdpdGggY29uZGl0aW9uc1xuICogY29uc3QgdXNlcnMgPSBhd2FpdCB1c2VyUmVwb1xuICogICAuc2VsZWN0KClcbiAqICAgLndoZXJlKHsgbmFtZTogJ0phbmUnIH0pXG4gKiAgIC5vcmRlckJ5KCdjcmVhdGVkQXQnLCBPcmRlckRpcmVjdGlvbi5EU0MpXG4gKiAgIC5saW1pdCgxMClcbiAqICAgLmV4ZWN1dGUoKTtcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDbGllbnQgQ29kZVxuICogICBwYXJ0aWNpcGFudCBSIGFzIFJlcG9zaXRvcnlcbiAqICAgcGFydGljaXBhbnQgQSBhcyBBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IERCIGFzIERhdGFiYXNlXG4gKiAgIHBhcnRpY2lwYW50IE8gYXMgT2JzZXJ2ZXJzXG4gKlxuICogICBDLT4+K1I6IGNyZWF0ZShtb2RlbClcbiAqICAgUi0+PlI6IGNyZWF0ZVByZWZpeChtb2RlbClcbiAqICAgUi0+PitBOiBwcmVwYXJlKG1vZGVsKVxuICogICBBLS0+Pi1SOiBwcmVwYXJlZCBkYXRhXG4gKiAgIFItPj4rQTogY3JlYXRlKHRhYmxlLCBpZCwgcmVjb3JkKVxuICogICBBLT4+K0RCOiBJbnNlcnQgT3BlcmF0aW9uXG4gKiAgIERCLS0+Pi1BOiBSZXN1bHRcbiAqICAgQS0tPj4tUjogcmVjb3JkXG4gKiAgIFItPj4rQTogcmV2ZXJ0KHJlY29yZClcbiAqICAgQS0tPj4tUjogbW9kZWwgaW5zdGFuY2VcbiAqICAgUi0+PlI6IGNyZWF0ZVN1ZmZpeChtb2RlbClcbiAqICAgUi0+PitPOiB1cGRhdGVPYnNlcnZlcnModGFibGUsIENSRUFURSwgaWQpXG4gKiAgIE8tLT4+LVI6IE5vdGlmaWNhdGlvbiBjb21wbGV0ZVxuICogICBSLS0+Pi1DOiBjcmVhdGVkIG1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXBvc2l0b3J5PFxuICAgIE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPixcbiAgICBRLFxuICAgIEEgZXh0ZW5kcyBBZGFwdGVyPGFueSwgYW55LCBRLCBGLCBDPixcbiAgICBGIGV4dGVuZHMgUmVwb3NpdG9yeUZsYWdzID0gUmVwb3NpdG9yeUZsYWdzLFxuICAgIEMgZXh0ZW5kcyBDb250ZXh0PEY+ID0gQ29udGV4dDxGPixcbiAgPlxuICBleHRlbmRzIFJlcDxNLCBGLCBDPlxuICBpbXBsZW1lbnRzIE9ic2VydmFibGUsIE9ic2VydmVyLCBRdWVyaWFibGU8TT4sIElSZXBvc2l0b3J5PE0sIEYsIEM+XG57XG4gIHByaXZhdGUgc3RhdGljIF9jYWNoZTogUmVjb3JkPFxuICAgIHN0cmluZyxcbiAgICBDb25zdHJ1Y3RvcjxSZXBvPE1vZGVsPj4gfCBSZXBvPE1vZGVsPlxuICA+ID0ge307XG5cbiAgcHJvdGVjdGVkIG9ic2VydmVyczogT2JzZXJ2ZXJbXSA9IFtdO1xuXG4gIHByb3RlY3RlZCBvYnNlcnZlckhhbmRsZXI/OiBPYnNlcnZlckhhbmRsZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWRhcHRlciE6IEE7XG4gIHByaXZhdGUgX3RhYmxlTmFtZSE6IHN0cmluZztcbiAgcHJvdGVjdGVkIF9vdmVycmlkZXM/OiBQYXJ0aWFsPEY+O1xuXG4gIHByaXZhdGUgbG9nZ2VyITogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9nZ2VyIGluc3RhbmNlIGZvciB0aGlzIHJlcG9zaXRvcnkuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgbG9nZ2VyIGZvciB0aGlzIHJlcG9zaXRvcnkgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4ge0xvZ2dlcn0gVGhlIGxvZ2dlciBpbnN0YW5jZS5cbiAgICovXG4gIGdldCBsb2coKTogTG9nZ2VyIHtcbiAgICBpZiAoIXRoaXMubG9nZ2VyKVxuICAgICAgdGhpcy5sb2dnZXIgPSAoXG4gICAgICAgIHRoaXMuYWRhcHRlcltcImxvZ1wiIGFzIGtleW9mIHR5cGVvZiB0aGlzLmFkYXB0ZXJdIGFzIExvZ2dlclxuICAgICAgKS5mb3IodGhpcy50b1N0cmluZygpKTtcbiAgICByZXR1cm4gdGhpcy5sb2dnZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFkYXB0ZXIgZm9yIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYWRhcHRlciBpbnN0YW5jZSBmb3IgdGhpcyByZXBvc2l0b3J5LlxuICAgKiBAdGVtcGxhdGUgQSAtIFRoZSBhZGFwdGVyIHR5cGUuXG4gICAqIEByZXR1cm4ge0F9IFRoZSBhZGFwdGVyIGluc3RhbmNlLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBubyBhZGFwdGVyIGlzIGZvdW5kLlxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBhZGFwdGVyKCk6IEEge1xuICAgIGlmICghdGhpcy5fYWRhcHRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgTm8gYWRhcHRlciBmb3VuZCBmb3IgdGhpcyByZXBvc2l0b3J5LiBkaWQgeW91IHVzZSB0aGUgQHVzZXMgZGVjb3JhdG9yIG9yIHBhc3MgaXQgaW4gdGhlIGNvbnN0cnVjdG9yP2BcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuX2FkYXB0ZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRhYmxlIG5hbWUgZm9yIHRoaXMgcmVwb3NpdG9yeSdzIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBHZXRzIHRoZSBkYXRhYmFzZSB0YWJsZSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcG9zaXRvcnkncyBtb2RlbC5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFibGUgbmFtZS5cbiAgICovXG4gIHByb3RlY3RlZCBnZXQgdGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLl90YWJsZU5hbWUpIHRoaXMuX3RhYmxlTmFtZSA9IFJlcG9zaXRvcnkudGFibGUodGhpcy5jbGFzcyk7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmxlTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJpbWFyeSBrZXkgcHJvcGVydGllcyBmb3IgdGhpcyByZXBvc2l0b3J5J3MgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IEdldHMgdGhlIHNlcXVlbmNlIG9wdGlvbnMgY29udGFpbmluZyBwcmltYXJ5IGtleSBpbmZvcm1hdGlvbi5cbiAgICogQHJldHVybiB7U2VxdWVuY2VPcHRpb25zfSBUaGUgcHJpbWFyeSBrZXkgcHJvcGVydGllcy5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgcGtQcm9wcygpOiBTZXF1ZW5jZU9wdGlvbnMge1xuICAgIHJldHVybiBzdXBlci5wa1Byb3BzO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyPzogQSwgY2xheno/OiBDb25zdHJ1Y3RvcjxNPiwgLi4uYXJnczogYW55W10pIHtcbiAgICBzdXBlcihjbGF6eik7XG4gICAgaWYgKGFkYXB0ZXIpIHRoaXMuX2FkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIGlmIChjbGF6eikge1xuICAgICAgUmVwb3NpdG9yeS5yZWdpc3RlcihjbGF6eiwgdGhpcywgdGhpcy5hZGFwdGVyLmFsaWFzKTtcbiAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgIGNvbnN0IGZsYXZvdXIgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICAgIEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSxcbiAgICAgICAgICBjbGF6elxuICAgICAgICApO1xuICAgICAgICBpZiAoZmxhdm91ciAmJiBmbGF2b3VyICE9PSBhZGFwdGVyLmZsYXZvdXIpXG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJJbmNvbXBhdGlibGUgZmxhdm91cnNcIik7XG4gICAgICAgIHVzZXMoYWRhcHRlci5mbGF2b3VyKShjbGF6eik7XG4gICAgICB9XG4gICAgfVxuICAgIFt0aGlzLmNyZWF0ZUFsbCwgdGhpcy5yZWFkQWxsLCB0aGlzLnVwZGF0ZUFsbCwgdGhpcy5kZWxldGVBbGxdLmZvckVhY2goXG4gICAgICAobSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gbS5uYW1lO1xuICAgICAgICB3cmFwTWV0aG9kV2l0aENvbnRleHQoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICAodGhpcyBhcyBhbnkpW25hbWUgKyBcIlByZWZpeFwiXSxcbiAgICAgICAgICBtLFxuICAgICAgICAgICh0aGlzIGFzIGFueSlbbmFtZSArIFwiU3VmZml4XCJdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIHByb3h5IHdpdGggb3ZlcnJpZGRlbiByZXBvc2l0b3J5IGZsYWdzLlxuICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgcHJveHkgb2YgdGhpcyByZXBvc2l0b3J5IHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyBvdmVycmlkZGVuLlxuICAgKiBAcGFyYW0ge1BhcnRpYWw8Rj59IGZsYWdzIC0gVGhlIGZsYWdzIHRvIG92ZXJyaWRlLlxuICAgKiBAcmV0dXJuIHtSZXBvc2l0b3J5fSBBIHByb3h5IG9mIHRoaXMgcmVwb3NpdG9yeSB3aXRoIG92ZXJyaWRkZW4gZmxhZ3MuXG4gICAqL1xuICBvdmVycmlkZShmbGFnczogUGFydGlhbDxGPik6IFJlcG9zaXRvcnk8TSwgUSwgQSwgRiwgQz4ge1xuICAgIHRoaXMubG9nXG4gICAgICAuZm9yKHRoaXMub3ZlcnJpZGUpXG4gICAgICAuZGVidWcoYE92ZXJyaWRpbmcgcmVwb3NpdG9yeSBmbGFncyB3aXRoICR7SlNPTi5zdHJpbmdpZnkoZmxhZ3MpfWApO1xuICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgZ2V0OiAodGFyZ2V0OiB0eXBlb2YgdGhpcywgcDogc3RyaW5nIHwgc3ltYm9sLCByZWNlaXZlcjogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICBpZiAocCAhPT0gXCJfb3ZlcnJpZGVzXCIpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZXN1bHQsIGZsYWdzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIFJlcG9zaXRvcnkgY2xhc3Mgd2l0aCBhIHNwZWNpZmljIGFkYXB0ZXIgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHRlbXBsYXRlIEEgLSBUaGUgdHlwZSBvZiB0aGUgYWRhcHRlci5cbiAgICogQHRlbXBsYXRlIFEgLSBUaGUgdHlwZSBvZiB0aGUgcXVlcnkgYnVpbGRlci5cbiAgICogQHRlbXBsYXRlIEYgLSBUaGUgdHlwZSBvZiB0aGUgZmlsdGVyLlxuICAgKiBAdGVtcGxhdGUgQyAtIFRoZSB0eXBlIG9mIHRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge1BhcnRpYWw8SW5mZXJyZWRBZGFwdGVyQ29uZmlnPEE+Pn0gY29uZiAtIGFkYXB0ZXIgY29uZmlndXJhdGlvbnMgdG8gb3ZlcnJpZGUuXG4gICAqIEBwYXJhbSBbYXJnc10gLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIG5ldyBpbnN0YW5jZS5cbiAgICpcbiAgICogQHJldHVybiBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgUmVwb3NpdG9yeSBjbGFzcyB3aXRoIHRoZSBzcGVjaWZpZWQgYWRhcHRlciBhbmQgYXJndW1lbnRzLlxuICAgKi9cbiAgZm9yKFxuICAgIGNvbmY6IFBhcnRpYWw8SW5mZXJyZWRBZGFwdGVyQ29uZmlnPEE+PixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBSZXBvc2l0b3J5PE0sIFEsIEEsIEYsIEM+IHtcbiAgICByZXR1cm4gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldDogKHRhcmdldDogYW55LCBwOiBzdHJpbmcgfCBzeW1ib2wsIHJlY2VpdmVyOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHAgPT09IFwiYWRhcHRlclwiKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5mb3IoY29uZiwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBvYnNlcnZlciBoYW5kbGVyLlxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgYW4gb2JzZXJ2ZXIgaGFuZGxlciBpbnN0YW5jZS5cbiAgICogQHJldHVybiB7T2JzZXJ2ZXJIYW5kbGVyfSBBIG5ldyBvYnNlcnZlciBoYW5kbGVyIGluc3RhbmNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIE9ic2VydmVySGFuZGxlcigpOiBPYnNlcnZlckhhbmRsZXIge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2ZXJIYW5kbGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIGNyZWF0aW9uLlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgdGhlIG1vZGVsIGFuZCBwcmVwYXJlcyBpdCBmb3IgY3JlYXRpb24gaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBtb2RlbCBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gSWYgdGhlIG1vZGVsIGZhaWxzIHZhbGlkYXRpb24uXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlUHJlZml4KFxuICAgIG1vZGVsOiBNLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8W00sIC4uLmFueVtdXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzPE0sIEMsIEY+KFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgbW9kZWwgPSBuZXcgdGhpcy5jbGFzcyhtb2RlbCk7XG4gICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgIHRoaXMsXG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICApO1xuXG4gICAgY29uc3QgZXJyb3JzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgbW9kZWwuaGFzRXJyb3JzKFxuICAgICAgICAuLi4oY29udGV4dEFyZ3MuY29udGV4dC5nZXQoXCJpZ25vcmVkVmFsaWRhdGlvblByb3BlcnRpZXNcIikgfHwgW10pXG4gICAgICApXG4gICAgKTtcbiAgICBpZiAoZXJyb3JzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ycy50b1N0cmluZygpKTtcblxuICAgIHJldHVybiBbbW9kZWwsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbW9kZWwgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAc3VtbWFyeSBQZXJzaXN0cyBhIG1vZGVsIGluc3RhbmNlIHRvIHRoZSBkYXRhYmFzZS5cbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byBjcmVhdGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gVGhlIGNyZWF0ZWQgbW9kZWwgd2l0aCB1cGRhdGVkIHByb3BlcnRpZXMuXG4gICAqL1xuICBhc3luYyBjcmVhdGUobW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQsIHRyYW5zaWVudCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIHRoaXMucGspO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGUodGhpcy50YWJsZU5hbWUsIGlkLCByZWNvcmQsIC4uLmFyZ3MpO1xuICAgIGxldCBjOiBDIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGlmIChhcmdzLmxlbmd0aCkgYyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXSBhcyBDO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KFxuICAgICAgcmVjb3JkLFxuICAgICAgdGhpcy5jbGFzcyxcbiAgICAgIHRoaXMucGssXG4gICAgICBpZCxcbiAgICAgIGMgJiYgYy5nZXQoXCJyZWJ1aWxkV2l0aFRyYW5zaWVudFwiKSA/IHRyYW5zaWVudCA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBvc3QtY3JlYXRpb24gaG9vay5cbiAgICogQHN1bW1hcnkgRXhlY3V0ZXMgYWZ0ZXIgYSBtb2RlbCBpcyBjcmVhdGVkIHRvIHBlcmZvcm0gYWRkaXRpb25hbCBvcGVyYXRpb25zLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIGNyZWF0ZWQgbW9kZWwuXG4gICAqIEBwYXJhbSB7Q30gY29udGV4dCAtIFRoZSBvcGVyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gVGhlIHByb2Nlc3NlZCBtb2RlbC5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZVN1ZmZpeChtb2RlbDogTSwgY29udGV4dDogQyk6IFByb21pc2U8TT4ge1xuICAgIHJldHVybiBzdXBlci5jcmVhdGVTdWZmaXgobW9kZWwsIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIG11bHRpcGxlIG1vZGVscyBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBzdW1tYXJ5IFBlcnNpc3RzIG11bHRpcGxlIG1vZGVsIGluc3RhbmNlcyB0byB0aGUgZGF0YWJhc2UgaW4gYSBiYXRjaCBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSB7TVtdfSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFRoZSBjcmVhdGVkIG1vZGVscyB3aXRoIHVwZGF0ZWQgcHJvcGVydGllcy5cbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZUFsbChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE1bXT4ge1xuICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIG1vZGVscztcbiAgICBjb25zdCBwcmVwYXJlZCA9IG1vZGVscy5tYXAoKG0pID0+IHRoaXMuYWRhcHRlci5wcmVwYXJlKG0sIHRoaXMucGspKTtcbiAgICBjb25zdCBpZHMgPSBwcmVwYXJlZC5tYXAoKHApID0+IHAuaWQpO1xuICAgIGxldCByZWNvcmRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLnJlY29yZCk7XG4gICAgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVBbGwoXG4gICAgICB0aGlzLnRhYmxlTmFtZSxcbiAgICAgIGlkcyBhcyAoc3RyaW5nIHwgbnVtYmVyKVtdLFxuICAgICAgcmVjb3JkcyxcbiAgICAgIC4uLmFyZ3NcbiAgICApO1xuICAgIHJldHVybiByZWNvcmRzLm1hcCgociwgaSkgPT5cbiAgICAgIHRoaXMuYWRhcHRlci5yZXZlcnQociwgdGhpcy5jbGFzcywgdGhpcy5waywgaWRzW2ldIGFzIHN0cmluZyB8IG51bWJlcilcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBtdWx0aXBsZSBtb2RlbHMgZm9yIGNyZWF0aW9uLlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgbXVsdGlwbGUgbW9kZWxzIGFuZCBwcmVwYXJlcyB0aGVtIGZvciBjcmVhdGlvbiBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7TVtdfSBtb2RlbHMgLSBUaGUgbW9kZWxzIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIFRoZSBwcmVwYXJlZCBtb2RlbHMgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIGFueSBtb2RlbCBmYWlscyB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZUFsbFByZWZpeChtb2RlbHM6IE1bXSwgLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGF3YWl0IENvbnRleHQuYXJncyhcbiAgICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgICAgdGhpcy5jbGFzcyxcbiAgICAgIGFyZ3MsXG4gICAgICB0aGlzLmFkYXB0ZXIsXG4gICAgICB0aGlzLl9vdmVycmlkZXMgfHwge31cbiAgICApO1xuICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICAgIGNvbnN0IG9wdHMgPSBSZXBvc2l0b3J5LmdldFNlcXVlbmNlT3B0aW9ucyhtb2RlbHNbMF0pO1xuICAgIGxldCBpZHM6IChzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQgfCB1bmRlZmluZWQpW10gPSBbXTtcbiAgICBpZiAob3B0cy50eXBlKSB7XG4gICAgICBpZiAoIW9wdHMubmFtZSkgb3B0cy5uYW1lID0gU2VxdWVuY2UucGsobW9kZWxzWzBdKTtcbiAgICAgIGlkcyA9IGF3YWl0IChhd2FpdCB0aGlzLmFkYXB0ZXIuU2VxdWVuY2Uob3B0cykpLnJhbmdlKG1vZGVscy5sZW5ndGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZHMgPSBtb2RlbHMubWFwKChtLCBpKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgbVt0aGlzLnBrXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIGBQcmltYXJ5IGtleSBpcyBub3QgZGVmaW5lZCBmb3IgbW9kZWwgaW4gcG9zaXRpb24gJHtpfWBcbiAgICAgICAgICApO1xuICAgICAgICByZXR1cm4gbVt0aGlzLnBrXSBhcyBzdHJpbmc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBtb2RlbHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1vZGVscy5tYXAoYXN5bmMgKG0sIGkpID0+IHtcbiAgICAgICAgbSA9IG5ldyB0aGlzLmNsYXNzKG0pO1xuICAgICAgICBpZiAob3B0cy50eXBlKSBtW3RoaXMucGtdID0gaWRzW2ldIGFzIE1ba2V5b2YgTV07XG4gICAgICAgIGF3YWl0IGVuZm9yY2VEQkRlY29yYXRvcnMoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgICAgIG0sXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICAgICAgT3BlcmF0aW9uS2V5cy5PTlxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gbTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGlnbm9yZWRQcm9wcyA9XG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LmdldChcImlnbm9yZWRWYWxpZGF0aW9uUHJvcGVydGllc1wiKSB8fCBbXTtcblxuICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcCgobSkgPT4gUHJvbWlzZS5yZXNvbHZlKG0uaGFzRXJyb3JzKC4uLmlnbm9yZWRQcm9wcykpKVxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gZXJyb3JzLnJlZHVjZSgoYWNjdW06IHN0cmluZyB8IHVuZGVmaW5lZCwgZSwgaSkgPT4ge1xuICAgICAgaWYgKGUpXG4gICAgICAgIGFjY3VtID1cbiAgICAgICAgICB0eXBlb2YgYWNjdW0gPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gYWNjdW0gKyBgXFxuIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YFxuICAgICAgICAgICAgOiBgIC0gJHtpfTogJHtlLnRvU3RyaW5nKCl9YDtcbiAgICAgIHJldHVybiBhY2N1bTtcbiAgICB9LCB1bmRlZmluZWQpO1xuXG4gICAgaWYgKGVycm9yTWVzc2FnZXMpIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoZXJyb3JNZXNzYWdlcyk7XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlcyBmb3IgcmVhZGluZyBhIG1vZGVsIGJ5IElELlxuICAgKiBAc3VtbWFyeSBQcmVwYXJlcyB0aGUgY29udGV4dCBhbmQgZW5mb3JjZXMgZGVjb3JhdG9ycyBiZWZvcmUgcmVhZGluZyBhIG1vZGVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIHByaW1hcnkga2V5IG9mIHRoZSBtb2RlbCB0byByZWFkLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIGtleSBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVhZFByZWZpeChrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGF3YWl0IENvbnRleHQuYXJncyhcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICBjb25zdCBtb2RlbDogTSA9IG5ldyB0aGlzLmNsYXNzKCk7XG4gICAgbW9kZWxbdGhpcy5wa10gPSBrZXkgYXMgTVtrZXlvZiBNXTtcbiAgICBhd2FpdCBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICBtb2RlbCxcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIE9wZXJhdGlvbktleXMuT05cbiAgICApO1xuICAgIHJldHVybiBba2V5LCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgYSBtb2RlbCBmcm9tIHRoZSBkYXRhYmFzZSBieSBJRC5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIGEgbW9kZWwgaW5zdGFuY2UgZnJvbSB0aGUgZGF0YWJhc2UgdXNpbmcgaXRzIHByaW1hcnkga2V5LlxuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ8YmlnaW50fSBpZCAtIFRoZSBwcmltYXJ5IGtleSBvZiB0aGUgbW9kZWwgdG8gcmVhZC5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE0+fSBUaGUgcmV0cmlldmVkIG1vZGVsIGluc3RhbmNlLlxuICAgKi9cbiAgYXN5bmMgcmVhZChpZDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50LCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIGNvbnN0IG0gPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmVhZCh0aGlzLnRhYmxlTmFtZSwgaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KG0sIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgZm9yIHJlYWRpbmcgbXVsdGlwbGUgbW9kZWxzIGJ5IElEcy5cbiAgICogQHN1bW1hcnkgUHJlcGFyZXMgdGhlIGNvbnRleHQgYW5kIGVuZm9yY2VzIGRlY29yYXRvcnMgYmVmb3JlIHJlYWRpbmcgbXVsdGlwbGUgbW9kZWxzLlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfG51bWJlcltdfSBrZXlzIC0gVGhlIHByaW1hcnkga2V5cyBvZiB0aGUgbW9kZWxzIHRvIHJlYWQuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiBUaGUga2V5cyBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVhZEFsbFByZWZpeChcbiAgICBrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5SRUFELFxuICAgICAgdGhpcy5jbGFzcyxcbiAgICAgIGFyZ3MsXG4gICAgICB0aGlzLmFkYXB0ZXIsXG4gICAgICB0aGlzLl9vdmVycmlkZXMgfHwge31cbiAgICApO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAga2V5cy5tYXAoYXN5bmMgKGspID0+IHtcbiAgICAgICAgY29uc3QgbSA9IG5ldyB0aGlzLmNsYXNzKCk7XG4gICAgICAgIG1bdGhpcy5wa10gPSBrIGFzIE1ba2V5b2YgTV07XG4gICAgICAgIHJldHVybiBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgY29udGV4dEFyZ3MuY29udGV4dCxcbiAgICAgICAgICBtLFxuICAgICAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIFtrZXlzLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVhZHMgbXVsdGlwbGUgbW9kZWxzIGZyb20gdGhlIGRhdGFiYXNlIGJ5IElEcy5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIG11bHRpcGxlIG1vZGVsIGluc3RhbmNlcyBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyB0aGVpciBwcmltYXJ5IGtleXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGtleXMgLSBUaGUgcHJpbWFyeSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gcmVhZC5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPE1bXT59IFRoZSByZXRyaWV2ZWQgbW9kZWwgaW5zdGFuY2VzLlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgcmVhZEFsbChcbiAgICBrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5yZWFkQWxsKHRoaXMudGFibGVOYW1lLCBrZXlzLCAuLi5hcmdzKTtcbiAgICByZXR1cm4gcmVjb3Jkcy5tYXAoKHIsIGkpID0+XG4gICAgICB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHIsIHRoaXMuY2xhc3MsIHRoaXMucGssIGtleXNbaV0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhIG1vZGVsIGluIHRoZSBkYXRhYmFzZS5cbiAgICogQHN1bW1hcnkgUGVyc2lzdHMgY2hhbmdlcyB0byBhbiBleGlzdGluZyBtb2RlbCBpbnN0YW5jZSBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TT59IFRoZSB1cGRhdGVkIG1vZGVsIHdpdGggcmVmcmVzaGVkIHByb3BlcnRpZXMuXG4gICAqL1xuICBhc3luYyB1cGRhdGUobW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQsIHRyYW5zaWVudCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUobW9kZWwsIHRoaXMucGspO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci51cGRhdGUodGhpcy50YWJsZU5hbWUsIGlkLCByZWNvcmQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KHJlY29yZCwgdGhpcy5jbGFzcywgdGhpcy5waywgaWQsIHRyYW5zaWVudCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIHVwZGF0ZS5cbiAgICogQHN1bW1hcnkgVmFsaWRhdGVzIHRoZSBtb2RlbCBhbmQgcHJlcGFyZXMgaXQgZm9yIHVwZGF0ZSBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIHByZXBhcmVkIG1vZGVsIGFuZCBjb250ZXh0IGFyZ3VtZW50cy5cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgdGhlIG1vZGVsIGhhcyBubyBwcmltYXJ5IGtleSB2YWx1ZS5cbiAgICogQHRocm93cyB7VmFsaWRhdGlvbkVycm9yfSBJZiB0aGUgbW9kZWwgZmFpbHMgdmFsaWRhdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB1cGRhdGVQcmVmaXgoXG4gICAgbW9kZWw6IE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxbTSwgLi4uYXJnczogYW55W11dPiB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICBjb25zdCBwayA9IG1vZGVsW3RoaXMucGtdIGFzIHN0cmluZztcbiAgICBpZiAoIXBrKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyB2YWx1ZSBmb3IgdGhlIElkIGlzIGRlZmluZWQgdW5kZXIgdGhlIHByb3BlcnR5ICR7dGhpcy5wayBhcyBzdHJpbmd9YFxuICAgICAgKTtcbiAgICBjb25zdCBvbGRNb2RlbCA9IGF3YWl0IHRoaXMucmVhZChwaywgLi4uY29udGV4dEFyZ3MuYXJncyk7XG4gICAgbW9kZWwgPSB0aGlzLm1lcmdlKG9sZE1vZGVsLCBtb2RlbCk7XG4gICAgYXdhaXQgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgIHRoaXMsXG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LFxuICAgICAgbW9kZWwsXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuT04sXG4gICAgICBvbGRNb2RlbFxuICAgICk7XG5cbiAgICBjb25zdCBlcnJvcnMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoXG4gICAgICBtb2RlbC5oYXNFcnJvcnMoXG4gICAgICAgIG9sZE1vZGVsLFxuICAgICAgICAuLi5SZXBvc2l0b3J5LnJlbGF0aW9ucyh0aGlzLmNsYXNzKSxcbiAgICAgICAgLi4uKGNvbnRleHRBcmdzLmNvbnRleHQuZ2V0KFwiaWdub3JlZFZhbGlkYXRpb25Qcm9wZXJ0aWVzXCIpIHx8IFtdKVxuICAgICAgKVxuICAgICk7XG4gICAgaWYgKGVycm9ycykgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvcnMudG9TdHJpbmcoKSk7XG4gICAgaWYgKFJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEob2xkTW9kZWwpKSB7XG4gICAgICBpZiAoIVJlcG9zaXRvcnkuZ2V0TWV0YWRhdGEobW9kZWwpKVxuICAgICAgICBSZXBvc2l0b3J5LnNldE1ldGFkYXRhKG1vZGVsLCBSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsKSk7XG4gICAgfVxuICAgIHJldHVybiBbbW9kZWwsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIG11bHRpcGxlIG1vZGVscyBpbiB0aGUgZGF0YWJhc2UuXG4gICAqIEBzdW1tYXJ5IFBlcnNpc3RzIGNoYW5nZXMgdG8gbXVsdGlwbGUgZXhpc3RpbmcgbW9kZWwgaW5zdGFuY2VzIGluIHRoZSBkYXRhYmFzZSBpbiBhIGJhdGNoIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIHtNW119IG1vZGVscyAtIFRoZSBtb2RlbHMgdG8gdXBkYXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TVtdPn0gVGhlIHVwZGF0ZWQgbW9kZWxzIHdpdGggcmVmcmVzaGVkIHByb3BlcnRpZXMuXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyB1cGRhdGVBbGwobW9kZWxzOiBNW10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICBjb25zdCByZWNvcmRzID0gbW9kZWxzLm1hcCgobSkgPT4gdGhpcy5hZGFwdGVyLnByZXBhcmUobSwgdGhpcy5waykpO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB0aGlzLmFkYXB0ZXIudXBkYXRlQWxsKFxuICAgICAgdGhpcy50YWJsZU5hbWUsXG4gICAgICByZWNvcmRzLm1hcCgocikgPT4gci5pZCksXG4gICAgICByZWNvcmRzLm1hcCgocikgPT4gci5yZWNvcmQpLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgcmV0dXJuIHVwZGF0ZWQubWFwKCh1LCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydCh1LCB0aGlzLmNsYXNzLCB0aGlzLnBrLCByZWNvcmRzW2ldLmlkKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIG11bHRpcGxlIG1vZGVscyBmb3IgdXBkYXRlLlxuICAgKiBAc3VtbWFyeSBWYWxpZGF0ZXMgbXVsdGlwbGUgbW9kZWxzIGFuZCBwcmVwYXJlcyB0aGVtIGZvciB1cGRhdGUgaW4gdGhlIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIG1vZGVscyB0byB1cGRhdGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnlbXT59IFRoZSBwcmVwYXJlZCBtb2RlbHMgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBhbnkgbW9kZWwgaGFzIG5vIHByaW1hcnkga2V5IHZhbHVlLlxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIGFueSBtb2RlbCBmYWlscyB2YWxpZGF0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZUFsbFByZWZpeChcbiAgICBtb2RlbHM6IE1bXSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICBjb25zdCBpZHMgPSBtb2RlbHMubWFwKChtKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IG1bdGhpcy5wa10gYXMgc3RyaW5nO1xuICAgICAgaWYgKCFpZCkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJtaXNzaW5nIGlkIG9uIHVwZGF0ZSBvcGVyYXRpb25cIik7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSk7XG4gICAgY29uc3Qgb2xkTW9kZWxzID0gYXdhaXQgdGhpcy5yZWFkQWxsKGlkcywgLi4uY29udGV4dEFyZ3MuYXJncyk7XG4gICAgbW9kZWxzID0gbW9kZWxzLm1hcCgobSwgaSkgPT4ge1xuICAgICAgbSA9IHRoaXMubWVyZ2Uob2xkTW9kZWxzW2ldLCBtKTtcbiAgICAgIGlmIChSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsc1tpXSkpIHtcbiAgICAgICAgaWYgKCFSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG0pKVxuICAgICAgICAgIFJlcG9zaXRvcnkuc2V0TWV0YWRhdGEobSwgUmVwb3NpdG9yeS5nZXRNZXRhZGF0YShvbGRNb2RlbHNbaV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBtO1xuICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcCgobSwgaSkgPT5cbiAgICAgICAgZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICAgICAgbSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OLFxuICAgICAgICAgIG9sZE1vZGVsc1tpXVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGlnbm9yZWRQcm9wcyA9XG4gICAgICBjb250ZXh0QXJncy5jb250ZXh0LmdldChcImlnbm9yZWRWYWxpZGF0aW9uUHJvcGVydGllc1wiKSB8fCBbXTtcblxuICAgIGNvbnN0IGVycm9ycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcCgobSwgaSkgPT5cbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKG0uaGFzRXJyb3JzKG9sZE1vZGVsc1tpXSwgbSwgLi4uaWdub3JlZFByb3BzKSlcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IGVycm9ycy5yZWR1Y2UoKGFjY3VtOiBzdHJpbmcgfCB1bmRlZmluZWQsIGUsIGkpID0+IHtcbiAgICAgIGlmIChlKVxuICAgICAgICBhY2N1bSA9XG4gICAgICAgICAgdHlwZW9mIGFjY3VtID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IGFjY3VtICsgYFxcbiAtICR7aX06ICR7ZS50b1N0cmluZygpfWBcbiAgICAgICAgICAgIDogYCAtICR7aX06ICR7ZS50b1N0cmluZygpfWA7XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSwgdW5kZWZpbmVkKTtcblxuICAgIGlmIChlcnJvck1lc3NhZ2VzKSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9yTWVzc2FnZXMpO1xuXG4gICAgbW9kZWxzLmZvckVhY2goKG0sIGkpID0+IHtcbiAgICAgIGlmIChSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG9sZE1vZGVsc1tpXSkpIHtcbiAgICAgICAgaWYgKCFSZXBvc2l0b3J5LmdldE1ldGFkYXRhKG0pKVxuICAgICAgICAgIFJlcG9zaXRvcnkuc2V0TWV0YWRhdGEobSwgUmVwb3NpdG9yeS5nZXRNZXRhZGF0YShvbGRNb2RlbHNbaV0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gW21vZGVscywgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGZvciBkZWxldGluZyBhIG1vZGVsIGJ5IElELlxuICAgKiBAc3VtbWFyeSBQcmVwYXJlcyB0aGUgY29udGV4dCBhbmQgZW5mb3JjZXMgZGVjb3JhdG9ycyBiZWZvcmUgZGVsZXRpbmcgYSBtb2RlbC5cbiAgICogQHBhcmFtIHthbnl9IGtleSAtIFRoZSBwcmltYXJ5IGtleSBvZiB0aGUgbW9kZWwgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIGtleSBhbmQgY29udGV4dCBhcmd1bWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlUHJlZml4KGtleTogYW55LCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgY29uc3QgbW9kZWwgPSBhd2FpdCB0aGlzLnJlYWQoa2V5LCAuLi5jb250ZXh0QXJncy5hcmdzKTtcbiAgICBhd2FpdCBlbmZvcmNlREJEZWNvcmF0b3JzKFxuICAgICAgdGhpcyxcbiAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICBtb2RlbCxcbiAgICAgIE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgICAgT3BlcmF0aW9uS2V5cy5PTlxuICAgICk7XG4gICAgcmV0dXJuIFtrZXksIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEZWxldGVzIGEgbW9kZWwgZnJvbSB0aGUgZGF0YWJhc2UgYnkgSUQuXG4gICAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBtb2RlbCBpbnN0YW5jZSBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyBpdHMgcHJpbWFyeSBrZXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfG51bWJlcnxiaWdpbnR9IGlkIC0gVGhlIHByaW1hcnkga2V5IG9mIHRoZSBtb2RlbCB0byBkZWxldGUuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNPn0gVGhlIGRlbGV0ZWQgbW9kZWwgaW5zdGFuY2UuXG4gICAqL1xuICBhc3luYyBkZWxldGUoaWQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludCwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCBtID0gYXdhaXQgdGhpcy5hZGFwdGVyLmRlbGV0ZSh0aGlzLnRhYmxlTmFtZSwgaWQsIC4uLmFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KG0sIHRoaXMuY2xhc3MsIHRoaXMucGssIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZXMgZm9yIGRlbGV0aW5nIG11bHRpcGxlIG1vZGVscyBieSBJRHMuXG4gICAqIEBzdW1tYXJ5IFByZXBhcmVzIHRoZSBjb250ZXh0IGFuZCBlbmZvcmNlcyBkZWNvcmF0b3JzIGJlZm9yZSBkZWxldGluZyBtdWx0aXBsZSBtb2RlbHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGtleXMgLSBUaGUgcHJpbWFyeSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4gVGhlIGtleXMgYW5kIGNvbnRleHQgYXJndW1lbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUFsbFByZWZpeChcbiAgICBrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgY29uc3QgbW9kZWxzID0gYXdhaXQgdGhpcy5yZWFkQWxsKGtleXMsIC4uLmNvbnRleHRBcmdzLmFyZ3MpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgbW9kZWxzLm1hcChhc3luYyAobSkgPT4ge1xuICAgICAgICByZXR1cm4gZW5mb3JjZURCRGVjb3JhdG9ycyhcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGNvbnRleHRBcmdzLmNvbnRleHQsXG4gICAgICAgICAgbSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICAgICAgICBPcGVyYXRpb25LZXlzLk9OXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIFtrZXlzLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBtdWx0aXBsZSBtb2RlbHMgZnJvbSB0aGUgZGF0YWJhc2UgYnkgSURzLlxuICAgKiBAc3VtbWFyeSBSZW1vdmVzIG11bHRpcGxlIG1vZGVsIGluc3RhbmNlcyBmcm9tIHRoZSBkYXRhYmFzZSB1c2luZyB0aGVpciBwcmltYXJ5IGtleXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nW118bnVtYmVyW119IGtleXMgLSBUaGUgcHJpbWFyeSBrZXlzIG9mIHRoZSBtb2RlbHMgdG8gZGVsZXRlLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8TVtdPn0gVGhlIGRlbGV0ZWQgbW9kZWwgaW5zdGFuY2VzLlxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlQWxsKFxuICAgIGtleXM6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxNW10+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5hZGFwdGVyLmRlbGV0ZUFsbCh0aGlzLnRhYmxlTmFtZSwga2V5cywgLi4uYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdHMubWFwKChyLCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydChyLCB0aGlzLmNsYXNzLCB0aGlzLnBrLCBrZXlzW2ldKVxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgc2VsZWN0IHF1ZXJ5IHdpdGhvdXQgc3BlY2lmeWluZyBmaWVsZHMuXG4gICAqIEBzdW1tYXJ5IFN0YXJ0cyBidWlsZGluZyBhIHF1ZXJ5IHRoYXQgd2lsbCByZXR1cm4gYWxsIGZpZWxkcyBvZiB0aGUgbW9kZWwuXG4gICAqIEB0ZW1wbGF0ZSBTIC0gVGhlIGFycmF5IHR5cGUgb2Ygc2VsZWN0IHNlbGVjdG9ycy5cbiAgICogQHJldHVybiBBIHF1ZXJ5IGJ1aWxkZXIgZm9yIHRoZSBtb2RlbC5cbiAgICovXG4gIHNlbGVjdDxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgUyBleHRlbmRzIHJlYWRvbmx5IFNlbGVjdFNlbGVjdG9yPE0+W10sXG4gID4oKTogV2hlcmVPcHRpb248TSwgTVtdPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBzZWxlY3QgcXVlcnkgd2l0aCBzcGVjaWZpYyBmaWVsZHMuXG4gICAqIEBzdW1tYXJ5IFN0YXJ0cyBidWlsZGluZyBhIHF1ZXJ5IHRoYXQgd2lsbCByZXR1cm4gb25seSB0aGUgc3BlY2lmaWVkIGZpZWxkcyBvZiB0aGUgbW9kZWwuXG4gICAqIEB0ZW1wbGF0ZSBTIC0gVGhlIGFycmF5IHR5cGUgb2Ygc2VsZWN0IHNlbGVjdG9ycy5cbiAgICogQHBhcmFtIHNlbGVjdG9yIC0gVGhlIGZpZWxkcyB0byBzZWxlY3QuXG4gICAqIEByZXR1cm4gQSBxdWVyeSBidWlsZGVyIGZvciB0aGUgc2VsZWN0ZWQgZmllbGRzLlxuICAgKi9cbiAgc2VsZWN0PFMgZXh0ZW5kcyByZWFkb25seSBTZWxlY3RTZWxlY3RvcjxNPltdPihcbiAgICBzZWxlY3RvcjogcmVhZG9ubHkgWy4uLlNdXG4gICk6IFdoZXJlT3B0aW9uPE0sIFBpY2s8TSwgU1tudW1iZXJdPltdPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEltcGxlbWVudGF0aW9uIG9mIHRoZSBzZWxlY3QgbWV0aG9kLlxuICAgKiBAc3VtbWFyeSBDcmVhdGVzIGEgcXVlcnkgYnVpbGRlciBmb3IgdGhlIG1vZGVsIHdpdGggb3B0aW9uYWwgZmllbGQgc2VsZWN0aW9uLlxuICAgKiBAdGVtcGxhdGUgUyAtIFRoZSBhcnJheSB0eXBlIG9mIHNlbGVjdCBzZWxlY3RvcnMuXG4gICAqIEBwYXJhbSBbc2VsZWN0b3JdIC0gT3B0aW9uYWwgZmllbGRzIHRvIHNlbGVjdC5cbiAgICogQHJldHVybiBBIHF1ZXJ5IGJ1aWxkZXIuXG4gICAqL1xuICBzZWxlY3Q8UyBleHRlbmRzIHJlYWRvbmx5IFNlbGVjdFNlbGVjdG9yPE0+W10+KFxuICAgIHNlbGVjdG9yPzogcmVhZG9ubHkgWy4uLlNdXG4gICk6IFdoZXJlT3B0aW9uPE0sIE1bXT4gfCBXaGVyZU9wdGlvbjxNLCBQaWNrPE0sIFNbbnVtYmVyXT5bXT4ge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXJcbiAgICAgIC5TdGF0ZW1lbnQ8TT4oKVxuICAgICAgLnNlbGVjdChzZWxlY3RvciBhcyByZWFkb25seSBbLi4uU10pXG4gICAgICAuZnJvbSh0aGlzLmNsYXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBxdWVyeSB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZGl0aW9ucyBhbmQgb3B0aW9ucy5cbiAgICogQHN1bW1hcnkgUHJvdmlkZXMgYSBzaW1wbGlmaWVkIHdheSB0byBxdWVyeSB0aGUgZGF0YWJhc2Ugd2l0aCBjb21tb24gcXVlcnkgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtDb25kaXRpb248TT59IGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gdG8gZmlsdGVyIHJlY29yZHMuXG4gICAqIEBwYXJhbSBvcmRlckJ5IC0gVGhlIGZpZWxkIHRvIG9yZGVyIHJlc3VsdHMgYnkuXG4gICAqIEBwYXJhbSB7T3JkZXJEaXJlY3Rpb259IFtvcmRlcj1PcmRlckRpcmVjdGlvbi5BU0NdIC0gVGhlIHNvcnQgZGlyZWN0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2xpbWl0XSAtIE9wdGlvbmFsIG1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMgdG8gcmV0dXJuLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NraXBdIC0gT3B0aW9uYWwgbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2tpcC5cbiAgICogQHJldHVybiB7UHJvbWlzZTxNW10+fSBUaGUgcXVlcnkgcmVzdWx0cyBhcyBtb2RlbCBpbnN0YW5jZXMuXG4gICAqL1xuICBhc3luYyBxdWVyeShcbiAgICBjb25kaXRpb246IENvbmRpdGlvbjxNPixcbiAgICBvcmRlckJ5OiBrZXlvZiBNLFxuICAgIG9yZGVyOiBPcmRlckRpcmVjdGlvbiA9IE9yZGVyRGlyZWN0aW9uLkFTQyxcbiAgICBsaW1pdD86IG51bWJlcixcbiAgICBza2lwPzogbnVtYmVyXG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3Qgc29ydDogT3JkZXJCeVNlbGVjdG9yPE0+ID0gW29yZGVyQnksIG9yZGVyIGFzIE9yZGVyRGlyZWN0aW9uXTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuc2VsZWN0KCkud2hlcmUoY29uZGl0aW9uKS5vcmRlckJ5KHNvcnQpO1xuICAgIGlmIChsaW1pdCkgcXVlcnkubGltaXQobGltaXQpO1xuICAgIGlmIChza2lwKSBxdWVyeS5vZmZzZXQoc2tpcCk7XG4gICAgcmV0dXJuIHF1ZXJ5LmV4ZWN1dGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGFuIG9ic2VydmVyIGZvciB0aGlzIHJlcG9zaXRvcnkuXG4gICAqIEBzdW1tYXJ5IEFkZHMgYW4gb2JzZXJ2ZXIgdGhhdCB3aWxsIGJlIG5vdGlmaWVkIG9mIGNoYW5nZXMgdG8gbW9kZWxzIGluIHRoaXMgcmVwb3NpdG9yeS5cbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXIgLSBUaGUgb2JzZXJ2ZXIgdG8gcmVnaXN0ZXIuXG4gICAqIEBwYXJhbSB7T2JzZXJ2ZXJGaWx0ZXJ9IFtmaWx0ZXJdIC0gT3B0aW9uYWwgZmlsdGVyIHRvIGxpbWl0IHdoaWNoIGV2ZW50cyB0aGUgb2JzZXJ2ZXIgcmVjZWl2ZXMuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBzZWUge09ic2VydmFibGUjb2JzZXJ2ZX1cbiAgICovXG4gIEBmaW5hbCgpXG4gIG9ic2VydmUob2JzZXJ2ZXI6IE9ic2VydmVyLCBmaWx0ZXI/OiBPYnNlcnZlckZpbHRlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5vYnNlcnZlckhhbmRsZXIpXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJvYnNlcnZlckhhbmRsZXJcIiwge1xuICAgICAgICB2YWx1ZTogdGhpcy5PYnNlcnZlckhhbmRsZXIoKSxcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMub2JzZXJ2ZSk7XG4gICAgY29uc3QgdGFibGVOYW1lID0gUmVwb3NpdG9yeS50YWJsZSh0aGlzLmNsYXNzKTtcbiAgICB0aGlzLmFkYXB0ZXIub2JzZXJ2ZSh0aGlzLCAodGFibGU6IHN0cmluZykgPT4gdGFibGVOYW1lID09PSB0YWJsZSk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgbm93IG9ic2VydmluZyAke3RoaXMuYWRhcHRlcn0gZmlsdGVyaW5nIG9uIHRhYmxlID09PSAke3RhYmxlTmFtZX1gXG4gICAgKTtcbiAgICB0aGlzLm9ic2VydmVySGFuZGxlciEub2JzZXJ2ZShvYnNlcnZlciwgZmlsdGVyKTtcbiAgICBsb2cudmVyYm9zZShgUmVnaXN0ZXJlZCBuZXcgb2JzZXJ2ZXIgJHtvYnNlcnZlci50b1N0cmluZygpfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVbnJlZ2lzdGVycyBhbiBvYnNlcnZlciBmcm9tIHRoaXMgcmVwb3NpdG9yeS5cbiAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbiBvYnNlcnZlciBzbyBpdCB3aWxsIG5vIGxvbmdlciByZWNlaXZlIG5vdGlmaWNhdGlvbnMgb2YgY2hhbmdlcy5cbiAgICogQHBhcmFtIHtPYnNlcnZlcn0gb2JzZXJ2ZXIgLSBUaGUgb2JzZXJ2ZXIgdG8gdW5yZWdpc3Rlci5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgdGhlIG9ic2VydmVyIGhhbmRsZXIgaXMgbm90IGluaXRpYWxpemVkLlxuICAgKiBAc2VlIHtPYnNlcnZhYmxlI3VuT2JzZXJ2ZX1cbiAgICovXG4gIEBmaW5hbCgpXG4gIHVuT2JzZXJ2ZShvYnNlcnZlcjogT2JzZXJ2ZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJIYW5kbGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiT2JzZXJ2ZXJIYW5kbGVyIG5vdCBpbml0aWFsaXplZC4gRGlkIHlvdSByZWdpc3RlciBhbnkgb2JzZXJ2YWJsZXM/XCJcbiAgICAgICk7XG4gICAgdGhpcy5vYnNlcnZlckhhbmRsZXIudW5PYnNlcnZlKG9ic2VydmVyKTtcbiAgICB0aGlzLmxvZ1xuICAgICAgLmZvcih0aGlzLnVuT2JzZXJ2ZSlcbiAgICAgIC52ZXJib3NlKGBPYnNlcnZlciAke29ic2VydmVyLnRvU3RyaW5nKCl9IHJlbW92ZWRgKTtcbiAgICBpZiAoIXRoaXMub2JzZXJ2ZXJIYW5kbGVyLmNvdW50KCkpIHtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoXG4gICAgICAgIGBObyBtb3JlIG9ic2VydmVycyByZWdpc3RlcmVkIGZvciAke3RoaXMuYWRhcHRlcn0sIHVuc3Vic2NyaWJpbmdgXG4gICAgICApO1xuICAgICAgdGhpcy5hZGFwdGVyLnVuT2JzZXJ2ZSh0aGlzKTtcbiAgICAgIHRoaXMubG9nLnZlcmJvc2UoYE5vIGxvbmdlciBvYnNlcnZpbmcgYWRhcHRlciAke3RoaXMuYWRhcHRlci5mbGF2b3VyfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTm90aWZpZXMgYWxsIG9ic2VydmVycyBvZiBhbiBldmVudC5cbiAgICogQHN1bW1hcnkgVXBkYXRlcyBhbGwgcmVnaXN0ZXJlZCBvYnNlcnZlcnMgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBhIGRhdGFiYXNlIGV2ZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGUgLSBUaGUgdGFibGUgbmFtZSB3aGVyZSB0aGUgZXZlbnQgb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5c3xCdWxrQ3J1ZE9wZXJhdGlvbktleXN8c3RyaW5nfSBldmVudCAtIFRoZSB0eXBlIG9mIGV2ZW50IHRoYXQgb2NjdXJyZWQuXG4gICAqIEBwYXJhbSB7RXZlbnRJZHN9IGlkIC0gVGhlIElEIG9yIElEcyBvZiB0aGUgYWZmZWN0ZWQgcmVjb3Jkcy5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBvYnNlcnZlcnMgaGF2ZSBiZWVuIG5vdGlmaWVkLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiB0aGUgb2JzZXJ2ZXIgaGFuZGxlciBpcyBub3QgaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBhc3luYyB1cGRhdGVPYnNlcnZlcnMoXG4gICAgdGFibGU6IHN0cmluZyxcbiAgICBldmVudDogT3BlcmF0aW9uS2V5cyB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyB8IHN0cmluZyxcbiAgICBpZDogRXZlbnRJZHMsXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLm9ic2VydmVySGFuZGxlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBcIk9ic2VydmVySGFuZGxlciBub3QgaW5pdGlhbGl6ZWQuIERpZCB5b3UgcmVnaXN0ZXIgYW55IG9ic2VydmFibGVzP1wiXG4gICAgICApO1xuICAgIHRoaXMubG9nXG4gICAgICAuZm9yKHRoaXMudXBkYXRlT2JzZXJ2ZXJzKVxuICAgICAgLnZlcmJvc2UoXG4gICAgICAgIGBVcGRhdGluZyAke3RoaXMub2JzZXJ2ZXJIYW5kbGVyLmNvdW50KCl9IG9ic2VydmVycyBmb3IgJHt0aGlzfWBcbiAgICAgICk7XG4gICAgYXdhaXQgdGhpcy5vYnNlcnZlckhhbmRsZXIudXBkYXRlT2JzZXJ2ZXJzKFxuICAgICAgdGhpcy5sb2csXG4gICAgICB0YWJsZSxcbiAgICAgIGV2ZW50LFxuICAgICAgQXJyYXkuaXNBcnJheShpZClcbiAgICAgICAgPyBpZC5tYXAoKGkpID0+IFNlcXVlbmNlLnBhcnNlVmFsdWUodGhpcy5wa1Byb3BzLnR5cGUsIGkpIGFzIHN0cmluZylcbiAgICAgICAgOiAoU2VxdWVuY2UucGFyc2VWYWx1ZSh0aGlzLnBrUHJvcHMudHlwZSwgaWQpIGFzIHN0cmluZyksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQWxpYXMgZm9yIHVwZGF0ZU9ic2VydmVycy5cbiAgICogQHN1bW1hcnkgTm90aWZpZXMgYWxsIG9ic2VydmVycyBvZiBhbiBldmVudCAoYWxpYXMgZm9yIHVwZGF0ZU9ic2VydmVycykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZSAtIFRoZSB0YWJsZSBuYW1lIHdoZXJlIHRoZSBldmVudCBvY2N1cnJlZC5cbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzfEJ1bGtDcnVkT3BlcmF0aW9uS2V5c3xzdHJpbmd9IGV2ZW50IC0gVGhlIHR5cGUgb2YgZXZlbnQgdGhhdCBvY2N1cnJlZC5cbiAgICogQHBhcmFtIHtFdmVudElkc30gaWQgLSBUaGUgSUQgb3IgSURzIG9mIHRoZSBhZmZlY3RlZCByZWNvcmRzLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIG9ic2VydmVycyBoYXZlIGJlZW4gbm90aWZpZWQuXG4gICAqL1xuICBhc3luYyByZWZyZXNoKFxuICAgIHRhYmxlOiBzdHJpbmcsXG4gICAgZXZlbnQ6IE9wZXJhdGlvbktleXMgfCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMgfCBzdHJpbmcsXG4gICAgaWQ6IEV2ZW50SWRzLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIHJldHVybiB0aGlzLnVwZGF0ZU9ic2VydmVycyh0YWJsZSwgZXZlbnQsIGlkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBvciByZXRyaWV2ZXMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IHJldHVybnMgYSByZXBvc2l0b3J5IGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIG1vZGVsLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgcmVwb3NpdG9yeSB0eXBlIHRoYXQgZXh0ZW5kcyBSZXBvPE0+LlxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc10gLSBPcHRpb25hbCBkZWZhdWx0IGFkYXB0ZXIgZmxhdm91ciBpZiBub3Qgc3BlY2lmaWVkIG9uIHRoZSBtb2RlbC5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gW2FyZ3NdIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgcmVwb3NpdG9yeSBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybiB7Un0gQSByZXBvc2l0b3J5IGluc3RhbmNlIGZvciB0aGUgbW9kZWwuXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIG5vIGFkYXB0ZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhlIGZsYXZvdXIuXG4gICAqL1xuICBzdGF0aWMgZm9yTW9kZWw8TSBleHRlbmRzIE1vZGVsLCBSIGV4dGVuZHMgUmVwbzxNPj4oXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+LFxuICAgIGFsaWFzPzogc3RyaW5nLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICk6IFIge1xuICAgIGxldCByZXBvOiBSIHwgQ29uc3RydWN0b3I8Uj4gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBfYWxpYXM6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBhbGlhcyB8fFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUiksIG1vZGVsKSB8fFxuICAgICAgQWRhcHRlci5jdXJyZW50Rmxhdm91cjtcbiAgICB0cnkge1xuICAgICAgcmVwbyA9IHRoaXMuZ2V0KG1vZGVsLCBfYWxpYXMpIGFzIENvbnN0cnVjdG9yPFI+IHwgUjtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHJlcG8gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHJlcG8gaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSByZXR1cm4gcmVwbyBhcyBSO1xuXG4gICAgY29uc3QgZmxhdm91cjogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIGFsaWFzIHx8XG4gICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSwgbW9kZWwpIHx8XG4gICAgICAocmVwbyAmJlxuICAgICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKEFkYXB0ZXIua2V5KFBlcnNpc3RlbmNlS2V5cy5BREFQVEVSKSwgcmVwbykpIHx8XG4gICAgICBBZGFwdGVyLmN1cnJlbnRGbGF2b3VyO1xuICAgIGNvbnN0IGFkYXB0ZXI6IEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55PiB8IHVuZGVmaW5lZCA9IGZsYXZvdXJcbiAgICAgID8gQWRhcHRlci5nZXQoZmxhdm91cilcbiAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFhZGFwdGVyKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBObyByZWdpc3RlcmVkIHBlcnNpc3RlbmNlIGFkYXB0ZXIgZm91bmQgZmxhdm91ciAke2ZsYXZvdXJ9YFxuICAgICAgKTtcblxuICAgIHJlcG8gPSByZXBvIHx8IChhZGFwdGVyLnJlcG9zaXRvcnkoKSBhcyBDb25zdHJ1Y3RvcjxSPik7XG4gICAgcmV0dXJuIG5ldyByZXBvKGFkYXB0ZXIsIG1vZGVsLCAuLi5hcmdzKSBhcyBSO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsIGZyb20gdGhlIGNhY2hlLlxuICAgKiBAc3VtbWFyeSBHZXRzIGEgcmVwb3NpdG9yeSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSBmb3IgdGhlIHNwZWNpZmllZCBtb2RlbCBmcm9tIHRoZSBpbnRlcm5hbCBjYWNoZS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2FsaWFzXSAtIFRoZSBhZGFwdGVyIGFsaWFzLlxuICAgKiBAcmV0dXJuIHtDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT59IFRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBubyByZXBvc2l0b3J5IGlzIHJlZ2lzdGVyZWQgZm9yIHRoZSBtb2RlbC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICBhbGlhcz86IHN0cmluZ1xuICApOiBDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT4ge1xuICAgIGxldCBuYW1lID0gUmVwb3NpdG9yeS50YWJsZShtb2RlbCk7XG4gICAgaWYgKGFsaWFzKSB7XG4gICAgICBuYW1lID0gW25hbWUsIGFsaWFzXS5qb2luKERlZmF1bHRTZXBhcmF0b3IpO1xuICAgIH1cbiAgICBpZiAobmFtZSBpbiB0aGlzLl9jYWNoZSlcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZVtuYW1lXSBhcyB1bmtub3duIGFzIENvbnN0cnVjdG9yPFJlcG88TT4+IHwgUmVwbzxNPjtcbiAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgIGBDb3VsZCBub3QgZmluZCByZXBvc2l0b3J5IHJlZ2lzdGVyZWQgdW5kZXIgJHtuYW1lfWBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWdpc3RlcnMgYSByZXBvc2l0b3J5IGZvciBhIG1vZGVsLlxuICAgKiBAc3VtbWFyeSBBc3NvY2lhdGVzIGEgcmVwb3NpdG9yeSBjb25zdHJ1Y3RvciBvciBpbnN0YW5jZSB3aXRoIGEgbW9kZWwgaW4gdGhlIGludGVybmFsIGNhY2hlLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICogQHBhcmFtIHtDb25zdHJ1Y3RvcjxNPn0gbW9kZWwgLSBUaGUgbW9kZWwgY29uc3RydWN0b3IuXG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8UmVwbzxNPj4gfCBSZXBvPE0+fSByZXBvIC0gVGhlIHJlcG9zaXRvcnkgY29uc3RydWN0b3Igb3IgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdIHRoZSBhZGFwdGVyIGFsaWFzL2ZsYXZvdXIuXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIGEgcmVwb3NpdG9yeSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgZm9yIHRoZSBtb2RlbC5cbiAgICovXG4gIHN0YXRpYyByZWdpc3RlcjxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBDb25zdHJ1Y3RvcjxNPixcbiAgICByZXBvOiBDb25zdHJ1Y3RvcjxSZXBvPE0+PiB8IFJlcG88TT4sXG4gICAgYWxpYXM/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IG5hbWUgPSBSZXBvc2l0b3J5LnRhYmxlKG1vZGVsKTtcbiAgICBpZiAoYWxpYXMpIHtcbiAgICAgIG5hbWUgPSBbbmFtZSwgYWxpYXNdLmpvaW4oRGVmYXVsdFNlcGFyYXRvcik7XG4gICAgfVxuICAgIGlmIChuYW1lIGluIHRoaXMuX2NhY2hlKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYCR7bmFtZX0gYWxyZWFkeSByZWdpc3RlcmVkIGFzIGEgcmVwb3NpdG9yeWApO1xuICAgIHRoaXMuX2NhY2hlW25hbWVdID0gcmVwbyBhcyBhbnk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgbWV0YWRhdGEgb24gYSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgQXR0YWNoZXMgbWV0YWRhdGEgdG8gYSBtb2RlbCBpbnN0YW5jZSB1c2luZyBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5LlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHthbnl9IG1ldGFkYXRhIC0gVGhlIG1ldGFkYXRhIHRvIGF0dGFjaCB0byB0aGUgbW9kZWwuXG4gICAqL1xuICBzdGF0aWMgc2V0TWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSwgbWV0YWRhdGE6IGFueSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBtZXRhZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBtZXRhZGF0YSBmcm9tIGEgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBwcmV2aW91c2x5IGF0dGFjaGVkIG1ldGFkYXRhIGZyb20gYSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEByZXR1cm4ge2FueX0gVGhlIG1ldGFkYXRhIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBzdGF0aWMgZ2V0TWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgbW9kZWwsXG4gICAgICBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFcbiAgICApO1xuICAgIHJldHVybiBkZXNjcmlwdG9yID8gZGVzY3JpcHRvci52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBtZXRhZGF0YSBmcm9tIGEgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IERlbGV0ZXMgdGhlIG1ldGFkYXRhIHByb3BlcnR5IGZyb20gYSBtb2RlbCBpbnN0YW5jZS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UuXG4gICAqL1xuICBzdGF0aWMgcmVtb3ZlTWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgbW9kZWwsXG4gICAgICBQZXJzaXN0ZW5jZUtleXMuTUVUQURBVEFcbiAgICApO1xuICAgIGlmIChkZXNjcmlwdG9yKSBkZWxldGUgKG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBzZXF1ZW5jZSBvcHRpb25zIGZvciBhIG1vZGVsJ3MgcHJpbWFyeSBrZXkuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgc2VxdWVuY2UgY29uZmlndXJhdGlvbiBmb3IgYSBtb2RlbCdzIHByaW1hcnkga2V5IGZyb20gbWV0YWRhdGEuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdGhhdCBleHRlbmRzIE1vZGVsLlxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlLlxuICAgKiBAcmV0dXJuIHtTZXF1ZW5jZU9wdGlvbnN9IFRoZSBzZXF1ZW5jZSBvcHRpb25zIGZvciB0aGUgbW9kZWwncyBwcmltYXJ5IGtleS5cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgbm8gc2VxdWVuY2Ugb3B0aW9ucyBhcmUgZGVmaW5lZCBmb3IgdGhlIG1vZGVsLlxuICAgKi9cbiAgc3RhdGljIGdldFNlcXVlbmNlT3B0aW9uczxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNKSB7XG4gICAgY29uc3QgcGsgPSBmaW5kUHJpbWFyeUtleShtb2RlbCkuaWQ7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgUmVwb3NpdG9yeS5rZXkoREJLZXlzLklEKSxcbiAgICAgIG1vZGVsLFxuICAgICAgcGsgYXMgc3RyaW5nXG4gICAgKTtcbiAgICBpZiAoIW1ldGFkYXRhKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIFwiTm8gc2VxdWVuY2Ugb3B0aW9ucyBkZWZpbmVkIGZvciBtb2RlbC4gZGlkIHlvdSB1c2UgdGhlIEBwayBkZWNvcmF0b3I/XCJcbiAgICAgICk7XG4gICAgcmV0dXJuIG1ldGFkYXRhIGFzIFNlcXVlbmNlT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgaW5kZXhlcyBkZWZpbmVkIG9uIGEgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyBhbGwgaW5kZXggbWV0YWRhdGEgZnJvbSBhIG1vZGVsJ3MgcHJvcGVydHkgZGVjb3JhdG9ycy5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybiB7UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgSW5kZXhNZXRhZGF0YT4+fSBBIG5lc3RlZCByZWNvcmQgb2YgcHJvcGVydHkgbmFtZXMgdG8gaW5kZXggbWV0YWRhdGEuXG4gICAqL1xuICBzdGF0aWMgaW5kZXhlczxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT4pIHtcbiAgICBjb25zdCBpbmRleERlY29yYXRvcnMgPSBSZWZsZWN0aW9uLmdldEFsbFByb3BlcnR5RGVjb3JhdG9ycyhcbiAgICAgIG1vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbCA6IG5ldyBtb2RlbCgpLFxuICAgICAgREJLZXlzLlJFRkxFQ1RcbiAgICApO1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhpbmRleERlY29yYXRvcnMgfHwge30pLnJlZHVjZShcbiAgICAgIChhY2N1bTogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgSW5kZXhNZXRhZGF0YT4+LCBbaywgdmFsXSkgPT4ge1xuICAgICAgICBjb25zdCBkZWNzID0gdmFsLmZpbHRlcigodikgPT4gdi5rZXkuc3RhcnRzV2l0aChQZXJzaXN0ZW5jZUtleXMuSU5ERVgpKTtcbiAgICAgICAgaWYgKGRlY3MgJiYgZGVjcy5sZW5ndGgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGRlYyBvZiBkZWNzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGtleSwgcHJvcHMgfSA9IGRlYztcbiAgICAgICAgICAgIGFjY3VtW2tdID0gYWNjdW1ba10gfHwge307XG4gICAgICAgICAgICBhY2N1bVtrXVtrZXldID0gcHJvcHMgYXMgSW5kZXhNZXRhZGF0YTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2V0cyBhbGwgcmVsYXRpb24gcHJvcGVydGllcyBkZWZpbmVkIG9uIGEgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgbmFtZXMgb2YgYWxsIHByb3BlcnRpZXMgbWFya2VkIGFzIHJlbGF0aW9ucyBpbiB0aGUgbW9kZWwgaGllcmFyY2h5LlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIHRoYXQgZXh0ZW5kcyBNb2RlbC5cbiAgICogQHBhcmFtIHtNIHwgQ29uc3RydWN0b3I8TT59IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIG9yIGNvbnN0cnVjdG9yLlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMgdGhhdCBhcmUgcmVsYXRpb25zLlxuICAgKi9cbiAgc3RhdGljIHJlbGF0aW9uczxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNIHwgQ29uc3RydWN0b3I8TT4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBzdHJpbmdbXSA9IFtdO1xuICAgIGxldCBwcm90b3R5cGUgPVxuICAgICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbFxuICAgICAgICA/IE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2RlbClcbiAgICAgICAgOiAobW9kZWwgYXMgYW55KS5wcm90b3R5cGU7XG4gICAgd2hpbGUgKHByb3RvdHlwZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wczogc3RyaW5nW10gPSBwcm90b3R5cGVbUGVyc2lzdGVuY2VLZXlzLlJFTEFUSU9OU107XG4gICAgICBpZiAocHJvcHMpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goLi4ucHJvcHMpO1xuICAgICAgfVxuICAgICAgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHRhYmxlIG5hbWUgZm9yIGEgbW9kZWwuXG4gICAqIEBzdW1tYXJ5IFJldHJpZXZlcyB0aGUgZGF0YWJhc2UgdGFibGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggYSBtb2RlbC5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TSB8IENvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSBvciBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGFibGUgbmFtZSBmb3IgdGhlIG1vZGVsLlxuICAgKi9cbiAgc3RhdGljIHRhYmxlPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0gfCBDb25zdHJ1Y3RvcjxNPik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldFRhYmxlTmFtZShtb2RlbCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGNvbHVtbiBuYW1lIGZvciBhIG1vZGVsIGF0dHJpYnV0ZS5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBkYXRhYmFzZSBjb2x1bW4gbmFtZSBmb3IgYSBtb2RlbCBwcm9wZXJ0eS5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGUgLSBUaGUgYXR0cmlidXRlL3Byb3BlcnR5IG5hbWUuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbHVtbiBuYW1lIGZvciB0aGUgYXR0cmlidXRlLlxuICAgKi9cbiAgc3RhdGljIGNvbHVtbjxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNLCBhdHRyaWJ1dGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldENvbHVtbk5hbWUobW9kZWwsIGF0dHJpYnV0ZSk7XG4gIH1cbn1cblxuaWYgKEFkYXB0ZXIpIEFkYXB0ZXJbXCJfYmFzZVJlcG9zaXRvcnlcIl0gPSBSZXBvc2l0b3J5O1xuIl19
|
@@ -149,7 +149,7 @@ class InjectablesRegistry extends injectable_decorators_1.InjectableRegistryImp
|
|
149
149
|
injectable_decorators_1.Injectables.register(injectable, (0, utils_1.generateInjectableNameForRepository)(modelCtor, f));
|
150
150
|
}
|
151
151
|
catch (e) {
|
152
|
-
log.debug(`No registered repository or adapter found. falling back to default adapter`);
|
152
|
+
log.debug(`No registered repository or adapter found. falling back to default adapter. Error: ${e?.message || JSON.stringify(e)}`);
|
153
153
|
const repoCtor = Repository_1.Repository["get"](modelCtor, resolvedFlavour);
|
154
154
|
if (typeof repoCtor === "function") {
|
155
155
|
const adapter = resolvedFlavour
|
@@ -166,4 +166,4 @@ class InjectablesRegistry extends injectable_decorators_1.InjectableRegistryImp
|
|
166
166
|
}
|
167
167
|
}
|
168
168
|
exports.InjectablesRegistry = InjectablesRegistry;
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3NpdG9yeS9pbmplY3RhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyRUFHeUM7QUFDekMsaURBQTBDO0FBQzFDLHlFQUl3QztBQUN4Qyx1Q0FBOEQ7QUFDOUQsOERBQTJEO0FBQzNELDBEQUFpRDtBQUNqRCwrQ0FBb0Q7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSw2Q0FBcUI7SUFHNUQsSUFBYyxHQUFHO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxJQUFXLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQ0c7SUFDTSxHQUFHLENBQ1YsSUFBc0MsRUFDdEMsT0FBZ0I7UUFFaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLDREQUE0RDtRQUM1RCxJQUFJLFVBQXlCLENBQUM7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsVUFBVSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBVyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGlDQUFpQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLElBQUksU0FBdUMsQ0FBQztZQUM1QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVU7Z0JBQUUsU0FBUyxHQUFHLElBQXdCLENBQUM7aUJBQ2hFLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM5RCxTQUFTLEdBQUcsNEJBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUEwQixDQUFDO1lBQ2xFLENBQUM7WUFFRCxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUVqQyxnREFBZ0Q7WUFDaEQsTUFBTSxPQUFPLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUMsMkJBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxNQUFNLGVBQWUsR0FDbkIsT0FBTztnQkFDTixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQXdCLENBQUM7WUFFbEUsSUFBSSxDQUFDO2dCQUNILHFHQUFxRztnQkFDckcsMEZBQTBGO2dCQUMxRixJQUFJLFVBQVUsR0FBRyxlQUFlLENBQUM7Z0JBQ2pDLElBQUksQ0FBQztvQkFDSCxJQUFJLGVBQWU7d0JBQUUsaUJBQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE1BQU0sT0FBTyxHQUFHLGlCQUFPLENBQUMsT0FBYyxDQUFDO29CQUN2QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLGVBQWU7d0JBQ2hELFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUMvQixDQUFDO2dCQUVELFVBQVUsR0FBRyx1QkFBVSxDQUFDLFFBQVEsQ0FDOUIsU0FBNkIsRUFDN0IsVUFBVSxDQUNOLENBQUM7Z0JBQ1AsSUFBSSxVQUFVLFlBQVksdUJBQVU7b0JBQUUsT0FBTyxVQUFlLENBQUM7Z0JBRTdELHVFQUF1RTtnQkFDdkUsTUFBTSxDQUFDLEdBQ0wsZUFBZTtvQkFDZCxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRyxVQUFrQixDQUFDLFdBQVcsQ0FFL0M7b0JBQ2IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUF3QixDQUFDO2dCQUNsRSxtQ0FBVyxDQUFDLFFBQVEsQ0FDbEIsVUFBVSxFQUNWLElBQUEsMkNBQW1DLEVBQ2pDLFNBQWtDLEVBQ2xDLENBQVcsQ0FDWixDQUNGLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEtBQUssQ0FDUCw0RUFBNEUsQ0FDN0UsQ0FBQztnQkFDRixNQUFNLFFBQVEsR0FBSSx1QkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLENBQUM7Z0JBQ3hFLElBQUksT0FBTyxRQUFRLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ25DLE1BQU0sT0FBTyxHQUFHLGVBQWU7d0JBQzdCLENBQUMsQ0FBRSxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQVM7d0JBQ3ZDLENBQUMsQ0FBRSxpQkFBTyxDQUFDLE9BQWUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLE9BQU87d0JBQUUsT0FBTyxTQUFTLENBQUM7b0JBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDbEQsT0FBTyxRQUFhLENBQUM7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sVUFBMkIsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUE3SEQsa0RBNkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wLFxuICBJbmplY3RhYmxlcyxcbn0gZnJvbSBcIkBkZWNhZi10cy9pbmplY3RhYmxlLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi9SZXBvc2l0b3J5XCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgTW9kZWwsXG4gIE1vZGVsQ29uc3RydWN0b3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGdlbmVyYXRlSW5qZWN0YWJsZU5hbWVGb3JSZXBvc2l0b3J5IH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IFBlcnNpc3RlbmNlS2V5cyB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9jb25zdGFudHNcIjtcbmltcG9ydCB7IEFkYXB0ZXIgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvQWRhcHRlclwiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlZ2lzdHJ5IGZvciBpbmplY3RhYmxlIHJlcG9zaXRvcmllcyB3aXRoIGF1dG8tcmVzb2x1dGlvbi5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGFuIEluamVjdGFibGVSZWdpc3RyeSBpbXBsZW1lbnRhdGlvbiB0aGF0IHJlc29sdmVzIHJlcG9zaXRvcmllcyBieSBtb2RlbCBuYW1lIG9yIGNvbnN0cnVjdG9yLiBJZiBhIHJlcG9zaXRvcnlcbiAqIGlzIG5vdCBleHBsaWNpdGx5IHJlZ2lzdGVyZWQsIGl0IGF0dGVtcHRzIHRvIGluZmVyIHRoZSBjb3JyZWN0IHJlcG9zaXRvcnkgdXNpbmcgbW9kZWwgbWV0YWRhdGEgYW5kIHRoZSBhY3RpdmUgb3Igc3BlY2lmaWVkIGFkYXB0ZXIgZmxhdm91ci5cbiAqIEBwYXJhbSB7dm9pZH0gW2NvbnN0cnVjdG9yXSBObyBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIHJlcXVpcmVkOyB0aGUgc3VwZXJjbGFzcyBoYW5kbGVzIGludGVybmFsIHN0YXRlLlxuICogQGNsYXNzIEluamVjdGFibGVzUmVnaXN0cnlcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZTogcmV0cmlldmUgYSByZXBvc2l0b3J5IGJ5IG1vZGVsIG5hbWVcbiAqIGNvbnN0IHJlZ2lzdHJ5ID0gbmV3IEluamVjdGFibGVzUmVnaXN0cnkoKTtcbiAqIGNvbnN0IHVzZXJSZXBvID0gcmVnaXN0cnkuZ2V0PFVzZXJSZXBvc2l0b3J5PignVXNlcicpO1xuICogLy8gSWYgVXNlclJlcG9zaXRvcnkgaXMgcmVnaXN0ZXJlZCwgaXQgd2lsbCBiZSByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIHJlcG9zaXRvcnkgd2lsbCBiZSBjcmVhdGVkIGlmIGEgVXNlciBtb2RlbCBleGlzdHMuXG4gKlxuICogLy8gUmV0cmlldmUgYnkgY29uc3RydWN0b3IgYW5kIHNwZWNpZnkgYWRhcHRlciBmbGF2b3VyXG4gKiBjb25zdCByZXBvQnlDdG9yID0gcmVnaXN0cnkuZ2V0PFVzZXJSZXBvc2l0b3J5PihVc2VyTW9kZWwsICdyYW0nKTtcbiAqXG4gKiAvLyBSZXRyaWV2ZSBieSBzeW1ib2wgKGUuZy4sIGluamVjdGFibGUgdG9rZW4pXG4gKiBjb25zdCB0b2tlbiA9IFN5bWJvbC5mb3IoJ1VzZXJSZXBvc2l0b3J5Jyk7XG4gKiBjb25zdCBieVRva2VuID0gcmVnaXN0cnkuZ2V0PFVzZXJSZXBvc2l0b3J5Pih0b2tlbik7XG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEMgYXMgQ29uc3VtZXJcbiAqICAgcGFydGljaXBhbnQgUiBhcyBJbmplY3RhYmxlc1JlZ2lzdHJ5XG4gKiAgIHBhcnRpY2lwYW50IEIgYXMgQmFzZVJlZ2lzdHJ5XG4gKiAgIHBhcnRpY2lwYW50IE0gYXMgTW9kZWxcbiAqICAgcGFydGljaXBhbnQgQSBhcyBBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IFJQIGFzIFJlcG9zaXRvcnlcbiAqICAgQy0+PlI6IGdldChuYW1lLCBmbGF2b3VyPylcbiAqICAgYWN0aXZhdGUgUlxuICogICBSLT4+Qjogc3VwZXIuZ2V0KG5hbWUpXG4gKiAgIGFsdCBGb3VuZCBpbiBiYXNlIHJlZ2lzdHJ5XG4gKiAgICAgQi0tPj5SOiBpbmplY3RhYmxlXG4gKiAgICAgUi0tPj5DOiBpbmplY3RhYmxlXG4gKiAgIGVsc2UgTm90IGZvdW5kXG4gKiAgICAgUi0+Pk06IE1vZGVsLmdldChuYW1lKVxuICogICAgIGFsdCBNb2RlbCBmb3VuZFxuICogICAgICAgUi0+PkE6IHJlc29sdmUgZmxhdm91ciAoZnJvbSBhcmcvbWV0YWRhdGEvY3VycmVudClcbiAqICAgICAgIFItPj5SUDogUmVwb3NpdG9yeS5mb3JNb2RlbChtb2RlbEN0b3IsIGFsaWFzKVxuICogICAgICAgYWx0IFJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqICAgICAgICAgUlAtLT4+UjogcmVwb3NpdG9yeSBpbnN0YW5jZVxuICogICAgICAgICBSLS0+PkM6IHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqICAgICAgIGVsc2UgUmVwb3NpdG9yeSBjdG9yXG4gKiAgICAgICAgIFItPj5BOiBBZGFwdGVyLmdldChyZXNvbHZlZEZsYXZvdXIpIG9yIEFkYXB0ZXIuY3VycmVudFxuICogICAgICAgICBBLS0+PlI6IGFkYXB0ZXIgaW5zdGFuY2VcbiAqICAgICAgICAgUi0+PlJQOiBuZXcgcmVwb0N0b3IoYWRhcHRlciwgbW9kZWxDdG9yKVxuICogICAgICAgICBSLS0+PkM6IHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqICAgICAgIGVuZFxuICogICAgIGVsc2UgTW9kZWwgbm90IGZvdW5kXG4gKiAgICAgICBSLS0+PkM6IHVuZGVmaW5lZFxuICogICAgIGVuZFxuICogICBlbmRcbiAqL1xuZXhwb3J0IGNsYXNzIEluamVjdGFibGVzUmVnaXN0cnkgZXh0ZW5kcyBJbmplY3RhYmxlUmVnaXN0cnlJbXAge1xuICBwcml2YXRlIGxvZ2dlcj86IExvZ2dlcjtcblxuICBwcm90ZWN0ZWQgZ2V0IGxvZygpOiBMb2dnZXIge1xuICAgIGlmICghdGhpcy5sb2dnZXIpIHRoaXMubG9nZ2VyID0gTG9nZ2luZy5mb3IodGhpcyBhcyBhbnkpO1xuICAgIHJldHVybiB0aGlzLmxvZ2dlcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlIGFuIGluamVjdGFibGUgd2l0aCByZXBvc2l0b3J5IGF1dG8tcmVzb2x1dGlvbi5cbiAgICogQHN1bW1hcnkgQXR0ZW1wdHMgdG8gZ2V0IGFuIGluamVjdGFibGUgZnJvbSB0aGUgYmFzZSByZWdpc3RyeTsgaWYgbm90IGZvdW5kIGFuZCB0aGUgbmFtZSByZWZlcnMgdG8gYSBrbm93biBtb2RlbCwgaXRcbiAgICogcmVzb2x2ZXMgdGhlIGFwcHJvcHJpYXRlIHJlcG9zaXRvcnkgdXNpbmcgdGhlIHNwZWNpZmllZCBmbGF2b3VyIG9yIG1vZGVsIG1ldGFkYXRhLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGN1cnJlbnQgYWRhcHRlciB3aGVuIG5lZWRlZC5cbiAgICogQHRlbXBsYXRlIFQgVGhlIGluamVjdGFibGUgdHlwZSB0byBiZSByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzeW1ib2wgfCBDb25zdHJ1Y3RvcjxUPn0gbmFtZSBUb2tlbiwgbW9kZWwgbmFtZSwgb3IgY29uc3RydWN0b3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbmplY3RhYmxlIG9yIG1vZGVsLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYXZvdXJdIE9wdGlvbmFsIGFkYXB0ZXIgZmxhdm91ciAoZS5nLiwgXCJyYW1cIikuIElmIG9taXR0ZWQsIGRlcml2ZXMgZnJvbSBtZXRhZGF0YSBvciBjdXJyZW50IGFkYXB0ZXIuXG4gICAqIEByZXR1cm4ge1QgfCB1bmRlZmluZWR9IFRoZSBsb2NhdGVkIG9yIGF1dG8tY3JlYXRlZCBpbmplY3RhYmxlIGluc3RhbmNlOyBvdGhlcndpc2UgdW5kZWZpbmVkIGlmIGl0IGNhbm5vdCBiZSByZXNvbHZlZC5cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgRyBhcyBnZXQobmFtZSwgZmxhdm91cj8pXG4gICAqICAgcGFydGljaXBhbnQgQlIgYXMgQmFzZVJlZ2lzdHJ5XG4gICAqICAgcGFydGljaXBhbnQgTSBhcyBNb2RlbFxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IFJQIGFzIFJlcG9zaXRvcnlcbiAgICogICBHLT4+QlI6IHN1cGVyLmdldChuYW1lKVxuICAgKiAgIGFsdCBGb3VuZFxuICAgKiAgICAgQlItLT4+RzogaW5qZWN0YWJsZVxuICAgKiAgIGVsc2UgTm90IGZvdW5kXG4gICAqICAgICBHLT4+TTogZGVyaXZlIG1vZGVsQ3RvciBmcm9tIG5hbWVcbiAgICogICAgIGFsdCBtb2RlbEN0b3IgcmVzb2x2ZWRcbiAgICogICAgICAgRy0+PkE6IHJlc29sdmUgZmxhdm91ciAoYXJnIHwgbWV0YWRhdGEgfCBjdXJyZW50KVxuICAgKiAgICAgICBHLT4+UlA6IFJlcG9zaXRvcnkuZm9yTW9kZWwobW9kZWxDdG9yLCBhbGlhcylcbiAgICogICAgICAgYWx0IHJldHVybnMgaW5zdGFuY2VcbiAgICogICAgICAgICBSUC0tPj5HOiBSZXBvc2l0b3J5IGluc3RhbmNlXG4gICAqICAgICAgIGVsc2UgcmV0dXJucyBjdG9yXG4gICAqICAgICAgICAgRy0+PkE6IEFkYXB0ZXIuZ2V0KGZsYXZvdXIpIHwgQWRhcHRlci5jdXJyZW50XG4gICAqICAgICAgICAgQS0tPj5HOiBhZGFwdGVyIGluc3RhbmNlXG4gICAqICAgICAgICAgRy0+PlJQOiBuZXcgcmVwb0N0b3IoYWRhcHRlciwgbW9kZWxDdG9yKVxuICAgKiAgICAgICBlbmRcbiAgICogICAgIGVsc2Ugbm8gbW9kZWxDdG9yXG4gICAqICAgICAgIEctLT4+RzogcmV0dXJuIHVuZGVmaW5lZFxuICAgKiAgICAgZW5kXG4gICAqICAgZW5kXG4gICAqL1xuICBvdmVycmlkZSBnZXQ8VD4oXG4gICAgbmFtZTogc3ltYm9sIHwgQ29uc3RydWN0b3I8VD4gfCBzdHJpbmcsXG4gICAgZmxhdm91cj86IHN0cmluZ1xuICApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5nZXQpO1xuICAgIC8vIEZpcnN0LCB0cnkgYmFzZSByZWdpc3RyeSwgYnV0IGd1YXJkIGFnYWluc3QgdGhyb3duIGVycm9yc1xuICAgIGxldCBpbmplY3RhYmxlOiBUIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBpbmplY3RhYmxlID0gc3VwZXIuZ2V0KG5hbWUgYXMgYW55KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIGRvIG5vdGhpbmcuIHdlIGhhbmRsZSBpdCBsYXRlclxuICAgIH1cblxuICAgIGlmICghaW5qZWN0YWJsZSkge1xuICAgICAgbGV0IG1vZGVsQ3RvcjogQ29uc3RydWN0b3I8YW55PiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJmdW5jdGlvblwiKSBtb2RlbEN0b3IgPSBuYW1lIGFzIENvbnN0cnVjdG9yPGFueT47XG4gICAgICBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIiB8fCB0eXBlb2YgbmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBtb2RlbEN0b3IgPSBNb2RlbC5nZXQobmFtZS50b1N0cmluZygpKSBhcyBNb2RlbENvbnN0cnVjdG9yPGFueT47XG4gICAgICB9XG5cbiAgICAgIGlmICghbW9kZWxDdG9yKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBSZXNvbHZlIGZsYXZvdXIgZnJvbSBtZXRhZGF0YSBpZiBub3QgcHJvdmlkZWRcbiAgICAgIGNvbnN0IG1ldGFLZXkgPSBBZGFwdGVyLmtleShQZXJzaXN0ZW5jZUtleXMuQURBUFRFUik7XG4gICAgICBjb25zdCByZXNvbHZlZEZsYXZvdXIgPVxuICAgICAgICBmbGF2b3VyIHx8XG4gICAgICAgIChSZWZsZWN0LmdldE1ldGFkYXRhKG1ldGFLZXksIG1vZGVsQ3RvcikgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gRGV0ZXJtaW5lIGFuIGFsaWFzIHRvIHVzZTogcHJlZmVyIGEgZGlyZWN0bHkgcmVnaXN0ZXJlZCBhZGFwdGVyOyBvdGhlcndpc2UsIGlmIHRoZSBjdXJyZW50IGFkYXB0ZXJcbiAgICAgICAgLy8gaGFzIHRoZSBzYW1lIGZsYXZvdXIsIHVzZSBpdHMgYWxpYXMgdG8gc2F0aXNmeSBSZXBvc2l0b3J5LmZvck1vZGVsL0FkYXB0ZXIuZ2V0IGxvb2t1cHMuXG4gICAgICAgIGxldCBhbGlhc1RvVXNlID0gcmVzb2x2ZWRGbGF2b3VyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChyZXNvbHZlZEZsYXZvdXIpIEFkYXB0ZXIuZ2V0KHJlc29sdmVkRmxhdm91cik7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBBZGFwdGVyLmN1cnJlbnQgYXMgYW55O1xuICAgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQuZmxhdm91ciA9PT0gcmVzb2x2ZWRGbGF2b3VyKVxuICAgICAgICAgICAgYWxpYXNUb1VzZSA9IGN1cnJlbnQuYWxpYXM7XG4gICAgICAgIH1cblxuICAgICAgICBpbmplY3RhYmxlID0gUmVwb3NpdG9yeS5mb3JNb2RlbChcbiAgICAgICAgICBtb2RlbEN0b3IgYXMgQ29uc3RydWN0b3I8YW55PixcbiAgICAgICAgICBhbGlhc1RvVXNlXG4gICAgICAgICkgYXMgVDtcbiAgICAgICAgaWYgKGluamVjdGFibGUgaW5zdGFuY2VvZiBSZXBvc2l0b3J5KSByZXR1cm4gaW5qZWN0YWJsZSBhcyBUO1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgcmVnaXN0ZXIgdGhlIHJlc29sdmVkIGluamVjdGFibGUgbmFtZSBmb3IgbGF0ZXIgcmV0cmlldmFsXG4gICAgICAgIGNvbnN0IGYgPVxuICAgICAgICAgIHJlc29sdmVkRmxhdm91ciB8fFxuICAgICAgICAgIChSZWZsZWN0LmdldE1ldGFkYXRhKG1ldGFLZXksIChpbmplY3RhYmxlIGFzIGFueSkuY29uc3RydWN0b3IpIGFzXG4gICAgICAgICAgICB8IHN0cmluZ1xuICAgICAgICAgICAgfCB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgKFJlZmxlY3QuZ2V0TWV0YWRhdGEobWV0YUtleSwgbW9kZWxDdG9yKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQpO1xuICAgICAgICBJbmplY3RhYmxlcy5yZWdpc3RlcihcbiAgICAgICAgICBpbmplY3RhYmxlLFxuICAgICAgICAgIGdlbmVyYXRlSW5qZWN0YWJsZU5hbWVGb3JSZXBvc2l0b3J5KFxuICAgICAgICAgICAgbW9kZWxDdG9yIGFzIE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICAgICAgICAgIGYgYXMgc3RyaW5nXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgYE5vIHJlZ2lzdGVyZWQgcmVwb3NpdG9yeSBvciBhZGFwdGVyIGZvdW5kLiBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCBhZGFwdGVyYFxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZXBvQ3RvciA9IChSZXBvc2l0b3J5IGFzIGFueSlbXCJnZXRcIl0obW9kZWxDdG9yLCByZXNvbHZlZEZsYXZvdXIpO1xuICAgICAgICBpZiAodHlwZW9mIHJlcG9DdG9yID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICBjb25zdCBhZGFwdGVyID0gcmVzb2x2ZWRGbGF2b3VyXG4gICAgICAgICAgICA/IChBZGFwdGVyLmdldChyZXNvbHZlZEZsYXZvdXIpIGFzIGFueSlcbiAgICAgICAgICAgIDogKEFkYXB0ZXIuY3VycmVudCBhcyBhbnkpO1xuICAgICAgICAgIGlmICghYWRhcHRlcikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyByZXBvQ3RvcihhZGFwdGVyLCBtb2RlbEN0b3IpO1xuICAgICAgICAgIHJldHVybiBpbnN0YW5jZSBhcyBUO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGluamVjdGFibGUgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5qZWN0YWJsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3NpdG9yeS9pbmplY3RhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyRUFHeUM7QUFDekMsaURBQTBDO0FBQzFDLHlFQUl3QztBQUN4Qyx1Q0FBOEQ7QUFDOUQsOERBQTJEO0FBQzNELDBEQUFpRDtBQUNqRCwrQ0FBb0Q7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0RHO0FBQ0gsTUFBYSxtQkFBb0IsU0FBUSw2Q0FBcUI7SUFHNUQsSUFBYyxHQUFHO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxJQUFXLENBQUMsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEO1FBQ0UsS0FBSyxFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQ0c7SUFDTSxHQUFHLENBQ1YsSUFBc0MsRUFDdEMsT0FBZ0I7UUFFaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLDREQUE0RDtRQUM1RCxJQUFJLFVBQXlCLENBQUM7UUFDOUIsSUFBSSxDQUFDO1lBQ0gsVUFBVSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBVyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLGlDQUFpQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLElBQUksU0FBdUMsQ0FBQztZQUM1QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVU7Z0JBQUUsU0FBUyxHQUFHLElBQXdCLENBQUM7aUJBQ2hFLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM5RCxTQUFTLEdBQUcsNEJBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUEwQixDQUFDO1lBQ2xFLENBQUM7WUFFRCxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUVqQyxnREFBZ0Q7WUFDaEQsTUFBTSxPQUFPLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUMsMkJBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyRCxNQUFNLGVBQWUsR0FDbkIsT0FBTztnQkFDTixPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQXdCLENBQUM7WUFFbEUsSUFBSSxDQUFDO2dCQUNILHFHQUFxRztnQkFDckcsMEZBQTBGO2dCQUMxRixJQUFJLFVBQVUsR0FBRyxlQUFlLENBQUM7Z0JBQ2pDLElBQUksQ0FBQztvQkFDSCxJQUFJLGVBQWU7d0JBQUUsaUJBQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLE1BQU0sT0FBTyxHQUFHLGlCQUFPLENBQUMsT0FBYyxDQUFDO29CQUN2QyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxLQUFLLGVBQWU7d0JBQ2hELFVBQVUsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUMvQixDQUFDO2dCQUVELFVBQVUsR0FBRyx1QkFBVSxDQUFDLFFBQVEsQ0FDOUIsU0FBNkIsRUFDN0IsVUFBVSxDQUNOLENBQUM7Z0JBQ1AsSUFBSSxVQUFVLFlBQVksdUJBQVU7b0JBQUUsT0FBTyxVQUFlLENBQUM7Z0JBRTdELHVFQUF1RTtnQkFDdkUsTUFBTSxDQUFDLEdBQ0wsZUFBZTtvQkFDZCxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRyxVQUFrQixDQUFDLFdBQVcsQ0FFL0M7b0JBQ2IsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUF3QixDQUFDO2dCQUNsRSxtQ0FBVyxDQUFDLFFBQVEsQ0FDbEIsVUFBVSxFQUNWLElBQUEsMkNBQW1DLEVBQ2pDLFNBQWtDLEVBQ2xDLENBQVcsQ0FDWixDQUNGLENBQUM7WUFDSixDQUFDO1lBQUMsT0FBTyxDQUFVLEVBQUUsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLEtBQUssQ0FDUCxzRkFBdUYsQ0FBVyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ25JLENBQUM7Z0JBQ0YsTUFBTSxRQUFRLEdBQUksdUJBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO29CQUNuQyxNQUFNLE9BQU8sR0FBRyxlQUFlO3dCQUM3QixDQUFDLENBQUUsaUJBQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFTO3dCQUN2QyxDQUFDLENBQUUsaUJBQU8sQ0FBQyxPQUFlLENBQUM7b0JBQzdCLElBQUksQ0FBQyxPQUFPO3dCQUFFLE9BQU8sU0FBUyxDQUFDO29CQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7b0JBQ2xELE9BQU8sUUFBYSxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFVBQTJCLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBN0hELGtEQTZIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEluamVjdGFibGVSZWdpc3RyeUltcCxcbiAgSW5qZWN0YWJsZXMsXG59IGZyb20gXCJAZGVjYWYtdHMvaW5qZWN0YWJsZS1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIi4vUmVwb3NpdG9yeVwiO1xuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIE1vZGVsLFxuICBNb2RlbENvbnN0cnVjdG9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUluamVjdGFibGVOYW1lRm9yUmVwb3NpdG9yeSB9IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBZGFwdGVyIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlL0FkYXB0ZXJcIjtcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWdpc3RyeSBmb3IgaW5qZWN0YWJsZSByZXBvc2l0b3JpZXMgd2l0aCBhdXRvLXJlc29sdXRpb24uXG4gKiBAc3VtbWFyeSBQcm92aWRlcyBhbiBJbmplY3RhYmxlUmVnaXN0cnkgaW1wbGVtZW50YXRpb24gdGhhdCByZXNvbHZlcyByZXBvc2l0b3JpZXMgYnkgbW9kZWwgbmFtZSBvciBjb25zdHJ1Y3Rvci4gSWYgYSByZXBvc2l0b3J5XG4gKiBpcyBub3QgZXhwbGljaXRseSByZWdpc3RlcmVkLCBpdCBhdHRlbXB0cyB0byBpbmZlciB0aGUgY29ycmVjdCByZXBvc2l0b3J5IHVzaW5nIG1vZGVsIG1ldGFkYXRhIGFuZCB0aGUgYWN0aXZlIG9yIHNwZWNpZmllZCBhZGFwdGVyIGZsYXZvdXIuXG4gKiBAcGFyYW0ge3ZvaWR9IFtjb25zdHJ1Y3Rvcl0gTm8gY29uc3RydWN0b3IgcGFyYW1ldGVycyByZXF1aXJlZDsgdGhlIHN1cGVyY2xhc3MgaGFuZGxlcyBpbnRlcm5hbCBzdGF0ZS5cbiAqIEBjbGFzcyBJbmplY3RhYmxlc1JlZ2lzdHJ5XG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgdXNhZ2U6IHJldHJpZXZlIGEgcmVwb3NpdG9yeSBieSBtb2RlbCBuYW1lXG4gKiBjb25zdCByZWdpc3RyeSA9IG5ldyBJbmplY3RhYmxlc1JlZ2lzdHJ5KCk7XG4gKiBjb25zdCB1c2VyUmVwbyA9IHJlZ2lzdHJ5LmdldDxVc2VyUmVwb3NpdG9yeT4oJ1VzZXInKTtcbiAqIC8vIElmIFVzZXJSZXBvc2l0b3J5IGlzIHJlZ2lzdGVyZWQsIGl0IHdpbGwgYmUgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSByZXBvc2l0b3J5IHdpbGwgYmUgY3JlYXRlZCBpZiBhIFVzZXIgbW9kZWwgZXhpc3RzLlxuICpcbiAqIC8vIFJldHJpZXZlIGJ5IGNvbnN0cnVjdG9yIGFuZCBzcGVjaWZ5IGFkYXB0ZXIgZmxhdm91clxuICogY29uc3QgcmVwb0J5Q3RvciA9IHJlZ2lzdHJ5LmdldDxVc2VyUmVwb3NpdG9yeT4oVXNlck1vZGVsLCAncmFtJyk7XG4gKlxuICogLy8gUmV0cmlldmUgYnkgc3ltYm9sIChlLmcuLCBpbmplY3RhYmxlIHRva2VuKVxuICogY29uc3QgdG9rZW4gPSBTeW1ib2wuZm9yKCdVc2VyUmVwb3NpdG9yeScpO1xuICogY29uc3QgYnlUb2tlbiA9IHJlZ2lzdHJ5LmdldDxVc2VyUmVwb3NpdG9yeT4odG9rZW4pO1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDIGFzIENvbnN1bWVyXG4gKiAgIHBhcnRpY2lwYW50IFIgYXMgSW5qZWN0YWJsZXNSZWdpc3RyeVxuICogICBwYXJ0aWNpcGFudCBCIGFzIEJhc2VSZWdpc3RyeVxuICogICBwYXJ0aWNpcGFudCBNIGFzIE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IEEgYXMgQWRhcHRlclxuICogICBwYXJ0aWNpcGFudCBSUCBhcyBSZXBvc2l0b3J5XG4gKiAgIEMtPj5SOiBnZXQobmFtZSwgZmxhdm91cj8pXG4gKiAgIGFjdGl2YXRlIFJcbiAqICAgUi0+PkI6IHN1cGVyLmdldChuYW1lKVxuICogICBhbHQgRm91bmQgaW4gYmFzZSByZWdpc3RyeVxuICogICAgIEItLT4+UjogaW5qZWN0YWJsZVxuICogICAgIFItLT4+QzogaW5qZWN0YWJsZVxuICogICBlbHNlIE5vdCBmb3VuZFxuICogICAgIFItPj5NOiBNb2RlbC5nZXQobmFtZSlcbiAqICAgICBhbHQgTW9kZWwgZm91bmRcbiAqICAgICAgIFItPj5BOiByZXNvbHZlIGZsYXZvdXIgKGZyb20gYXJnL21ldGFkYXRhL2N1cnJlbnQpXG4gKiAgICAgICBSLT4+UlA6IFJlcG9zaXRvcnkuZm9yTW9kZWwobW9kZWxDdG9yLCBhbGlhcylcbiAqICAgICAgIGFsdCBSZXBvc2l0b3J5IGluc3RhbmNlXG4gKiAgICAgICAgIFJQLS0+PlI6IHJlcG9zaXRvcnkgaW5zdGFuY2VcbiAqICAgICAgICAgUi0tPj5DOiByZXBvc2l0b3J5IGluc3RhbmNlXG4gKiAgICAgICBlbHNlIFJlcG9zaXRvcnkgY3RvclxuICogICAgICAgICBSLT4+QTogQWRhcHRlci5nZXQocmVzb2x2ZWRGbGF2b3VyKSBvciBBZGFwdGVyLmN1cnJlbnRcbiAqICAgICAgICAgQS0tPj5SOiBhZGFwdGVyIGluc3RhbmNlXG4gKiAgICAgICAgIFItPj5SUDogbmV3IHJlcG9DdG9yKGFkYXB0ZXIsIG1vZGVsQ3RvcilcbiAqICAgICAgICAgUi0tPj5DOiByZXBvc2l0b3J5IGluc3RhbmNlXG4gKiAgICAgICBlbmRcbiAqICAgICBlbHNlIE1vZGVsIG5vdCBmb3VuZFxuICogICAgICAgUi0tPj5DOiB1bmRlZmluZWRcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBJbmplY3RhYmxlc1JlZ2lzdHJ5IGV4dGVuZHMgSW5qZWN0YWJsZVJlZ2lzdHJ5SW1wIHtcbiAgcHJpdmF0ZSBsb2dnZXI/OiBMb2dnZXI7XG5cbiAgcHJvdGVjdGVkIGdldCBsb2coKTogTG9nZ2VyIHtcbiAgICBpZiAoIXRoaXMubG9nZ2VyKSB0aGlzLmxvZ2dlciA9IExvZ2dpbmcuZm9yKHRoaXMgYXMgYW55KTtcbiAgICByZXR1cm4gdGhpcy5sb2dnZXI7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZSBhbiBpbmplY3RhYmxlIHdpdGggcmVwb3NpdG9yeSBhdXRvLXJlc29sdXRpb24uXG4gICAqIEBzdW1tYXJ5IEF0dGVtcHRzIHRvIGdldCBhbiBpbmplY3RhYmxlIGZyb20gdGhlIGJhc2UgcmVnaXN0cnk7IGlmIG5vdCBmb3VuZCBhbmQgdGhlIG5hbWUgcmVmZXJzIHRvIGEga25vd24gbW9kZWwsIGl0XG4gICAqIHJlc29sdmVzIHRoZSBhcHByb3ByaWF0ZSByZXBvc2l0b3J5IHVzaW5nIHRoZSBzcGVjaWZpZWQgZmxhdm91ciBvciBtb2RlbCBtZXRhZGF0YSwgZmFsbGluZyBiYWNrIHRvIHRoZSBjdXJyZW50IGFkYXB0ZXIgd2hlbiBuZWVkZWQuXG4gICAqIEB0ZW1wbGF0ZSBUIFRoZSBpbmplY3RhYmxlIHR5cGUgdG8gYmUgcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3ltYm9sIHwgQ29uc3RydWN0b3I8VD59IG5hbWUgVG9rZW4sIG1vZGVsIG5hbWUsIG9yIGNvbnN0cnVjdG9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5qZWN0YWJsZSBvciBtb2RlbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmbGF2b3VyXSBPcHRpb25hbCBhZGFwdGVyIGZsYXZvdXIgKGUuZy4sIFwicmFtXCIpLiBJZiBvbWl0dGVkLCBkZXJpdmVzIGZyb20gbWV0YWRhdGEgb3IgY3VycmVudCBhZGFwdGVyLlxuICAgKiBAcmV0dXJuIHtUIHwgdW5kZWZpbmVkfSBUaGUgbG9jYXRlZCBvciBhdXRvLWNyZWF0ZWQgaW5qZWN0YWJsZSBpbnN0YW5jZTsgb3RoZXJ3aXNlIHVuZGVmaW5lZCBpZiBpdCBjYW5ub3QgYmUgcmVzb2x2ZWQuXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IEcgYXMgZ2V0KG5hbWUsIGZsYXZvdXI/KVxuICAgKiAgIHBhcnRpY2lwYW50IEJSIGFzIEJhc2VSZWdpc3RyeVxuICAgKiAgIHBhcnRpY2lwYW50IE0gYXMgTW9kZWxcbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFkYXB0ZXJcbiAgICogICBwYXJ0aWNpcGFudCBSUCBhcyBSZXBvc2l0b3J5XG4gICAqICAgRy0+PkJSOiBzdXBlci5nZXQobmFtZSlcbiAgICogICBhbHQgRm91bmRcbiAgICogICAgIEJSLS0+Pkc6IGluamVjdGFibGVcbiAgICogICBlbHNlIE5vdCBmb3VuZFxuICAgKiAgICAgRy0+Pk06IGRlcml2ZSBtb2RlbEN0b3IgZnJvbSBuYW1lXG4gICAqICAgICBhbHQgbW9kZWxDdG9yIHJlc29sdmVkXG4gICAqICAgICAgIEctPj5BOiByZXNvbHZlIGZsYXZvdXIgKGFyZyB8IG1ldGFkYXRhIHwgY3VycmVudClcbiAgICogICAgICAgRy0+PlJQOiBSZXBvc2l0b3J5LmZvck1vZGVsKG1vZGVsQ3RvciwgYWxpYXMpXG4gICAqICAgICAgIGFsdCByZXR1cm5zIGluc3RhbmNlXG4gICAqICAgICAgICAgUlAtLT4+RzogUmVwb3NpdG9yeSBpbnN0YW5jZVxuICAgKiAgICAgICBlbHNlIHJldHVybnMgY3RvclxuICAgKiAgICAgICAgIEctPj5BOiBBZGFwdGVyLmdldChmbGF2b3VyKSB8IEFkYXB0ZXIuY3VycmVudFxuICAgKiAgICAgICAgIEEtLT4+RzogYWRhcHRlciBpbnN0YW5jZVxuICAgKiAgICAgICAgIEctPj5SUDogbmV3IHJlcG9DdG9yKGFkYXB0ZXIsIG1vZGVsQ3RvcilcbiAgICogICAgICAgZW5kXG4gICAqICAgICBlbHNlIG5vIG1vZGVsQ3RvclxuICAgKiAgICAgICBHLS0+Pkc6IHJldHVybiB1bmRlZmluZWRcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKi9cbiAgb3ZlcnJpZGUgZ2V0PFQ+KFxuICAgIG5hbWU6IHN5bWJvbCB8IENvbnN0cnVjdG9yPFQ+IHwgc3RyaW5nLFxuICAgIGZsYXZvdXI/OiBzdHJpbmdcbiAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuZ2V0KTtcbiAgICAvLyBGaXJzdCwgdHJ5IGJhc2UgcmVnaXN0cnksIGJ1dCBndWFyZCBhZ2FpbnN0IHRocm93biBlcnJvcnNcbiAgICBsZXQgaW5qZWN0YWJsZTogVCB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgaW5qZWN0YWJsZSA9IHN1cGVyLmdldChuYW1lIGFzIGFueSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBkbyBub3RoaW5nLiB3ZSBoYW5kbGUgaXQgbGF0ZXJcbiAgICB9XG5cbiAgICBpZiAoIWluamVjdGFibGUpIHtcbiAgICAgIGxldCBtb2RlbEN0b3I6IENvbnN0cnVjdG9yPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIikgbW9kZWxDdG9yID0gbmFtZSBhcyBDb25zdHJ1Y3Rvcjxhbnk+O1xuICAgICAgZWxzZSBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIgfHwgdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbW9kZWxDdG9yID0gTW9kZWwuZ2V0KG5hbWUudG9TdHJpbmcoKSkgYXMgTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+O1xuICAgICAgfVxuXG4gICAgICBpZiAoIW1vZGVsQ3RvcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgLy8gUmVzb2x2ZSBmbGF2b3VyIGZyb20gbWV0YWRhdGEgaWYgbm90IHByb3ZpZGVkXG4gICAgICBjb25zdCBtZXRhS2V5ID0gQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpO1xuICAgICAgY29uc3QgcmVzb2x2ZWRGbGF2b3VyID1cbiAgICAgICAgZmxhdm91ciB8fFxuICAgICAgICAoUmVmbGVjdC5nZXRNZXRhZGF0YShtZXRhS2V5LCBtb2RlbEN0b3IpIGFzIHN0cmluZyB8IHVuZGVmaW5lZCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIERldGVybWluZSBhbiBhbGlhcyB0byB1c2U6IHByZWZlciBhIGRpcmVjdGx5IHJlZ2lzdGVyZWQgYWRhcHRlcjsgb3RoZXJ3aXNlLCBpZiB0aGUgY3VycmVudCBhZGFwdGVyXG4gICAgICAgIC8vIGhhcyB0aGUgc2FtZSBmbGF2b3VyLCB1c2UgaXRzIGFsaWFzIHRvIHNhdGlzZnkgUmVwb3NpdG9yeS5mb3JNb2RlbC9BZGFwdGVyLmdldCBsb29rdXBzLlxuICAgICAgICBsZXQgYWxpYXNUb1VzZSA9IHJlc29sdmVkRmxhdm91cjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAocmVzb2x2ZWRGbGF2b3VyKSBBZGFwdGVyLmdldChyZXNvbHZlZEZsYXZvdXIpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gQWRhcHRlci5jdXJyZW50IGFzIGFueTtcbiAgICAgICAgICBpZiAoY3VycmVudCAmJiBjdXJyZW50LmZsYXZvdXIgPT09IHJlc29sdmVkRmxhdm91cilcbiAgICAgICAgICAgIGFsaWFzVG9Vc2UgPSBjdXJyZW50LmFsaWFzO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5qZWN0YWJsZSA9IFJlcG9zaXRvcnkuZm9yTW9kZWwoXG4gICAgICAgICAgbW9kZWxDdG9yIGFzIENvbnN0cnVjdG9yPGFueT4sXG4gICAgICAgICAgYWxpYXNUb1VzZVxuICAgICAgICApIGFzIFQ7XG4gICAgICAgIGlmIChpbmplY3RhYmxlIGluc3RhbmNlb2YgUmVwb3NpdG9yeSkgcmV0dXJuIGluamVjdGFibGUgYXMgVDtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIHJlZ2lzdGVyIHRoZSByZXNvbHZlZCBpbmplY3RhYmxlIG5hbWUgZm9yIGxhdGVyIHJldHJpZXZhbFxuICAgICAgICBjb25zdCBmID1cbiAgICAgICAgICByZXNvbHZlZEZsYXZvdXIgfHxcbiAgICAgICAgICAoUmVmbGVjdC5nZXRNZXRhZGF0YShtZXRhS2V5LCAoaW5qZWN0YWJsZSBhcyBhbnkpLmNvbnN0cnVjdG9yKSBhc1xuICAgICAgICAgICAgfCBzdHJpbmdcbiAgICAgICAgICAgIHwgdW5kZWZpbmVkKSB8fFxuICAgICAgICAgIChSZWZsZWN0LmdldE1ldGFkYXRhKG1ldGFLZXksIG1vZGVsQ3RvcikgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKTtcbiAgICAgICAgSW5qZWN0YWJsZXMucmVnaXN0ZXIoXG4gICAgICAgICAgaW5qZWN0YWJsZSxcbiAgICAgICAgICBnZW5lcmF0ZUluamVjdGFibGVOYW1lRm9yUmVwb3NpdG9yeShcbiAgICAgICAgICAgIG1vZGVsQ3RvciBhcyBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgICAgICAgICBmIGFzIHN0cmluZ1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmRlYnVnKFxuICAgICAgICAgIGBObyByZWdpc3RlcmVkIHJlcG9zaXRvcnkgb3IgYWRhcHRlciBmb3VuZC4gZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQgYWRhcHRlci4gRXJyb3I6ICR7KGUgYXMgRXJyb3IpPy5tZXNzYWdlIHx8IEpTT04uc3RyaW5naWZ5KGUpfWBcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVwb0N0b3IgPSAoUmVwb3NpdG9yeSBhcyBhbnkpW1wiZ2V0XCJdKG1vZGVsQ3RvciwgcmVzb2x2ZWRGbGF2b3VyKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXBvQ3RvciA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgY29uc3QgYWRhcHRlciA9IHJlc29sdmVkRmxhdm91clxuICAgICAgICAgICAgPyAoQWRhcHRlci5nZXQocmVzb2x2ZWRGbGF2b3VyKSBhcyBhbnkpXG4gICAgICAgICAgICA6IChBZGFwdGVyLmN1cnJlbnQgYXMgYW55KTtcbiAgICAgICAgICBpZiAoIWFkYXB0ZXIpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgcmVwb0N0b3IoYWRhcHRlciwgbW9kZWxDdG9yKTtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2UgYXMgVDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBpbmplY3RhYmxlIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
package/lib/repository/utils.cjs
CHANGED
@@ -6,7 +6,7 @@ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
6
6
|
const Adapter_1 = require("./../persistence/Adapter.cjs");
|
7
7
|
const constants_1 = require("./../persistence/constants.cjs");
|
8
8
|
const decorator_validation_2 = require("@decaf-ts/decorator-validation");
|
9
|
-
const
|
9
|
+
const utils_1 = require("./../identity/utils.cjs");
|
10
10
|
/**
|
11
11
|
* @description Generates a unique injectable name for a repository.
|
12
12
|
* @summary Creates a standardized injectable token for repositories using the adapter flavour and model table name.
|
@@ -47,6 +47,6 @@ function generateInjectableNameForRepository(model, flavour) {
|
|
47
47
|
if (!flavour)
|
48
48
|
throw new db_decorators_1.InternalError(`Could not retrieve flavour from model ${model instanceof decorator_validation_2.Model ? model.constructor.name : model.name}`);
|
49
49
|
}
|
50
|
-
return (0, decorator_validation_1.sf)(constants_1.PersistenceKeys.INJECTABLE, flavour,
|
50
|
+
return (0, decorator_validation_1.sf)(constants_1.PersistenceKeys.INJECTABLE, flavour, (0, utils_1.getTableName)(model));
|
51
51
|
}
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVwb3NpdG9yeS91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdDQSxrRkFnQkM7QUF4REQsMkRBQXdEO0FBQ3hELHlFQUFpRTtBQUNqRSwwREFBaUQ7QUFDakQsOERBQTJEO0FBQzNELHlFQUF1RDtBQUN2RCxtREFBaUQ7QUFFakQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBQ0gsU0FBZ0IsbUNBQW1DLENBQ2pELEtBQXlCLEVBQ3pCLE9BQWdCO0lBRWhCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sR0FBRyxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLDJCQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakQsT0FBTyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQzNCLEdBQUcsRUFDSCxLQUFLLFlBQVksNEJBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUNuRCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU87WUFDVixNQUFNLElBQUksNkJBQWEsQ0FDckIseUNBQXlDLEtBQUssWUFBWSw0QkFBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUN4RyxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sSUFBQSx5QkFBRSxFQUFDLDJCQUFlLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN0RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIHNmIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgQWRhcHRlciB9IGZyb20gXCIuLi9wZXJzaXN0ZW5jZS9BZGFwdGVyXCI7XG5pbXBvcnQgeyBQZXJzaXN0ZW5jZUtleXMgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2UvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGdldFRhYmxlTmFtZSB9IGZyb20gXCIuLi9pZGVudGl0eS91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSB1bmlxdWUgaW5qZWN0YWJsZSBuYW1lIGZvciBhIHJlcG9zaXRvcnkuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgc3RhbmRhcmRpemVkIGluamVjdGFibGUgdG9rZW4gZm9yIHJlcG9zaXRvcmllcyB1c2luZyB0aGUgYWRhcHRlciBmbGF2b3VyIGFuZCBtb2RlbCB0YWJsZSBuYW1lLlxuICogVGhpcyBoZWxwcyB0aGUgREkgc3lzdGVtIHJlZ2lzdGVyIGFuZCByZXNvbHZlIHJlcG9zaXRvcnkgaW5zdGFuY2VzIGNvbnNpc3RlbnRseSBhY3Jvc3MgYWRhcHRlcnMuXG4gKiBAdGVtcGxhdGUgVCBUaGUgbW9kZWwgdHlwZSB0aGF0IGV4dGVuZHMgTW9kZWwuXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFQ+IHwgVH0gbW9kZWwgVGhlIG1vZGVsIGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlIGZyb20gd2hpY2ggdG8gZGVyaXZlIHRoZSB0YWJsZSBuYW1lLlxuICogQHBhcmFtIHtzdHJpbmd9IFtmbGF2b3VyXSBPcHRpb25hbCBhZGFwdGVyIGZsYXZvdXIvYWxpYXMuIElmIG9taXR0ZWQsIGl0IGlzIHJlYWQgZnJvbSBtb2RlbCBtZXRhZGF0YS5cbiAqIEByZXR1cm4ge3N0cmluZ30gQSBuYW1lc3BhY2VkIGluamVjdGFibGUgdG9rZW4gZm9yIHRoZSByZXBvc2l0b3J5IChlLmcuLCBcImRiOnJlcG86cmFtOnVzZXJzXCIpLlxuICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgdGhlIGZsYXZvdXIgY2Fubm90IGJlIGRldGVybWluZWQgZnJvbSBhcmd1bWVudHMgb3IgbWV0YWRhdGEuXG4gKiBAZnVuY3Rpb24gZ2VuZXJhdGVJbmplY3RhYmxlTmFtZUZvclJlcG9zaXRvcnlcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQyBhcyBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgVSBhcyBnZW5lcmF0ZUluamVjdGFibGVOYW1lRm9yUmVwb3NpdG9yeVxuICogICBwYXJ0aWNpcGFudCBSIGFzIFJlZmxlY3QgTWV0YWRhdGFcbiAqICAgcGFydGljaXBhbnQgQSBhcyBBZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IFMgYXMgU3RyaW5nIEZvcm1hdHRlclxuICogICBDLT4+VTogY2FsbChtb2RlbCwgZmxhdm91cj8pXG4gKiAgIGFsdCBmbGF2b3VyIHByb3ZpZGVkXG4gKiAgICAgVS0tPj5VOiB1c2UgcHJvdmlkZWQgZmxhdm91clxuICogICBlbHNlIGZsYXZvdXIgbm90IHByb3ZpZGVkXG4gKiAgICAgVS0+PkE6IEFkYXB0ZXIua2V5KEFEQVBURVIpXG4gKiAgICAgVS0+PlI6IGdldE1ldGFkYXRhKGtleSwgbW9kZWx8bW9kZWwuY3RvcilcbiAqICAgICBhbHQgbWV0YWRhdGEgcHJlc2VudFxuICogICAgICAgUi0tPj5VOiBmbGF2b3VyXG4gKiAgICAgZWxzZSBtaXNzaW5nXG4gKiAgICAgICBVLS0+PkM6IHRocm93IEludGVybmFsRXJyb3JcbiAqICAgICBlbmRcbiAqICAgZW5kXG4gKiAgIFUtPj5TOiBzZihJTkpFQ1RBQkxFLCBmbGF2b3VyLCBSZXBvc2l0b3J5LnRhYmxlKG1vZGVsKSlcbiAqICAgUy0tPj5DOiB0b2tlbiBzdHJpbmdcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Y29yZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVJbmplY3RhYmxlTmFtZUZvclJlcG9zaXRvcnk8VCBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IENvbnN0cnVjdG9yPFQ+IHwgVCxcbiAgZmxhdm91cj86IHN0cmluZ1xuKTogc3RyaW5nIHtcbiAgaWYgKCFmbGF2b3VyKSB7XG4gICAgY29uc3Qga2V5ID0gQWRhcHRlci5rZXkoUGVyc2lzdGVuY2VLZXlzLkFEQVBURVIpO1xuICAgIGZsYXZvdXIgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAga2V5LFxuICAgICAgbW9kZWwgaW5zdGFuY2VvZiBNb2RlbCA/IG1vZGVsLmNvbnN0cnVjdG9yIDogbW9kZWxcbiAgICApO1xuICAgIGlmICghZmxhdm91cilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IHJldHJpZXZlIGZsYXZvdXIgZnJvbSBtb2RlbCAke21vZGVsIGluc3RhbmNlb2YgTW9kZWwgPyBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lIDogbW9kZWwubmFtZX1gXG4gICAgICApO1xuICB9XG4gIHJldHVybiBzZihQZXJzaXN0ZW5jZUtleXMuSU5KRUNUQUJMRSwgZmxhdm91ciwgZ2V0VGFibGVOYW1lKG1vZGVsKSk7XG59XG4iXX0=
|
package/package.json
CHANGED
@@ -1,51 +0,0 @@
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
6
|
-
};
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
9
|
-
};
|
10
|
-
import { model, required } from "@decaf-ts/decorator-validation";
|
11
|
-
import { BaseModel, index, table } from "./../../model/index.js";
|
12
|
-
import { pk } from "./../../identity/index.js";
|
13
|
-
/**
|
14
|
-
* @description RAM sequence model for auto-incrementing values
|
15
|
-
* @summary A model class that represents a sequence in the RAM adapter. It stores the current value
|
16
|
-
* of a sequence that can be used for generating sequential identifiers for entities.
|
17
|
-
* The sequence is identified by its ID and maintains the current value.
|
18
|
-
* @param {ModelArg<Sequence>} seq - Initial sequence data
|
19
|
-
* @class Sequence
|
20
|
-
* @category Ram
|
21
|
-
* @example
|
22
|
-
* ```typescript
|
23
|
-
* // Create a new sequence
|
24
|
-
* const orderSequence = new Sequence({ id: 'order_seq', current: 1 });
|
25
|
-
*
|
26
|
-
* // Use the sequence to get the next value
|
27
|
-
* const nextOrderId = parseInt(orderSequence.current.toString()) + 1;
|
28
|
-
* orderSequence.current = nextOrderId;
|
29
|
-
* ```
|
30
|
-
*/
|
31
|
-
let Sequence = class Sequence extends BaseModel {
|
32
|
-
constructor(seq) {
|
33
|
-
super(seq);
|
34
|
-
}
|
35
|
-
};
|
36
|
-
__decorate([
|
37
|
-
pk(),
|
38
|
-
__metadata("design:type", String)
|
39
|
-
], Sequence.prototype, "id", void 0);
|
40
|
-
__decorate([
|
41
|
-
required(),
|
42
|
-
index(),
|
43
|
-
__metadata("design:type", Object)
|
44
|
-
], Sequence.prototype, "current", void 0);
|
45
|
-
Sequence = __decorate([
|
46
|
-
table("__RamSequence"),
|
47
|
-
model(),
|
48
|
-
__metadata("design:paramtypes", [Object])
|
49
|
-
], Sequence);
|
50
|
-
export { Sequence };
|
51
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtU2VxdWVuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvcmFtL21vZGVsL1JhbVNlcXVlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFakUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLCtCQUFvQjtBQUN0RCxPQUFPLEVBQUUsRUFBRSxFQUFFLGtDQUF1QjtBQUVwQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFHSSxJQUFNLFFBQVEsR0FBZCxNQUFNLFFBQVMsU0FBUSxTQUFTO0lBZXJDLFlBQVksR0FBd0I7UUFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNGLENBQUE7QUFiQztJQURDLEVBQUUsRUFBRTs7b0NBQ087QUFRWjtJQUZDLFFBQVEsRUFBRTtJQUNWLEtBQUssRUFBRTs7eUNBQ2tCO0FBYmYsUUFBUTtJQUZwQixLQUFLLENBQUMsZUFBZSxDQUFDO0lBQ3RCLEtBQUssRUFBRTs7R0FDSyxRQUFRLENBa0JwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1vZGVsLCByZXF1aXJlZCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgTW9kZWxBcmcgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBCYXNlTW9kZWwsIGluZGV4LCB0YWJsZSB9IGZyb20gXCIuLi8uLi9tb2RlbFwiO1xuaW1wb3J0IHsgcGsgfSBmcm9tIFwiLi4vLi4vaWRlbnRpdHlcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUkFNIHNlcXVlbmNlIG1vZGVsIGZvciBhdXRvLWluY3JlbWVudGluZyB2YWx1ZXNcbiAqIEBzdW1tYXJ5IEEgbW9kZWwgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgc2VxdWVuY2UgaW4gdGhlIFJBTSBhZGFwdGVyLiBJdCBzdG9yZXMgdGhlIGN1cnJlbnQgdmFsdWVcbiAqIG9mIGEgc2VxdWVuY2UgdGhhdCBjYW4gYmUgdXNlZCBmb3IgZ2VuZXJhdGluZyBzZXF1ZW50aWFsIGlkZW50aWZpZXJzIGZvciBlbnRpdGllcy5cbiAqIFRoZSBzZXF1ZW5jZSBpcyBpZGVudGlmaWVkIGJ5IGl0cyBJRCBhbmQgbWFpbnRhaW5zIHRoZSBjdXJyZW50IHZhbHVlLlxuICogQHBhcmFtIHtNb2RlbEFyZzxTZXF1ZW5jZT59IHNlcSAtIEluaXRpYWwgc2VxdWVuY2UgZGF0YVxuICogQGNsYXNzIFNlcXVlbmNlXG4gKiBAY2F0ZWdvcnkgUmFtXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgbmV3IHNlcXVlbmNlXG4gKiBjb25zdCBvcmRlclNlcXVlbmNlID0gbmV3IFNlcXVlbmNlKHsgaWQ6ICdvcmRlcl9zZXEnLCBjdXJyZW50OiAxIH0pO1xuICpcbiAqIC8vIFVzZSB0aGUgc2VxdWVuY2UgdG8gZ2V0IHRoZSBuZXh0IHZhbHVlXG4gKiBjb25zdCBuZXh0T3JkZXJJZCA9IHBhcnNlSW50KG9yZGVyU2VxdWVuY2UuY3VycmVudC50b1N0cmluZygpKSArIDE7XG4gKiBvcmRlclNlcXVlbmNlLmN1cnJlbnQgPSBuZXh0T3JkZXJJZDtcbiAqIGBgYFxuICovXG5AdGFibGUoXCJfX1JhbVNlcXVlbmNlXCIpXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIFNlcXVlbmNlIGV4dGVuZHMgQmFzZU1vZGVsIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmltYXJ5IGtleSBpZGVudGlmaWVyIGZvciB0aGUgc2VxdWVuY2VcbiAgICovXG4gIEBwaygpXG4gIGlkITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3VycmVudCB2YWx1ZSBvZiB0aGUgc2VxdWVuY2VcbiAgICogVXNlZCB0byBnZW5lcmF0ZSB0aGUgbmV4dCBzZXF1ZW50aWFsIHZhbHVlXG4gICAqL1xuICBAcmVxdWlyZWQoKVxuICBAaW5kZXgoKVxuICBjdXJyZW50ITogc3RyaW5nIHwgbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHNlcT86IE1vZGVsQXJnPFNlcXVlbmNlPikge1xuICAgIHN1cGVyKHNlcSk7XG4gIH1cbn1cbiJdfQ==
|