@decaf-ts/core 0.5.38 → 0.5.40
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 +16 -12
- package/dist/core.esm.cjs +16 -12
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/ram/RamAdapter.js +1 -4
- package/lib/esm/repository/Repository.js +15 -8
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/ram/RamAdapter.cjs +1 -4
- package/lib/repository/Repository.cjs +15 -8
- package/package.json +1 -1
package/lib/ram/RamAdapter.cjs
CHANGED
|
@@ -11,7 +11,6 @@ const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
|
11
11
|
const RamSequence_1 = require("./RamSequence.cjs");
|
|
12
12
|
const handlers_1 = require("./handlers.cjs");
|
|
13
13
|
const constants_1 = require("./constants.cjs");
|
|
14
|
-
persistence_1.Adapter.setCurrent(constants_1.RamFlavour);
|
|
15
14
|
/**
|
|
16
15
|
* @description In-memory adapter for data persistence
|
|
17
16
|
* @summary The RamAdapter provides an in-memory implementation of the persistence layer.
|
|
@@ -463,6 +462,4 @@ class RamAdapter extends persistence_1.Adapter {
|
|
|
463
462
|
}
|
|
464
463
|
}
|
|
465
464
|
exports.RamAdapter = RamAdapter;
|
|
466
|
-
RamAdapter.decoration();
|
|
467
|
-
persistence_1.Adapter.setCurrent(constants_1.RamFlavour);
|
|
468
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYW0vUmFtQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxxREFBOEM7QUFDOUMsaURBQTBDO0FBQzFDLCtEQUFzRDtBQUN0RCw0REFBb0U7QUFFcEUsaUZBQTBEO0FBQzFELHlFQU13QztBQUN4QywyREFTaUM7QUFDakMsbURBQTRDO0FBQzVDLDZDQUF3RDtBQUN4RCwrQ0FBeUM7QUFFekMscUJBQU8sQ0FBQyxVQUFVLENBQUMsc0JBQVUsQ0FBQyxDQUFDO0FBRS9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQ0c7QUFDSCxNQUFhLFVBQVcsU0FBUSxxQkFNL0I7SUFDQyxZQUFZLE9BQWtCLEVBQVMsRUFBRSxLQUFjO1FBQ3JELEtBQUssQ0FBQyxJQUFJLEVBQUUsc0JBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQW9DeEIsWUFBTyxHQUFHLHVCQUFVLENBQUM7UUFFdEIsWUFBTyxHQUdYLEVBQUUsQ0FBQztRQUVDLFNBQUksR0FBRyxJQUFJLCtCQUFJLEVBQUUsQ0FBQztJQTFDMUIsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNNLFVBQVU7UUFHakIsT0FBTyxLQUFLLENBQUMsVUFBVSxFQUFzQyxDQUFDO0lBQ2hFLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDTSxLQUFLLENBQUMsS0FBSyxDQUNsQixTQUF3QixFQUN4QixLQUFxQixFQUNyQixLQUF3QjtRQUV4QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDL0QsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFO1NBQzFDLENBQWEsQ0FBQztJQUNqQixDQUFDO0lB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QUFVLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFJhbUZsYWdzLFxuICBSYXdSYW1RdWVyeSxcbiAgUmFtU3RvcmFnZSxcbiAgUmFtUmVwb3NpdG9yeSxcbiAgUmFtQ29uZmlnLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUmFtU3RhdGVtZW50IH0gZnJvbSBcIi4vUmFtU3RhdGVtZW50XCI7XG5pbXBvcnQgeyBSYW1Db250ZXh0IH0gZnJvbSBcIi4vUmFtQ29udGV4dFwiO1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCIuLi9yZXBvc2l0b3J5L1JlcG9zaXRvcnlcIjtcbmltcG9ydCB7IEFkYXB0ZXIsIFBlcnNpc3RlbmNlS2V5cywgU2VxdWVuY2UgfSBmcm9tIFwiLi4vcGVyc2lzdGVuY2VcIjtcbmltcG9ydCB7IFNlcXVlbmNlT3B0aW9ucyB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XG5pbXBvcnQgeyBMb2NrIH0gZnJvbSBcIkBkZWNhZi10cy90cmFuc2FjdGlvbmFsLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIENvbnN0cnVjdG9yLFxuICBEZWNvcmF0aW9uLFxuICBoYXNoT2JqLFxuICBNb2RlbCxcbiAgcHJvcE1ldGFkYXRhLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIENvbmZsaWN0RXJyb3IsXG4gIGZpbmRQcmltYXJ5S2V5LFxuICBJbnRlcm5hbEVycm9yLFxuICBOb3RGb3VuZEVycm9yLFxuICBvbkNyZWF0ZSxcbiAgb25DcmVhdGVVcGRhdGUsXG4gIE9wZXJhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgUmFtU2VxdWVuY2UgfSBmcm9tIFwiLi9SYW1TZXF1ZW5jZVwiO1xuaW1wb3J0IHsgY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGUgfSBmcm9tIFwiLi9oYW5kbGVyc1wiO1xuaW1wb3J0IHsgUmFtRmxhdm91ciB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuXG5BZGFwdGVyLnNldEN1cnJlbnQoUmFtRmxhdm91cik7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEluLW1lbW9yeSBhZGFwdGVyIGZvciBkYXRhIHBlcnNpc3RlbmNlXG4gKiBAc3VtbWFyeSBUaGUgUmFtQWRhcHRlciBwcm92aWRlcyBhbiBpbi1tZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBlcnNpc3RlbmNlIGxheWVyLlxuICogSXQgc3RvcmVzIGRhdGEgaW4gSmF2YVNjcmlwdCBNYXBzIGFuZCBwcm92aWRlcyBDUlVEIG9wZXJhdGlvbnMgYW5kIHF1ZXJ5IGNhcGFiaWxpdGllcy5cbiAqIFRoaXMgYWRhcHRlciBpcyB1c2VmdWwgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nLCBhbmQgYXBwbGljYXRpb25zIHRoYXQgZG9uJ3QgcmVxdWlyZVxuICogcGVyc2lzdGVudCBzdG9yYWdlIGFjcm9zcyBhcHBsaWNhdGlvbiByZXN0YXJ0cy5cbiAqIEBjbGFzcyBSYW1BZGFwdGVyXG4gKiBAY2F0ZWdvcnkgUmFtXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgbmV3IFJBTSBhZGFwdGVyXG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IFJhbUFkYXB0ZXIoJ215UmFtQWRhcHRlcicpO1xuICpcbiAqIC8vIENyZWF0ZSBhIHJlcG9zaXRvcnkgZm9yIGEgbW9kZWxcbiAqIGNvbnN0IHVzZXJSZXBvID0gbmV3IChhZGFwdGVyLnJlcG9zaXRvcnk8VXNlcj4oKSkoVXNlciwgYWRhcHRlcik7XG4gKlxuICogLy8gUGVyZm9ybSBDUlVEIG9wZXJhdGlvbnNcbiAqIGNvbnN0IHVzZXIgPSBuZXcgVXNlcih7IG5hbWU6ICdKb2huJywgZW1haWw6ICdqb2huQGV4YW1wbGUuY29tJyB9KTtcbiAqIGF3YWl0IHVzZXJSZXBvLmNyZWF0ZSh1c2VyKTtcbiAqIGNvbnN0IHJldHJpZXZlZFVzZXIgPSBhd2FpdCB1c2VyUmVwby5maW5kQnlJZCh1c2VyLmlkKTtcbiAqIGBgYFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgUmVwb3NpdG9yeVxuICogICBwYXJ0aWNpcGFudCBSYW1BZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IFN0b3JhZ2UgYXMgSW4tTWVtb3J5IFN0b3JhZ2VcbiAqXG4gKiAgIENsaWVudC0+PlJlcG9zaXRvcnk6IGNyZWF0ZShtb2RlbClcbiAqICAgUmVwb3NpdG9yeS0+PlJhbUFkYXB0ZXI6IGNyZWF0ZSh0YWJsZU5hbWUsIGlkLCBtb2RlbClcbiAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGxvY2suYWNxdWlyZSgpXG4gKiAgIFJhbUFkYXB0ZXItPj5TdG9yYWdlOiBzZXQoaWQsIG1vZGVsKVxuICogICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogbG9jay5yZWxlYXNlKClcbiAqICAgUmFtQWRhcHRlci0tPj5SZXBvc2l0b3J5OiBtb2RlbFxuICogICBSZXBvc2l0b3J5LS0+PkNsaWVudDogbW9kZWxcbiAqXG4gKiAgIENsaWVudC0+PlJlcG9zaXRvcnk6IGZpbmRCeUlkKGlkKVxuICogICBSZXBvc2l0b3J5LT4+UmFtQWRhcHRlcjogcmVhZCh0YWJsZU5hbWUsIGlkKVxuICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogZ2V0KGlkKVxuICogICBTdG9yYWdlLS0+PlJhbUFkYXB0ZXI6IG1vZGVsXG4gKiAgIFJhbUFkYXB0ZXItLT4+UmVwb3NpdG9yeTogbW9kZWxcbiAqICAgUmVwb3NpdG9yeS0tPj5DbGllbnQ6IG1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW1BZGFwdGVyIGV4dGVuZHMgQWRhcHRlcjxcbiAgUmFtQ29uZmlnLFxuICBSYW1TdG9yYWdlLFxuICBSYXdSYW1RdWVyeTxhbnk+LFxuICBSYW1GbGFncyxcbiAgUmFtQ29udGV4dFxuPiB7XG4gIGNvbnN0cnVjdG9yKGNvbmY6IFJhbUNvbmZpZyA9IHt9IGFzIGFueSwgYWxpYXM/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihjb25mLCBSYW1GbGF2b3VyLCBhbGlhcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHJlcG9zaXRvcnkgY29uc3RydWN0b3IgZm9yIGEgbW9kZWxcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyByZXBvc2l0b3JpZXMgdGhhdCB3b3JrIHdpdGggdGhlIHNwZWNpZmllZCBtb2RlbCB0eXBlLlxuICAgKiBUaGlzIG1ldGhvZCBvdmVycmlkZXMgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gdG8gcHJvdmlkZSBSQU0tc3BlY2lmaWMgcmVwb3NpdG9yeSBmdW5jdGlvbmFsaXR5LlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGZvciB0aGUgcmVwb3NpdG9yeVxuICAgKiBAcmV0dXJuIHtDb25zdHJ1Y3RvcjxSYW1SZXBvc2l0b3J5PE0+Pn0gQSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgUkFNIHJlcG9zaXRvcmllc1xuICAgKi9cbiAgb3ZlcnJpZGUgcmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KCk6IENvbnN0cnVjdG9yPFxuICAgIFJhbVJlcG9zaXRvcnk8TT5cbiAgPiB7XG4gICAgcmV0dXJuIHN1cGVyLnJlcG9zaXRvcnk8TT4oKSBhcyBDb25zdHJ1Y3RvcjxSYW1SZXBvc2l0b3J5PE0+PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBvcGVyYXRpb24gZmxhZ3Mgd2l0aCBVVUlEXG4gICAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGJhc2UgZmxhZ3Mgd2l0aCBhIFVVSUQgZm9yIHVzZXIgaWRlbnRpZmljYXRpb24uXG4gICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCBhbGwgb3BlcmF0aW9ucyBoYXZlIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRyYWNraW5nIHB1cnBvc2VzLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGZvciB0aGUgb3BlcmF0aW9uXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5c30gb3BlcmF0aW9uIC0gVGhlIHR5cGUgb2Ygb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZFxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1BhcnRpYWw8UmFtRmxhZ3M+fSBmbGFncyAtIFBhcnRpYWwgZmxhZ3MgdG8gYmUgZXh0ZW5kZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxSYW1GbGFncz59IENvbXBsZXRlIGZsYWdzIHdpdGggVVVJRFxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZmxhZ3M8TSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMsXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+LFxuICAgIGZsYWdzOiBQYXJ0aWFsPFJhbUZsYWdzPlxuICApOiBQcm9taXNlPFJhbUZsYWdzPiB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXdhaXQgc3VwZXIuZmxhZ3Mob3BlcmF0aW9uLCBtb2RlbCwgZmxhZ3MpLCB7XG4gICAgICBVVUlEOiB0aGlzLmNvbmZpZy51c2VyIHx8IFwiXCIgKyBEYXRlLm5vdygpLFxuICAgIH0pIGFzIFJhbUZsYWdzO1xuICB9XG5cbiAgb3ZlcnJpZGUgQ29udGV4dCA9IFJhbUNvbnRleHQ7XG5cbiAgcHJpdmF0ZSBpbmRleGVzOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFJlY29yZDxzdHJpbmcsIGFueT4+XG4gID4gPSB7fTtcblxuICBwcml2YXRlIGxvY2sgPSBuZXcgTG9jaygpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5kZXhlcyBtb2RlbHMgaW4gdGhlIFJBTSBhZGFwdGVyXG4gICAqIEBzdW1tYXJ5IEEgbm8tb3AgaW5kZXhpbmcgbWV0aG9kIGZvciB0aGUgUkFNIGFkYXB0ZXIuXG4gICAqIFNpbmNlIFJBTSBhZGFwdGVyIGRvZXNuJ3QgcmVxdWlyZSBleHBsaWNpdCBpbmRleGluZywgdGhpcyBtZXRob2Qgc2ltcGx5IHJlc29sdmVzIGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0gbW9kZWxzIC0gTW9kZWxzIHRvIGJlIGluZGV4ZWQgKHVudXNlZClcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluZGV4aW5nIGlzIGNvbXBsZXRlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFzeW5jIGluZGV4KC4uLm1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSBtb2RlbCBpbnN0YW5jZSB0byBhIGZvcm1hdCBzdWl0YWJsZSBmb3Igc3RvcmFnZSBpbiB0aGUgUkFNIGFkYXB0ZXIuXG4gICAqIFRoaXMgbWV0aG9kIGV4dHJhY3RzIHRoZSBwcmltYXJ5IGtleSBhbmQgY3JlYXRlcyBhIHJlY29yZCB3aXRob3V0IHRoZSBwcmltYXJ5IGtleSBmaWVsZC5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBiZWluZyBwcmVwYXJlZFxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIHByZXBhcmVcbiAgICogQHBhcmFtIHBrIC0gVGhlIHByaW1hcnkga2V5IHByb3BlcnR5IG5hbWVcbiAgICogQHJldHVybiBPYmplY3QgY29udGFpbmluZyB0aGUgcmVjb3JkIGFuZCBJRFxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcGFyZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBNLFxuICAgIHBrOiBrZXlvZiBNXG4gICk6IHsgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBpZDogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHByZXBhcmVkID0gc3VwZXIucHJlcGFyZShtb2RlbCwgcGspO1xuICAgIGRlbGV0ZSBwcmVwYXJlZC5yZWNvcmRbcGsgYXMgc3RyaW5nXTtcbiAgICByZXR1cm4gcHJlcGFyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RvcmVkIHJlY29yZCBiYWNrIHRvIGEgbW9kZWwgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgUmVjb25zdHJ1Y3RzIGEgbW9kZWwgaW5zdGFuY2UgZnJvbSBhIHN0b3JlZCByZWNvcmQgYnkgYWRkaW5nIGJhY2sgdGhlIHByaW1hcnkga2V5LlxuICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgcHJlcGFyZSBtZXRob2QuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdG8gcmV2ZXJ0IHRvXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqIC0gVGhlIHN0b3JlZCByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBDb25zdHJ1Y3RvcjxNPn0gY2xhenogLSBUaGUgbW9kZWwgY2xhc3Mgb3IgbmFtZVxuICAgKiBAcGFyYW0gcGsgLSBUaGUgcHJpbWFyeSBrZXkgcHJvcGVydHkgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWQgLSBUaGUgcHJpbWFyeSBrZXkgdmFsdWVcbiAgICogQHJldHVybiB7TX0gVGhlIHJlY29uc3RydWN0ZWQgbW9kZWwgaW5zdGFuY2VcbiAgICovXG4gIG92ZXJyaWRlIHJldmVydDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjbGF6ejogc3RyaW5nIHwgQ29uc3RydWN0b3I8TT4sXG4gICAgcGs6IGtleW9mIE0sXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlclxuICApOiBNIHtcbiAgICBjb25zdCByZXMgPSBzdXBlci5yZXZlcnQob2JqLCBjbGF6eiwgcGssIGlkKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IHJlY29yZCBpbiB0aGUgaW4tbWVtb3J5IHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgU3RvcmVzIGEgbmV3IHJlY29yZCBpbiB0aGUgc3BlY2lmaWVkIHRhYmxlIHdpdGggdGhlIGdpdmVuIElELlxuICAgKiBUaGlzIG1ldGhvZCBhY3F1aXJlcyBhIGxvY2sgdG8gZW5zdXJlIHRocmVhZCBzYWZldHksIGNyZWF0ZXMgdGhlIHRhYmxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QsXG4gICAqIGNoZWNrcyBmb3IgY29uZmxpY3RzLCBhbmQgc3RvcmVzIHRoZSBtb2RlbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0byBzdG9yZSB0aGUgcmVjb3JkIGluXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIHJlY29yZCBkYXRhIHRvIHN0b3JlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdG9yZWQgcmVjb3JkXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IFJhbUFkYXB0ZXJcbiAgICogICBwYXJ0aWNpcGFudCBTdG9yYWdlIGFzIEluLU1lbW9yeSBTdG9yYWdlXG4gICAqXG4gICAqICAgQ2FsbGVyLT4+UmFtQWRhcHRlcjogY3JlYXRlKHRhYmxlTmFtZSwgaWQsIG1vZGVsKVxuICAgKiAgIFJhbUFkYXB0ZXItPj5SYW1BZGFwdGVyOiBsb2NrLmFjcXVpcmUoKVxuICAgKiAgIFJhbUFkYXB0ZXItPj5TdG9yYWdlOiBoYXModGFibGVOYW1lKVxuICAgKiAgIGFsdCBUYWJsZSBkb2Vzbid0IGV4aXN0XG4gICAqICAgICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogc2V0KHRhYmxlTmFtZSwgbmV3IE1hcCgpKVxuICAgKiAgIGVuZFxuICAgKiAgIFJhbUFkYXB0ZXItPj5TdG9yYWdlOiBoYXMoaWQpXG4gICAqICAgYWx0IFJlY29yZCBleGlzdHNcbiAgICogICAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiB0aHJvdyBDb25mbGljdEVycm9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IHNldChpZCwgbW9kZWwpXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGxvY2sucmVsZWFzZSgpXG4gICAqICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IG1vZGVsXG4gICAqL1xuICBhc3luYyBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBhd2FpdCB0aGlzLmxvY2suYWNxdWlyZSgpO1xuICAgIGlmICghdGhpcy5jbGllbnQuaGFzKHRhYmxlTmFtZSkpIHRoaXMuY2xpZW50LnNldCh0YWJsZU5hbWUsIG5ldyBNYXAoKSk7XG4gICAgaWYgKHRoaXMuY2xpZW50LmdldCh0YWJsZU5hbWUpICYmIHRoaXMuY2xpZW50LmdldCh0YWJsZU5hbWUpPy5oYXMoaWQpKVxuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0RXJyb3IoXG4gICAgICAgIGBSZWNvcmQgd2l0aCBpZCAke2lkfSBhbHJlYWR5IGV4aXN0cyBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIHRoaXMuY2xpZW50LmdldCh0YWJsZU5hbWUpPy5zZXQoaWQsIG1vZGVsKTtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgcmVjb3JkIGZyb20gaW4tbWVtb3J5IHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgRmV0Y2hlcyBhIHJlY29yZCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgZnJvbSB0aGUgZ2l2ZW4gdGFibGUuXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdGFibGUgYW5kIHJlY29yZCBleGlzdCBhbmQgdGhyb3dzIGFwcHJvcHJpYXRlIGVycm9ycyBpZiBub3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gcmV0cmlldmUgZnJvbVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlY29yZCB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0cmlldmVkIHJlY29yZFxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBSYW1BZGFwdGVyXG4gICAqICAgcGFydGljaXBhbnQgU3RvcmFnZSBhcyBJbi1NZW1vcnkgU3RvcmFnZVxuICAgKlxuICAgKiAgIENhbGxlci0+PlJhbUFkYXB0ZXI6IHJlYWQodGFibGVOYW1lLCBpZClcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogaGFzKHRhYmxlTmFtZSlcbiAgICogICBhbHQgVGFibGUgZG9lc24ndCBleGlzdFxuICAgKiAgICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHRocm93IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbmRcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogaGFzKGlkKVxuICAgKiAgIGFsdCBSZWNvcmQgZG9lc24ndCBleGlzdFxuICAgKiAgICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHRocm93IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbmRcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogZ2V0KGlkKVxuICAgKiAgIFN0b3JhZ2UtLT4+UmFtQWRhcHRlcjogcmVjb3JkXG4gICAqICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHJlY29yZFxuICAgKi9cbiAgYXN5bmMgcmVhZChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGlmICghdGhpcy5jbGllbnQuaGFzKHRhYmxlTmFtZSkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmICghdGhpcy5jbGllbnQuZ2V0KHRhYmxlTmFtZSk/LmhhcyhpZCkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFJlY29yZCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQodGFibGVOYW1lKT8uZ2V0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhbiBleGlzdGluZyByZWNvcmQgaW4gdGhlIGluLW1lbW9yeSBzdG9yYWdlXG4gICAqIEBzdW1tYXJ5IFVwZGF0ZXMgYSByZWNvcmQgd2l0aCB0aGUgc3BlY2lmaWVkIElEIGluIHRoZSBnaXZlbiB0YWJsZS5cbiAgICogVGhpcyBtZXRob2QgYWNxdWlyZXMgYSBsb2NrIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LCBjaGVja3MgaWYgdGhlIHRhYmxlIGFuZCByZWNvcmQgZXhpc3QsXG4gICAqIGFuZCB1cGRhdGVzIHRoZSByZWNvcmQgd2l0aCB0aGUgbmV3IGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgY29udGFpbmluZyB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVjb3JkIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIG5ldyByZWNvcmQgZGF0YVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdXBkYXRlZCByZWNvcmRcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgUmFtQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IFN0b3JhZ2UgYXMgSW4tTWVtb3J5IFN0b3JhZ2VcbiAgICpcbiAgICogICBDYWxsZXItPj5SYW1BZGFwdGVyOiB1cGRhdGUodGFibGVOYW1lLCBpZCwgbW9kZWwpXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGxvY2suYWNxdWlyZSgpXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IGhhcyh0YWJsZU5hbWUpXG4gICAqICAgYWx0IFRhYmxlIGRvZXNuJ3QgZXhpc3RcbiAgICogICAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiB0aHJvdyBOb3RGb3VuZEVycm9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IGhhcyhpZClcbiAgICogICBhbHQgUmVjb3JkIGRvZXNuJ3QgZXhpc3RcbiAgICogICAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiB0aHJvdyBOb3RGb3VuZEVycm9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IHNldChpZCwgbW9kZWwpXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGxvY2sucmVsZWFzZSgpXG4gICAqICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IG1vZGVsXG4gICAqL1xuICBhc3luYyB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBhd2FpdCB0aGlzLmxvY2suYWNxdWlyZSgpO1xuICAgIGlmICghdGhpcy5jbGllbnQuaGFzKHRhYmxlTmFtZSkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmICghdGhpcy5jbGllbnQuZ2V0KHRhYmxlTmFtZSk/LmhhcyhpZCkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFJlY29yZCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIHRoaXMuY2xpZW50LmdldCh0YWJsZU5hbWUpPy5zZXQoaWQsIG1vZGVsKTtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIHJlY29yZCBmcm9tIHRoZSBpbi1tZW1vcnkgc3RvcmFnZVxuICAgKiBAc3VtbWFyeSBSZW1vdmVzIGEgcmVjb3JkIHdpdGggdGhlIHNwZWNpZmllZCBJRCBmcm9tIHRoZSBnaXZlbiB0YWJsZS5cbiAgICogVGhpcyBtZXRob2QgYWNxdWlyZXMgYSBsb2NrIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LCBjaGVja3MgaWYgdGhlIHRhYmxlIGFuZCByZWNvcmQgZXhpc3QsXG4gICAqIHJldHJpZXZlcyB0aGUgcmVjb3JkIGJlZm9yZSBkZWxldGlvbiwgYW5kIHRoZW4gcmVtb3ZlcyBpdCBmcm9tIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgY29udGFpbmluZyB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVjb3JkIHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZGVsZXRlZCByZWNvcmRcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgUmFtQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IFN0b3JhZ2UgYXMgSW4tTWVtb3J5IFN0b3JhZ2VcbiAgICpcbiAgICogICBDYWxsZXItPj5SYW1BZGFwdGVyOiBkZWxldGUodGFibGVOYW1lLCBpZClcbiAgICogICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogbG9jay5hY3F1aXJlKClcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogaGFzKHRhYmxlTmFtZSlcbiAgICogICBhbHQgVGFibGUgZG9lc24ndCBleGlzdFxuICAgKiAgICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHRocm93IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbmRcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogaGFzKGlkKVxuICAgKiAgIGFsdCBSZWNvcmQgZG9lc24ndCBleGlzdFxuICAgKiAgICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHRocm93IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbmRcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogZ2V0KGlkKVxuICAgKiAgIFN0b3JhZ2UtLT4+UmFtQWRhcHRlcjogcmVjb3JkXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IGRlbGV0ZShpZClcbiAgICogICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogbG9jay5yZWxlYXNlKClcbiAgICogICBSYW1BZGFwdGVyLS0+PkNhbGxlcjogcmVjb3JkXG4gICAqL1xuICBhc3luYyBkZWxldGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlclxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBhd2FpdCB0aGlzLmxvY2suYWNxdWlyZSgpO1xuICAgIGlmICghdGhpcy5jbGllbnQuaGFzKHRhYmxlTmFtZSkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmICghdGhpcy5jbGllbnQuZ2V0KHRhYmxlTmFtZSk/LmhhcyhpZCkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFJlY29yZCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIGNvbnN0IG5hdGl2ZWQgPSB0aGlzLmNsaWVudC5nZXQodGFibGVOYW1lKT8uZ2V0KGlkKTtcbiAgICB0aGlzLmNsaWVudC5nZXQodGFibGVOYW1lKT8uZGVsZXRlKGlkKTtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBuYXRpdmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIG9yIGNyZWF0ZXMgYSB0YWJsZSBpbiB0aGUgaW4tbWVtb3J5IHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBNYXAgcmVwcmVzZW50aW5nIGEgdGFibGUgZm9yIGEgZ2l2ZW4gbW9kZWwgb3IgdGFibGUgbmFtZS5cbiAgICogSWYgdGhlIHRhYmxlIGRvZXNuJ3QgZXhpc3QsIGl0IGNyZWF0ZXMgYSBuZXcgb25lLiBUaGlzIGlzIGEgaGVscGVyIG1ldGhvZCB1c2VkXG4gICAqIGJ5IG90aGVyIG1ldGhvZHMgdG8gYWNjZXNzIHRoZSBjb3JyZWN0IHN0b3JhZ2UgbG9jYXRpb24uXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZm9yIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IENvbnN0cnVjdG9yPE0+fSBmcm9tIC0gVGhlIG1vZGVsIGNsYXNzIG9yIHRhYmxlIG5hbWVcbiAgICogQHJldHVybiB7TWFwPHN0cmluZyB8IG51bWJlciwgYW55PiB8IHVuZGVmaW5lZH0gVGhlIHRhYmxlIE1hcCBvciB1bmRlZmluZWRcbiAgICovXG4gIHByb3RlY3RlZCB0YWJsZUZvcjxNIGV4dGVuZHMgTW9kZWw+KGZyb206IHN0cmluZyB8IENvbnN0cnVjdG9yPE0+KSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09PSBcInN0cmluZ1wiKSBmcm9tID0gTW9kZWwuZ2V0KGZyb20pIGFzIENvbnN0cnVjdG9yPE0+O1xuICAgIGNvbnN0IHRhYmxlID0gUmVwb3NpdG9yeS50YWJsZShmcm9tKTtcbiAgICBpZiAoIXRoaXMuY2xpZW50Lmhhcyh0YWJsZSkpIHRoaXMuY2xpZW50LnNldCh0YWJsZSwgbmV3IE1hcCgpKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHRhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgcXVlcnkgYWdhaW5zdCB0aGUgaW4tbWVtb3J5IHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgUGVyZm9ybXMgYSBxdWVyeSBvcGVyYXRpb24gb24gdGhlIGluLW1lbW9yeSBkYXRhIHN0b3JlIHVzaW5nIHRoZSBwcm92aWRlZCBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBmaWx0ZXJpbmcsIHNvcnRpbmcsIHBhZ2luYXRpb24sIGFuZCBmaWVsZCBzZWxlY3Rpb24uXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge1Jhd1JhbVF1ZXJ5PGFueT59IHJhd0lucHV0IC0gVGhlIHF1ZXJ5IHNwZWNpZmljYXRpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxSPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHF1ZXJ5IHJlc3VsdHNcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgUmFtQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IFN0b3JhZ2UgYXMgSW4tTWVtb3J5IFN0b3JhZ2VcbiAgICpcbiAgICogICBDYWxsZXItPj5SYW1BZGFwdGVyOiByYXcocmF3SW5wdXQpXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IHRhYmxlRm9yKGZyb20pXG4gICAqICAgYWx0IFRhYmxlIGRvZXNuJ3QgZXhpc3RcbiAgICogICAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiB0aHJvdyBJbnRlcm5hbEVycm9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGZpbmRQcmltYXJ5S2V5KG5ldyBmcm9tKCkpXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IGVudHJpZXMoKVxuICAgKiAgIFN0b3JhZ2UtLT4+UmFtQWRhcHRlcjogZW50cmllc1xuICAgKiAgIGxvb3AgRm9yIGVhY2ggZW50cnlcbiAgICogICAgIFJhbUFkYXB0ZXItPj5SYW1BZGFwdGVyOiByZXZlcnQociwgZnJvbSwgaWQsIHBrKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBXaGVyZSBjb25kaXRpb24gZXhpc3RzXG4gICAqICAgICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogcmVzdWx0LmZpbHRlcih3aGVyZSlcbiAgICogICBlbmRcbiAgICogICBhbHQgU29ydCBjb25kaXRpb24gZXhpc3RzXG4gICAqICAgICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogcmVzdWx0LnNvcnQoc29ydClcbiAgICogICBlbmRcbiAgICogICBhbHQgU2tpcCBzcGVjaWZpZWRcbiAgICogICAgIFJhbUFkYXB0ZXItPj5SYW1BZGFwdGVyOiByZXN1bHQuc2xpY2Uoc2tpcClcbiAgICogICBlbmRcbiAgICogICBhbHQgTGltaXQgc3BlY2lmaWVkXG4gICAqICAgICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogcmVzdWx0LnNsaWNlKDAsIGxpbWl0KVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBTZWxlY3QgZmllbGRzIHNwZWNpZmllZFxuICAgKiAgICAgbG9vcCBGb3IgZWFjaCByZXN1bHRcbiAgICogICAgICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IEZpbHRlciB0byBzZWxlY3RlZCBmaWVsZHNcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKiAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiByZXN1bHRcbiAgICovXG4gIGFzeW5jIHJhdzxSPihyYXdJbnB1dDogUmF3UmFtUXVlcnk8YW55Pik6IFByb21pc2U8Uj4ge1xuICAgIGNvbnN0IHsgd2hlcmUsIHNvcnQsIGxpbWl0LCBza2lwLCBmcm9tIH0gPSByYXdJbnB1dDtcbiAgICBsZXQgeyBzZWxlY3QgfSA9IHJhd0lucHV0O1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLnRhYmxlRm9yKGZyb20pO1xuICAgIGlmICghY29sbGVjdGlvbilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBUYWJsZSAke2Zyb219IG5vdCBmb3VuZCBpbiBSYW1BZGFwdGVyYCk7XG4gICAgY29uc3QgeyBpZCwgcHJvcHMgfSA9IGZpbmRQcmltYXJ5S2V5KG5ldyBmcm9tKCkpO1xuXG4gICAgbGV0IHJlc3VsdDogYW55W10gPSBBcnJheS5mcm9tKGNvbGxlY3Rpb24uZW50cmllcygpKS5tYXAoKFtwaywgcl0pID0+XG4gICAgICB0aGlzLnJldmVydChcbiAgICAgICAgcixcbiAgICAgICAgZnJvbSxcbiAgICAgICAgaWQgYXMgYW55LFxuICAgICAgICBTZXF1ZW5jZS5wYXJzZVZhbHVlKHByb3BzLnR5cGUgYXMgYW55LCBwayBhcyBzdHJpbmcpIGFzIHN0cmluZ1xuICAgICAgKVxuICAgICk7XG5cbiAgICByZXN1bHQgPSB3aGVyZSA/IHJlc3VsdC5maWx0ZXIod2hlcmUpIDogcmVzdWx0O1xuXG4gICAgaWYgKHNvcnQpIHJlc3VsdCA9IHJlc3VsdC5zb3J0KHNvcnQpO1xuXG4gICAgaWYgKHNraXApIHJlc3VsdCA9IHJlc3VsdC5zbGljZShza2lwKTtcbiAgICBpZiAobGltaXQpIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICBpZiAoc2VsZWN0KSB7XG4gICAgICBzZWxlY3QgPSBBcnJheS5pc0FycmF5KHNlbGVjdCkgPyBzZWxlY3QgOiBbc2VsZWN0XTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoKHIpID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHIpLnJlZHVjZSgoYWNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgaWYgKChzZWxlY3QgYXMgc3RyaW5nW10pLmluY2x1ZGVzKGtleSkpIGFjY1trZXldID0gdmFsO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGFuZCBjb252ZXJ0cyBlcnJvcnMgdG8gYXBwcm9wcmlhdGUgdHlwZXNcbiAgICogQHN1bW1hcnkgRW5zdXJlcyB0aGF0IGVycm9ycyBhcmUgb2YgdGhlIGNvcnJlY3QgdHlwZSBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZy5cbiAgICogSWYgdGhlIGVycm9yIGlzIGFscmVhZHkgYSBCYXNlRXJyb3IsIGl0J3MgcmV0dXJuZWQgYXMgaXM7IG90aGVyd2lzZSwgaXQncyB3cmFwcGVkIGluIGFuIEludGVybmFsRXJyb3IuXG4gICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIGV4cGVjdGVkIGVycm9yIHR5cGUsIGV4dGVuZGluZyBCYXNlRXJyb3JcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyIC0gVGhlIGVycm9yIHRvIHBhcnNlXG4gICAqIEByZXR1cm4ge1Z9IFRoZSBwYXJzZWQgZXJyb3Igb2YgdGhlIGV4cGVjdGVkIHR5cGVcbiAgICovXG4gIHBhcnNlRXJyb3I8ViBleHRlbmRzIEJhc2VFcnJvcj4oZXJyOiBFcnJvcik6IFYge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IpIHJldHVybiBlcnIgYXMgVjtcbiAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKSBhcyBWO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IHN0YXRlbWVudCBidWlsZGVyIGZvciBxdWVyaWVzXG4gICAqIEBzdW1tYXJ5IEZhY3RvcnkgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIG5ldyBSYW1TdGF0ZW1lbnQgaW5zdGFuY2UgZm9yIGJ1aWxkaW5nIHF1ZXJpZXMuXG4gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBmb3IgZmx1ZW50IHF1ZXJ5IGNvbnN0cnVjdGlvbiBhZ2FpbnN0IHRoZSBSQU0gYWRhcHRlci5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBmb3IgdGhlIHN0YXRlbWVudFxuICAgKiBAcmV0dXJuIHtSYW1TdGF0ZW1lbnQ8TSwgYW55Pn0gQSBuZXcgc3RhdGVtZW50IGJ1aWxkZXIgaW5zdGFuY2VcbiAgICovXG4gIFN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KCk6IFJhbVN0YXRlbWVudDxNLCBhbnk+IHtcbiAgICByZXR1cm4gbmV3IFJhbVN0YXRlbWVudDxNLCBhbnk+KHRoaXMgYXMgYW55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBzZXF1ZW5jZSBmb3IgZ2VuZXJhdGluZyBzZXF1ZW50aWFsIElEc1xuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgUmFtU2VxdWVuY2UgaW5zdGFuY2UgZm9yIElEIGdlbmVyYXRpb24uXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBhdXRvLWluY3JlbWVudGluZyBzZXF1ZW5jZXMgZm9yIGVudGl0eSBJRHMuXG4gICAqIEBwYXJhbSB7U2VxdWVuY2VPcHRpb25zfSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc2VxdWVuY2VcbiAgICogQHJldHVybiB7UHJvbWlzZTxTZXF1ZW5jZT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgc2VxdWVuY2UgaW5zdGFuY2VcbiAgICovXG4gIGFzeW5jIFNlcXVlbmNlKG9wdGlvbnM6IFNlcXVlbmNlT3B0aW9ucyk6IFByb21pc2U8U2VxdWVuY2U+IHtcbiAgICByZXR1cm4gbmV3IFJhbVNlcXVlbmNlKG9wdGlvbnMsIHRoaXMpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBvdmVycmlkZSBmb3IoY29uZmlnOiBQYXJ0aWFsPFJhbUNvbmZpZz4sIC4uLmFyZ3M6IGFueVtdKTogdHlwZW9mIHRoaXMge1xuICAgIGlmICghdGhpcy5wcm94aWVzKSB0aGlzLnByb3hpZXMgPSB7fTtcbiAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmFsaWFzfSAtICR7aGFzaE9iaihjb25maWcpfWA7XG4gICAgaWYgKGtleSBpbiB0aGlzLnByb3hpZXMpIHJldHVybiB0aGlzLnByb3hpZXNba2V5XSBhcyB0eXBlb2YgdGhpcztcblxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldDogKHRhcmdldDogdHlwZW9mIHRoaXMsIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IGFueSkgPT4ge1xuICAgICAgICBpZiAocCA9PT0gXCJfY29uZmlnXCIpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbmY6IFJhbUNvbmZpZyA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbENvbmYsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3hpZXNba2V5XSA9IHByb3h5O1xuICAgIHJldHVybiBwcm94eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB1cCBSQU0tc3BlY2lmaWMgZGVjb3JhdGlvbnMgZm9yIG1vZGVsIHByb3BlcnRpZXNcbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBkZWNvcmF0aW9ucyBmb3IgY3JlYXRlZEJ5IGFuZCB1cGRhdGVkQnkgZmllbGRzIGluIHRoZSBSQU0gYWRhcHRlci5cbiAgICogVGhpcyBzdGF0aWMgbWV0aG9kIGlzIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gc2V0IHVwIGhhbmRsZXJzIHRoYXQgYXV0b21hdGljYWxseVxuICAgKiBwb3B1bGF0ZSB0aGVzZSBmaWVsZHMgd2l0aCB0aGUgY3VycmVudCB1c2VyJ3MgVVVJRCBkdXJpbmcgY3JlYXRlIGFuZCB1cGRhdGUgb3BlcmF0aW9ucy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgUmFtQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IERlY29yYXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBSZXBvc2l0b3J5XG4gICAqXG4gICAqICAgUmFtQWRhcHRlci0+PlJlcG9zaXRvcnk6IGtleShQZXJzaXN0ZW5jZUtleXMuQ1JFQVRFRF9CWSlcbiAgICogICBSZXBvc2l0b3J5LS0+PlJhbUFkYXB0ZXI6IGNyZWF0ZWRCeUtleVxuICAgKiAgIFJhbUFkYXB0ZXItPj5SZXBvc2l0b3J5OiBrZXkoUGVyc2lzdGVuY2VLZXlzLlVQREFURURfQlkpXG4gICAqICAgUmVwb3NpdG9yeS0tPj5SYW1BZGFwdGVyOiB1cGRhdGVkQnlLZXlcbiAgICpcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZmxhdm91cmVkQXMoUmFtRmxhdm91cilcbiAgICogICBEZWNvcmF0aW9uLS0+PlJhbUFkYXB0ZXI6IERlY29yYXRvckJ1aWxkZXJcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZm9yKGNyZWF0ZWRCeUtleSlcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZGVmaW5lKG9uQ3JlYXRlLCBwcm9wTWV0YWRhdGEpXG4gICAqICAgUmFtQWRhcHRlci0+PkRlY29yYXRpb246IGFwcGx5KClcbiAgICpcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZmxhdm91cmVkQXMoUmFtRmxhdm91cilcbiAgICogICBEZWNvcmF0aW9uLS0+PlJhbUFkYXB0ZXI6IERlY29yYXRvckJ1aWxkZXJcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZm9yKHVwZGF0ZWRCeUtleSlcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZGVmaW5lKG9uQ3JlYXRlLCBwcm9wTWV0YWRhdGEpXG4gICAqICAgUmFtQWRhcHRlci0+PkRlY29yYXRpb246IGFwcGx5KClcbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZSBkZWNvcmF0aW9uKCk6IHZvaWQge1xuICAgIHN1cGVyLmRlY29yYXRpb24oKTtcbiAgICBjb25zdCBjcmVhdGVkQnlLZXkgPSBSZXBvc2l0b3J5LmtleShQZXJzaXN0ZW5jZUtleXMuQ1JFQVRFRF9CWSk7XG4gICAgY29uc3QgdXBkYXRlZEJ5S2V5ID0gUmVwb3NpdG9yeS5rZXkoUGVyc2lzdGVuY2VLZXlzLlVQREFURURfQlkpO1xuICAgIERlY29yYXRpb24uZmxhdm91cmVkQXMoUmFtRmxhdm91cilcbiAgICAgIC5mb3IoY3JlYXRlZEJ5S2V5KVxuICAgICAgLmRlZmluZShcbiAgICAgICAgb25DcmVhdGUoY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGUpLFxuICAgICAgICBwcm9wTWV0YWRhdGEoY3JlYXRlZEJ5S2V5LCB7fSlcbiAgICAgIClcbiAgICAgIC5hcHBseSgpO1xuICAgIERlY29yYXRpb24uZmxhdm91cmVkQXMoUmFtRmxhdm91cilcbiAgICAgIC5mb3IodXBkYXRlZEJ5S2V5KVxuICAgICAgLmRlZmluZShcbiAgICAgICAgb25DcmVhdGVVcGRhdGUoY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGUpLFxuICAgICAgICBwcm9wTWV0YWRhdGEodXBkYXRlZEJ5S2V5LCB7fSlcbiAgICAgIClcbiAgICAgIC5hcHBseSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldENsaWVudCgpOiBSYW1TdG9yYWdlIHtcbiAgICByZXR1cm4gbmV3IE1hcCgpO1xuICB9XG59XG5cblJhbUFkYXB0ZXIuZGVjb3JhdGlvbigpO1xuQWRhcHRlci5zZXRDdXJyZW50KFJhbUZsYXZvdXIpO1xuIl19
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFtQWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYW0vUmFtQWRhcHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFPQSxxREFBOEM7QUFDOUMsaURBQTBDO0FBQzFDLCtEQUFzRDtBQUN0RCw0REFBb0U7QUFFcEUsaUZBQTBEO0FBQzFELHlFQU13QztBQUN4QywyREFTaUM7QUFDakMsbURBQTRDO0FBQzVDLDZDQUF3RDtBQUN4RCwrQ0FBeUM7QUFDekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQWEsVUFBVyxTQUFRLHFCQU0vQjtJQUNDLFlBQVksT0FBa0IsRUFBUyxFQUFFLEtBQWM7UUFDckQsS0FBSyxDQUFDLElBQUksRUFBRSxzQkFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBb0N4QixZQUFPLEdBQUcsdUJBQVUsQ0FBQztRQUV0QixZQUFPLEdBR1gsRUFBRSxDQUFDO1FBRUMsU0FBSSxHQUFHLElBQUksK0JBQUksRUFBRSxDQUFDO0lBMUMxQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ00sVUFBVTtRQUdqQixPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQXNDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNNLEtBQUssQ0FBQyxLQUFLLENBQ2xCLFNBQXdCLEVBQ3hCLEtBQXFCLEVBQ3JCLEtBQXdCO1FBRXhCLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMvRCxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUU7U0FDMUMsQ0FBYSxDQUFDO0lBQ2pCLENBQUM7SUFXRDs7Ozs7O09BTUc7SUFDSCw2REFBNkQ7SUFDN0QsS0FBSyxDQUFDLEtB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QUFNLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLENBQUM7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUMxQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTRCRztJQUNILE1BQU0sQ0FBVSxVQUFVO1FBQ3hCLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNuQixNQUFNLFlBQVksR0FBRyx1QkFBVSxDQUFDLEdBQUcsQ0FBQyw2QkFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sWUFBWSxHQUFHLHVCQUFVLENBQUMsR0FBRyxDQUFDLDZCQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsaUNBQVUsQ0FBQyxXQUFXLENBQUMsc0JBQVUsQ0FBQzthQUMvQixHQUFHLENBQUMsWUFBWSxDQUFDO2FBQ2pCLE1BQU0sQ0FDTCxJQUFBLHdCQUFRLEVBQUMscUNBQTBCLENBQUMsRUFDcEMsSUFBQSxtQ0FBWSxFQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FDL0I7YUFDQSxLQUFLLEVBQUUsQ0FBQztRQUNYLGlDQUFVLENBQUMsV0FBVyxDQUFDLHNCQUFVLENBQUM7YUFDL0IsR0FBRyxDQUFDLFlBQVksQ0FBQzthQUNqQixNQUFNLENBQ0wsSUFBQSw4QkFBYyxFQUFDLHFDQUEwQixDQUFDLEVBQzFDLElBQUEsbUNBQVksRUFBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQy9CO2FBQ0EsS0FBSyxFQUFFLENBQUM7SUFDYixDQUFDO0lBRWtCLFNBQVM7UUFDMUIsT0FBTyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQW5lRCxnQ0FtZUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBSYW1GbGFncyxcbiAgUmF3UmFtUXVlcnksXG4gIFJhbVN0b3JhZ2UsXG4gIFJhbVJlcG9zaXRvcnksXG4gIFJhbUNvbmZpZyxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFJhbVN0YXRlbWVudCB9IGZyb20gXCIuL1JhbVN0YXRlbWVudFwiO1xuaW1wb3J0IHsgUmFtQ29udGV4dCB9IGZyb20gXCIuL1JhbUNvbnRleHRcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiLi4vcmVwb3NpdG9yeS9SZXBvc2l0b3J5XCI7XG5pbXBvcnQgeyBBZGFwdGVyLCBQZXJzaXN0ZW5jZUtleXMsIFNlcXVlbmNlIH0gZnJvbSBcIi4uL3BlcnNpc3RlbmNlXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZU9wdGlvbnMgfSBmcm9tIFwiLi4vaW50ZXJmYWNlc1wiO1xuaW1wb3J0IHsgTG9jayB9IGZyb20gXCJAZGVjYWYtdHMvdHJhbnNhY3Rpb25hbC1kZWNvcmF0b3JzXCI7XG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgRGVjb3JhdGlvbixcbiAgaGFzaE9iaixcbiAgTW9kZWwsXG4gIHByb3BNZXRhZGF0YSxcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgQmFzZUVycm9yLFxuICBDb25mbGljdEVycm9yLFxuICBmaW5kUHJpbWFyeUtleSxcbiAgSW50ZXJuYWxFcnJvcixcbiAgTm90Rm91bmRFcnJvcixcbiAgb25DcmVhdGUsXG4gIG9uQ3JlYXRlVXBkYXRlLFxuICBPcGVyYXRpb25LZXlzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFJhbVNlcXVlbmNlIH0gZnJvbSBcIi4vUmFtU2VxdWVuY2VcIjtcbmltcG9ydCB7IGNyZWF0ZWRCeU9uUmFtQ3JlYXRlVXBkYXRlIH0gZnJvbSBcIi4vaGFuZGxlcnNcIjtcbmltcG9ydCB7IFJhbUZsYXZvdXIgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbi8qKlxuICogQGRlc2NyaXB0aW9uIEluLW1lbW9yeSBhZGFwdGVyIGZvciBkYXRhIHBlcnNpc3RlbmNlXG4gKiBAc3VtbWFyeSBUaGUgUmFtQWRhcHRlciBwcm92aWRlcyBhbiBpbi1tZW1vcnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIHBlcnNpc3RlbmNlIGxheWVyLlxuICogSXQgc3RvcmVzIGRhdGEgaW4gSmF2YVNjcmlwdCBNYXBzIGFuZCBwcm92aWRlcyBDUlVEIG9wZXJhdGlvbnMgYW5kIHF1ZXJ5IGNhcGFiaWxpdGllcy5cbiAqIFRoaXMgYWRhcHRlciBpcyB1c2VmdWwgZm9yIHRlc3RpbmcsIHByb3RvdHlwaW5nLCBhbmQgYXBwbGljYXRpb25zIHRoYXQgZG9uJ3QgcmVxdWlyZVxuICogcGVyc2lzdGVudCBzdG9yYWdlIGFjcm9zcyBhcHBsaWNhdGlvbiByZXN0YXJ0cy5cbiAqIEBjbGFzcyBSYW1BZGFwdGVyXG4gKiBAY2F0ZWdvcnkgUmFtXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gQ3JlYXRlIGEgbmV3IFJBTSBhZGFwdGVyXG4gKiBjb25zdCBhZGFwdGVyID0gbmV3IFJhbUFkYXB0ZXIoJ215UmFtQWRhcHRlcicpO1xuICpcbiAqIC8vIENyZWF0ZSBhIHJlcG9zaXRvcnkgZm9yIGEgbW9kZWxcbiAqIGNvbnN0IHVzZXJSZXBvID0gbmV3IChhZGFwdGVyLnJlcG9zaXRvcnk8VXNlcj4oKSkoVXNlciwgYWRhcHRlcik7XG4gKlxuICogLy8gUGVyZm9ybSBDUlVEIG9wZXJhdGlvbnNcbiAqIGNvbnN0IHVzZXIgPSBuZXcgVXNlcih7IG5hbWU6ICdKb2huJywgZW1haWw6ICdqb2huQGV4YW1wbGUuY29tJyB9KTtcbiAqIGF3YWl0IHVzZXJSZXBvLmNyZWF0ZSh1c2VyKTtcbiAqIGNvbnN0IHJldHJpZXZlZFVzZXIgPSBhd2FpdCB1c2VyUmVwby5maW5kQnlJZCh1c2VyLmlkKTtcbiAqIGBgYFxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgUmVwb3NpdG9yeVxuICogICBwYXJ0aWNpcGFudCBSYW1BZGFwdGVyXG4gKiAgIHBhcnRpY2lwYW50IFN0b3JhZ2UgYXMgSW4tTWVtb3J5IFN0b3JhZ2VcbiAqXG4gKiAgIENsaWVudC0+PlJlcG9zaXRvcnk6IGNyZWF0ZShtb2RlbClcbiAqICAgUmVwb3NpdG9yeS0+PlJhbUFkYXB0ZXI6IGNyZWF0ZSh0YWJsZU5hbWUsIGlkLCBtb2RlbClcbiAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGxvY2suYWNxdWlyZSgpXG4gKiAgIFJhbUFkYXB0ZXItPj5TdG9yYWdlOiBzZXQoaWQsIG1vZGVsKVxuICogICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogbG9jay5yZWxlYXNlKClcbiAqICAgUmFtQWRhcHRlci0tPj5SZXBvc2l0b3J5OiBtb2RlbFxuICogICBSZXBvc2l0b3J5LS0+PkNsaWVudDogbW9kZWxcbiAqXG4gKiAgIENsaWVudC0+PlJlcG9zaXRvcnk6IGZpbmRCeUlkKGlkKVxuICogICBSZXBvc2l0b3J5LT4+UmFtQWRhcHRlcjogcmVhZCh0YWJsZU5hbWUsIGlkKVxuICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogZ2V0KGlkKVxuICogICBTdG9yYWdlLS0+PlJhbUFkYXB0ZXI6IG1vZGVsXG4gKiAgIFJhbUFkYXB0ZXItLT4+UmVwb3NpdG9yeTogbW9kZWxcbiAqICAgUmVwb3NpdG9yeS0tPj5DbGllbnQ6IG1vZGVsXG4gKi9cbmV4cG9ydCBjbGFzcyBSYW1BZGFwdGVyIGV4dGVuZHMgQWRhcHRlcjxcbiAgUmFtQ29uZmlnLFxuICBSYW1TdG9yYWdlLFxuICBSYXdSYW1RdWVyeTxhbnk+LFxuICBSYW1GbGFncyxcbiAgUmFtQ29udGV4dFxuPiB7XG4gIGNvbnN0cnVjdG9yKGNvbmY6IFJhbUNvbmZpZyA9IHt9IGFzIGFueSwgYWxpYXM/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihjb25mLCBSYW1GbGF2b3VyLCBhbGlhcyk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIHJlcG9zaXRvcnkgY29uc3RydWN0b3IgZm9yIGEgbW9kZWxcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhIGNvbnN0cnVjdG9yIGZvciBjcmVhdGluZyByZXBvc2l0b3JpZXMgdGhhdCB3b3JrIHdpdGggdGhlIHNwZWNpZmllZCBtb2RlbCB0eXBlLlxuICAgKiBUaGlzIG1ldGhvZCBvdmVycmlkZXMgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24gdG8gcHJvdmlkZSBSQU0tc3BlY2lmaWMgcmVwb3NpdG9yeSBmdW5jdGlvbmFsaXR5LlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGZvciB0aGUgcmVwb3NpdG9yeVxuICAgKiBAcmV0dXJuIHtDb25zdHJ1Y3RvcjxSYW1SZXBvc2l0b3J5PE0+Pn0gQSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgUkFNIHJlcG9zaXRvcmllc1xuICAgKi9cbiAgb3ZlcnJpZGUgcmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KCk6IENvbnN0cnVjdG9yPFxuICAgIFJhbVJlcG9zaXRvcnk8TT5cbiAgPiB7XG4gICAgcmV0dXJuIHN1cGVyLnJlcG9zaXRvcnk8TT4oKSBhcyBDb25zdHJ1Y3RvcjxSYW1SZXBvc2l0b3J5PE0+PjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBvcGVyYXRpb24gZmxhZ3Mgd2l0aCBVVUlEXG4gICAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGJhc2UgZmxhZ3Mgd2l0aCBhIFVVSUQgZm9yIHVzZXIgaWRlbnRpZmljYXRpb24uXG4gICAqIFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCBhbGwgb3BlcmF0aW9ucyBoYXZlIGEgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRyYWNraW5nIHB1cnBvc2VzLlxuICAgKiBAdGVtcGxhdGUgTSAtIFRoZSBtb2RlbCB0eXBlIGZvciB0aGUgb3BlcmF0aW9uXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5c30gb3BlcmF0aW9uIC0gVGhlIHR5cGUgb2Ygb3BlcmF0aW9uIGJlaW5nIHBlcmZvcm1lZFxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBtb2RlbCAtIFRoZSBtb2RlbCBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge1BhcnRpYWw8UmFtRmxhZ3M+fSBmbGFncyAtIFBhcnRpYWwgZmxhZ3MgdG8gYmUgZXh0ZW5kZWRcbiAgICogQHJldHVybiB7UHJvbWlzZTxSYW1GbGFncz59IENvbXBsZXRlIGZsYWdzIHdpdGggVVVJRFxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZmxhZ3M8TSBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgICBvcGVyYXRpb246IE9wZXJhdGlvbktleXMsXG4gICAgbW9kZWw6IENvbnN0cnVjdG9yPE0+LFxuICAgIGZsYWdzOiBQYXJ0aWFsPFJhbUZsYWdzPlxuICApOiBQcm9taXNlPFJhbUZsYWdzPiB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXdhaXQgc3VwZXIuZmxhZ3Mob3BlcmF0aW9uLCBtb2RlbCwgZmxhZ3MpLCB7XG4gICAgICBVVUlEOiB0aGlzLmNvbmZpZy51c2VyIHx8IFwiXCIgKyBEYXRlLm5vdygpLFxuICAgIH0pIGFzIFJhbUZsYWdzO1xuICB9XG5cbiAgb3ZlcnJpZGUgQ29udGV4dCA9IFJhbUNvbnRleHQ7XG5cbiAgcHJpdmF0ZSBpbmRleGVzOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIFJlY29yZDxzdHJpbmcgfCBudW1iZXIsIFJlY29yZDxzdHJpbmcsIGFueT4+XG4gID4gPSB7fTtcblxuICBwcml2YXRlIGxvY2sgPSBuZXcgTG9jaygpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5kZXhlcyBtb2RlbHMgaW4gdGhlIFJBTSBhZGFwdGVyXG4gICAqIEBzdW1tYXJ5IEEgbm8tb3AgaW5kZXhpbmcgbWV0aG9kIGZvciB0aGUgUkFNIGFkYXB0ZXIuXG4gICAqIFNpbmNlIFJBTSBhZGFwdGVyIGRvZXNuJ3QgcmVxdWlyZSBleHBsaWNpdCBpbmRleGluZywgdGhpcyBtZXRob2Qgc2ltcGx5IHJlc29sdmVzIGltbWVkaWF0ZWx5LlxuICAgKiBAcGFyYW0gbW9kZWxzIC0gTW9kZWxzIHRvIGJlIGluZGV4ZWQgKHVudXNlZClcbiAgICogQHJldHVybiB7UHJvbWlzZTxhbnk+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGluZGV4aW5nIGlzIGNvbXBsZXRlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGFzeW5jIGluZGV4KC4uLm1vZGVsczogUmVjb3JkPHN0cmluZywgYW55PltdKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmVzIGEgbW9kZWwgZm9yIHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgQ29udmVydHMgYSBtb2RlbCBpbnN0YW5jZSB0byBhIGZvcm1hdCBzdWl0YWJsZSBmb3Igc3RvcmFnZSBpbiB0aGUgUkFNIGFkYXB0ZXIuXG4gICAqIFRoaXMgbWV0aG9kIGV4dHJhY3RzIHRoZSBwcmltYXJ5IGtleSBhbmQgY3JlYXRlcyBhIHJlY29yZCB3aXRob3V0IHRoZSBwcmltYXJ5IGtleSBmaWVsZC5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBiZWluZyBwcmVwYXJlZFxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIHByZXBhcmVcbiAgICogQHBhcmFtIHBrIC0gVGhlIHByaW1hcnkga2V5IHByb3BlcnR5IG5hbWVcbiAgICogQHJldHVybiBPYmplY3QgY29udGFpbmluZyB0aGUgcmVjb3JkIGFuZCBJRFxuICAgKi9cbiAgb3ZlcnJpZGUgcHJlcGFyZTxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBNLFxuICAgIHBrOiBrZXlvZiBNXG4gICk6IHsgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBpZDogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHByZXBhcmVkID0gc3VwZXIucHJlcGFyZShtb2RlbCwgcGspO1xuICAgIGRlbGV0ZSBwcmVwYXJlZC5yZWNvcmRbcGsgYXMgc3RyaW5nXTtcbiAgICByZXR1cm4gcHJlcGFyZWQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RvcmVkIHJlY29yZCBiYWNrIHRvIGEgbW9kZWwgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgUmVjb25zdHJ1Y3RzIGEgbW9kZWwgaW5zdGFuY2UgZnJvbSBhIHN0b3JlZCByZWNvcmQgYnkgYWRkaW5nIGJhY2sgdGhlIHByaW1hcnkga2V5LlxuICAgKiBUaGlzIG1ldGhvZCBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgcHJlcGFyZSBtZXRob2QuXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgdG8gcmV2ZXJ0IHRvXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gb2JqIC0gVGhlIHN0b3JlZCByZWNvcmRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBDb25zdHJ1Y3RvcjxNPn0gY2xhenogLSBUaGUgbW9kZWwgY2xhc3Mgb3IgbmFtZVxuICAgKiBAcGFyYW0gcGsgLSBUaGUgcHJpbWFyeSBrZXkgcHJvcGVydHkgbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWQgLSBUaGUgcHJpbWFyeSBrZXkgdmFsdWVcbiAgICogQHJldHVybiB7TX0gVGhlIHJlY29uc3RydWN0ZWQgbW9kZWwgaW5zdGFuY2VcbiAgICovXG4gIG92ZXJyaWRlIHJldmVydDxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG9iajogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICBjbGF6ejogc3RyaW5nIHwgQ29uc3RydWN0b3I8TT4sXG4gICAgcGs6IGtleW9mIE0sXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlclxuICApOiBNIHtcbiAgICBjb25zdCByZXMgPSBzdXBlci5yZXZlcnQob2JqLCBjbGF6eiwgcGssIGlkKTtcbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IHJlY29yZCBpbiB0aGUgaW4tbWVtb3J5IHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgU3RvcmVzIGEgbmV3IHJlY29yZCBpbiB0aGUgc3BlY2lmaWVkIHRhYmxlIHdpdGggdGhlIGdpdmVuIElELlxuICAgKiBUaGlzIG1ldGhvZCBhY3F1aXJlcyBhIGxvY2sgdG8gZW5zdXJlIHRocmVhZCBzYWZldHksIGNyZWF0ZXMgdGhlIHRhYmxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QsXG4gICAqIGNoZWNrcyBmb3IgY29uZmxpY3RzLCBhbmQgc3RvcmVzIHRoZSBtb2RlbC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZSB0byBzdG9yZSB0aGUgcmVjb3JkIGluXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIHJlY29yZFxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIHJlY29yZCBkYXRhIHRvIHN0b3JlXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdG9yZWQgcmVjb3JkXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IFJhbUFkYXB0ZXJcbiAgICogICBwYXJ0aWNpcGFudCBTdG9yYWdlIGFzIEluLU1lbW9yeSBTdG9yYWdlXG4gICAqXG4gICAqICAgQ2FsbGVyLT4+UmFtQWRhcHRlcjogY3JlYXRlKHRhYmxlTmFtZSwgaWQsIG1vZGVsKVxuICAgKiAgIFJhbUFkYXB0ZXItPj5SYW1BZGFwdGVyOiBsb2NrLmFjcXVpcmUoKVxuICAgKiAgIFJhbUFkYXB0ZXItPj5TdG9yYWdlOiBoYXModGFibGVOYW1lKVxuICAgKiAgIGFsdCBUYWJsZSBkb2Vzbid0IGV4aXN0XG4gICAqICAgICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogc2V0KHRhYmxlTmFtZSwgbmV3IE1hcCgpKVxuICAgKiAgIGVuZFxuICAgKiAgIFJhbUFkYXB0ZXItPj5TdG9yYWdlOiBoYXMoaWQpXG4gICAqICAgYWx0IFJlY29yZCBleGlzdHNcbiAgICogICAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiB0aHJvdyBDb25mbGljdEVycm9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IHNldChpZCwgbW9kZWwpXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGxvY2sucmVsZWFzZSgpXG4gICAqICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IG1vZGVsXG4gICAqL1xuICBhc3luYyBjcmVhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBhd2FpdCB0aGlzLmxvY2suYWNxdWlyZSgpO1xuICAgIGlmICghdGhpcy5jbGllbnQuaGFzKHRhYmxlTmFtZSkpIHRoaXMuY2xpZW50LnNldCh0YWJsZU5hbWUsIG5ldyBNYXAoKSk7XG4gICAgaWYgKHRoaXMuY2xpZW50LmdldCh0YWJsZU5hbWUpICYmIHRoaXMuY2xpZW50LmdldCh0YWJsZU5hbWUpPy5oYXMoaWQpKVxuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0RXJyb3IoXG4gICAgICAgIGBSZWNvcmQgd2l0aCBpZCAke2lkfSBhbHJlYWR5IGV4aXN0cyBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIHRoaXMuY2xpZW50LmdldCh0YWJsZU5hbWUpPy5zZXQoaWQsIG1vZGVsKTtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgcmVjb3JkIGZyb20gaW4tbWVtb3J5IHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgRmV0Y2hlcyBhIHJlY29yZCB3aXRoIHRoZSBzcGVjaWZpZWQgSUQgZnJvbSB0aGUgZ2l2ZW4gdGFibGUuXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgdGFibGUgYW5kIHJlY29yZCBleGlzdCBhbmQgdGhyb3dzIGFwcHJvcHJpYXRlIGVycm9ycyBpZiBub3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgdG8gcmV0cmlldmUgZnJvbVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWQgLSBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIHJlY29yZCB0byByZXRyaWV2ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0cmlldmVkIHJlY29yZFxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBSYW1BZGFwdGVyXG4gICAqICAgcGFydGljaXBhbnQgU3RvcmFnZSBhcyBJbi1NZW1vcnkgU3RvcmFnZVxuICAgKlxuICAgKiAgIENhbGxlci0+PlJhbUFkYXB0ZXI6IHJlYWQodGFibGVOYW1lLCBpZClcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogaGFzKHRhYmxlTmFtZSlcbiAgICogICBhbHQgVGFibGUgZG9lc24ndCBleGlzdFxuICAgKiAgICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHRocm93IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbmRcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogaGFzKGlkKVxuICAgKiAgIGFsdCBSZWNvcmQgZG9lc24ndCBleGlzdFxuICAgKiAgICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHRocm93IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbmRcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogZ2V0KGlkKVxuICAgKiAgIFN0b3JhZ2UtLT4+UmFtQWRhcHRlcjogcmVjb3JkXG4gICAqICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHJlY29yZFxuICAgKi9cbiAgYXN5bmMgcmVhZChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyXG4gICk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4ge1xuICAgIGlmICghdGhpcy5jbGllbnQuaGFzKHRhYmxlTmFtZSkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmICghdGhpcy5jbGllbnQuZ2V0KHRhYmxlTmFtZSk/LmhhcyhpZCkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFJlY29yZCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQodGFibGVOYW1lKT8uZ2V0KGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBhbiBleGlzdGluZyByZWNvcmQgaW4gdGhlIGluLW1lbW9yeSBzdG9yYWdlXG4gICAqIEBzdW1tYXJ5IFVwZGF0ZXMgYSByZWNvcmQgd2l0aCB0aGUgc3BlY2lmaWVkIElEIGluIHRoZSBnaXZlbiB0YWJsZS5cbiAgICogVGhpcyBtZXRob2QgYWNxdWlyZXMgYSBsb2NrIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LCBjaGVja3MgaWYgdGhlIHRhYmxlIGFuZCByZWNvcmQgZXhpc3QsXG4gICAqIGFuZCB1cGRhdGVzIHRoZSByZWNvcmQgd2l0aCB0aGUgbmV3IGRhdGEuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgY29udGFpbmluZyB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVjb3JkIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IG1vZGVsIC0gVGhlIG5ldyByZWNvcmQgZGF0YVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdXBkYXRlZCByZWNvcmRcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgUmFtQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IFN0b3JhZ2UgYXMgSW4tTWVtb3J5IFN0b3JhZ2VcbiAgICpcbiAgICogICBDYWxsZXItPj5SYW1BZGFwdGVyOiB1cGRhdGUodGFibGVOYW1lLCBpZCwgbW9kZWwpXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGxvY2suYWNxdWlyZSgpXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IGhhcyh0YWJsZU5hbWUpXG4gICAqICAgYWx0IFRhYmxlIGRvZXNuJ3QgZXhpc3RcbiAgICogICAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiB0aHJvdyBOb3RGb3VuZEVycm9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IGhhcyhpZClcbiAgICogICBhbHQgUmVjb3JkIGRvZXNuJ3QgZXhpc3RcbiAgICogICAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiB0aHJvdyBOb3RGb3VuZEVycm9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IHNldChpZCwgbW9kZWwpXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGxvY2sucmVsZWFzZSgpXG4gICAqICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IG1vZGVsXG4gICAqL1xuICBhc3luYyB1cGRhdGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PlxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBhd2FpdCB0aGlzLmxvY2suYWNxdWlyZSgpO1xuICAgIGlmICghdGhpcy5jbGllbnQuaGFzKHRhYmxlTmFtZSkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmICghdGhpcy5jbGllbnQuZ2V0KHRhYmxlTmFtZSk/LmhhcyhpZCkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFJlY29yZCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIHRoaXMuY2xpZW50LmdldCh0YWJsZU5hbWUpPy5zZXQoaWQsIG1vZGVsKTtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIHJlY29yZCBmcm9tIHRoZSBpbi1tZW1vcnkgc3RvcmFnZVxuICAgKiBAc3VtbWFyeSBSZW1vdmVzIGEgcmVjb3JkIHdpdGggdGhlIHNwZWNpZmllZCBJRCBmcm9tIHRoZSBnaXZlbiB0YWJsZS5cbiAgICogVGhpcyBtZXRob2QgYWNxdWlyZXMgYSBsb2NrIHRvIGVuc3VyZSB0aHJlYWQgc2FmZXR5LCBjaGVja3MgaWYgdGhlIHRhYmxlIGFuZCByZWNvcmQgZXhpc3QsXG4gICAqIHJldHJpZXZlcyB0aGUgcmVjb3JkIGJlZm9yZSBkZWxldGlvbiwgYW5kIHRoZW4gcmVtb3ZlcyBpdCBmcm9tIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUgY29udGFpbmluZyB0aGUgcmVjb3JkXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcmVjb3JkIHRvIGRlbGV0ZVxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZGVsZXRlZCByZWNvcmRcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgUmFtQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IFN0b3JhZ2UgYXMgSW4tTWVtb3J5IFN0b3JhZ2VcbiAgICpcbiAgICogICBDYWxsZXItPj5SYW1BZGFwdGVyOiBkZWxldGUodGFibGVOYW1lLCBpZClcbiAgICogICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogbG9jay5hY3F1aXJlKClcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogaGFzKHRhYmxlTmFtZSlcbiAgICogICBhbHQgVGFibGUgZG9lc24ndCBleGlzdFxuICAgKiAgICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHRocm93IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbmRcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogaGFzKGlkKVxuICAgKiAgIGFsdCBSZWNvcmQgZG9lc24ndCBleGlzdFxuICAgKiAgICAgUmFtQWRhcHRlci0tPj5DYWxsZXI6IHRocm93IE5vdEZvdW5kRXJyb3JcbiAgICogICBlbmRcbiAgICogICBSYW1BZGFwdGVyLT4+U3RvcmFnZTogZ2V0KGlkKVxuICAgKiAgIFN0b3JhZ2UtLT4+UmFtQWRhcHRlcjogcmVjb3JkXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IGRlbGV0ZShpZClcbiAgICogICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogbG9jay5yZWxlYXNlKClcbiAgICogICBSYW1BZGFwdGVyLS0+PkNhbGxlcjogcmVjb3JkXG4gICAqL1xuICBhc3luYyBkZWxldGUoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgaWQ6IHN0cmluZyB8IG51bWJlclxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBhd2FpdCB0aGlzLmxvY2suYWNxdWlyZSgpO1xuICAgIGlmICghdGhpcy5jbGllbnQuaGFzKHRhYmxlTmFtZSkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgVGFibGUgJHt0YWJsZU5hbWV9IG5vdCBmb3VuZGApO1xuICAgIGlmICghdGhpcy5jbGllbnQuZ2V0KHRhYmxlTmFtZSk/LmhhcyhpZCkpXG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgYFJlY29yZCB3aXRoIGlkICR7aWR9IG5vdCBmb3VuZCBpbiB0YWJsZSAke3RhYmxlTmFtZX1gXG4gICAgICApO1xuICAgIGNvbnN0IG5hdGl2ZWQgPSB0aGlzLmNsaWVudC5nZXQodGFibGVOYW1lKT8uZ2V0KGlkKTtcbiAgICB0aGlzLmNsaWVudC5nZXQodGFibGVOYW1lKT8uZGVsZXRlKGlkKTtcbiAgICB0aGlzLmxvY2sucmVsZWFzZSgpO1xuICAgIHJldHVybiBuYXRpdmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIG9yIGNyZWF0ZXMgYSB0YWJsZSBpbiB0aGUgaW4tbWVtb3J5IHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBNYXAgcmVwcmVzZW50aW5nIGEgdGFibGUgZm9yIGEgZ2l2ZW4gbW9kZWwgb3IgdGFibGUgbmFtZS5cbiAgICogSWYgdGhlIHRhYmxlIGRvZXNuJ3QgZXhpc3QsIGl0IGNyZWF0ZXMgYSBuZXcgb25lLiBUaGlzIGlzIGEgaGVscGVyIG1ldGhvZCB1c2VkXG4gICAqIGJ5IG90aGVyIG1ldGhvZHMgdG8gYWNjZXNzIHRoZSBjb3JyZWN0IHN0b3JhZ2UgbG9jYXRpb24uXG4gICAqIEB0ZW1wbGF0ZSBNIC0gVGhlIG1vZGVsIHR5cGUgZm9yIHRoZSB0YWJsZVxuICAgKiBAcGFyYW0ge3N0cmluZyB8IENvbnN0cnVjdG9yPE0+fSBmcm9tIC0gVGhlIG1vZGVsIGNsYXNzIG9yIHRhYmxlIG5hbWVcbiAgICogQHJldHVybiB7TWFwPHN0cmluZyB8IG51bWJlciwgYW55PiB8IHVuZGVmaW5lZH0gVGhlIHRhYmxlIE1hcCBvciB1bmRlZmluZWRcbiAgICovXG4gIHByb3RlY3RlZCB0YWJsZUZvcjxNIGV4dGVuZHMgTW9kZWw+KGZyb206IHN0cmluZyB8IENvbnN0cnVjdG9yPE0+KSB7XG4gICAgaWYgKHR5cGVvZiBmcm9tID09PSBcInN0cmluZ1wiKSBmcm9tID0gTW9kZWwuZ2V0KGZyb20pIGFzIENvbnN0cnVjdG9yPE0+O1xuICAgIGNvbnN0IHRhYmxlID0gUmVwb3NpdG9yeS50YWJsZShmcm9tKTtcbiAgICBpZiAoIXRoaXMuY2xpZW50Lmhhcyh0YWJsZSkpIHRoaXMuY2xpZW50LnNldCh0YWJsZSwgbmV3IE1hcCgpKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHRhYmxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSByYXcgcXVlcnkgYWdhaW5zdCB0aGUgaW4tbWVtb3J5IHN0b3JhZ2VcbiAgICogQHN1bW1hcnkgUGVyZm9ybXMgYSBxdWVyeSBvcGVyYXRpb24gb24gdGhlIGluLW1lbW9yeSBkYXRhIHN0b3JlIHVzaW5nIHRoZSBwcm92aWRlZCBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgKiBUaGlzIG1ldGhvZCBzdXBwb3J0cyBmaWx0ZXJpbmcsIHNvcnRpbmcsIHBhZ2luYXRpb24sIGFuZCBmaWVsZCBzZWxlY3Rpb24uXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0ge1Jhd1JhbVF1ZXJ5PGFueT59IHJhd0lucHV0IC0gVGhlIHF1ZXJ5IHNwZWNpZmljYXRpb25cbiAgICogQHJldHVybiB7UHJvbWlzZTxSPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHF1ZXJ5IHJlc3VsdHNcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgUmFtQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IFN0b3JhZ2UgYXMgSW4tTWVtb3J5IFN0b3JhZ2VcbiAgICpcbiAgICogICBDYWxsZXItPj5SYW1BZGFwdGVyOiByYXcocmF3SW5wdXQpXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IHRhYmxlRm9yKGZyb20pXG4gICAqICAgYWx0IFRhYmxlIGRvZXNuJ3QgZXhpc3RcbiAgICogICAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiB0aHJvdyBJbnRlcm5hbEVycm9yXG4gICAqICAgZW5kXG4gICAqICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IGZpbmRQcmltYXJ5S2V5KG5ldyBmcm9tKCkpXG4gICAqICAgUmFtQWRhcHRlci0+PlN0b3JhZ2U6IGVudHJpZXMoKVxuICAgKiAgIFN0b3JhZ2UtLT4+UmFtQWRhcHRlcjogZW50cmllc1xuICAgKiAgIGxvb3AgRm9yIGVhY2ggZW50cnlcbiAgICogICAgIFJhbUFkYXB0ZXItPj5SYW1BZGFwdGVyOiByZXZlcnQociwgZnJvbSwgaWQsIHBrKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBXaGVyZSBjb25kaXRpb24gZXhpc3RzXG4gICAqICAgICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogcmVzdWx0LmZpbHRlcih3aGVyZSlcbiAgICogICBlbmRcbiAgICogICBhbHQgU29ydCBjb25kaXRpb24gZXhpc3RzXG4gICAqICAgICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogcmVzdWx0LnNvcnQoc29ydClcbiAgICogICBlbmRcbiAgICogICBhbHQgU2tpcCBzcGVjaWZpZWRcbiAgICogICAgIFJhbUFkYXB0ZXItPj5SYW1BZGFwdGVyOiByZXN1bHQuc2xpY2Uoc2tpcClcbiAgICogICBlbmRcbiAgICogICBhbHQgTGltaXQgc3BlY2lmaWVkXG4gICAqICAgICBSYW1BZGFwdGVyLT4+UmFtQWRhcHRlcjogcmVzdWx0LnNsaWNlKDAsIGxpbWl0KVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBTZWxlY3QgZmllbGRzIHNwZWNpZmllZFxuICAgKiAgICAgbG9vcCBGb3IgZWFjaCByZXN1bHRcbiAgICogICAgICAgUmFtQWRhcHRlci0+PlJhbUFkYXB0ZXI6IEZpbHRlciB0byBzZWxlY3RlZCBmaWVsZHNcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKiAgIFJhbUFkYXB0ZXItLT4+Q2FsbGVyOiByZXN1bHRcbiAgICovXG4gIGFzeW5jIHJhdzxSPihyYXdJbnB1dDogUmF3UmFtUXVlcnk8YW55Pik6IFByb21pc2U8Uj4ge1xuICAgIGNvbnN0IHsgd2hlcmUsIHNvcnQsIGxpbWl0LCBza2lwLCBmcm9tIH0gPSByYXdJbnB1dDtcbiAgICBsZXQgeyBzZWxlY3QgfSA9IHJhd0lucHV0O1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLnRhYmxlRm9yKGZyb20pO1xuICAgIGlmICghY29sbGVjdGlvbilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBUYWJsZSAke2Zyb219IG5vdCBmb3VuZCBpbiBSYW1BZGFwdGVyYCk7XG4gICAgY29uc3QgeyBpZCwgcHJvcHMgfSA9IGZpbmRQcmltYXJ5S2V5KG5ldyBmcm9tKCkpO1xuXG4gICAgbGV0IHJlc3VsdDogYW55W10gPSBBcnJheS5mcm9tKGNvbGxlY3Rpb24uZW50cmllcygpKS5tYXAoKFtwaywgcl0pID0+XG4gICAgICB0aGlzLnJldmVydChcbiAgICAgICAgcixcbiAgICAgICAgZnJvbSxcbiAgICAgICAgaWQgYXMgYW55LFxuICAgICAgICBTZXF1ZW5jZS5wYXJzZVZhbHVlKHByb3BzLnR5cGUgYXMgYW55LCBwayBhcyBzdHJpbmcpIGFzIHN0cmluZ1xuICAgICAgKVxuICAgICk7XG5cbiAgICByZXN1bHQgPSB3aGVyZSA/IHJlc3VsdC5maWx0ZXIod2hlcmUpIDogcmVzdWx0O1xuXG4gICAgaWYgKHNvcnQpIHJlc3VsdCA9IHJlc3VsdC5zb3J0KHNvcnQpO1xuXG4gICAgaWYgKHNraXApIHJlc3VsdCA9IHJlc3VsdC5zbGljZShza2lwKTtcbiAgICBpZiAobGltaXQpIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBsaW1pdCk7XG5cbiAgICBpZiAoc2VsZWN0KSB7XG4gICAgICBzZWxlY3QgPSBBcnJheS5pc0FycmF5KHNlbGVjdCkgPyBzZWxlY3QgOiBbc2VsZWN0XTtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoKHIpID0+XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHIpLnJlZHVjZSgoYWNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBba2V5LCB2YWxdKSA9PiB7XG4gICAgICAgICAgaWYgKChzZWxlY3QgYXMgc3RyaW5nW10pLmluY2x1ZGVzKGtleSkpIGFjY1trZXldID0gdmFsO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIHVua25vd24gYXMgUjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUGFyc2VzIGFuZCBjb252ZXJ0cyBlcnJvcnMgdG8gYXBwcm9wcmlhdGUgdHlwZXNcbiAgICogQHN1bW1hcnkgRW5zdXJlcyB0aGF0IGVycm9ycyBhcmUgb2YgdGhlIGNvcnJlY3QgdHlwZSBmb3IgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZy5cbiAgICogSWYgdGhlIGVycm9yIGlzIGFscmVhZHkgYSBCYXNlRXJyb3IsIGl0J3MgcmV0dXJuZWQgYXMgaXM7IG90aGVyd2lzZSwgaXQncyB3cmFwcGVkIGluIGFuIEludGVybmFsRXJyb3IuXG4gICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIGV4cGVjdGVkIGVycm9yIHR5cGUsIGV4dGVuZGluZyBCYXNlRXJyb3JcbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyIC0gVGhlIGVycm9yIHRvIHBhcnNlXG4gICAqIEByZXR1cm4ge1Z9IFRoZSBwYXJzZWQgZXJyb3Igb2YgdGhlIGV4cGVjdGVkIHR5cGVcbiAgICovXG4gIHBhcnNlRXJyb3I8ViBleHRlbmRzIEJhc2VFcnJvcj4oZXJyOiBFcnJvcik6IFYge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBCYXNlRXJyb3IpIHJldHVybiBlcnIgYXMgVjtcbiAgICByZXR1cm4gbmV3IEludGVybmFsRXJyb3IoZXJyKSBhcyBWO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IHN0YXRlbWVudCBidWlsZGVyIGZvciBxdWVyaWVzXG4gICAqIEBzdW1tYXJ5IEZhY3RvcnkgbWV0aG9kIHRoYXQgY3JlYXRlcyBhIG5ldyBSYW1TdGF0ZW1lbnQgaW5zdGFuY2UgZm9yIGJ1aWxkaW5nIHF1ZXJpZXMuXG4gICAqIFRoaXMgbWV0aG9kIGFsbG93cyBmb3IgZmx1ZW50IHF1ZXJ5IGNvbnN0cnVjdGlvbiBhZ2FpbnN0IHRoZSBSQU0gYWRhcHRlci5cbiAgICogQHRlbXBsYXRlIE0gLSBUaGUgbW9kZWwgdHlwZSBmb3IgdGhlIHN0YXRlbWVudFxuICAgKiBAcmV0dXJuIHtSYW1TdGF0ZW1lbnQ8TSwgYW55Pn0gQSBuZXcgc3RhdGVtZW50IGJ1aWxkZXIgaW5zdGFuY2VcbiAgICovXG4gIFN0YXRlbWVudDxNIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KCk6IFJhbVN0YXRlbWVudDxNLCBhbnk+IHtcbiAgICByZXR1cm4gbmV3IFJhbVN0YXRlbWVudDxNLCBhbnk+KHRoaXMgYXMgYW55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBzZXF1ZW5jZSBmb3IgZ2VuZXJhdGluZyBzZXF1ZW50aWFsIElEc1xuICAgKiBAc3VtbWFyeSBGYWN0b3J5IG1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgUmFtU2VxdWVuY2UgaW5zdGFuY2UgZm9yIElEIGdlbmVyYXRpb24uXG4gICAqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgd2F5IHRvIGNyZWF0ZSBhdXRvLWluY3JlbWVudGluZyBzZXF1ZW5jZXMgZm9yIGVudGl0eSBJRHMuXG4gICAqIEBwYXJhbSB7U2VxdWVuY2VPcHRpb25zfSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc2VxdWVuY2VcbiAgICogQHJldHVybiB7UHJvbWlzZTxTZXF1ZW5jZT59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgc2VxdWVuY2UgaW5zdGFuY2VcbiAgICovXG4gIGFzeW5jIFNlcXVlbmNlKG9wdGlvbnM6IFNlcXVlbmNlT3B0aW9ucyk6IFByb21pc2U8U2VxdWVuY2U+IHtcbiAgICByZXR1cm4gbmV3IFJhbVNlcXVlbmNlKG9wdGlvbnMsIHRoaXMpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBvdmVycmlkZSBmb3IoY29uZmlnOiBQYXJ0aWFsPFJhbUNvbmZpZz4sIC4uLmFyZ3M6IGFueVtdKTogdHlwZW9mIHRoaXMge1xuICAgIGlmICghdGhpcy5wcm94aWVzKSB0aGlzLnByb3hpZXMgPSB7fTtcbiAgICBjb25zdCBrZXkgPSBgJHt0aGlzLmFsaWFzfSAtICR7aGFzaE9iaihjb25maWcpfWA7XG4gICAgaWYgKGtleSBpbiB0aGlzLnByb3hpZXMpIHJldHVybiB0aGlzLnByb3hpZXNba2V5XSBhcyB0eXBlb2YgdGhpcztcblxuICAgIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRoaXMsIHtcbiAgICAgIGdldDogKHRhcmdldDogdHlwZW9mIHRoaXMsIHA6IHN0cmluZyB8IHN5bWJvbCwgcmVjZWl2ZXI6IGFueSkgPT4ge1xuICAgICAgICBpZiAocCA9PT0gXCJfY29uZmlnXCIpIHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbENvbmY6IFJhbUNvbmZpZyA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBvcmlnaW5hbENvbmYsIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnByb3hpZXNba2V5XSA9IHByb3h5O1xuICAgIHJldHVybiBwcm94eTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB1cCBSQU0tc3BlY2lmaWMgZGVjb3JhdGlvbnMgZm9yIG1vZGVsIHByb3BlcnRpZXNcbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBkZWNvcmF0aW9ucyBmb3IgY3JlYXRlZEJ5IGFuZCB1cGRhdGVkQnkgZmllbGRzIGluIHRoZSBSQU0gYWRhcHRlci5cbiAgICogVGhpcyBzdGF0aWMgbWV0aG9kIGlzIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gc2V0IHVwIGhhbmRsZXJzIHRoYXQgYXV0b21hdGljYWxseVxuICAgKiBwb3B1bGF0ZSB0aGVzZSBmaWVsZHMgd2l0aCB0aGUgY3VycmVudCB1c2VyJ3MgVVVJRCBkdXJpbmcgY3JlYXRlIGFuZCB1cGRhdGUgb3BlcmF0aW9ucy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgUmFtQWRhcHRlclxuICAgKiAgIHBhcnRpY2lwYW50IERlY29yYXRpb25cbiAgICogICBwYXJ0aWNpcGFudCBSZXBvc2l0b3J5XG4gICAqXG4gICAqICAgUmFtQWRhcHRlci0+PlJlcG9zaXRvcnk6IGtleShQZXJzaXN0ZW5jZUtleXMuQ1JFQVRFRF9CWSlcbiAgICogICBSZXBvc2l0b3J5LS0+PlJhbUFkYXB0ZXI6IGNyZWF0ZWRCeUtleVxuICAgKiAgIFJhbUFkYXB0ZXItPj5SZXBvc2l0b3J5OiBrZXkoUGVyc2lzdGVuY2VLZXlzLlVQREFURURfQlkpXG4gICAqICAgUmVwb3NpdG9yeS0tPj5SYW1BZGFwdGVyOiB1cGRhdGVkQnlLZXlcbiAgICpcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZmxhdm91cmVkQXMoUmFtRmxhdm91cilcbiAgICogICBEZWNvcmF0aW9uLS0+PlJhbUFkYXB0ZXI6IERlY29yYXRvckJ1aWxkZXJcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZm9yKGNyZWF0ZWRCeUtleSlcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZGVmaW5lKG9uQ3JlYXRlLCBwcm9wTWV0YWRhdGEpXG4gICAqICAgUmFtQWRhcHRlci0+PkRlY29yYXRpb246IGFwcGx5KClcbiAgICpcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZmxhdm91cmVkQXMoUmFtRmxhdm91cilcbiAgICogICBEZWNvcmF0aW9uLS0+PlJhbUFkYXB0ZXI6IERlY29yYXRvckJ1aWxkZXJcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZm9yKHVwZGF0ZWRCeUtleSlcbiAgICogICBSYW1BZGFwdGVyLT4+RGVjb3JhdGlvbjogZGVmaW5lKG9uQ3JlYXRlLCBwcm9wTWV0YWRhdGEpXG4gICAqICAgUmFtQWRhcHRlci0+PkRlY29yYXRpb246IGFwcGx5KClcbiAgICovXG4gIHN0YXRpYyBvdmVycmlkZSBkZWNvcmF0aW9uKCk6IHZvaWQge1xuICAgIHN1cGVyLmRlY29yYXRpb24oKTtcbiAgICBjb25zdCBjcmVhdGVkQnlLZXkgPSBSZXBvc2l0b3J5LmtleShQZXJzaXN0ZW5jZUtleXMuQ1JFQVRFRF9CWSk7XG4gICAgY29uc3QgdXBkYXRlZEJ5S2V5ID0gUmVwb3NpdG9yeS5rZXkoUGVyc2lzdGVuY2VLZXlzLlVQREFURURfQlkpO1xuICAgIERlY29yYXRpb24uZmxhdm91cmVkQXMoUmFtRmxhdm91cilcbiAgICAgIC5mb3IoY3JlYXRlZEJ5S2V5KVxuICAgICAgLmRlZmluZShcbiAgICAgICAgb25DcmVhdGUoY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGUpLFxuICAgICAgICBwcm9wTWV0YWRhdGEoY3JlYXRlZEJ5S2V5LCB7fSlcbiAgICAgIClcbiAgICAgIC5hcHBseSgpO1xuICAgIERlY29yYXRpb24uZmxhdm91cmVkQXMoUmFtRmxhdm91cilcbiAgICAgIC5mb3IodXBkYXRlZEJ5S2V5KVxuICAgICAgLmRlZmluZShcbiAgICAgICAgb25DcmVhdGVVcGRhdGUoY3JlYXRlZEJ5T25SYW1DcmVhdGVVcGRhdGUpLFxuICAgICAgICBwcm9wTWV0YWRhdGEodXBkYXRlZEJ5S2V5LCB7fSlcbiAgICAgIClcbiAgICAgIC5hcHBseSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGdldENsaWVudCgpOiBSYW1TdG9yYWdlIHtcbiAgICByZXR1cm4gbmV3IE1hcCgpO1xuICB9XG59XG4iXX0=
|