@aerokit/sdk 12.78.0 → 12.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/bpm/process.js +4 -1
- package/dist/cjs/bpm/tasks.js +3 -1
- package/dist/cjs/bpm/tracer.js +3 -1
- package/dist/cjs/cms/cmis.js +105 -177
- package/dist/cjs/db/database.js +5 -1
- package/dist/cjs/db/query.js +19 -1
- package/dist/cjs/db/repository.js +2 -1
- package/dist/cjs/db/sql.js +5 -2
- package/dist/cjs/etcd/client.js +4 -1
- package/dist/cjs/http/errors/ForbiddenError.js +9 -9
- package/dist/cjs/http/errors/ValidationError.js +9 -9
- package/dist/cjs/http/request.js +2 -1
- package/dist/cjs/http/response.js +102 -188
- package/dist/cjs/http/rs/resource-http-controller.js +4 -1
- package/dist/cjs/http/rs/resource-mappings.js +6 -3
- package/dist/cjs/http/rs/resource-method.js +10 -1
- package/dist/cjs/http/rs/resource.js +11 -1
- package/dist/cjs/http/upload.js +3 -1
- package/dist/cjs/io/files.js +5 -7
- package/dist/cjs/io/streams.js +5 -1
- package/dist/cjs/io/zip.js +4 -1
- package/dist/cjs/job/scheduler.js +4 -1
- package/dist/cjs/kafka/consumer.js +3 -2
- package/dist/cjs/kafka/producer.js +3 -1
- package/dist/cjs/log/logging.js +2 -1
- package/dist/cjs/mail/client.js +2 -1
- package/dist/cjs/messaging/consumer.js +3 -1
- package/dist/cjs/messaging/producer.js +3 -1
- package/dist/cjs/mongodb/client.js +26 -1
- package/dist/cjs/mongodb/dao.js +3 -1
- package/dist/cjs/net/soap.js +15 -1
- package/dist/cjs/net/websockets.js +5 -1
- package/dist/cjs/platform/engines.js +2 -1
- package/dist/cjs/platform/os.js +7 -9
- package/dist/cjs/platform/problems.js +7 -13
- package/dist/cjs/platform/registry.js +4 -1
- package/dist/cjs/platform/repository.js +4 -1
- package/dist/cjs/platform/workspace.js +8 -1
- package/dist/cjs/redis/client.js +2 -1
- package/dist/cjs/security/oauth.js +2 -1
- package/dist/cjs/template/engines.js +6 -1
- package/dist/dts/db/query.d.ts +10 -0
- package/dist/esm/bpm/process.mjs +4 -1
- package/dist/esm/bpm/tasks.mjs +3 -1
- package/dist/esm/bpm/tracer.mjs +3 -1
- package/dist/esm/cms/cmis.mjs +105 -177
- package/dist/esm/db/database.mjs +5 -1
- package/dist/esm/db/query.mjs +19 -1
- package/dist/esm/db/repository.mjs +2 -1
- package/dist/esm/db/sql.mjs +5 -2
- package/dist/esm/etcd/client.mjs +4 -1
- package/dist/esm/http/errors/ForbiddenError.mjs +9 -9
- package/dist/esm/http/errors/ValidationError.mjs +9 -9
- package/dist/esm/http/request.mjs +2 -1
- package/dist/esm/http/response.mjs +102 -188
- package/dist/esm/http/rs/resource-http-controller.mjs +4 -1
- package/dist/esm/http/rs/resource-mappings.mjs +6 -3
- package/dist/esm/http/rs/resource-method.mjs +10 -1
- package/dist/esm/http/rs/resource.mjs +11 -1
- package/dist/esm/http/upload.mjs +3 -1
- package/dist/esm/io/files.mjs +5 -7
- package/dist/esm/io/streams.mjs +5 -1
- package/dist/esm/io/zip.mjs +4 -1
- package/dist/esm/job/scheduler.mjs +4 -1
- package/dist/esm/kafka/consumer.mjs +3 -2
- package/dist/esm/kafka/producer.mjs +3 -1
- package/dist/esm/log/logging.mjs +2 -1
- package/dist/esm/mail/client.mjs +2 -1
- package/dist/esm/messaging/consumer.mjs +3 -1
- package/dist/esm/messaging/producer.mjs +3 -1
- package/dist/esm/mongodb/client.mjs +26 -1
- package/dist/esm/mongodb/dao.mjs +3 -1
- package/dist/esm/net/soap.mjs +15 -1
- package/dist/esm/net/websockets.mjs +5 -1
- package/dist/esm/platform/engines.mjs +2 -1
- package/dist/esm/platform/os.mjs +7 -9
- package/dist/esm/platform/problems.mjs +7 -13
- package/dist/esm/platform/registry.mjs +4 -1
- package/dist/esm/platform/repository.mjs +4 -1
- package/dist/esm/platform/workspace.mjs +8 -1
- package/dist/esm/redis/client.mjs +2 -1
- package/dist/esm/security/oauth.mjs +2 -1
- package/dist/esm/template/engines.mjs +6 -1
- package/package.json +1 -1
|
@@ -29,6 +29,11 @@ var import_uuid = require("@aerokit/sdk/utils/uuid");
|
|
|
29
29
|
const MongoDBFacade = Java.type("org.eclipse.dirigible.components.api.mongodb.MongoDBFacade");
|
|
30
30
|
const TimeUnit = Java.type("java.util.concurrent.TimeUnit");
|
|
31
31
|
class DBObject {
|
|
32
|
+
/**
|
|
33
|
+
* The underlying native Java object representing the BSON document.
|
|
34
|
+
* @private
|
|
35
|
+
*/
|
|
36
|
+
native;
|
|
32
37
|
/**
|
|
33
38
|
* Constructs a new DBObject instance.
|
|
34
39
|
* @param native The native MongoDB object (e.g., com.mongodb.DBObject)
|
|
@@ -129,6 +134,11 @@ function createBasicDBObject() {
|
|
|
129
134
|
return dbObject;
|
|
130
135
|
}
|
|
131
136
|
class Client {
|
|
137
|
+
/**
|
|
138
|
+
* The underlying native MongoDB client object.
|
|
139
|
+
* @private
|
|
140
|
+
*/
|
|
141
|
+
native;
|
|
132
142
|
/**
|
|
133
143
|
* Constructs a new MongoDB Client instance.
|
|
134
144
|
* @param uri The MongoDB connection URI.
|
|
@@ -155,6 +165,11 @@ class Client {
|
|
|
155
165
|
}
|
|
156
166
|
}
|
|
157
167
|
class DB {
|
|
168
|
+
/**
|
|
169
|
+
* The underlying native MongoDB DB object.
|
|
170
|
+
* @private
|
|
171
|
+
*/
|
|
172
|
+
native;
|
|
158
173
|
/**
|
|
159
174
|
* Constructs a new DB instance.
|
|
160
175
|
* @param native The native MongoDB DB object.
|
|
@@ -173,6 +188,11 @@ class DB {
|
|
|
173
188
|
}
|
|
174
189
|
}
|
|
175
190
|
class DBCollection {
|
|
191
|
+
/**
|
|
192
|
+
* The underlying native MongoDB DBCollection object.
|
|
193
|
+
* @private
|
|
194
|
+
*/
|
|
195
|
+
native;
|
|
176
196
|
/**
|
|
177
197
|
* Constructs a new DBCollection instance.
|
|
178
198
|
* @param native The native MongoDB DBCollection object.
|
|
@@ -458,6 +478,11 @@ class DBCollection {
|
|
|
458
478
|
}
|
|
459
479
|
}
|
|
460
480
|
class DBCursor {
|
|
481
|
+
/**
|
|
482
|
+
* The underlying native MongoDB DBCursor object.
|
|
483
|
+
* @private
|
|
484
|
+
*/
|
|
485
|
+
native;
|
|
461
486
|
/**
|
|
462
487
|
* Constructs a new DBCursor instance.
|
|
463
488
|
* @param native The native MongoDB DBCursor object.
|
|
@@ -624,4 +649,4 @@ class DBCursor {
|
|
|
624
649
|
return this;
|
|
625
650
|
}
|
|
626
651
|
}
|
|
627
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvY2xpZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBNb25nb0RCRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLm1vbmdvZGIuTW9uZ29EQkZhY2FkZVwiKTtcbmNvbnN0IFRpbWVVbml0ID0gSmF2YS50eXBlKFwiamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXRcIik7XG5pbXBvcnQgeyBVVUlEIH0gZnJvbSBcIkBhZXJva2l0L3Nkay91dGlscy91dWlkXCI7XG5cbi8qKlxuICogRGVmaW5lIGEgY29tbW9uIHR5cGUgZm9yIGlucHV0IHRvIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBlaXRoZXIgYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdFxuICogKHdoaWNoIHdpbGwgYmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gREJPYmplY3QpIG9yIGFuIGV4aXN0aW5nIERCT2JqZWN0IHdyYXBwZXIgaW5zdGFuY2UuXG4gKi9cbnR5cGUgREJJbnB1dCA9IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBEQk9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbi8qKlxuICogREJPYmplY3Qgb2JqZWN0IHJlcHJlc2VudHMgYSBCU09OIGRvY3VtZW50IHVzZWQgZm9yIHF1ZXJpZXMsIGluc2VydGlvbnMsIGFuZCB1cGRhdGVzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgREJPYmplY3Qge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQlNPTiBkb2N1bWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJPYmplY3QgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgb2JqZWN0IChlLmcuLCBjb20ubW9uZ29kYi5EQk9iamVjdClcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGEga2V5LXZhbHVlIHBhaXIgdG8gdGhlIERCT2JqZWN0LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhcHBlbmQuXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgREJPYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBlbmQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBEQk9iamVjdCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIERCT2JqZWN0IHRvIGEgc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gKEpTT04pLlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvSnNvbigpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnRvSnNvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBvYmplY3QgYXMgYSBwYXJ0aWFsIG9iamVjdCAodXNlZCBpbnRlcm5hbGx5IGJ5IE1vbmdvREIgZHJpdmVyKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFya0FzUGFydGlhbE9iamVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWFya0FzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgb2JqZWN0IGlzIGEgcGFydGlhbCBvYmplY3QuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBwYXJ0aWFsLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGlzUGFydGlhbE9iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmlzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgREJPYmplY3QgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGNvbnRhaW5zRmllbGQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmNvbnRhaW5zRmllbGQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEByZXR1cm5zIFRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1dHMgYSBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBEQk9iamVjdC5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHV0LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgbnVsbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHV0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnB1dChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgZmllbGQgZnJvbSB0aGUgREJPYmplY3QuXG4gICAgICogQHBhcmFtIGtleSBUaGUgZmllbGQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgZmllbGQgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnJlbW92ZUZpZWxkKGtleSk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBwcm9wZXJ0aWVzIGZyb20gdGhlIG5hdGl2ZSBNb25nb0RCIG9iamVjdCdzIEpTT04gcmVwcmVzZW50YXRpb25cbiAqIG9udG8gdGhlIHB1YmxpYyBwcm9wZXJ0aWVzIG9mIHRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogVGhpcyBhbGxvd3MgZGlyZWN0IGFjY2VzcyBsaWtlIGBkYk9iamVjdC5maWVsZE5hbWVgLlxuICogQHBhcmFtIGRiT2JqZWN0IFRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBwcm9wZXJ0aWVzIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdChkYk9iamVjdDogREJPYmplY3QpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIWRiT2JqZWN0Lm5hdGl2ZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIC8vIFBhcnNlIHRoZSBuYXRpdmUgb2JqZWN0J3MgSlNPTiByZXByZXNlbnRhdGlvblxuICAgIHZhciBleHRyYWN0ZWQgPSBKU09OLnBhcnNlKGRiT2JqZWN0Lm5hdGl2ZS50b0pzb24oKSk7XG4gICAgLy8gQ29weSBhbGwgcHJvcGVydGllcyB0byB0aGUgd3JhcHBlciBpbnN0YW5jZVxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBleHRyYWN0ZWQpIHtcbiAgICAgICAgZGJPYmplY3RbcHJvcGVydHlOYW1lXSA9IGV4dHJhY3RlZFtwcm9wZXJ0eU5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gZXh0cmFjdGVkO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBpbXBsaWNpdGx5IGNvbnZlcnQgYSBwbGFpbiBKUyBvYmplY3QgdG8gYSBEQk9iamVjdCxcbiAqIG9yIHJldHVybiB0aGUgZXhpc3RpbmcgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2JqZWN0IElucHV0IG9iamVjdCB3aGljaCBjYW4gYmUgYSBwbGFpbiBvYmplY3QsIERCT2JqZWN0LCBvciB1bmRlZmluZWQvbnVsbC5cbiAqIEByZXR1cm5zIERCT2JqZWN0IG9yIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gaW1wbGljaXQob2JqZWN0OiBEQklucHV0KTogREJPYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIEV4cGxpY2l0bHkgcmV0dXJuIHVuZGVmaW5lZCBpZiBpbnB1dCBpcyBmYWxzeVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiBpdCBhbHJlYWR5IGhhcyB0aGUgbmF0aXZlIHByb3BlcnR5IChhc3N1bWVzIGl0J3MgYSBEQk9iamVjdCBvciBzaW1pbGFyIHdyYXBwZXIpXG4gICAgaWYgKChvYmplY3QgYXMgYW55KS5uYXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCBhcyBEQk9iamVjdDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHBsYWluIG9iamVjdCB0byBEQk9iamVjdFxuICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcblxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBvYmplY3QpIHtcbiAgICAgICAgZGJPYmplY3QuYXBwZW5kKHByb3BlcnR5TmFtZSwgb2JqZWN0W3Byb3BlcnR5TmFtZV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIG5ldyBEQk9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJhc2ljREJPYmplY3QoKTogREJPYmplY3Qge1xuICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KE1vbmdvREJGYWNhZGUuY3JlYXRlQmFzaWNEQk9iamVjdCgpKTtcbiAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ2xpZW50IG9iamVjdCB3cmFwcGVyIGZvciBjb25uZWN0aW5nIHRvIE1vbmdvREIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnQge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgY2xpZW50IG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1vbmdvREIgQ2xpZW50IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIE1vbmdvREIgY29ubmVjdGlvbiBVUkkuXG4gICAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gTW9uZ29EQkZhY2FkZS5nZXRDbGllbnQodXJpLCB1c2VyLCBwYXNzd29yZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBkYXRhYmFzZSBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBuYW1lIG9mIHRoZSBkYXRhYmFzZS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBkYXRhYmFzZSBuYW1lIGlzIHVzZWQuXG4gICAgICogQHJldHVybnMgQSBEQiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0REIobmFtZT86IHN0cmluZyk6IERCIHtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXREQihuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHREQiA9IE1vbmdvREJGYWNhZGUuZ2V0RGVmYXVsdERhdGFiYXNlTmFtZSgpO1xuICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0REIoZGVmYXVsdERCKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREIobmF0aXZlKTtcbiAgICB9XG59XG5cbi8qKlxuICogREIgb2JqZWN0IHdyYXBwZXIgZm9yIGEgTW9uZ29EQiBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERCIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBuYXRpdmUgVGhlIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBjb2xsZWN0aW9uIGluc3RhbmNlIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEByZXR1cm5zIEEgREJDb2xsZWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb2xsZWN0aW9uKG5hbWU6IHN0cmluZyk6IERCQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldENvbGxlY3Rpb24obmFtZSk7XG4gICAgICAgIHJldHVybiBuZXcgREJDb2xsZWN0aW9uKG5hdGl2ZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIERCQ29sbGVjdGlvbiBvYmplY3Qgd3JhcHBlciBmb3IgYSBNb25nb0RCIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBEQkNvbGxlY3Rpb24ge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDb2xsZWN0aW9uIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmF0aXZlIFRoZSBuYXRpdmUgTW9uZ29EQiBEQkNvbGxlY3Rpb24gb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgYSBkb2N1bWVudCBpbnRvIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYk9iamVjdCBUaGUgZG9jdW1lbnQgdG8gaW5zZXJ0IChjYW4gYmUgYSBwbGFpbiBKUyBvYmplY3Qgb3IgREJPYmplY3QpLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnNlcnQoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5pbnNlcnQoZGJvLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgc3BlY2lmaWNhdGlvbiAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcGFyYW0gcHJvamVjdGlvbiBUaGUgZmllbGRzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcmV0dXJucyBBIERCQ3Vyc29yIGZvciBpdGVyYXRpbmcgb3ZlciByZXN1bHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kKHF1ZXJ5PzogREJJbnB1dCwgcHJvamVjdGlvbj86IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcblxuICAgICAgICB2YXIgbmF0aXZlID0gbnVsbDtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZChxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kKHEubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREJDdXJzb3IobmF0aXZlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIHNpbmdsZSBkb2N1bWVudCBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEBwYXJhbSBzb3J0IFRoZSBzb3J0aW5nIHNwZWNpZmljYXRpb24uXG4gICAgICogQHJldHVybnMgVGhlIGZvdW5kIGRvY3VtZW50IGFzIGEgREJPYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGZpbmRPbmUocXVlcnk6IERCSW5wdXQsIHByb2plY3Rpb246IERCSW5wdXQsIHNvcnQ6IERCSW5wdXQpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcbiAgICAgICAgY29uc3QgcyA9IGltcGxpY2l0KHNvcnQpO1xuXG4gICAgICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgdmFyIG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmRPbmUocS5uYXRpdmUsIHAubmF0aXZlLCBzLm5hdGl2ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGJPYmplY3QubmF0aXZlID0gbmF0aXZlO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGEgc2luZ2xlIGRvY3VtZW50IGJ5IGl0cyBzdHJpbmcgSUQuXG4gICAgICogQHBhcmFtIGlkIFRoZSBzdHJpbmcgSUQgb2YgdGhlIGRvY3VtZW50LlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIFRoZSBmb3VuZCBkb2N1bWVudCBhcyBhIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT25lQnlJZChpZDogc3RyaW5nLCBwcm9qZWN0aW9uPzogREJJbnB1dCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcCA9IGltcGxpY2l0KHByb2plY3Rpb24pO1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkLCBwLm5hdGl2ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBkYk9iamVjdC5uYXRpdmUgPSBuYXRpdmU7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ291bnRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IE9wdGlvbmFsIHF1ZXJ5IHRvIGZpbHRlciB0aGUgY291bnQuXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICovXG4gICAgcHVibGljIGNvdW50KHF1ZXJ5PzogREJJbnB1dCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuY291bnQocS5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5jb3VudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvdW50IG9mIGRvY3VtZW50cyAoYWxpYXMgZm9yIGNvdW50KS5cbiAgICAgKiBAcGFyYW0gcXVlcnkgT3B0aW9uYWwgcXVlcnkgdG8gZmlsdGVyIHRoZSBjb3VudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRvY3VtZW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q291bnQocXVlcnk6IERCSW5wdXQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldENvdW50KHEubmF0aXZlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Q291bnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluZGV4IG9uIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBrZXlzIFRoZSBpbmRleCBrZXkgc3BlY2lmaWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBpbmRleCBvcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVJbmRleChrZXlzOiBEQklucHV0LCBvcHRpb25zOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGsgPSBpbXBsaWNpdChrZXlzKTtcbiAgICAgICAgY29uc3QgbyA9IGltcGxpY2l0KG9wdGlvbnMpO1xuICAgICAgICBpZiAoaykge1xuICAgICAgICAgICAgaWYgKG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSwgby5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBLZXlzIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbmRleCBvbiBhIHNpbmdsZSBmaWVsZCBieSBuYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBpbmRleC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlSW5kZXhGb3JGaWVsZChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLmNyZWF0ZUluZGV4KG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGZpbGVkIG5hbWUgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZGlzdGluY3QgdmFsdWVzIGZvciBhIHNwZWNpZmllZCBmaWVsZCBhY3Jvc3MgYSBjb2xsZWN0aW9uLlxuICAgICAqIE5PVEU6IFRoZSBzaWduYXR1cmUgaW4gdGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgc2xpZ2h0bHkgb2ZmIGNvbXBhcmVkIHRvIHR5cGljYWwgTW9uZ29EQiBkcml2ZXJzLlxuICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlIHVzaW5nIGBrZXlzLm5hdGl2ZWAgaWYgYGtleXNgIGlzIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSBxdWVyeSBPcHRpb25hbCBxdWVyeSB0byBmaWx0ZXIgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ga2V5cyBPcHRpb25hbCBrZXlzIHRvIHVzZSBmb3IgZGlzdGluY3QgKHJlcGxhY2VzICduYW1lJyBpZiBwcm92aWRlZCBhbmQgcXVlcnkgZXhpc3RzKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzdGluY3QobmFtZTogc3RyaW5nLCBxdWVyeTogREJJbnB1dCwga2V5czogREJJbnB1dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCBrID0gaW1wbGljaXQoa2V5cyk7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHF1ZXJ5IGlzIHByb3ZpZGVkLCB1c2Uga2V5cyBmb3IgdGhlIGZpZWxkIG5hbWUgaWYgayBpcyBwcmVzZW50LCBvdGhlcndpc2UgdXNlICduYW1lJ1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRpc3RpbmN0KGsgPyBrLm5hdGl2ZSA6IG5hbWUsIHEubmF0aXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUuZGlzdGluY3QobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCB0aGUgZmlsZWQgbmFtZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4LlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgbmFtZSBvZiB0aGUgaW5kZXggb3IgdGhlIERCT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaW5kZXgga2V5cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4KGluZGV4OiBzdHJpbmcgfCBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5kcm9wSW5kZXgoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGRibykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChkYm8ubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4IGJ5IG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluZGV4LlxuICAgICAqL1xuICAgIHB1YmxpYyBkcm9wSW5kZXhCeU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbGwgaW5kZXhlcyBvbiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkb2N1bWVudHMgZnJvbSB0aGUgY29sbGVjdGlvbiBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBkZWxldGlvbiBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmUocXVlcnk6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcSA9IGltcGxpY2l0KHF1ZXJ5KTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLnJlbW92ZShxLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGEgZG9jdW1lbnQgdG8gdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBkb2N1bWVudCBoYXMgYW4gYF9pZGAsIGl0IHBlcmZvcm1zIGFuIHVwZGF0ZTtcbiAgICAgKiBvdGhlcndpc2UsIGl0IHBlcmZvcm1zIGFuIGluc2VydC5cbiAgICAgKiBAcGFyYW0gZGJPYmplY3QgVGhlIGRvY3VtZW50IHRvIHNhdmUuXG4gICAgICovXG4gICAgcHVibGljIHNhdmUoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5zYXZlKGRiby5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBkb2N1bWVudHMgaW4gdGhlIGNvbGxlY3Rpb24gbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uIChlLmcuLCB7JHNldDogey4uLn19KS5cbiAgICAgKiBAcGFyYW0gdXBzZXJ0IElmIHRydWUsIGNyZWF0ZXMgYSBuZXcgZG9jdW1lbnQgaWYgbm8gZG9jdW1lbnRzIG1hdGNoIHRoZSBxdWVyeS5cbiAgICAgKiBAcGFyYW0gbXVsdGkgSWYgdHJ1ZSwgdXBkYXRlcyBhbGwgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBxdWVyeTsgb3RoZXJ3aXNlLCBvbmx5IG9uZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKHF1ZXJ5OiBEQklucHV0LCB1cGRhdGU6IERCSW5wdXQsIHVwc2VydD86IGJvb2xlYW4sIG11bHRpPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCB1ID0gaW1wbGljaXQodXBkYXRlKTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwc2VydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUsIHVwc2VydCwgbXVsdGkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUudXBkYXRlKHEubmF0aXZlLCB1Lm5hdGl2ZSwgdXBzZXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgbXVsdGlwbGUgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICAgKiAoRXF1aXZhbGVudCB0byBjYWxsaW5nIGB1cGRhdGVgIHdpdGggYG11bHRpPXRydWVgIGFuZCBgdXBzZXJ0PXRydWVgIGltcGxpY2l0bHkpLlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVNdWx0aShxdWVyeTogREJJbnB1dCwgdXBkYXRlOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHUgPSBpbXBsaWNpdCh1cGRhdGUpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS51cGRhdGUocS5uYXRpdmUsIHUubmF0aXZlLCB0cnVlLCB0cnVlKTsgLy8gQXNzdW1pbmcgdXBkYXRlTXVsdGkgbWVhbnMgdXBzZXJ0PXRydWUgYW5kIG11bHRpPXRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBuZXh0IHNlcXVlbnRpYWwgSUQgYmFzZWQgb24gdGhlIGxhcmdlc3QgZXhpc3RpbmcgYF9pZGAgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQXNzdW1lcyBgX2lkYCBpcyBhIG51bWVyaWMgZmllbGQuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgYXZhaWxhYmxlIHNlcXVlbnRpYWwgSUQgKHN0YXJ0aW5nIGF0IDEgaWYgY29sbGVjdGlvbiBpcyBlbXB0eSkuXG4gICAgICovXG4gICAgcHVibGljIGdldE5leHRJZCgpOiBudW1iZXIge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5maW5kKHt9LCB7IFwiX2lkXCI6IDEgfSkuc29ydCh7IFwiX2lkXCI6IC0xIH0pLmxpbWl0KDEpO1xuICAgICAgICBpZiAoIWN1cnNvci5oYXNOZXh0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnNvci5uZXh0KClbXCJfaWRcIl0gKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHJhbmRvbSBVVUlEIChVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcikuXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVVUlELlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFVVSUQucmFuZG9tKCk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogREJDdXJzb3Igb2JqZWN0IHdyYXBwZXIgZm9yIGl0ZXJhdGluZyBvdmVyIHJlc3VsdHMgb2YgYSBNb25nb0RCIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgREJDdXJzb3Ige1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJDdXJzb3IgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNpbmdsZSByZXN1bHQgZnJvbSB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIEEgREJPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25lKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUub25lKCkpO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGJhdGNoIHNpemUgZm9yIHRoZSBjdXJzb3IuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIGJhdGNoIHNpemUuXG4gICAgICovXG4gICAgcHVibGljIGdldEJhdGNoU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmF0Y2hTaXplKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29sbGVjdGlvbigpOiBEQkNvbGxlY3Rpb24ge1xuICAgICAgICByZXR1cm4gbmV3IERCQ29sbGVjdGlvbih0aGlzLm5hdGl2ZS5nZXRDb2xsZWN0aW9uKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnNvciBJRC5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3Vyc29yIElEIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q3Vyc29ySWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldEN1cnNvcklkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvamVjdGlvbiBvYmplY3QgKGZpZWxkcyB3YW50ZWQpIHVzZWQgaW4gdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcm9qZWN0aW9uIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRLZXlzV2FudGVkKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUuZ2V0S2V5c1dhbnRlZCgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaW1pdCBzZXQgb24gdGhlIGN1cnNvci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbGltaXQgbnVtYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TGltaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGN1cnNvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgbmV4dCBkb2N1bWVudCBpbiB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlcmUgaXMgYSBuZXh0IGRvY3VtZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGhhc05leHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5oYXNOZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBuZXh0IGRvY3VtZW50IGluIHRoZSBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgZG9jdW1lbnQgYXMgYSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dCgpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KHRoaXMubmF0aXZlLm5leHQoKSk7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcXVlcnkgb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoaXMgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRoZSBxdWVyeSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogREJPYmplY3Qge1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IG5ldyBEQk9iamVjdCh0aGlzLm5hdGl2ZS5nZXRRdWVyeSgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIG1hdGNoZWQgYnkgdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBudW1iZXIgb2YgZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmxlbmd0aCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHF1ZXJ5IHJldHVybnMgdGhlIHJlc3VsdHMuXG4gICAgICogQHBhcmFtIG9yZGVyQnkgVGhlIHNvcnRpbmcgc3BlY2lmaWNhdGlvbiAoZS5nLiwge2ZpZWxkOiAxfSBmb3IgYXNjZW5kaW5nKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzb3J0KG9yZGVyQnk6IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IGRibyA9IGltcGxpY2l0KG9yZGVyQnkpO1xuICAgICAgICBpZiAoIWRibykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIG9yZGVyQnkgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXRpdmUuc29ydChkYm8ubmF0aXZlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGltaXRzIHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byBiZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGRvY3VtZW50cyB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGltaXQobGltaXQ6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubGltaXQobGltaXQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV4Y2x1c2l2ZSB1cHBlciBib3VuZCBmb3IgYSBzcGVjaWZpYyBpbmRleC5cbiAgICAgKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBEQkN1cnNvciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAgICovXG4gICAgcHVibGljIG1pbihtaW46IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWluKG1pbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZXhjbHVzaXZlIHVwcGVyIGJvdW5kIGZvciBhIHNwZWNpZmljIGluZGV4LlxuICAgICAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4KG1heDogbnVtYmVyKTogREJDdXJzb3Ige1xuICAgICAgICB0aGlzLm5hdGl2ZS5tYXgobWF4KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoZSBzZXJ2ZXIgdG8gZXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIG1heFRpbWUgVGhlIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4VGltZShtYXhUaW1lOiBudW1iZXIpOiBEQkN1cnNvciB7XG4gICAgICAgIHRoaXMubmF0aXZlLm1heFRpbWUobWF4VGltZSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IHNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnNpemUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMgdG8gc2tpcC5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBza2lwKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuc2tpcChudW1iZXJPZkVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsa0JBQXFCO0FBRnJCLE1BQU0sZ0JBQWdCLEtBQUssS0FBSyw0REFBNEQ7QUFDNUYsTUFBTSxXQUFXLEtBQUssS0FBSywrQkFBK0I7QUFhbkQsTUFBTSxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVlsQixZQUFZLFFBQWE7QUFDckIsU0FBSyxTQUFTO0FBQUEsRUFDbEI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFPLE9BQU8sS0FBYSxPQUFzQjtBQUM3QyxTQUFLLE9BQU8sT0FBTyxLQUFLLEtBQUs7QUFDN0IsV0FBTztBQUFBLEVBQ1g7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sU0FBaUM7QUFDcEMsV0FBTyxLQUFLLE9BQU8sT0FBTztBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLTyxzQkFBNEI7QUFDL0IsU0FBSyxPQUFPLG9CQUFvQjtBQUFBLEVBQ3BDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1PLGtCQUEyQjtBQUM5QixXQUFPLEtBQUssT0FBTyxnQkFBZ0I7QUFBQSxFQUN2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLGNBQWMsS0FBc0I7QUFDdkMsV0FBTyxLQUFLLE9BQU8sY0FBYyxHQUFHO0FBQUEsRUFDeEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTyxJQUFJLEtBQWtCO0FBQ3pCLFdBQU8sS0FBSyxPQUFPLElBQUksR0FBRztBQUFBLEVBQzlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEs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
|
|
652
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvY2xpZW50LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBNb25nb0RCRmFjYWRlID0gSmF2YS50eXBlKFwib3JnLmVjbGlwc2UuZGlyaWdpYmxlLmNvbXBvbmVudHMuYXBpLm1vbmdvZGIuTW9uZ29EQkZhY2FkZVwiKTtcbmNvbnN0IFRpbWVVbml0ID0gSmF2YS50eXBlKFwiamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXRcIik7XG5pbXBvcnQgeyBVVUlEIH0gZnJvbSBcIkBhZXJva2l0L3Nkay91dGlscy91dWlkXCI7XG5cbi8qKlxuICogRGVmaW5lIGEgY29tbW9uIHR5cGUgZm9yIGlucHV0IHRvIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBlaXRoZXIgYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdFxuICogKHdoaWNoIHdpbGwgYmUgaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gREJPYmplY3QpIG9yIGFuIGV4aXN0aW5nIERCT2JqZWN0IHdyYXBwZXIgaW5zdGFuY2UuXG4gKi9cbnR5cGUgREJJbnB1dCA9IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBEQk9iamVjdCB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbi8qKlxuICogREJPYmplY3Qgb2JqZWN0IHJlcHJlc2VudHMgYSBCU09OIGRvY3VtZW50IHVzZWQgZm9yIHF1ZXJpZXMsIGluc2VydGlvbnMsIGFuZCB1cGRhdGVzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0LlxuICovXG5leHBvcnQgY2xhc3MgREJPYmplY3Qge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIEphdmEgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgQlNPTiBkb2N1bWVudC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJPYmplY3QgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgb2JqZWN0IChlLmcuLCBjb20ubW9uZ29kYi5EQk9iamVjdClcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBcHBlbmRzIGEga2V5LXZhbHVlIHBhaXIgdG8gdGhlIERCT2JqZWN0LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byBhcHBlbmQuXG4gICAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgREJPYmplY3QgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBhcHBlbmQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBEQk9iamVjdCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmFwcGVuZChrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgdGhlIERCT2JqZWN0IHRvIGEgc3RhbmRhcmQgSmF2YVNjcmlwdCBvYmplY3QgcmVwcmVzZW50YXRpb24gKEpTT04pLlxuICAgICAqIEByZXR1cm5zIEEgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIHRvSnNvbigpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnRvSnNvbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hcmtzIHRoZSBvYmplY3QgYXMgYSBwYXJ0aWFsIG9iamVjdCAodXNlZCBpbnRlcm5hbGx5IGJ5IE1vbmdvREIgZHJpdmVyKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWFya0FzUGFydGlhbE9iamVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWFya0FzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgb2JqZWN0IGlzIGEgcGFydGlhbCBvYmplY3QuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiBwYXJ0aWFsLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGlzUGFydGlhbE9iamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmlzUGFydGlhbE9iamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgREJPYmplY3QgY29udGFpbnMgYSBmaWVsZCB3aXRoIHRoZSBzcGVjaWZpZWQga2V5LlxuICAgICAqIEBwYXJhbSBrZXkgVGhlIGZpZWxkIG5hbWUuXG4gICAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZmllbGQgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGNvbnRhaW5zRmllbGQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmNvbnRhaW5zRmllbGQoa2V5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEByZXR1cm5zIFRoZSBmaWVsZCB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldChrZXkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFB1dHMgYSBrZXktdmFsdWUgcGFpciBpbnRvIHRoZSBEQk9iamVjdC5cbiAgICAgKiBAcGFyYW0ga2V5IFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHV0LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleSwgb3IgbnVsbC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHV0KGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnB1dChrZXksIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgZmllbGQgZnJvbSB0aGUgREJPYmplY3QuXG4gICAgICogQHBhcmFtIGtleSBUaGUgZmllbGQgbmFtZSB0byByZW1vdmUuXG4gICAgICogQHJldHVybnMgVGhlIHJlbW92ZWQgZmllbGQgdmFsdWUuXG4gICAgICovXG4gICAgcHVibGljIHJlbW92ZUZpZWxkKGtleTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnJlbW92ZUZpZWxkKGtleSk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBwcm9wZXJ0aWVzIGZyb20gdGhlIG5hdGl2ZSBNb25nb0RCIG9iamVjdCdzIEpTT04gcmVwcmVzZW50YXRpb25cbiAqIG9udG8gdGhlIHB1YmxpYyBwcm9wZXJ0aWVzIG9mIHRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogVGhpcyBhbGxvd3MgZGlyZWN0IGFjY2VzcyBsaWtlIGBkYk9iamVjdC5maWVsZE5hbWVgLlxuICogQHBhcmFtIGRiT2JqZWN0IFRoZSBEQk9iamVjdCB3cmFwcGVyIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGV4dHJhY3RlZCBwcm9wZXJ0aWVzIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdChkYk9iamVjdDogREJPYmplY3QpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICBpZiAoIWRiT2JqZWN0Lm5hdGl2ZSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIC8vIFBhcnNlIHRoZSBuYXRpdmUgb2JqZWN0J3MgSlNPTiByZXByZXNlbnRhdGlvblxuICAgIHZhciBleHRyYWN0ZWQgPSBKU09OLnBhcnNlKGRiT2JqZWN0Lm5hdGl2ZS50b0pzb24oKSk7XG4gICAgLy8gQ29weSBhbGwgcHJvcGVydGllcyB0byB0aGUgd3JhcHBlciBpbnN0YW5jZVxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBleHRyYWN0ZWQpIHtcbiAgICAgICAgZGJPYmplY3RbcHJvcGVydHlOYW1lXSA9IGV4dHJhY3RlZFtwcm9wZXJ0eU5hbWVdO1xuICAgIH1cbiAgICByZXR1cm4gZXh0cmFjdGVkO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBpbXBsaWNpdGx5IGNvbnZlcnQgYSBwbGFpbiBKUyBvYmplY3QgdG8gYSBEQk9iamVjdCxcbiAqIG9yIHJldHVybiB0aGUgZXhpc3RpbmcgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcGFyYW0gb2JqZWN0IElucHV0IG9iamVjdCB3aGljaCBjYW4gYmUgYSBwbGFpbiBvYmplY3QsIERCT2JqZWN0LCBvciB1bmRlZmluZWQvbnVsbC5cbiAqIEByZXR1cm5zIERCT2JqZWN0IG9yIHVuZGVmaW5lZC5cbiAqL1xuZnVuY3Rpb24gaW1wbGljaXQob2JqZWN0OiBEQklucHV0KTogREJPYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIEV4cGxpY2l0bHkgcmV0dXJuIHVuZGVmaW5lZCBpZiBpbnB1dCBpcyBmYWxzeVxuICAgIH1cbiAgICAvLyBDaGVjayBpZiBpdCBhbHJlYWR5IGhhcyB0aGUgbmF0aXZlIHByb3BlcnR5IChhc3N1bWVzIGl0J3MgYSBEQk9iamVjdCBvciBzaW1pbGFyIHdyYXBwZXIpXG4gICAgaWYgKChvYmplY3QgYXMgYW55KS5uYXRpdmUpIHtcbiAgICAgICAgcmV0dXJuIG9iamVjdCBhcyBEQk9iamVjdDtcbiAgICB9XG5cbiAgICAvLyBDb252ZXJ0IHBsYWluIG9iamVjdCB0byBEQk9iamVjdFxuICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcblxuICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBvYmplY3QpIHtcbiAgICAgICAgZGJPYmplY3QuYXBwZW5kKHByb3BlcnR5TmFtZSwgb2JqZWN0W3Byb3BlcnR5TmFtZV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgREJPYmplY3QgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIG5ldyBEQk9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJhc2ljREJPYmplY3QoKTogREJPYmplY3Qge1xuICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KE1vbmdvREJGYWNhZGUuY3JlYXRlQmFzaWNEQk9iamVjdCgpKTtcbiAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICByZXR1cm4gZGJPYmplY3Q7XG59XG5cbi8qKlxuICogQ2xpZW50IG9iamVjdCB3cmFwcGVyIGZvciBjb25uZWN0aW5nIHRvIE1vbmdvREIuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnQge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgY2xpZW50IG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IE1vbmdvREIgQ2xpZW50IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSB1cmkgVGhlIE1vbmdvREIgY29ubmVjdGlvbiBVUkkuXG4gICAgICogQHBhcmFtIHVzZXIgVGhlIHVzZXJuYW1lIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgVGhlIHBhc3N3b3JkIGZvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdXNlcjogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gTW9uZ29EQkZhY2FkZS5nZXRDbGllbnQodXJpLCB1c2VyLCBwYXNzd29yZClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBkYXRhYmFzZSBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBuYW1lIG9mIHRoZSBkYXRhYmFzZS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgZGVmYXVsdCBkYXRhYmFzZSBuYW1lIGlzIHVzZWQuXG4gICAgICogQHJldHVybnMgQSBEQiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0REIobmFtZT86IHN0cmluZyk6IERCIHtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5nZXREQihuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHREQiA9IE1vbmdvREJGYWNhZGUuZ2V0RGVmYXVsdERhdGFiYXNlTmFtZSgpO1xuICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZ2V0REIoZGVmYXVsdERCKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREIobmF0aXZlKTtcbiAgICB9XG59XG5cbi8qKlxuICogREIgb2JqZWN0IHdyYXBwZXIgZm9yIGEgTW9uZ29EQiBkYXRhYmFzZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERCIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBuYXRpdmUgVGhlIG5hdGl2ZSBNb25nb0RCIERCIG9iamVjdC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuICAgICAgICB0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBjb2xsZWN0aW9uIGluc3RhbmNlIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEByZXR1cm5zIEEgREJDb2xsZWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDb2xsZWN0aW9uKG5hbWU6IHN0cmluZyk6IERCQ29sbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZSA9IHRoaXMubmF0aXZlLmdldENvbGxlY3Rpb24obmFtZSk7XG4gICAgICAgIHJldHVybiBuZXcgREJDb2xsZWN0aW9uKG5hdGl2ZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIERCQ29sbGVjdGlvbiBvYmplY3Qgd3JhcHBlciBmb3IgYSBNb25nb0RCIGNvbGxlY3Rpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBEQkNvbGxlY3Rpb24ge1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDb2xsZWN0aW9uIG9iamVjdC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gbmF0aXZlIFRoZSBuYXRpdmUgTW9uZ29EQiBEQkNvbGxlY3Rpb24gb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgYSBkb2N1bWVudCBpbnRvIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBkYk9iamVjdCBUaGUgZG9jdW1lbnQgdG8gaW5zZXJ0IChjYW4gYmUgYSBwbGFpbiBKUyBvYmplY3Qgb3IgREJPYmplY3QpLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnNlcnQoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5pbnNlcnQoZGJvLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBkb2N1bWVudHMgbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgcXVlcnkgc3BlY2lmaWNhdGlvbiAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcGFyYW0gcHJvamVjdGlvbiBUaGUgZmllbGRzIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSAoY2FuIGJlIGEgcGxhaW4gSlMgb2JqZWN0IG9yIERCT2JqZWN0KS5cbiAgICAgKiBAcmV0dXJucyBBIERCQ3Vyc29yIGZvciBpdGVyYXRpbmcgb3ZlciByZXN1bHRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kKHF1ZXJ5PzogREJJbnB1dCwgcHJvamVjdGlvbj86IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcblxuICAgICAgICB2YXIgbmF0aXZlID0gbnVsbDtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZChxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kKHEubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgREJDdXJzb3IobmF0aXZlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kcyBhIHNpbmdsZSBkb2N1bWVudCBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEBwYXJhbSBzb3J0IFRoZSBzb3J0aW5nIHNwZWNpZmljYXRpb24uXG4gICAgICogQHJldHVybnMgVGhlIGZvdW5kIGRvY3VtZW50IGFzIGEgREJPYmplY3QuXG4gICAgICovXG4gICAgcHVibGljIGZpbmRPbmUocXVlcnk6IERCSW5wdXQsIHByb2plY3Rpb246IERCSW5wdXQsIHNvcnQ6IERCSW5wdXQpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHAgPSBpbXBsaWNpdChwcm9qZWN0aW9uKTtcbiAgICAgICAgY29uc3QgcyA9IGltcGxpY2l0KHNvcnQpO1xuXG4gICAgICAgIHZhciBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgdmFyIG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hdGl2ZSA9IHRoaXMubmF0aXZlLmZpbmRPbmUocS5uYXRpdmUsIHAubmF0aXZlLCBzLm5hdGl2ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSwgcC5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmF0aXZlID0gdGhpcy5uYXRpdmUuZmluZE9uZShxLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgZGJPYmplY3QubmF0aXZlID0gbmF0aXZlO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIGEgc2luZ2xlIGRvY3VtZW50IGJ5IGl0cyBzdHJpbmcgSUQuXG4gICAgICogQHBhcmFtIGlkIFRoZSBzdHJpbmcgSUQgb2YgdGhlIGRvY3VtZW50LlxuICAgICAqIEBwYXJhbSBwcm9qZWN0aW9uIFRoZSBmaWVsZHMgdG8gaW5jbHVkZSBvciBleGNsdWRlLlxuICAgICAqIEByZXR1cm5zIFRoZSBmb3VuZCBkb2N1bWVudCBhcyBhIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBmaW5kT25lQnlJZChpZDogc3RyaW5nLCBwcm9qZWN0aW9uPzogREJJbnB1dCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgcCA9IGltcGxpY2l0KHByb2plY3Rpb24pO1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IGNyZWF0ZUJhc2ljREJPYmplY3QoKTtcbiAgICAgICAgbGV0IG5hdGl2ZSA9IG51bGw7XG4gICAgICAgIGlmIChwKSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkLCBwLm5hdGl2ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuYXRpdmUgPSB0aGlzLm5hdGl2ZS5maW5kT25lKGlkKTtcbiAgICAgICAgfVxuICAgICAgICBkYk9iamVjdC5uYXRpdmUgPSBuYXRpdmU7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ291bnRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGEgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IE9wdGlvbmFsIHF1ZXJ5IHRvIGZpbHRlciB0aGUgY291bnQuXG4gICAgICogQHJldHVybnMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICovXG4gICAgcHVibGljIGNvdW50KHF1ZXJ5PzogREJJbnB1dCk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGlmIChxKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuY291bnQocS5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5jb3VudCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGNvdW50IG9mIGRvY3VtZW50cyAoYWxpYXMgZm9yIGNvdW50KS5cbiAgICAgKiBAcGFyYW0gcXVlcnkgT3B0aW9uYWwgcXVlcnkgdG8gZmlsdGVyIHRoZSBjb3VudC5cbiAgICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRvY3VtZW50cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q291bnQocXVlcnk6IERCSW5wdXQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldENvdW50KHEubmF0aXZlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Q291bnQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGluZGV4IG9uIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBrZXlzIFRoZSBpbmRleCBrZXkgc3BlY2lmaWNhdGlvbi5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBpbmRleCBvcHRpb25zLlxuICAgICAqL1xuICAgIHB1YmxpYyBjcmVhdGVJbmRleChrZXlzOiBEQklucHV0LCBvcHRpb25zOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGsgPSBpbXBsaWNpdChrZXlzKTtcbiAgICAgICAgY29uc3QgbyA9IGltcGxpY2l0KG9wdGlvbnMpO1xuICAgICAgICBpZiAoaykge1xuICAgICAgICAgICAgaWYgKG8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSwgby5uYXRpdmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS5jcmVhdGVJbmRleChrLm5hdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCBLZXlzIHBhcmFtZXRlciBtdXN0IGJlIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBpbmRleCBvbiBhIHNpbmdsZSBmaWVsZCBieSBuYW1lLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWVsZCB0byBpbmRleC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3JlYXRlSW5kZXhGb3JGaWVsZChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLmNyZWF0ZUluZGV4KG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGZpbGVkIG5hbWUgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyB0aGUgZGlzdGluY3QgdmFsdWVzIGZvciBhIHNwZWNpZmllZCBmaWVsZCBhY3Jvc3MgYSBjb2xsZWN0aW9uLlxuICAgICAqIE5PVEU6IFRoZSBzaWduYXR1cmUgaW4gdGhlIG9yaWdpbmFsIGNvZGUgc2VlbXMgc2xpZ2h0bHkgb2ZmIGNvbXBhcmVkIHRvIHR5cGljYWwgTW9uZ29EQiBkcml2ZXJzLlxuICAgICAqIFRoaXMgaW1wbGVtZW50YXRpb24gZm9sbG93cyB0aGUgb3JpZ2luYWwgc3RydWN0dXJlIHVzaW5nIGBrZXlzLm5hdGl2ZWAgaWYgYGtleXNgIGlzIHByb3ZpZGVkLlxuICAgICAqIEBwYXJhbSBuYW1lIFRoZSBmaWVsZCBuYW1lLlxuICAgICAqIEBwYXJhbSBxdWVyeSBPcHRpb25hbCBxdWVyeSB0byBmaWx0ZXIgcmVzdWx0cy5cbiAgICAgKiBAcGFyYW0ga2V5cyBPcHRpb25hbCBrZXlzIHRvIHVzZSBmb3IgZGlzdGluY3QgKHJlcGxhY2VzICduYW1lJyBpZiBwcm92aWRlZCBhbmQgcXVlcnkgZXhpc3RzKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZGlzdGluY3QobmFtZTogc3RyaW5nLCBxdWVyeTogREJJbnB1dCwga2V5czogREJJbnB1dCk6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCBrID0gaW1wbGljaXQoa2V5cyk7XG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHF1ZXJ5IGlzIHByb3ZpZGVkLCB1c2Uga2V5cyBmb3IgdGhlIGZpZWxkIG5hbWUgaWYgayBpcyBwcmVzZW50LCBvdGhlcndpc2UgdXNlICduYW1lJ1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRpc3RpbmN0KGsgPyBrLm5hdGl2ZSA6IG5hbWUsIHEubmF0aXZlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUuZGlzdGluY3QobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBdCBsZWFzdCB0aGUgZmlsZWQgbmFtZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4LlxuICAgICAqIEBwYXJhbSBpbmRleCBUaGUgbmFtZSBvZiB0aGUgaW5kZXggb3IgdGhlIERCT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgaW5kZXgga2V5cy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4KGluZGV4OiBzdHJpbmcgfCBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5kZXggPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5kcm9wSW5kZXgoaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGRibykge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChkYm8ubmF0aXZlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERyb3BzIGEgc3BlY2lmaWVkIGluZGV4IGJ5IG5hbWUuXG4gICAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGluZGV4LlxuICAgICAqL1xuICAgIHB1YmxpYyBkcm9wSW5kZXhCeU5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleChuYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEcm9wcyBhbGwgaW5kZXhlcyBvbiB0aGUgY29sbGVjdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZHJvcEluZGV4ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmRyb3BJbmRleGVzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBkb2N1bWVudHMgZnJvbSB0aGUgY29sbGVjdGlvbiBtYXRjaGluZyB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIHF1ZXJ5IFRoZSBkZWxldGlvbiBxdWVyeSBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyByZW1vdmUocXVlcnk6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcSA9IGltcGxpY2l0KHF1ZXJ5KTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlLnJlbW92ZShxLm5hdGl2ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW5hbWVzIHRoZSBjb2xsZWN0aW9uLlxuICAgICAqIEBwYXJhbSBuZXdOYW1lIFRoZSBuZXcgbmFtZSBmb3IgdGhlIGNvbGxlY3Rpb24uXG4gICAgICovXG4gICAgcHVibGljIHJlbmFtZShuZXdOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5uYXRpdmUucmVuYW1lKG5ld05hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIGEgZG9jdW1lbnQgdG8gdGhlIGNvbGxlY3Rpb24uIElmIHRoZSBkb2N1bWVudCBoYXMgYW4gYF9pZGAsIGl0IHBlcmZvcm1zIGFuIHVwZGF0ZTtcbiAgICAgKiBvdGhlcndpc2UsIGl0IHBlcmZvcm1zIGFuIGluc2VydC5cbiAgICAgKiBAcGFyYW0gZGJPYmplY3QgVGhlIGRvY3VtZW50IHRvIHNhdmUuXG4gICAgICovXG4gICAgcHVibGljIHNhdmUoZGJPYmplY3Q6IERCSW5wdXQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGJvID0gaW1wbGljaXQoZGJPYmplY3QpO1xuICAgICAgICBpZiAoZGJvKSB7XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZS5zYXZlKGRiby5uYXRpdmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBkb2N1bWVudHMgaW4gdGhlIGNvbGxlY3Rpb24gbWF0Y2hpbmcgdGhlIHF1ZXJ5LlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uIChlLmcuLCB7JHNldDogey4uLn19KS5cbiAgICAgKiBAcGFyYW0gdXBzZXJ0IElmIHRydWUsIGNyZWF0ZXMgYSBuZXcgZG9jdW1lbnQgaWYgbm8gZG9jdW1lbnRzIG1hdGNoIHRoZSBxdWVyeS5cbiAgICAgKiBAcGFyYW0gbXVsdGkgSWYgdHJ1ZSwgdXBkYXRlcyBhbGwgZG9jdW1lbnRzIG1hdGNoaW5nIHRoZSBxdWVyeTsgb3RoZXJ3aXNlLCBvbmx5IG9uZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKHF1ZXJ5OiBEQklucHV0LCB1cGRhdGU6IERCSW5wdXQsIHVwc2VydD86IGJvb2xlYW4sIG11bHRpPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBxID0gaW1wbGljaXQocXVlcnkpO1xuICAgICAgICBjb25zdCB1ID0gaW1wbGljaXQodXBkYXRlKTtcbiAgICAgICAgaWYgKHEpIHtcbiAgICAgICAgICAgIGlmICh1KSB7XG4gICAgICAgICAgICAgICAgaWYgKHVwc2VydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUsIHVwc2VydCwgbXVsdGkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmUudXBkYXRlKHEubmF0aXZlLCB1Lm5hdGl2ZSwgdXBzZXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlLnVwZGF0ZShxLm5hdGl2ZSwgdS5uYXRpdmUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgbXVsdGlwbGUgZG9jdW1lbnRzIGluIHRoZSBjb2xsZWN0aW9uIG1hdGNoaW5nIHRoZSBxdWVyeS5cbiAgICAgKiAoRXF1aXZhbGVudCB0byBjYWxsaW5nIGB1cGRhdGVgIHdpdGggYG11bHRpPXRydWVgIGFuZCBgdXBzZXJ0PXRydWVgIGltcGxpY2l0bHkpLlxuICAgICAqIEBwYXJhbSBxdWVyeSBUaGUgdXBkYXRlIHF1ZXJ5IHNwZWNpZmljYXRpb24uXG4gICAgICogQHBhcmFtIHVwZGF0ZSBUaGUgdXBkYXRlIG9wZXJhdGlvbiBzcGVjaWZpY2F0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyB1cGRhdGVNdWx0aShxdWVyeTogREJJbnB1dCwgdXBkYXRlOiBEQklucHV0KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHEgPSBpbXBsaWNpdChxdWVyeSk7XG4gICAgICAgIGNvbnN0IHUgPSBpbXBsaWNpdCh1cGRhdGUpO1xuICAgICAgICBpZiAocSkge1xuICAgICAgICAgICAgaWYgKHUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZS51cGRhdGUocS5uYXRpdmUsIHUubmF0aXZlLCB0cnVlLCB0cnVlKTsgLy8gQXNzdW1pbmcgdXBkYXRlTXVsdGkgbWVhbnMgdXBzZXJ0PXRydWUgYW5kIG11bHRpPXRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHVwZGF0ZSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBxdWVyeSBwYXJhbWV0ZXIgbXVzdCBiZSBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBuZXh0IHNlcXVlbnRpYWwgSUQgYmFzZWQgb24gdGhlIGxhcmdlc3QgZXhpc3RpbmcgYF9pZGAgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAgICogQXNzdW1lcyBgX2lkYCBpcyBhIG51bWVyaWMgZmllbGQuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgYXZhaWxhYmxlIHNlcXVlbnRpYWwgSUQgKHN0YXJ0aW5nIGF0IDEgaWYgY29sbGVjdGlvbiBpcyBlbXB0eSkuXG4gICAgICovXG4gICAgcHVibGljIGdldE5leHRJZCgpOiBudW1iZXIge1xuICAgICAgICB2YXIgY3Vyc29yID0gdGhpcy5maW5kKHt9LCB7IFwiX2lkXCI6IDEgfSkuc29ydCh7IFwiX2lkXCI6IC0xIH0pLmxpbWl0KDEpO1xuICAgICAgICBpZiAoIWN1cnNvci5oYXNOZXh0KCkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnNvci5uZXh0KClbXCJfaWRcIl0gKyAxO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHJhbmRvbSBVVUlEIChVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllcikuXG4gICAgICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBVVUlELlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFVVSUQucmFuZG9tKCk7XG4gICAgfVxuXG59XG5cbi8qKlxuICogREJDdXJzb3Igb2JqZWN0IHdyYXBwZXIgZm9yIGl0ZXJhdGluZyBvdmVyIHJlc3VsdHMgb2YgYSBNb25nb0RCIHF1ZXJ5LlxuICovXG5leHBvcnQgY2xhc3MgREJDdXJzb3Ige1xuXG4gICAgLyoqXG4gICAgICogVGhlIHVuZGVybHlpbmcgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcgREJDdXJzb3IgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIG5hdGl2ZSBUaGUgbmF0aXZlIE1vbmdvREIgREJDdXJzb3Igb2JqZWN0LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG4gICAgICAgIHRoaXMubmF0aXZlID0gbmF0aXZlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNpbmdsZSByZXN1bHQgZnJvbSB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIEEgREJPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkb2N1bWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25lKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUub25lKCkpO1xuICAgICAgICBleHRyYWN0KGRiT2JqZWN0KTtcbiAgICAgICAgcmV0dXJuIGRiT2JqZWN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGJhdGNoIHNpemUgZm9yIHRoZSBjdXJzb3IuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuYmF0Y2hTaXplKG51bWJlck9mRWxlbWVudHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGJhdGNoIHNpemUuXG4gICAgICogQHJldHVybnMgVGhlIGJhdGNoIHNpemUuXG4gICAgICovXG4gICAgcHVibGljIGdldEJhdGNoU2l6ZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmF0Y2hTaXplKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY29sbGVjdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhpcyBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIERCQ29sbGVjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q29sbGVjdGlvbigpOiBEQkNvbGxlY3Rpb24ge1xuICAgICAgICByZXR1cm4gbmV3IERCQ29sbGVjdGlvbih0aGlzLm5hdGl2ZS5nZXRDb2xsZWN0aW9uKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnNvciBJRC5cbiAgICAgKiBAcmV0dXJucyBUaGUgY3Vyc29yIElEIHN0cmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0Q3Vyc29ySWQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmdldEN1cnNvcklkKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcHJvamVjdGlvbiBvYmplY3QgKGZpZWxkcyB3YW50ZWQpIHVzZWQgaW4gdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSBwcm9qZWN0aW9uIERCT2JqZWN0LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRLZXlzV2FudGVkKCk6IERCT2JqZWN0IHtcbiAgICAgICAgY29uc3QgZGJPYmplY3QgPSBuZXcgREJPYmplY3QodGhpcy5uYXRpdmUuZ2V0S2V5c1dhbnRlZCgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaW1pdCBzZXQgb24gdGhlIGN1cnNvci5cbiAgICAgKiBAcmV0dXJucyBUaGUgbGltaXQgbnVtYmVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRMaW1pdCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TGltaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGN1cnNvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmF0aXZlLmNsb3NlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoZXJlIGlzIGEgbmV4dCBkb2N1bWVudCBpbiB0aGUgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgdGhlcmUgaXMgYSBuZXh0IGRvY3VtZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgcHVibGljIGhhc05leHQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZS5oYXNOZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmVzIHRoZSBuZXh0IGRvY3VtZW50IGluIHRoZSBjdXJzb3IuXG4gICAgICogQHJldHVybnMgVGhlIG5leHQgZG9jdW1lbnQgYXMgYSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dCgpOiBEQk9iamVjdCB7XG4gICAgICAgIGNvbnN0IGRiT2JqZWN0ID0gbmV3IERCT2JqZWN0KHRoaXMubmF0aXZlLm5leHQoKSk7XG4gICAgICAgIGV4dHJhY3QoZGJPYmplY3QpO1xuICAgICAgICByZXR1cm4gZGJPYmplY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgcXVlcnkgb2JqZWN0IHVzZWQgdG8gY3JlYXRlIHRoaXMgY3Vyc29yLlxuICAgICAqIEByZXR1cm5zIFRoZSBxdWVyeSBEQk9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogREJPYmplY3Qge1xuICAgICAgICBjb25zdCBkYk9iamVjdCA9IG5ldyBEQk9iamVjdCh0aGlzLm5hdGl2ZS5nZXRRdWVyeSgpKTtcbiAgICAgICAgZXh0cmFjdChkYk9iamVjdCk7XG4gICAgICAgIHJldHVybiBkYk9iamVjdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBudW1iZXIgb2YgZG9jdW1lbnRzIG1hdGNoZWQgYnkgdGhlIHF1ZXJ5LlxuICAgICAqIEByZXR1cm5zIFRoZSB0b3RhbCBudW1iZXIgb2YgZG9jdW1lbnRzLlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLmxlbmd0aCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIHF1ZXJ5IHJldHVybnMgdGhlIHJlc3VsdHMuXG4gICAgICogQHBhcmFtIG9yZGVyQnkgVGhlIHNvcnRpbmcgc3BlY2lmaWNhdGlvbiAoZS5nLiwge2ZpZWxkOiAxfSBmb3IgYXNjZW5kaW5nKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBzb3J0KG9yZGVyQnk6IERCSW5wdXQpOiBEQkN1cnNvciB7XG4gICAgICAgIGNvbnN0IGRibyA9IGltcGxpY2l0KG9yZGVyQnkpO1xuICAgICAgICBpZiAoIWRibykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIG9yZGVyQnkgcGFyYW1ldGVyIG11c3QgYmUgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXRpdmUuc29ydChkYm8ubmF0aXZlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGltaXRzIHRoZSBudW1iZXIgb2YgcmVzdWx0cyB0byBiZSByZXR1cm5lZC5cbiAgICAgKiBAcGFyYW0gbGltaXQgVGhlIG1heGltdW0gbnVtYmVyIG9mIGRvY3VtZW50cyB0byByZXR1cm4uXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbGltaXQobGltaXQ6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubGltaXQobGltaXQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGV4Y2x1c2l2ZSB1cHBlciBib3VuZCBmb3IgYSBzcGVjaWZpYyBpbmRleC5cbiAgICAgKiBAcGFyYW0gbWluIFRoZSBtaW5pbXVtIHZhbHVlLlxuICAgICAqIEByZXR1cm5zIFRoZSBEQkN1cnNvciBpbnN0YW5jZSBmb3IgY2hhaW5pbmcuXG4gICAgICovXG4gICAgcHVibGljIG1pbihtaW46IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUubWluKG1pbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZXhjbHVzaXZlIHVwcGVyIGJvdW5kIGZvciBhIHNwZWNpZmljIGluZGV4LlxuICAgICAqIEBwYXJhbSBtYXggVGhlIG1heGltdW0gdmFsdWUuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4KG1heDogbnVtYmVyKTogREJDdXJzb3Ige1xuICAgICAgICB0aGlzLm5hdGl2ZS5tYXgobWF4KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoZSBzZXJ2ZXIgdG8gZXhlY3V0ZSB0aGUgcXVlcnkuXG4gICAgICogQHBhcmFtIG1heFRpbWUgVGhlIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gICAgICogQHJldHVybnMgVGhlIERCQ3Vyc29yIGluc3RhbmNlIGZvciBjaGFpbmluZy5cbiAgICAgKi9cbiAgICBwdWJsaWMgbWF4VGltZShtYXhUaW1lOiBudW1iZXIpOiBEQkN1cnNvciB7XG4gICAgICAgIHRoaXMubmF0aXZlLm1heFRpbWUobWF4VGltZSwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IHNldC5cbiAgICAgKiBAcmV0dXJucyBUaGUgc2l6ZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIHNpemUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF0aXZlLnNpemUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTa2lwcyB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBkb2N1bWVudHMuXG4gICAgICogQHBhcmFtIG51bWJlck9mRWxlbWVudHMgVGhlIG51bWJlciBvZiBkb2N1bWVudHMgdG8gc2tpcC5cbiAgICAgKiBAcmV0dXJucyBUaGUgREJDdXJzb3IgaW5zdGFuY2UgZm9yIGNoYWluaW5nLlxuICAgICAqL1xuICAgIHB1YmxpYyBza2lwKG51bWJlck9mRWxlbWVudHM6IG51bWJlcik6IERCQ3Vyc29yIHtcbiAgICAgICAgdGhpcy5uYXRpdmUuc2tpcChudW1iZXJPZkVsZW1lbnRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUEsa0JBQXFCO0FBRnJCLE1BQU0sZ0JBQWdCLEtBQUssS0FBSyw0REFBNEQ7QUFDNUYsTUFBTSxXQUFXLEtBQUssS0FBSywrQkFBK0I7QUFhbkQsTUFBTSxTQUFTO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1YO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1QLFlBQVksUUFBYTtBQUNyQixTQUFLLFNBQVM7QUFBQSxFQUNsQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUU8sT0FBTyxLQUFhLE9BQXNCO0FBQzdDLFNBQUssT0FBTyxPQUFPLEtBQUssS0FBSztBQUM3QixXQUFPO0FBQUEsRUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFNTyxTQUFpQztBQUNwQyxXQUFPLEtBQUssT0FBTyxPQUFPO0FBQUEsRUFDOUI7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtPLHNCQUE0QjtBQUMvQixTQUFLLE9BQU8sb0JBQW9CO0FBQUEsRUFDcEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTU8sa0JBQTJCO0FBQzlCLFdBQU8sS0FBSyxPQUFPLGdCQUFnQjtBQUFBLEVBQ3ZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT08sY0FBYyxLQUFzQjtBQUN2QyxXQUFPLEtBQUssT0FBTyxjQUFjLEdBQUc7QUFBQSxFQUN4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9PLElBQUksS0FBa0I7QUFDekIsV0FBTyxLQUFLLE9BQU8sSUFBSSxHQUFHO0FBQUEsRUFDOUI7QUFBQTtB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
|
package/dist/cjs/mongodb/dao.js
CHANGED
|
@@ -42,6 +42,8 @@ const dbUri = import_core2.Configurations.get("DIRIGIBLE_MONGODB_CLIENT_URI", "m
|
|
|
42
42
|
const mongoClient = new import_client.Client(dbUri, null, null);
|
|
43
43
|
const db = mongoClient.getDB();
|
|
44
44
|
class DAO {
|
|
45
|
+
orm;
|
|
46
|
+
$log;
|
|
45
47
|
constructor(orm, logCtxName = "mongodb.dao") {
|
|
46
48
|
this.orm = dirigibleOrm.get(orm);
|
|
47
49
|
let loggerName = logCtxName;
|
|
@@ -387,4 +389,4 @@ function create(oDefinition, logCtxName, dataSourceName, databaseType) {
|
|
|
387
389
|
function dao(oDefinition, logCtxName, dataSourceName, databaseType) {
|
|
388
390
|
return create(oDefinition, logCtxName, dataSourceName, databaseType);
|
|
389
391
|
}
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvZGFvLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZ2xvYmFscyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvY29yZVwiXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiLi9jbGllbnRcIlxuaW1wb3J0ICogYXMgZGlyaWdpYmxlT3JtIGZyb20gXCJAYWVyb2tpdC9zZGsvZGIvb3JtXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9sb2dcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9jb3JlXCI7XG5cbmNvbnN0IGRiVXJpID0gQ29uZmlndXJhdGlvbnMuZ2V0KFwiRElSSUdJQkxFX01PTkdPREJfQ0xJRU5UX1VSSVwiLCBcIm1vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTdcIik7XG5cbmNvbnN0IG1vbmdvQ2xpZW50ID0gbmV3IENsaWVudChkYlVyaSwgbnVsbCwgbnVsbCk7XG5jb25zdCBkYiA9IG1vbmdvQ2xpZW50LmdldERCKCk7XG5cbmV4cG9ydCBjbGFzcyBEQU8ge1xuICAgIHByaXZhdGUgb3JtOiBhbnk7XG4gICAgJGxvZztcblxuICAgIGNvbnN0cnVjdG9yKG9ybTogYW55LCBsb2dDdHhOYW1lOiBzdHJpbmcgPSAnbW9uZ29kYi5kYW8nKSB7XG4gICAgICAgIHRoaXMub3JtID0gZGlyaWdpYmxlT3JtLmdldChvcm0pO1xuXG4gICAgICAgIGxldCBsb2dnZXJOYW1lID0gbG9nQ3R4TmFtZTtcbiAgICAgICAgaWYgKHRoaXMub3JtLnRhYmxlKSB7XG4gICAgICAgICAgICBsb2dnZXJOYW1lID0gJ21vbmdvZGIuZGFvLicgKyAodGhpcy5vcm0udGFibGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbG9nID0gTG9nZ2luZy5nZXRMb2dnZXIobG9nZ2VyTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeShldmVudCwgLi4uYSk6IHZvaWQge1xuICAgICAgICB2YXIgZnVuYyA9IHRoaXNbZXZlbnRdO1xuICAgICAgICBpZiAoIXRoaXNbZXZlbnRdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudC4gTm90IGEgZnVuY3Rpb246ICcgKyBmdW5jKTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncy5zbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLy9QcmVwYXJlIGEgSlNPTiBvYmplY3QgZm9yIGluc2VydCBpbnRvIERCXG4gICAgcHVibGljIGNyZWF0ZU5vU1FMRW50aXR5KGVudGl0eSk6IGFueSB7XG4gICAgICAgIHZhciBwZXJzaXN0ZW50SXRlbSA9IHt9O1xuICAgICAgICB2YXIgbWFuZGF0b3JpZXMgPSB0aGlzLm9ybS5nZXRNYW5kYXRvcnlQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFuZGF0b3JpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYW5kYXRvcmllc1tpXS5kYlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudEl0ZW1bbWFuZGF0b3JpZXNbaV0ubmFtZV0gPSBtYW5kYXRvcmllc1tpXS5kYlZhbHVlLmFwcGx5KHRoaXMsIFtlbnRpdHlbbWFuZGF0b3JpZXNbaV0ubmFtZV0sIGVudGl0eV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0ZW50SXRlbVttYW5kYXRvcmllc1tpXS5uYW1lXSA9IGVudGl0eVttYW5kYXRvcmllc1tpXS5uYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0aW9uYWxzID0gdGhpcy5vcm0uZ2V0T3B0aW9uYWxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uYWxzW2ldLmRiVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRJdGVtW29wdGlvbmFsc1tpXS5uYW1lXSA9IG9wdGlvbmFsc1tpXS5kYlZhbHVlLmFwcGx5KHRoaXMsIFtlbnRpdHlbb3B0aW9uYWxzW2ldLm5hbWVdLCBlbnRpdHldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudEl0ZW1bb3B0aW9uYWxzW2ldLm5hbWVdID0gZW50aXR5W29wdGlvbmFsc1tpXS5uYW1lXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGVudGl0eVtvcHRpb25hbHNbaV0ubmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1zZ0lkU2VnbWVudCA9IHBlcnNpc3RlbnRJdGVtW3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSA/IFwiW1wiICsgcGVyc2lzdGVudEl0ZW1bdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdICsgXCJdXCIgOiBcIlwiO1xuICAgICAgICB0aGlzLiRsb2cuaW5mbyhcIlRyYW5zZm9ybWF0aW9uIHRvIHt9IERCIEpTT04gb2JqZWN0IGZpbmlzaGVkXCIsICh0aGlzLm9ybS50YWJsZSArIG1zZ0lkU2VnbWVudCkpO1xuICAgICAgICByZXR1cm4gcGVyc2lzdGVudEl0ZW07XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyB2YWxpZGF0ZUVudGl0eShlbnRpdHksIHNraXApOiB2b2lkIHtcbiAgICAgICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkIHx8IGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50OiBlbnRpdHkgaXMgJyArIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgICAgIGlmIChza2lwLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgICAgICAgICAgIHNraXAgPSBbc2tpcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNraXAubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBza2lwW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBtYW5kYXRvcmllcyA9IHRoaXMub3JtLmdldE1hbmRhdG9yeVByb3BlcnRpZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYW5kYXRvcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gbWFuZGF0b3JpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgIGlmICgoc2tpcCAmJiBza2lwLmluZGV4T2YocHJvcE5hbWUpID4gLTEpIHx8IG1hbmRhdG9yaWVzW2ldLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0JPT0xFQU4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIHByb3BWYWx1ZSA9IGVudGl0eVtwcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAocHJvcFZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsICcgKyBwcm9wTmFtZSArICcgYXR0cmlidXRlIHZhbHVlIGluICcgKyB0aGlzLm9ybS50YWJsZSArICcgZW50aXR5OiAnICsgcHJvcFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgaW5zZXJ0KF9lbnRpdHkpIHtcbiAgICBcbiAgICAgICAgdmFyIGVudGl0aWVzID0gX2VudGl0eTtcbiAgICAgICAgaWYgKF9lbnRpdHkuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICBlbnRpdGllcyA9IFtfZW50aXR5XTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnSW5zZXJ0aW5nIHt9IHt9JywgdGhpcy5vcm0udGFibGUsIChlbnRpdGllcy5sZW5ndGggPT09IDEgPyAnZW50aXR5JyA6ICdlbnRpdGllcycpKTtcbiAgICBcbiAgICAgICAgdmFyIHVwZGF0ZWRSZWNvcmRDb3VudCA9IDA7XG4gICAgICAgIHZhciBpZHMgPSBbXTtcbiAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgIFxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IGVudGl0aWVzW2ldO1xuICAgIFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVudGl0eShlbnRpdHksIFt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pO1xuICAgIFxuICAgICAgICAgICAgdmFyIGRiRW50aXR5ID0gdGhpcy5jcmVhdGVOb1NRTEVudGl0eShlbnRpdHkpO1xuICAgIFxuICAgICAgICAgICAgdHJ5IHtcbiAgICBcbiAgICAgICAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGRiLmdldENvbGxlY3Rpb24odGhpcy5vcm0udGFibGUpO1xuICAgICAgICAgICAgICAgIHZhciBpZCA9IGNvbGxlY3Rpb24uZ2V0TmV4dElkKCk7XG4gICAgXG4gICAgICAgICAgICAgICAgZGJFbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdID0gaWQ7XG4gICAgICAgICAgICAgICAgZGJFbnRpdHlbXCJfaWRcIl0gPSBpZDtcbiAgICBcbiAgICBcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmluc2VydChkYkVudGl0eSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlZFJlY29yZENvdW50Kys7XG4gICAgXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2FmdGVySW5zZXJ0JywgZGJFbnRpdHkpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdiZWZvcmVJbnNlcnRBc3NvY2lhdGlvblNldHMnLCBkYkVudGl0eSk7XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRSZWNvcmRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2goZGJFbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmluZm8oJ3t9W10gZW50aXR5IGluc2VydGVkJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmluZm8oJ05vIGNoYW5nZXMgaW5jdXJyZWQgaW4ge30nLCB0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgIFxuICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcihcIkluc2VydGluZyB7fSB7fSBmYWlsZWRcIiwgdGhpcy5vcm0udGFibGUsIChlbnRpdGllcy5sZW5ndGggPT09IDEgPyAnZW50aXR5JyA6ICdlbnRpdGllcycpLCBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygnUm9sbGluZyBiYWNrIGNoYW5nZXMgYWZ0ZXIgZmFpbGVkIHt9W3t9XSBpbnNlcnQuICcsIHRoaXMub3JtLnRhYmxlLCBkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmIChkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKCdDb3VsZCBub3Qgcm9sbGJhY2sgY2hhbmdlcyBhZnRlciBmYWlsZWQge31be31dIGluc2VydC4gJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmIChfZW50aXR5LmNvbnN0cnVjdG9yICE9PSBBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBpZHNbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBpZHM7XG4gICAgfVxuICAgIFxuICAgIC8vIHVwZGF0ZSBlbnRpdHkgZnJvbSBhIEpTT04gb2JqZWN0LiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgdXBkYXRlZCBlbnRpdHkuXG4gICAgcHVibGljIHVwZGF0ZShlbnRpdHkpIHtcbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ1VwZGF0aW5nIHt9W3t9XSBlbnRpdHknLCB0aGlzLm9ybS50YWJsZSwgZW50aXR5ICE9PSB1bmRlZmluZWQgPyBlbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdIDogZW50aXR5KTtcbiAgICBcbiAgICAgICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkIHx8IGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50OiBlbnRpdHkgaXMgJyArIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdmFyIGlnbm9yZWRQcm9wZXJ0aWVzID0gdGhpcy5vcm0uZ2V0TWFuZGF0b3J5UHJvcGVydGllcygpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS5hbGxvd2VkT3BzICYmIHByb3BlcnR5LmFsbG93ZWRPcHMuaW5kZXhPZigndXBkYXRlJykgPCAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5Lm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUVudGl0eShlbnRpdHksIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgICBcbiAgICAgICAgdmFyIGRiRW50aXR5ID0gdGhpcy5jcmVhdGVOb1NRTEVudGl0eShlbnRpdHkpO1xuICAgICAgICBkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0gPSBlbnRpdHlbXCJfaWRcIl07XG4gICAgICAgIGRiRW50aXR5W1wiX2lkXCJdID0gZW50aXR5W1wiX2lkXCJdO1xuICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2JlZm9yZVVwZGF0ZUVudGl0eScsIGRiRW50aXR5KTtcbiAgICBcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZGIuZ2V0Q29sbGVjdGlvbih0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uLnVwZGF0ZSh7IFwiX2lkXCI6IGVudGl0eVtcIl9pZFwiXSB9LCBkYkVudGl0eSk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSB1cGRhdGVkJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKCdVcGRhdGluZyB7fVt7fV0gZmFpbGVkJywgdGhpcy5vcm0udGFibGUsIGVudGl0eSAhPT0gdW5kZWZpbmVkID8gZW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSA6IGVudGl0eSwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBcbiAgICAvLyBkZWxldGUgZW50aXR5IGJ5IGlkLCBvciBhcnJheSBvZiBpZHMsIG9yIGRlbGV0ZSBhbGwgKGlmIG5vdCBhcmd1bWVudCBpcyBwcm92aWRlZCkuXG4gICAgcHVibGljIHJlbW92ZShpZCkge1xuICAgIFxuICAgICAgICB2YXIgaWRzID0gW107XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZHMgPSB0aGlzLmxpc3Qoe1xuICAgICAgICAgICAgICAgIFwiJHNlbGVjdFwiOiBbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdXG4gICAgICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnRbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHNbMF0uY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWRzID0gW2FyZ3VtZW50c1swXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkcyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnRGVsZXRpbmcgJyArIHRoaXMub3JtLnRhYmxlICsgKChpZHMgIT09IHVuZGVmaW5lZCAmJiBpZHMubGVuZ3RoID09PSAxKSA/ICdbJyArIGlkc1swXSArICddIGVudGl0eScgOiBpZHMubGVuZ3RoICsgJyBlbnRpdGllcycpKTtcbiAgICBcbiAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICBcbiAgICAgICAgICAgIHZhciBpZCA9IGlkc1tpXTtcbiAgICBcbiAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygnRGVsZXRpbmcge31be31dIGVudGl0eScsIHRoaXMub3JtLnRhYmxlLCBpZCk7XG4gICAgXG4gICAgICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCB8fCBpZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBhcmd1bWVudCBmb3IgaWQgcGFyYW1ldGVyOicgKyBpZCk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICB0cnkge1xuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdiZWZvcmVSZW1vdmVFbnRpdHknLCBpZCk7XG4gICAgXG4gICAgICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnJlbW92ZSh7IFwiX2lkXCI6IGlkIH0pO1xuICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcignRGVsZXRpbmcge31be31dIGVudGl0eSBmYWlsZWQnLCB0aGlzLm9ybS50YWJsZSwgaWQsIGUpO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgIH1cbiAgICBcbiAgICB9XG4gICAgXG4gICAgcHVibGljIGV4cGFuZChleHBhbnNpb25QYXRoLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuJGxvZy5pbmZvKCdFeHBhbmRpbmcgZm9yIGFzc29jaWF0aW9uIHBhdGgge30gYW5kIGNvbnRleHQgZW50aXR5IHt9JywgZXhwYW5zaW9uUGF0aCwgKHR5cGVvZiBhcmd1bWVudHNbMV0gIT09ICdvYmplY3QnID8gJ2lkICcgOiAnJykgKyBKU09OLnN0cmluZ2lmeShhcmd1bWVudHNbMV0pKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBcbiAgICAvKiBcbiAgICAgICAgUmVhZHMgYSBzaW5nbGUgZW50aXR5IGJ5IGlkLCBwYXJzZWQgaW50byBKU09OIG9iamVjdC4gXG4gICAgICAgIElmIHJlcXVlc3RlZCBhcyBleHBhbmRlZCB0aGUgcmV0dXJuZWQgZW50aXR5IHdpbGwgY29tcHJpc2UgYXNzb2NpYXRlZCAoZGVwZW5kZW50KSBlbnRpdGllcyB0b28uIEV4cGFuZCBjYW4gYmUgYSBzdHJpbmcgdGhhIHRpcyBhIHZhbGlkIGFzc29jaWF0aW9uIG5hbWUgZGVmaW5lZCBpbiB0aGlzIGRhbyBvcm0gb3JcbiAgICAgICAgYW4gYXJyYXkgb2Ygc3VjaCBuYW1lcy5cbiAgICAqL1xuICAgIHB1YmxpYyBmaW5kKGlkLCBleHBhbmQsIHNlbGVjdCkge1xuICAgIFxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzBdLmlkO1xuICAgICAgICAgICAgZXhwYW5kID0gYXJndW1lbnRzWzBdLiRleHBhbmQgfHwgYXJndW1lbnRzWzBdLmV4cGFuZDtcbiAgICAgICAgICAgIHNlbGVjdCA9IGFyZ3VtZW50c1swXS4kc2VsZWN0IHx8IGFyZ3VtZW50c1swXS5zZWxlY3Q7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ0ZpbmRpbmcge31be31dIGVudGl0eSB3aXRoIGxpc3QgcGFyYW1ldGVycyBleHBhbmRbe31dLCBzZWxlY3Rbe31dJywgdGhpcy5vcm0udGFibGUsIGlkLCBleHBhbmQsIHNlbGVjdCk7XG4gICAgXG4gICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQgZm9yIGlkIHBhcmFtZXRlcjonICsgaWQpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5O1xuICAgICAgICAgICAgaWYgKHNlbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSBzZWxlY3Quc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHNlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWwuY29uc3RydWN0b3IgIT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IHNlbGVjdCBhcnJheSBjb21wb25lbnRzIGFyZSBleHBlY3RlZCBvdCBiZSBzdHJpbmdzIGJ1dCBmb3VuZCAnICsgKHR5cGVvZiBzZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IHNlbGVjdCBpcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBidXQgd2FzICcgKyAodHlwZW9mIHNlbGVjdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9lbnN1cmUgdGhhdCBqb2lua2V5cyBmb3IgcmVxdWlyZWQgZXhwYW5kcyBhcmUgYXZhaWxhYmxlIGFuZCBub3QgZmlsdGVyZWQgYnkgc2VsZWN0XG4gICAgICAgICAgICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQgJiYgZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3QucHVzaCh0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0ge307XG4gICAgICAgICAgICBwYXJhbXNbXCJfaWRcIl0gPSBpZDtcbiAgICBcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZGIuZ2V0Q29sbGVjdGlvbih0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSBjb2xsZWN0aW9uLmZpbmQocGFyYW1zLCBzZWxlY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSBjb2xsZWN0aW9uLmZpbmRPbmVCeUlkKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICBcbiAgICAgICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSBmb3VuZCcsIHRoaXMub3JtLnRhYmxlLCBpZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2FmdGVyRm91bmQnLCBlbnRpdHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSBub3QgZm91bmQnLCB0aGlzLm9ybS50YWJsZSwgaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKFwiRmluZGluZyB7fVt7fV0gZW50aXRpeSBmYWlsZWQuXCIsIHRoaXMub3JtLnRhYmxlLCBpZCwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBjb3VudCgpOiBudW1iZXIge1xuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnQ291bnRpbmcgJyArIHRoaXMub3JtLnRhYmxlICsgJyBlbnRpdGllcycpO1xuICAgIFxuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgIGNvdW50ID0gY29sbGVjdGlvbi5jb3VudCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2cuZXJyb3IoJ0NvdW50aW5nIHt9IGVudGl0aWVzIGZhaWxlZCcsIHRoaXMub3JtLnRhYmxlLCBlKTtcbiAgICAgICAgICAgIC8vIGUuZXJyQ29udGV4dCA9IHBhcmFtZXRlcmljU3RhdGVtZW50LnRvU3RyaW5nKCk7IC8vIFRPRE86IHBhcmFtZXRlcmljU3RhdGVtZW50P1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygne30ge30gZW50aXRpZXMgY291bnRlZCcsIFN0cmluZyhjb3VudCksIHRoaXMub3JtLnRhYmxlKTtcbiAgICBcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH07XG4gICAgXG4gICAgLypcbiAgICAgKiBsaXN0IHBhcmFtZXRlcnM6XG4gICAgICogLSAkZXhwYW5kXG4gICAgICogLSAkZmlsdGVyXG4gICAgICogLSAkc2VsZWN0XG4gICAgICogLSAkc29ydFxuICAgICAqIC0gJG9yZGVyIFxuICAgICAqIC0gJGxpbWl0XG4gICAgICogLSAkb2Zmc2V0XG4gICAgICovXG4gICAgcHVibGljIGxpc3Qoc2V0dGluZ3MpIHtcbiAgICBcbiAgICAgICAgc2V0dGluZ3MgPSBzZXR0aW5ncyB8fCB7fTtcbiAgICBcbiAgICAgICAgdmFyIGV4cGFuZCA9IHNldHRpbmdzLiRleHBhbmQgfHwgc2V0dGluZ3MuZXhwYW5kO1xuICAgICAgICBpZiAoZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChleHBhbmQuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmQuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLiRleHBhbmQgPSBleHBhbmQuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKGV4cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHAuY29uc3RydWN0b3IgIT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IGV4cGFuZCBhcnJheSBjb21wb25lbnRzIGFyZSBleHBlY3RlZCBvdCBiZSBzdHJpbmdzIGJ1dCBmb3VuZCAnICsgKHR5cGVvZiBleHApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuJGV4cGFuZCA9IFtleHBhbmRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IGV4cGFuZCBpcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBidXQgd2FzICcgKyAodHlwZW9mIGV4cGFuZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIFxuICAgICAgICB2YXIgc2VsZWN0ID0gc2V0dGluZ3MuJHNlbGVjdCB8fCBzZXR0aW5ncy5zZWxlY3Q7XG4gICAgICAgIGlmIChzZWxlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0LmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuJHNlbGVjdCA9IHNlbGVjdC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoZXhwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cC5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudDogc2VsZWN0IGFycmF5IGNvbXBvbmVudHMgYXJlIGV4cGVjdGVkIG90IGJlIHN0cmluZ3MgYnV0IGZvdW5kICcgKyAodHlwZW9mIGV4cCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHAudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy4kc2VsZWN0ID0gW3NlbGVjdF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudDogc2VsZWN0IGlzIGV4cGVjdGVkIHRvIGJlIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGJ1dCB3YXMgJyArICh0eXBlb2YgZXhwYW5kKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIHZhciBsaXN0QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGxpc3RBcmdzLnB1c2goJyAnICsga2V5ICsgJ1snICsgc2V0dGluZ3Nba2V5XSArICddJyk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ0xpc3Rpbmcge30gZW50aXR5IGNvbGxlY3Rpb24gd2l0aCBsaXN0IG9wZXJhdG9yczoge30nLCB0aGlzLm9ybS50YWJsZSwgbGlzdEFyZ3Muam9pbignLCcpKTtcbiAgICBcbiAgICAgICAgaWYgKHNldHRpbmdzLiRzZWxlY3QgIT09IHVuZGVmaW5lZCAmJiBleHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0dGluZ3MuJHNlbGVjdC5wdXNoKHRoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICAvL3NpbXBsaXN0aWMgZmlsdGVyaW5nIG9mIChvbmx5KSBzdHJpbmcgcHJvcGVydGllcyB3aXRoIGxpa2VcbiAgICAgICAgaWYgKHNldHRpbmdzLiRmaWx0ZXIpIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy4kZmlsdGVyLmluZGV4T2YoJywnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuJGZpbHRlciA9IHNldHRpbmdzLiRmaWx0ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuJGZpbHRlciA9IFtzZXR0aW5ncy4kZmlsdGVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldHRpbmdzLiRmaWx0ZXIgPSBzZXR0aW5ncy4kZmlsdGVyLmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyRmllbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IHRoaXMub3Jtc3RhdGVtZW50cy5vcm0uZ2V0UHJvcGVydHkoZmlsdGVyRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcC50eXBlLnRvVXBwZXJDYXNlKCkgIT09ICdWQVJDSEFSJyB8fCBzZXR0aW5nc1twcm9wLm5hbWVdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1twcm9wLm5hbWVdID0gJyUnICsgc2V0dGluZ3NbcHJvcC5uYW1lXSArICclJztcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBlbnRpdGllcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBjb2xsZWN0aW9uLmZpbmQoKTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJzb3IuaGFzTmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChjdXJzb3IubmV4dCgpKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHRoaXMuJGxvZy5pbmZvKCd7fSB7fSBlbnRpdGllcyBmb3VuZCcsIGVudGl0aWVzLmxlbmd0aCwgdGhpcy5vcm0udGFibGUpO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIGVudGl0aWVzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2cuZXJyb3IoXCJMaXN0aW5nIHt9IGVudGl0aWVzIGZhaWxlZC5cIiwgdGhpcy5vcm0udGFibGUsIGUpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgZXhpc3RzVGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBkcm9wVGFibGUoKTogREFPIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG4vKipcbiAqIG9EZWZpbml0aW9uIGNhbiBiZSB0YWJsZSBkZWZpbml0aW9uIG9yIHN0YW5kYXJkIG9ybSBkZWZpbml0aW9uIG9iamVjdC4gT3IgaXQgY2FuIGJlIGEgdmFsaWQgcGF0aCB0b1xuICogYSAudGFibGUgZmlsZSwgb3IgYW55IG90aGVyIHRleHQgZmlsZSBjb250aWFuaW5nIGEgc3RhbmRhcmQgZGFvIG9ybSBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKG9EZWZpbml0aW9uLCBsb2dDdHhOYW1lLCBkYXRhU291cmNlTmFtZSwgZGF0YWJhc2VUeXBlKSB7XG4gICAgdmFyIG9ybTtcblxuICAgIG9ybSA9IG9EZWZpbml0aW9uO1xuXG4gICAgdmFyIHByb2R1Y3ROYW1lID0gZ2xvYmFscy5nZXQoZGF0YWJhc2VUeXBlICsgXCJfXCIgKyBkYXRhU291cmNlTmFtZSk7XG4gICAgaWYgKCFwcm9kdWN0TmFtZSkge1xuICAgICAgICBwcm9kdWN0TmFtZSA9IFwiTW9uZ29EQlwiO1xuICAgICAgICBnbG9iYWxzLnNldChkYXRhYmFzZVR5cGUgKyBcIl9cIiArIGRhdGFTb3VyY2VOYW1lLCBwcm9kdWN0TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEQU8ob3JtLCBsb2dDdHhOYW1lKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkYW8ob0RlZmluaXRpb24sIGxvZ0N0eE5hbWUsIGRhdGFTb3VyY2VOYW1lLCBkYXRhYmFzZVR5cGUpIHtcbiAgICByZXR1cm4gY3JlYXRlKG9EZWZpbml0aW9uLCBsb2dDdHhOYW1lLCBkYXRhU291cmNlTmFtZSwgZGF0YWJhc2VUeXBlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBLGtCQUF3QjtBQUN4QixvQkFBdUI7QUFDdkIsbUJBQThCO0FBQzlCLGlCQUF3QjtBQUN4QixJQUFBQSxlQUErQjtBQUUvQixNQUFNLFFBQVEsNEJBQWUsSUFBSSxnQ0FBZ0MsMkJBQTJCO0FBRTVGLE1BQU0sY0FBYyxJQUFJLHFCQUFPLE9BQU8sTUFBTSxJQUFJO0FBQ2hELE1BQU0sS0FBSyxZQUFZLE1BQU07QUFFdEIsTUFBTSxJQUFJO0FBQUEsRUFJYixZQUFZLEtBQVUsYUFBcUIsZUFBZTtBQUN0RCxTQUFLLE1BQU0sYUFBYSxJQUFJLEdBQUc7QUFFL0IsUUFBSSxhQUFhO0FBQ2pCLFFBQUksS0FBSyxJQUFJLE9BQU87QUFDaEIsbUJBQWEsaUJBQWtCLEtBQUssSUFBSSxNQUFNLFlBQVk7QUFBQSxJQUM5RDtBQUNBLFNBQUssT0FBTyxtQkFBUSxVQUFVLFVBQVU7QUFBQSxFQUM1QztBQUFBLEVBRU8sT0FBTyxVQUFVLEdBQVM7QUFDN0IsUUFBSSxPQUFPLEtBQUssS0FBSztBQUNyQixRQUFJLENBQUMsS0FBSyxLQUFLO0FBQ1g7QUFDSixRQUFJLE9BQU8sU0FBUztBQUNoQixZQUFNLE1BQU0sdUNBQXVDLElBQUk7QUFDM0QsUUFBSSxPQUFPLENBQUMsRUFBRSxNQUFNLEtBQUssU0FBUztBQUNsQyxTQUFLLE1BQU0sTUFBTSxLQUFLLE1BQU0sQ0FB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
|
|
392
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21vbmdvZGIvZGFvLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZ2xvYmFscyB9IGZyb20gXCJAYWVyb2tpdC9zZGsvY29yZVwiXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tIFwiLi9jbGllbnRcIlxuaW1wb3J0ICogYXMgZGlyaWdpYmxlT3JtIGZyb20gXCJAYWVyb2tpdC9zZGsvZGIvb3JtXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9sb2dcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zIH0gZnJvbSBcIkBhZXJva2l0L3Nkay9jb3JlXCI7XG5cbmNvbnN0IGRiVXJpID0gQ29uZmlndXJhdGlvbnMuZ2V0KFwiRElSSUdJQkxFX01PTkdPREJfQ0xJRU5UX1VSSVwiLCBcIm1vbmdvZGI6Ly9sb2NhbGhvc3Q6MjcwMTdcIik7XG5cbmNvbnN0IG1vbmdvQ2xpZW50ID0gbmV3IENsaWVudChkYlVyaSwgbnVsbCwgbnVsbCk7XG5jb25zdCBkYiA9IG1vbmdvQ2xpZW50LmdldERCKCk7XG5cbmV4cG9ydCBjbGFzcyBEQU8ge1xuICAgIHByaXZhdGUgb3JtOiBhbnk7XG4gICAgJGxvZztcblxuICAgIGNvbnN0cnVjdG9yKG9ybTogYW55LCBsb2dDdHhOYW1lOiBzdHJpbmcgPSAnbW9uZ29kYi5kYW8nKSB7XG4gICAgICAgIHRoaXMub3JtID0gZGlyaWdpYmxlT3JtLmdldChvcm0pO1xuXG4gICAgICAgIGxldCBsb2dnZXJOYW1lID0gbG9nQ3R4TmFtZTtcbiAgICAgICAgaWYgKHRoaXMub3JtLnRhYmxlKSB7XG4gICAgICAgICAgICBsb2dnZXJOYW1lID0gJ21vbmdvZGIuZGFvLicgKyAodGhpcy5vcm0udGFibGUudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kbG9nID0gTG9nZ2luZy5nZXRMb2dnZXIobG9nZ2VyTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeShldmVudCwgLi4uYSk6IHZvaWQge1xuICAgICAgICB2YXIgZnVuYyA9IHRoaXNbZXZlbnRdO1xuICAgICAgICBpZiAoIXRoaXNbZXZlbnRdKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudC4gTm90IGEgZnVuY3Rpb246ICcgKyBmdW5jKTtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncy5zbGljZSgxKSk7XG4gICAgfVxuXG4gICAgLy9QcmVwYXJlIGEgSlNPTiBvYmplY3QgZm9yIGluc2VydCBpbnRvIERCXG4gICAgcHVibGljIGNyZWF0ZU5vU1FMRW50aXR5KGVudGl0eSk6IGFueSB7XG4gICAgICAgIHZhciBwZXJzaXN0ZW50SXRlbSA9IHt9O1xuICAgICAgICB2YXIgbWFuZGF0b3JpZXMgPSB0aGlzLm9ybS5nZXRNYW5kYXRvcnlQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWFuZGF0b3JpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChtYW5kYXRvcmllc1tpXS5kYlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudEl0ZW1bbWFuZGF0b3JpZXNbaV0ubmFtZV0gPSBtYW5kYXRvcmllc1tpXS5kYlZhbHVlLmFwcGx5KHRoaXMsIFtlbnRpdHlbbWFuZGF0b3JpZXNbaV0ubmFtZV0sIGVudGl0eV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwZXJzaXN0ZW50SXRlbVttYW5kYXRvcmllc1tpXS5uYW1lXSA9IGVudGl0eVttYW5kYXRvcmllc1tpXS5uYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgb3B0aW9uYWxzID0gdGhpcy5vcm0uZ2V0T3B0aW9uYWxQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb3B0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9uYWxzW2ldLmRiVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHBlcnNpc3RlbnRJdGVtW29wdGlvbmFsc1tpXS5uYW1lXSA9IG9wdGlvbmFsc1tpXS5kYlZhbHVlLmFwcGx5KHRoaXMsIFtlbnRpdHlbb3B0aW9uYWxzW2ldLm5hbWVdLCBlbnRpdHldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcGVyc2lzdGVudEl0ZW1bb3B0aW9uYWxzW2ldLm5hbWVdID0gZW50aXR5W29wdGlvbmFsc1tpXS5uYW1lXSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGVudGl0eVtvcHRpb25hbHNbaV0ubmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1zZ0lkU2VnbWVudCA9IHBlcnNpc3RlbnRJdGVtW3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSA/IFwiW1wiICsgcGVyc2lzdGVudEl0ZW1bdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdICsgXCJdXCIgOiBcIlwiO1xuICAgICAgICB0aGlzLiRsb2cuaW5mbyhcIlRyYW5zZm9ybWF0aW9uIHRvIHt9IERCIEpTT04gb2JqZWN0IGZpbmlzaGVkXCIsICh0aGlzLm9ybS50YWJsZSArIG1zZ0lkU2VnbWVudCkpO1xuICAgICAgICByZXR1cm4gcGVyc2lzdGVudEl0ZW07XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyB2YWxpZGF0ZUVudGl0eShlbnRpdHksIHNraXApOiB2b2lkIHtcbiAgICAgICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkIHx8IGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50OiBlbnRpdHkgaXMgJyArIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgICAgIGlmIChza2lwLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgICAgICAgICAgIHNraXAgPSBbc2tpcF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHNraXAubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBza2lwW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBtYW5kYXRvcmllcyA9IHRoaXMub3JtLmdldE1hbmRhdG9yeVByb3BlcnRpZXMoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYW5kYXRvcmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHByb3BOYW1lID0gbWFuZGF0b3JpZXNbaV0ubmFtZTtcbiAgICAgICAgICAgIGlmICgoc2tpcCAmJiBza2lwLmluZGV4T2YocHJvcE5hbWUpID4gLTEpIHx8IG1hbmRhdG9yaWVzW2ldLnR5cGUudG9VcHBlckNhc2UoKSA9PT0gJ0JPT0xFQU4nKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdmFyIHByb3BWYWx1ZSA9IGVudGl0eVtwcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAocHJvcFZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsICcgKyBwcm9wTmFtZSArICcgYXR0cmlidXRlIHZhbHVlIGluICcgKyB0aGlzLm9ybS50YWJsZSArICcgZW50aXR5OiAnICsgcHJvcFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgaW5zZXJ0KF9lbnRpdHkpIHtcbiAgICBcbiAgICAgICAgdmFyIGVudGl0aWVzID0gX2VudGl0eTtcbiAgICAgICAgaWYgKF9lbnRpdHkuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICBlbnRpdGllcyA9IFtfZW50aXR5XTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnSW5zZXJ0aW5nIHt9IHt9JywgdGhpcy5vcm0udGFibGUsIChlbnRpdGllcy5sZW5ndGggPT09IDEgPyAnZW50aXR5JyA6ICdlbnRpdGllcycpKTtcbiAgICBcbiAgICAgICAgdmFyIHVwZGF0ZWRSZWNvcmRDb3VudCA9IDA7XG4gICAgICAgIHZhciBpZHMgPSBbXTtcbiAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRpdGllcy5sZW5ndGg7IGkrKykge1xuICAgIFxuICAgICAgICAgICAgdmFyIGVudGl0eSA9IGVudGl0aWVzW2ldO1xuICAgIFxuICAgICAgICAgICAgdGhpcy52YWxpZGF0ZUVudGl0eShlbnRpdHksIFt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pO1xuICAgIFxuICAgICAgICAgICAgdmFyIGRiRW50aXR5ID0gdGhpcy5jcmVhdGVOb1NRTEVudGl0eShlbnRpdHkpO1xuICAgIFxuICAgICAgICAgICAgdHJ5IHtcbiAgICBcbiAgICAgICAgICAgICAgICB2YXIgY29sbGVjdGlvbiA9IGRiLmdldENvbGxlY3Rpb24odGhpcy5vcm0udGFibGUpO1xuICAgICAgICAgICAgICAgIHZhciBpZCA9IGNvbGxlY3Rpb24uZ2V0TmV4dElkKCk7XG4gICAgXG4gICAgICAgICAgICAgICAgZGJFbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdID0gaWQ7XG4gICAgICAgICAgICAgICAgZGJFbnRpdHlbXCJfaWRcIl0gPSBpZDtcbiAgICBcbiAgICBcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLmluc2VydChkYkVudGl0eSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlZFJlY29yZENvdW50Kys7XG4gICAgXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2FmdGVySW5zZXJ0JywgZGJFbnRpdHkpO1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdiZWZvcmVJbnNlcnRBc3NvY2lhdGlvblNldHMnLCBkYkVudGl0eSk7XG4gICAgXG4gICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRSZWNvcmRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2goZGJFbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmluZm8oJ3t9W10gZW50aXR5IGluc2VydGVkJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmluZm8oJ05vIGNoYW5nZXMgaW5jdXJyZWQgaW4ge30nLCB0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgIFxuICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcihcIkluc2VydGluZyB7fSB7fSBmYWlsZWRcIiwgdGhpcy5vcm0udGFibGUsIChlbnRpdGllcy5sZW5ndGggPT09IDEgPyAnZW50aXR5JyA6ICdlbnRpdGllcycpLCBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygnUm9sbGluZyBiYWNrIGNoYW5nZXMgYWZ0ZXIgZmFpbGVkIHt9W3t9XSBpbnNlcnQuICcsIHRoaXMub3JtLnRhYmxlLCBkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pO1xuICAgICAgICAgICAgICAgIGlmIChkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKCdDb3VsZCBub3Qgcm9sbGJhY2sgY2hhbmdlcyBhZnRlciBmYWlsZWQge31be31dIGluc2VydC4gJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIGlmIChfZW50aXR5LmNvbnN0cnVjdG9yICE9PSBBcnJheSlcbiAgICAgICAgICAgIHJldHVybiBpZHNbMF07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBpZHM7XG4gICAgfVxuICAgIFxuICAgIC8vIHVwZGF0ZSBlbnRpdHkgZnJvbSBhIEpTT04gb2JqZWN0LiBSZXR1cm5zIHRoZSBpZCBvZiB0aGUgdXBkYXRlZCBlbnRpdHkuXG4gICAgcHVibGljIHVwZGF0ZShlbnRpdHkpIHtcbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ1VwZGF0aW5nIHt9W3t9XSBlbnRpdHknLCB0aGlzLm9ybS50YWJsZSwgZW50aXR5ICE9PSB1bmRlZmluZWQgPyBlbnRpdHlbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdIDogZW50aXR5KTtcbiAgICBcbiAgICAgICAgaWYgKGVudGl0eSA9PT0gdW5kZWZpbmVkIHx8IGVudGl0eSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGFyZ3VtZW50OiBlbnRpdHkgaXMgJyArIGVudGl0eSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdmFyIGlnbm9yZWRQcm9wZXJ0aWVzID0gdGhpcy5vcm0uZ2V0TWFuZGF0b3J5UHJvcGVydGllcygpXG4gICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eS5hbGxvd2VkT3BzICYmIHByb3BlcnR5LmFsbG93ZWRPcHMuaW5kZXhPZigndXBkYXRlJykgPCAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5Lm5hbWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUVudGl0eShlbnRpdHksIGlnbm9yZWRQcm9wZXJ0aWVzKTtcbiAgICBcbiAgICAgICAgdmFyIGRiRW50aXR5ID0gdGhpcy5jcmVhdGVOb1NRTEVudGl0eShlbnRpdHkpO1xuICAgICAgICBkYkVudGl0eVt0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZV0gPSBlbnRpdHlbXCJfaWRcIl07XG4gICAgICAgIGRiRW50aXR5W1wiX2lkXCJdID0gZW50aXR5W1wiX2lkXCJdO1xuICAgIFxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2JlZm9yZVVwZGF0ZUVudGl0eScsIGRiRW50aXR5KTtcbiAgICBcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZGIuZ2V0Q29sbGVjdGlvbih0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICBjb2xsZWN0aW9uLnVwZGF0ZSh7IFwiX2lkXCI6IGVudGl0eVtcIl9pZFwiXSB9LCBkYkVudGl0eSk7XG4gICAgXG4gICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSB1cGRhdGVkJywgdGhpcy5vcm0udGFibGUsIGRiRW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSk7XG4gICAgXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKCdVcGRhdGluZyB7fVt7fV0gZmFpbGVkJywgdGhpcy5vcm0udGFibGUsIGVudGl0eSAhPT0gdW5kZWZpbmVkID8gZW50aXR5W3RoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lXSA6IGVudGl0eSwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBcbiAgICAvLyBkZWxldGUgZW50aXR5IGJ5IGlkLCBvciBhcnJheSBvZiBpZHMsIG9yIGRlbGV0ZSBhbGwgKGlmIG5vdCBhcmd1bWVudCBpcyBwcm92aWRlZCkuXG4gICAgcHVibGljIHJlbW92ZShpZCkge1xuICAgIFxuICAgICAgICB2YXIgaWRzID0gW107XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZHMgPSB0aGlzLmxpc3Qoe1xuICAgICAgICAgICAgICAgIFwiJHNlbGVjdFwiOiBbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdXG4gICAgICAgICAgICB9KS5tYXAoZnVuY3Rpb24gKGVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbnRbdGhpcy5vcm0uZ2V0UHJpbWFyeUtleSgpLm5hbWVdO1xuICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHNbMF0uY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWRzID0gW2FyZ3VtZW50c1swXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlkcyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnRGVsZXRpbmcgJyArIHRoaXMub3JtLnRhYmxlICsgKChpZHMgIT09IHVuZGVmaW5lZCAmJiBpZHMubGVuZ3RoID09PSAxKSA/ICdbJyArIGlkc1swXSArICddIGVudGl0eScgOiBpZHMubGVuZ3RoICsgJyBlbnRpdGllcycpKTtcbiAgICBcbiAgICBcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyBpKyspIHtcbiAgICBcbiAgICAgICAgICAgIHZhciBpZCA9IGlkc1tpXTtcbiAgICBcbiAgICAgICAgICAgIGlmIChpZHMubGVuZ3RoID4gMSlcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygnRGVsZXRpbmcge31be31dIGVudGl0eScsIHRoaXMub3JtLnRhYmxlLCBpZCk7XG4gICAgXG4gICAgICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCB8fCBpZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBhcmd1bWVudCBmb3IgaWQgcGFyYW1ldGVyOicgKyBpZCk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICB0cnkge1xuICAgIFxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5KCdiZWZvcmVSZW1vdmVFbnRpdHknLCBpZCk7XG4gICAgXG4gICAgICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnJlbW92ZSh7IFwiX2lkXCI6IGlkIH0pO1xuICAgIFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuJGxvZy5lcnJvcignRGVsZXRpbmcge31be31dIGVudGl0eSBmYWlsZWQnLCB0aGlzLm9ybS50YWJsZSwgaWQsIGUpO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgIH1cbiAgICBcbiAgICB9XG4gICAgXG4gICAgcHVibGljIGV4cGFuZChleHBhbnNpb25QYXRoLCBjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuJGxvZy5pbmZvKCdFeHBhbmRpbmcgZm9yIGFzc29jaWF0aW9uIHBhdGgge30gYW5kIGNvbnRleHQgZW50aXR5IHt9JywgZXhwYW5zaW9uUGF0aCwgKHR5cGVvZiBhcmd1bWVudHNbMV0gIT09ICdvYmplY3QnID8gJ2lkICcgOiAnJykgKyBKU09OLnN0cmluZ2lmeShhcmd1bWVudHNbMV0pKTtcbiAgICAgICAgdGhyb3cgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgIH1cbiAgICBcbiAgICAvKiBcbiAgICAgICAgUmVhZHMgYSBzaW5nbGUgZW50aXR5IGJ5IGlkLCBwYXJzZWQgaW50byBKU09OIG9iamVjdC4gXG4gICAgICAgIElmIHJlcXVlc3RlZCBhcyBleHBhbmRlZCB0aGUgcmV0dXJuZWQgZW50aXR5IHdpbGwgY29tcHJpc2UgYXNzb2NpYXRlZCAoZGVwZW5kZW50KSBlbnRpdGllcyB0b28uIEV4cGFuZCBjYW4gYmUgYSBzdHJpbmcgdGhhIHRpcyBhIHZhbGlkIGFzc29jaWF0aW9uIG5hbWUgZGVmaW5lZCBpbiB0aGlzIGRhbyBvcm0gb3JcbiAgICAgICAgYW4gYXJyYXkgb2Ygc3VjaCBuYW1lcy5cbiAgICAqL1xuICAgIHB1YmxpYyBmaW5kKGlkLCBleHBhbmQsIHNlbGVjdCkge1xuICAgIFxuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzBdLmlkO1xuICAgICAgICAgICAgZXhwYW5kID0gYXJndW1lbnRzWzBdLiRleHBhbmQgfHwgYXJndW1lbnRzWzBdLmV4cGFuZDtcbiAgICAgICAgICAgIHNlbGVjdCA9IGFyZ3VtZW50c1swXS4kc2VsZWN0IHx8IGFyZ3VtZW50c1swXS5zZWxlY3Q7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ0ZpbmRpbmcge31be31dIGVudGl0eSB3aXRoIGxpc3QgcGFyYW1ldGVycyBleHBhbmRbe31dLCBzZWxlY3Rbe31dJywgdGhpcy5vcm0udGFibGUsIGlkLCBleHBhbmQsIHNlbGVjdCk7XG4gICAgXG4gICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkIHx8IGlkID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQgZm9yIGlkIHBhcmFtZXRlcjonICsgaWQpO1xuICAgICAgICB9XG4gICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgZW50aXR5O1xuICAgICAgICAgICAgaWYgKHNlbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QgPSBzZWxlY3Quc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKHNlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWwuY29uc3RydWN0b3IgIT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IHNlbGVjdCBhcnJheSBjb21wb25lbnRzIGFyZSBleHBlY3RlZCBvdCBiZSBzdHJpbmdzIGJ1dCBmb3VuZCAnICsgKHR5cGVvZiBzZWwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IHNlbGVjdCBpcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBidXQgd2FzICcgKyAodHlwZW9mIHNlbGVjdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9lbnN1cmUgdGhhdCBqb2lua2V5cyBmb3IgcmVxdWlyZWQgZXhwYW5kcyBhcmUgYXZhaWxhYmxlIGFuZCBub3QgZmlsdGVyZWQgYnkgc2VsZWN0XG4gICAgICAgICAgICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQgJiYgZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxlY3QucHVzaCh0aGlzLm9ybS5nZXRQcmltYXJ5S2V5KCkubmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgXG4gICAgICAgICAgICB2YXIgcGFyYW1zID0ge307XG4gICAgICAgICAgICBwYXJhbXNbXCJfaWRcIl0gPSBpZDtcbiAgICBcbiAgICAgICAgICAgIHZhciBjb2xsZWN0aW9uID0gZGIuZ2V0Q29sbGVjdGlvbih0aGlzLm9ybS50YWJsZSk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSBjb2xsZWN0aW9uLmZpbmQocGFyYW1zLCBzZWxlY3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlbnRpdHkgPSBjb2xsZWN0aW9uLmZpbmRPbmVCeUlkKGlkKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICBcbiAgICAgICAgICAgIGlmIChlbnRpdHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSBmb3VuZCcsIHRoaXMub3JtLnRhYmxlLCBpZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZnkoJ2FmdGVyRm91bmQnLCBlbnRpdHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2cuaW5mbygne31be31dIGVudGl0eSBub3QgZm91bmQnLCB0aGlzLm9ybS50YWJsZSwgaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVudGl0eTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhpcy4kbG9nLmVycm9yKFwiRmluZGluZyB7fVt7fV0gZW50aXRpeSBmYWlsZWQuXCIsIHRoaXMub3JtLnRhYmxlLCBpZCwgZSk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBjb3VudCgpOiBudW1iZXIge1xuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygnQ291bnRpbmcgJyArIHRoaXMub3JtLnRhYmxlICsgJyBlbnRpdGllcycpO1xuICAgIFxuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgIGNvdW50ID0gY29sbGVjdGlvbi5jb3VudCgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2cuZXJyb3IoJ0NvdW50aW5nIHt9IGVudGl0aWVzIGZhaWxlZCcsIHRoaXMub3JtLnRhYmxlLCBlKTtcbiAgICAgICAgICAgIC8vIGUuZXJyQ29udGV4dCA9IHBhcmFtZXRlcmljU3RhdGVtZW50LnRvU3RyaW5nKCk7IC8vIFRPRE86IHBhcmFtZXRlcmljU3RhdGVtZW50P1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICB0aGlzLiRsb2cuaW5mbygne30ge30gZW50aXRpZXMgY291bnRlZCcsIFN0cmluZyhjb3VudCksIHRoaXMub3JtLnRhYmxlKTtcbiAgICBcbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgIH07XG4gICAgXG4gICAgLypcbiAgICAgKiBsaXN0IHBhcmFtZXRlcnM6XG4gICAgICogLSAkZXhwYW5kXG4gICAgICogLSAkZmlsdGVyXG4gICAgICogLSAkc2VsZWN0XG4gICAgICogLSAkc29ydFxuICAgICAqIC0gJG9yZGVyIFxuICAgICAqIC0gJGxpbWl0XG4gICAgICogLSAkb2Zmc2V0XG4gICAgICovXG4gICAgcHVibGljIGxpc3Qoc2V0dGluZ3MpIHtcbiAgICBcbiAgICAgICAgc2V0dGluZ3MgPSBzZXR0aW5ncyB8fCB7fTtcbiAgICBcbiAgICAgICAgdmFyIGV4cGFuZCA9IHNldHRpbmdzLiRleHBhbmQgfHwgc2V0dGluZ3MuZXhwYW5kO1xuICAgICAgICBpZiAoZXhwYW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChleHBhbmQuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZC5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHBhbmQuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLiRleHBhbmQgPSBleHBhbmQuc3BsaXQoJywnKS5tYXAoZnVuY3Rpb24gKGV4cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleHAuY29uc3RydWN0b3IgIT09IFN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IGV4cGFuZCBhcnJheSBjb21wb25lbnRzIGFyZSBleHBlY3RlZCBvdCBiZSBzdHJpbmdzIGJ1dCBmb3VuZCAnICsgKHR5cGVvZiBleHApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuJGV4cGFuZCA9IFtleHBhbmRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ0lsbGVnYWwgYXJndW1lbnQ6IGV4cGFuZCBpcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBidXQgd2FzICcgKyAodHlwZW9mIGV4cGFuZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIFxuICAgICAgICB2YXIgc2VsZWN0ID0gc2V0dGluZ3MuJHNlbGVjdCB8fCBzZXR0aW5ncy5zZWxlY3Q7XG4gICAgICAgIGlmIChzZWxlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdC5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0LmNvbnN0cnVjdG9yID09PSBTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdC5pbmRleE9mKCcsJykgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuJHNlbGVjdCA9IHNlbGVjdC5zcGxpdCgnLCcpLm1hcChmdW5jdGlvbiAoZXhwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cC5jb25zdHJ1Y3RvciAhPT0gU3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudDogc2VsZWN0IGFycmF5IGNvbXBvbmVudHMgYXJlIGV4cGVjdGVkIG90IGJlIHN0cmluZ3MgYnV0IGZvdW5kICcgKyAodHlwZW9mIGV4cCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHAudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy4kc2VsZWN0ID0gW3NlbGVjdF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignSWxsZWdhbCBhcmd1bWVudDogc2VsZWN0IGlzIGV4cGVjdGVkIHRvIGJlIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzIGJ1dCB3YXMgJyArICh0eXBlb2YgZXhwYW5kKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgXG4gICAgICAgIHZhciBsaXN0QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIGxpc3RBcmdzLnB1c2goJyAnICsga2V5ICsgJ1snICsgc2V0dGluZ3Nba2V5XSArICddJyk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdGhpcy4kbG9nLmluZm8oJ0xpc3Rpbmcge30gZW50aXR5IGNvbGxlY3Rpb24gd2l0aCBsaXN0IG9wZXJhdG9yczoge30nLCB0aGlzLm9ybS50YWJsZSwgbGlzdEFyZ3Muam9pbignLCcpKTtcbiAgICBcbiAgICAgICAgaWYgKHNldHRpbmdzLiRzZWxlY3QgIT09IHVuZGVmaW5lZCAmJiBleHBhbmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2V0dGluZ3MuJHNlbGVjdC5wdXNoKHRoaXMub3JtLmdldFByaW1hcnlLZXkoKS5uYW1lKTtcbiAgICAgICAgfVxuICAgIFxuICAgICAgICAvL3NpbXBsaXN0aWMgZmlsdGVyaW5nIG9mIChvbmx5KSBzdHJpbmcgcHJvcGVydGllcyB3aXRoIGxpa2VcbiAgICAgICAgaWYgKHNldHRpbmdzLiRmaWx0ZXIpIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy4kZmlsdGVyLmluZGV4T2YoJywnKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuJGZpbHRlciA9IHNldHRpbmdzLiRmaWx0ZXIuc3BsaXQoJywnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0dGluZ3MuJGZpbHRlciA9IFtzZXR0aW5ncy4kZmlsdGVyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldHRpbmdzLiRmaWx0ZXIgPSBzZXR0aW5ncy4kZmlsdGVyLmZpbHRlcihmdW5jdGlvbiAoZmlsdGVyRmllbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IHRoaXMub3Jtc3RhdGVtZW50cy5vcm0uZ2V0UHJvcGVydHkoZmlsdGVyRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChwcm9wID09PSB1bmRlZmluZWQgfHwgcHJvcC50eXBlLnRvVXBwZXJDYXNlKCkgIT09ICdWQVJDSEFSJyB8fCBzZXR0aW5nc1twcm9wLm5hbWVdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBzZXR0aW5nc1twcm9wLm5hbWVdID0gJyUnICsgc2V0dGluZ3NbcHJvcC5uYW1lXSArICclJztcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBlbnRpdGllcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSBkYi5nZXRDb2xsZWN0aW9uKHRoaXMub3JtLnRhYmxlKTtcbiAgICAgICAgICAgIHZhciBjdXJzb3IgPSBjb2xsZWN0aW9uLmZpbmQoKTtcbiAgICAgICAgICAgIHdoaWxlIChjdXJzb3IuaGFzTmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgZW50aXRpZXMucHVzaChjdXJzb3IubmV4dCgpKTtcbiAgICAgICAgICAgIH1cbiAgICBcbiAgICAgICAgICAgIHRoaXMuJGxvZy5pbmZvKCd7fSB7fSBlbnRpdGllcyBmb3VuZCcsIGVudGl0aWVzLmxlbmd0aCwgdGhpcy5vcm0udGFibGUpO1xuICAgIFxuICAgICAgICAgICAgcmV0dXJuIGVudGl0aWVzO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aGlzLiRsb2cuZXJyb3IoXCJMaXN0aW5nIHt9IGVudGl0aWVzIGZhaWxlZC5cIiwgdGhpcy5vcm0udGFibGUsIGUpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgZXhpc3RzVGFibGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBcbiAgICBwdWJsaWMgY3JlYXRlVGFibGUoKTogdm9pZCB7XG4gICAgfVxuICAgIFxuICAgIHB1YmxpYyBkcm9wVGFibGUoKTogREFPIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG4vKipcbiAqIG9EZWZpbml0aW9uIGNhbiBiZSB0YWJsZSBkZWZpbml0aW9uIG9yIHN0YW5kYXJkIG9ybSBkZWZpbml0aW9uIG9iamVjdC4gT3IgaXQgY2FuIGJlIGEgdmFsaWQgcGF0aCB0b1xuICogYSAudGFibGUgZmlsZSwgb3IgYW55IG90aGVyIHRleHQgZmlsZSBjb250aWFuaW5nIGEgc3RhbmRhcmQgZGFvIG9ybSBkZWZpbml0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlKG9EZWZpbml0aW9uLCBsb2dDdHhOYW1lLCBkYXRhU291cmNlTmFtZSwgZGF0YWJhc2VUeXBlKSB7XG4gICAgdmFyIG9ybTtcblxuICAgIG9ybSA9IG9EZWZpbml0aW9uO1xuXG4gICAgdmFyIHByb2R1Y3ROYW1lID0gZ2xvYmFscy5nZXQoZGF0YWJhc2VUeXBlICsgXCJfXCIgKyBkYXRhU291cmNlTmFtZSk7XG4gICAgaWYgKCFwcm9kdWN0TmFtZSkge1xuICAgICAgICBwcm9kdWN0TmFtZSA9IFwiTW9uZ29EQlwiO1xuICAgICAgICBnbG9iYWxzLnNldChkYXRhYmFzZVR5cGUgKyBcIl9cIiArIGRhdGFTb3VyY2VOYW1lLCBwcm9kdWN0TmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBEQU8ob3JtLCBsb2dDdHhOYW1lKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkYW8ob0RlZmluaXRpb24sIGxvZ0N0eE5hbWUsIGRhdGFTb3VyY2VOYW1lLCBkYXRhYmFzZVR5cGUpIHtcbiAgICByZXR1cm4gY3JlYXRlKG9EZWZpbml0aW9uLCBsb2dDdHhOYW1lLCBkYXRhU291cmNlTmFtZSwgZGF0YWJhc2VUeXBlKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBLGtCQUF3QjtBQUN4QixvQkFBdUI7QUFDdkIsbUJBQThCO0FBQzlCLGlCQUF3QjtBQUN4QixJQUFBQSxlQUErQjtBQUUvQixNQUFNLFFBQVEsNEJBQWUsSUFBSSxnQ0FBZ0MsMkJBQTJCO0FBRTVGLE1BQU0sY0FBYyxJQUFJLHFCQUFPLE9BQU8sTUFBTSxJQUFJO0FBQ2hELE1BQU0sS0FBSyxZQUFZLE1BQU07QUFFdEIsTUFBTSxJQUFJO0FBQUEsRUFDTDtBQUFBLEVBQ1I7QUFBQSxFQUVBLFlBQVksS0FBVSxhQUFxQixlQUFlO0FBQ3RELFNBQUssTUFBTSxhQUFhLElBQUksR0FBRztBQUUvQixRQUFJLGFBQWE7QUFDakIsUUFBSSxLQUFLLElBQUksT0FBTztBQUNoQixtQkFBYSxpQkFBa0IsS0FBSyxJQUFJLE1BQU0sWUFBWTtBQUFBLElBQzlEO0FBQ0EsU0FBSyxPQUFPLG1CQUFRLFVBQVUsVUFBVTtBQUFBLEVBQzVDO0FBQUEsRUFFTyxPQUFPLFVBQVUsR0FBUztBQUM3QixRQUFJLE9BQU8sS0FBSyxLQUFLO0FBQ3JCLFFBQUksQ0FBQyxLQUFLLEtBQUs7QUFDWDtBQUNKLFFBQUksT0FBTyxTQUFTO0FBQ2hCLFlBQU0sTUFBTSx1Q0FBdUMsSUFBSTtBQUMzRCxRQUFJLE9BQU8sQ0FBQyxFQUFFLE1BQU0sS0FBSyxTQUFTO0FBQ2xDLFNBQUssTUFB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
|
package/dist/cjs/net/soap.js
CHANGED
|
@@ -86,6 +86,8 @@ class SOAP {
|
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
class Message {
|
|
89
|
+
// Renamed to native to signal internal-use property, improving encapsulation
|
|
90
|
+
native;
|
|
89
91
|
constructor(native) {
|
|
90
92
|
this.native = native;
|
|
91
93
|
}
|
|
@@ -105,6 +107,8 @@ class Message {
|
|
|
105
107
|
}
|
|
106
108
|
}
|
|
107
109
|
class Part {
|
|
110
|
+
// Renamed to native
|
|
111
|
+
native;
|
|
108
112
|
constructor(native) {
|
|
109
113
|
this.native = native;
|
|
110
114
|
}
|
|
@@ -113,6 +117,8 @@ class Part {
|
|
|
113
117
|
}
|
|
114
118
|
}
|
|
115
119
|
class MimeHeaders {
|
|
120
|
+
// Renamed to native
|
|
121
|
+
native;
|
|
116
122
|
constructor(native) {
|
|
117
123
|
this.native = native;
|
|
118
124
|
}
|
|
@@ -126,6 +132,8 @@ class MimeHeaders {
|
|
|
126
132
|
}
|
|
127
133
|
}
|
|
128
134
|
class Envelope {
|
|
135
|
+
// Renamed to native
|
|
136
|
+
native;
|
|
129
137
|
constructor(native) {
|
|
130
138
|
this.native = native;
|
|
131
139
|
}
|
|
@@ -143,6 +151,8 @@ class Envelope {
|
|
|
143
151
|
}
|
|
144
152
|
}
|
|
145
153
|
class Body {
|
|
154
|
+
// Renamed to native
|
|
155
|
+
native;
|
|
146
156
|
constructor(native) {
|
|
147
157
|
this.native = native;
|
|
148
158
|
}
|
|
@@ -159,6 +169,8 @@ class Body {
|
|
|
159
169
|
}
|
|
160
170
|
}
|
|
161
171
|
class Header {
|
|
172
|
+
// Renamed to native
|
|
173
|
+
native;
|
|
162
174
|
constructor(native) {
|
|
163
175
|
this.native = native;
|
|
164
176
|
}
|
|
@@ -167,6 +179,7 @@ class Header {
|
|
|
167
179
|
}
|
|
168
180
|
}
|
|
169
181
|
class Name {
|
|
182
|
+
native;
|
|
170
183
|
constructor(native) {
|
|
171
184
|
this.native = native;
|
|
172
185
|
}
|
|
@@ -187,6 +200,7 @@ class Name {
|
|
|
187
200
|
}
|
|
188
201
|
}
|
|
189
202
|
class Element {
|
|
203
|
+
native;
|
|
190
204
|
constructor(native) {
|
|
191
205
|
this.native = native;
|
|
192
206
|
}
|
|
@@ -225,4 +239,4 @@ class Element {
|
|
|
225
239
|
if (typeof module !== "undefined") {
|
|
226
240
|
module.exports = SOAP;
|
|
227
241
|
}
|
|
228
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25ldC9zb2FwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSBcIkBhZXJva2l0L3Nkay9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gXCJAYWVyb2tpdC9zZGsvdXRpbHMvYmFzZTY0XCI7XG5pbXBvcnQgeyBTdHJlYW1zLCBJbnB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiO1xuXG5jb25zdCBNZXNzYWdlRmFjdG9yeSA9IEphdmEudHlwZShcImpha2FydGEueG1sLnNvYXAuTWVzc2FnZUZhY3RvcnlcIik7XG5jb25zdCBNaW1lSGVhZGVyc0ludGVybmFsID0gSmF2YS50eXBlKFwiamFrYXJ0YS54bWwuc29hcC5NaW1lSGVhZGVyc1wiKTtcbmNvbnN0IFNPQVBDb25uZWN0aW9uRmFjdG9yeSA9IEphdmEudHlwZShcImpha2FydGEueG1sLnNvYXAuU09BUENvbm5lY3Rpb25GYWN0b3J5XCIpO1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBhbmQgY2FsbGluZyBTT0FQIG1lc3NhZ2VzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgSmF2YSBqYXZheC54bWwuc29hcCBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTT0FQIHtcblxuXHQvKipcblx0ICogQ2FsbCBhIGdpdmVuIFNPQVAgZW5kcG9pbnQgd2l0aCBhIGdpdmVuIHJlcXVlc3QgbWVzc2FnZVxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgU09BUCBNZXNzYWdlIHdyYXBwZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgU09BUCBlbmRwb2ludCBVUkwuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNhbGwobWVzc2FnZTogTWVzc2FnZSwgdXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCBzb2FwQ29ubmVjdGlvbkZhY3RvcnkgPSBTT0FQQ29ubmVjdGlvbkZhY3RvcnkubmV3SW5zdGFuY2UoKTtcblx0XHRjb25zdCBpbnRlcm5hbENvbm5lY3Rpb24gPSBzb2FwQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbigpO1xuXHRcdC8vIEFjY2Vzc2luZyB0aGUgaW50ZXJuYWwgcHJvcGVydHkgbmF0aXZlIChyZW5hbWVkIGZyb20gJ25hdGl2ZScgZm9yIGJldHRlciBlbmNhcHN1bGF0aW9uKVxuXHRcdGNvbnN0IGludGVybmFsUmVzcG9uc2UgPSBpbnRlcm5hbENvbm5lY3Rpb24uY2FsbChtZXNzYWdlLm5hdGl2ZSwgdXJsKTtcblx0XHRyZXR1cm4gbmV3IE1lc3NhZ2UoaW50ZXJuYWxSZXNwb25zZSk7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIHRydXN0QWxsKCkge1xuXHRcdC8vIFRPRE86IEltcGxlbWVudCBsb2dpYyBmb3IgdHJ1c3RpbmcgYWxsIGNlcnRpZmljYXRlcyBpZiByZXF1aXJlZCBieSB0aGUgU0RLIGVudmlyb25tZW50XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgU09BUCBtZXNzYWdlLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBjcmVhdGVNZXNzYWdlKCk6IE1lc3NhZ2Uge1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZShNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU1lc3NhZ2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgU09BUCBtZXNzYWdlIGZyb20gYW4gSW5wdXRTdHJlYW0gYW5kIE1pbWVIZWFkZXJzLlxuXHQgKiBAcGFyYW0gbWltZUhlYWRlcnMgVGhlIE1pbWVIZWFkZXJzIHdyYXBwZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIElucHV0U3RyZWFtIHdyYXBwZXIgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBwYXJzZU1lc3NhZ2UobWltZUhlYWRlcnM6IE1pbWVIZWFkZXJzLCBpbnB1dFN0cmVhbTogSW5wdXRTdHJlYW0pOiBNZXNzYWdlIHtcblx0XHRjb25zdCBpbnRlcm5hbEZhY3RvcnkgPSBNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpO1xuXHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdGlmIChpbnB1dFN0cmVhbS5uYXRpdmUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1lc3NhZ2UgPSBpbnRlcm5hbEZhY3RvcnkuY3JlYXRlTWVzc2FnZShtaW1lSGVhZGVycy5uYXRpdmUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsUGFydCA9IGludGVybmFsTWVzc2FnZS5nZXRTT0FQUGFydCgpO1xuXHRcdFx0XHRpbnRlcm5hbFBhcnQuZ2V0RW52ZWxvcGUoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKGludGVybmFsTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcHJvdmlkZWQgaXMgbnVsbCBvciBpbiBhIHdyb25nIGZvcm1hdC4gSFRUUCBtZXRob2QgdXNlZCBtdXN0IGJlIFBPU1QuIFwiICsgZS5tZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcHJvdmlkZWQgaXMgbnVsbC5cIik7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgU09BUCBtZXNzYWdlIGZyb20gdGhlIGN1cnJlbnQgSFRUUCByZXF1ZXN0IGlucHV0IHN0cmVhbS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgcGFyc2VSZXF1ZXN0KCk6IE1lc3NhZ2Uge1xuXHRcdGlmIChSZXF1ZXN0LmdldE1ldGhvZCgpLnRvVXBwZXJDYXNlKCkgIT09IFwiUE9TVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJIVFRQIG1ldGhvZCB1c2VkIG11c3QgYmUgUE9TVC5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5wdXRTdHJlYW0gPSBSZXF1ZXN0LmdldElucHV0U3RyZWFtKCk7XG5cdFx0Y29uc3QgbWltZUhlYWRlcnMgPSB0aGlzLmNyZWF0ZU1pbWVIZWFkZXJzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wYXJzZU1lc3NhZ2UobWltZUhlYWRlcnMsIGlucHV0U3RyZWFtKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSBNaW1lSGVhZGVycyBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNyZWF0ZU1pbWVIZWFkZXJzKCk6IE1pbWVIZWFkZXJzIHtcblx0XHRjb25zdCBpbnRlcm5hbE1pbWVIZWFkZXJzID0gbmV3IE1pbWVIZWFkZXJzSW50ZXJuYWwoKTtcblx0XHRyZXR1cm4gbmV3IE1pbWVIZWFkZXJzKGludGVybmFsTWltZUhlYWRlcnMpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBNZXNzYWdlIFdyYXBwZXJcbiAqL1xuY2xhc3MgTWVzc2FnZSB7XG5cblx0Ly8gUmVuYW1lZCB0byBuYXRpdmUgdG8gc2lnbmFsIGludGVybmFsLXVzZSBwcm9wZXJ0eSwgaW1wcm92aW5nIGVuY2Fwc3VsYXRpb25cblx0cHVibGljIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGFydCgpOiBQYXJ0IHtcblx0XHRyZXR1cm4gbmV3IFBhcnQodGhpcy5uYXRpdmUuZ2V0U09BUFBhcnQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWltZUhlYWRlcnMoKTogTWltZUhlYWRlcnMge1xuXHRcdHJldHVybiBuZXcgTWltZUhlYWRlcnModGhpcy5uYXRpdmUuZ2V0TWltZUhlYWRlcnMoKSk7XG5cdH1cblxuXHRwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zYXZlQ2hhbmdlcygpO1xuXHR9XG5cblx0cHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdXRwdXRTdHJlYW0gPSBTdHJlYW1zLmNyZWF0ZUJ5dGVBcnJheU91dHB1dFN0cmVhbSgpO1xuXHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdHRoaXMubmF0aXZlLndyaXRlVG8ob3V0cHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG91dHB1dFN0cmVhbS5nZXRUZXh0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBTT0FQIFBhcnQgV3JhcHBlclxuICovXG5jbGFzcyBQYXJ0IHtcblxuXHQvLyBSZW5hbWVkIHRvIG5hdGl2ZVxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RW52ZWxvcGUoKTogRW52ZWxvcGUge1xuXHRcdHJldHVybiBuZXcgRW52ZWxvcGUodGhpcy5uYXRpdmUuZ2V0RW52ZWxvcGUoKSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTT0FQIE1pbWUgSGVhZGVycyBXcmFwcGVyXG4gKi9cbmNsYXNzIE1pbWVIZWFkZXJzIHtcblxuXHQvLyBSZW5hbWVkIHRvIG5hdGl2ZVxuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuYWRkSGVhZGVyKG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBhZGRCYXNpY0F1dGhlbnRpY2F0aW9uSGVhZGVyKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VyQW5kUGFzc3dvcmQgPSBgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gO1xuXHRcdGNvbnN0IGJhc2ljQXV0aCA9IEJhc2U2NC5lbmNvZGUodXNlckFuZFBhc3N3b3JkKTtcblx0XHR0aGlzLm5hdGl2ZS5hZGRIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIGBCYXNpYyAke2Jhc2ljQXV0aH1gKTtcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgRW52ZWxvcGUgV3JhcHBlclxuICovXG5jbGFzcyBFbnZlbG9wZSB7XG5cdC8vIFJlbmFtZWQgdG8gbmF0aXZlXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXg6IHN0cmluZywgdXJpOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5hZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXgsIHVyaSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qm9keSgpOiBCb2R5IHtcblx0XHRyZXR1cm4gbmV3IEJvZHkodGhpcy5uYXRpdmUuZ2V0Qm9keSgpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRIZWFkZXIoKTogSGVhZGVyIHtcblx0XHRyZXR1cm4gbmV3IEhlYWRlcih0aGlzLm5hdGl2ZS5nZXRIZWFkZXIoKSk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlTmFtZShsb2NhbE5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHVyaTogc3RyaW5nKTogTmFtZSB7XG5cdFx0cmV0dXJuIG5ldyBOYW1lKHRoaXMubmF0aXZlLmNyZWF0ZU5hbWUobG9jYWxOYW1lLCBwcmVmaXgsIHVyaSkpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBCb2R5IFdyYXBwZXJcbiAqL1xuY2xhc3MgQm9keSB7XG5cdC8vIFJlbmFtZWQgdG8gbmF0aXZlXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogRWxlbWVudCB7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50KHRoaXMubmF0aXZlLmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUsIHByZWZpeCkpO1xuXHR9XG5cblx0cHVibGljIGdldENoaWxkRWxlbWVudHMoKTogRWxlbWVudFtdIHtcblx0XHRjb25zdCBjaGlsZEVsZW1lbnRzID0gW107XG5cdFx0Y29uc3QgaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRFbGVtZW50cygpO1xuXHRcdHdoaWxlIChpbnRlcm5hbEVsZW1lbnRzSXRlcmF0b3IuaGFzTmV4dCgpKSB7XG5cdFx0XHRjaGlsZEVsZW1lbnRzLnB1c2gobmV3IEVsZW1lbnQoaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yLm5leHQoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2hpbGRFbGVtZW50cztcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgSGVhZGVyIFdyYXBwZXJcbiAqL1xuY2xhc3MgSGVhZGVyIHtcblx0Ly8gUmVuYW1lZCB0byBuYXRpdmVcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0cHVibGljIGFkZEhlYWRlckVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmFkZEhlYWRlckVsZW1lbnQoZWxlbWVudC5uYXRpdmUpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBOYW1lIFdyYXBwZXJcbiAqL1xuY2xhc3MgTmFtZSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXHRcblx0cHVibGljIGdldE5hdGl2ZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2NhbE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TG9jYWxOYW1lKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJlZml4KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFByZWZpeCgpO1xuXHR9XG5cblx0cHVibGljIGdldFF1YWxpZmllZE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0UXVhbGlmaWVkTmFtZSgpO1xuXHR9XG5cblx0cHVibGljIGdldFVSSSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRVUkkoKTtcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgRWxlbWVudCBXcmFwcGVyXG4gKi9cbmNsYXNzIEVsZW1lbnQge1xuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50KHRoaXMubmF0aXZlLmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUsIHByZWZpeCkpO1xuXHR9XG5cblx0cHVibGljIGFkZFRleHROb2RlKHRleHQ6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRcdHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5hdGl2ZS5hZGRUZXh0Tm9kZSh0ZXh0KSk7XG5cdH1cblxuXHRwdWJsaWMgYWRkQXR0cmlidXRlKG5hbWU6IE5hbWUsIHZhbHVlOiBhbnkpOiBFbGVtZW50IHtcblx0XHQvLyBVc2UgbmFtZS5uYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5hdGl2ZS5hZGRBdHRyaWJ1dGUobmFtZS5nZXROYXRpdmUoKSwgdmFsdWUpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDaGlsZEVsZW1lbnRzKCk6IEVsZW1lbnRbXSB7XG5cdFx0Y29uc3QgY2hpbGRFbGVtZW50cyA9IFtdO1xuXHRcdGNvbnN0IGludGVybmFsRWxlbWVudHNJdGVyYXRvciA9IHRoaXMubmF0aXZlLmdldENoaWxkRWxlbWVudHMoKTtcblx0XHR3aGlsZSAoaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkge1xuXHRcdFx0Y2hpbGRFbGVtZW50cy5wdXNoKG5ldyBFbGVtZW50KGludGVybmFsRWxlbWVudHNJdGVyYXRvci5uZXh0KCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNoaWxkRWxlbWVudHM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RWxlbWVudE5hbWUoKTogTmFtZSB8IHVuZGVmaW5lZCB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGludGVybmFsTmFtZSA9IHRoaXMubmF0aXZlLmdldEVsZW1lbnROYW1lKCk7XG5cdFx0XHRyZXR1cm4gbmV3IE5hbWUoaW50ZXJuYWxOYW1lKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBUaGlzIGNhdGNoIGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGEgU09BUEVsZW1lbnRcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRWYWx1ZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0cHVibGljIGlzU09BUEVsZW1lbnQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudE5hbWUoKSAhPT0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gU09BUDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUF3QjtBQUN4QixvQkFBdUI7QUFDdkIscUJBQXFDO0FBRXJDLE1BQU0saUJBQWlCLEtBQUssS0FBSyxpQ0FBaUM7QUFDbEUsTUFBTSxzQkFBc0IsS0FBSyxLQUFLLDhCQUE4QjtBQUNwRSxNQUFNLHdCQUF3QixLQUFLLEtBQUssd0NBQXdDO0FBTXpFLE1BQU0sS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9qQixPQUFjLEtBQUssU0FBa0IsS0FBYTtBQUNqRCxVQUFNLHdCQUF3QixzQkFBc0IsWUFBWTtBQUNoRSxVQUFNLHFCQUFxQixzQkFBc0IsaUJBQWlCO0FBRWxFLFVBQU0sbUJBQW1CLG1CQUFtQixLQUFLLFFBQVEsUUFBUSxHQUFHO0FBQ3BFLFdBQU8sSUFBSSxRQUFRLGdCQUFnQjtBQUFBLEVBQ3BDO0FBQUEsRUFFQSxPQUFjLFdBQVc7QUFBQSxFQUV6QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBYyxnQkFBeUI7QUFDdEMsV0FBTyxJQUFJLFFBQVEsZUFBZSxZQUFZLEVBQUUsY0FBYyxDQUFDO0FBQUEsRUFDaEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLGFBQWEsYUFBMEIsYUFBbUM7QUFDdkYsVUFBTSxrQkFBa0IsZUFBZSxZQUFZO0FBRW5ELFFBQUksWUFBWSxRQUFRO0FBQ3ZCLFVBQUk7QUFFSCxjQUFNLGtCQUFrQixn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
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25ldC9zb2FwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBSZXF1ZXN0IH0gZnJvbSBcIkBhZXJva2l0L3Nkay9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IEJhc2U2NCB9IGZyb20gXCJAYWVyb2tpdC9zZGsvdXRpbHMvYmFzZTY0XCI7XG5pbXBvcnQgeyBTdHJlYW1zLCBJbnB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiO1xuXG5jb25zdCBNZXNzYWdlRmFjdG9yeSA9IEphdmEudHlwZShcImpha2FydGEueG1sLnNvYXAuTWVzc2FnZUZhY3RvcnlcIik7XG5jb25zdCBNaW1lSGVhZGVyc0ludGVybmFsID0gSmF2YS50eXBlKFwiamFrYXJ0YS54bWwuc29hcC5NaW1lSGVhZGVyc1wiKTtcbmNvbnN0IFNPQVBDb25uZWN0aW9uRmFjdG9yeSA9IEphdmEudHlwZShcImpha2FydGEueG1sLnNvYXAuU09BUENvbm5lY3Rpb25GYWN0b3J5XCIpO1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBhbmQgY2FsbGluZyBTT0FQIG1lc3NhZ2VzLlxuICogSXQgd3JhcHMgdGhlIHVuZGVybHlpbmcgSmF2YSBqYXZheC54bWwuc29hcCBBUEkuXG4gKi9cbmV4cG9ydCBjbGFzcyBTT0FQIHtcblxuXHQvKipcblx0ICogQ2FsbCBhIGdpdmVuIFNPQVAgZW5kcG9pbnQgd2l0aCBhIGdpdmVuIHJlcXVlc3QgbWVzc2FnZVxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgU09BUCBNZXNzYWdlIHdyYXBwZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gdXJsIFRoZSB0YXJnZXQgU09BUCBlbmRwb2ludCBVUkwuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNhbGwobWVzc2FnZTogTWVzc2FnZSwgdXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCBzb2FwQ29ubmVjdGlvbkZhY3RvcnkgPSBTT0FQQ29ubmVjdGlvbkZhY3RvcnkubmV3SW5zdGFuY2UoKTtcblx0XHRjb25zdCBpbnRlcm5hbENvbm5lY3Rpb24gPSBzb2FwQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlQ29ubmVjdGlvbigpO1xuXHRcdC8vIEFjY2Vzc2luZyB0aGUgaW50ZXJuYWwgcHJvcGVydHkgbmF0aXZlIChyZW5hbWVkIGZyb20gJ25hdGl2ZScgZm9yIGJldHRlciBlbmNhcHN1bGF0aW9uKVxuXHRcdGNvbnN0IGludGVybmFsUmVzcG9uc2UgPSBpbnRlcm5hbENvbm5lY3Rpb24uY2FsbChtZXNzYWdlLm5hdGl2ZSwgdXJsKTtcblx0XHRyZXR1cm4gbmV3IE1lc3NhZ2UoaW50ZXJuYWxSZXNwb25zZSk7XG5cdH1cblxuXHRwdWJsaWMgc3RhdGljIHRydXN0QWxsKCkge1xuXHRcdC8vIFRPRE86IEltcGxlbWVudCBsb2dpYyBmb3IgdHJ1c3RpbmcgYWxsIGNlcnRpZmljYXRlcyBpZiByZXF1aXJlZCBieSB0aGUgU0RLIGVudmlyb25tZW50XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldywgZW1wdHkgU09BUCBtZXNzYWdlLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBjcmVhdGVNZXNzYWdlKCk6IE1lc3NhZ2Uge1xuXHRcdHJldHVybiBuZXcgTWVzc2FnZShNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU1lc3NhZ2UoKSk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgU09BUCBtZXNzYWdlIGZyb20gYW4gSW5wdXRTdHJlYW0gYW5kIE1pbWVIZWFkZXJzLlxuXHQgKiBAcGFyYW0gbWltZUhlYWRlcnMgVGhlIE1pbWVIZWFkZXJzIHdyYXBwZXIgb2JqZWN0LlxuXHQgKiBAcGFyYW0gaW5wdXRTdHJlYW0gVGhlIElucHV0U3RyZWFtIHdyYXBwZXIgb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBwYXJzZU1lc3NhZ2UobWltZUhlYWRlcnM6IE1pbWVIZWFkZXJzLCBpbnB1dFN0cmVhbTogSW5wdXRTdHJlYW0pOiBNZXNzYWdlIHtcblx0XHRjb25zdCBpbnRlcm5hbEZhY3RvcnkgPSBNZXNzYWdlRmFjdG9yeS5uZXdJbnN0YW5jZSgpO1xuXHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdGlmIChpbnB1dFN0cmVhbS5uYXRpdmUpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1lc3NhZ2UgPSBpbnRlcm5hbEZhY3RvcnkuY3JlYXRlTWVzc2FnZShtaW1lSGVhZGVycy5uYXRpdmUsIGlucHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0XHRcdGNvbnN0IGludGVybmFsUGFydCA9IGludGVybmFsTWVzc2FnZS5nZXRTT0FQUGFydCgpO1xuXHRcdFx0XHRpbnRlcm5hbFBhcnQuZ2V0RW52ZWxvcGUoKTtcblx0XHRcdFx0cmV0dXJuIG5ldyBNZXNzYWdlKGludGVybmFsTWVzc2FnZSk7XG5cdFx0XHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHRcdFx0Y29uc29sZS5lcnJvcihlKTtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcHJvdmlkZWQgaXMgbnVsbCBvciBpbiBhIHdyb25nIGZvcm1hdC4gSFRUUCBtZXRob2QgdXNlZCBtdXN0IGJlIFBPU1QuIFwiICsgZS5tZXNzYWdlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiSW5wdXQgcHJvdmlkZWQgaXMgbnVsbC5cIik7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgU09BUCBtZXNzYWdlIGZyb20gdGhlIGN1cnJlbnQgSFRUUCByZXF1ZXN0IGlucHV0IHN0cmVhbS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgcGFyc2VSZXF1ZXN0KCk6IE1lc3NhZ2Uge1xuXHRcdGlmIChSZXF1ZXN0LmdldE1ldGhvZCgpLnRvVXBwZXJDYXNlKCkgIT09IFwiUE9TVFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJIVFRQIG1ldGhvZCB1c2VkIG11c3QgYmUgUE9TVC5cIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaW5wdXRTdHJlYW0gPSBSZXF1ZXN0LmdldElucHV0U3RyZWFtKCk7XG5cdFx0Y29uc3QgbWltZUhlYWRlcnMgPSB0aGlzLmNyZWF0ZU1pbWVIZWFkZXJzKCk7XG5cblx0XHRyZXR1cm4gdGhpcy5wYXJzZU1lc3NhZ2UobWltZUhlYWRlcnMsIGlucHV0U3RyZWFtKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3LCBlbXB0eSBNaW1lSGVhZGVycyBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGNyZWF0ZU1pbWVIZWFkZXJzKCk6IE1pbWVIZWFkZXJzIHtcblx0XHRjb25zdCBpbnRlcm5hbE1pbWVIZWFkZXJzID0gbmV3IE1pbWVIZWFkZXJzSW50ZXJuYWwoKTtcblx0XHRyZXR1cm4gbmV3IE1pbWVIZWFkZXJzKGludGVybmFsTWltZUhlYWRlcnMpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBNZXNzYWdlIFdyYXBwZXJcbiAqL1xuY2xhc3MgTWVzc2FnZSB7XG5cblx0Ly8gUmVuYW1lZCB0byBuYXRpdmUgdG8gc2lnbmFsIGludGVybmFsLXVzZSBwcm9wZXJ0eSwgaW1wcm92aW5nIGVuY2Fwc3VsYXRpb25cblx0cHVibGljIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGFydCgpOiBQYXJ0IHtcblx0XHRyZXR1cm4gbmV3IFBhcnQodGhpcy5uYXRpdmUuZ2V0U09BUFBhcnQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWltZUhlYWRlcnMoKTogTWltZUhlYWRlcnMge1xuXHRcdHJldHVybiBuZXcgTWltZUhlYWRlcnModGhpcy5uYXRpdmUuZ2V0TWltZUhlYWRlcnMoKSk7XG5cdH1cblxuXHRwdWJsaWMgc2F2ZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zYXZlQ2hhbmdlcygpO1xuXHR9XG5cblx0cHVibGljIGdldFRleHQoKTogc3RyaW5nIHtcblx0XHRjb25zdCBvdXRwdXRTdHJlYW0gPSBTdHJlYW1zLmNyZWF0ZUJ5dGVBcnJheU91dHB1dFN0cmVhbSgpO1xuXHRcdC8vIFVzZSBuYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdHRoaXMubmF0aXZlLndyaXRlVG8ob3V0cHV0U3RyZWFtLm5hdGl2ZSk7XG5cdFx0cmV0dXJuIG91dHB1dFN0cmVhbS5nZXRUZXh0KCk7XG5cdH1cbn1cblxuLyoqXG4gKiBTT0FQIFBhcnQgV3JhcHBlclxuICovXG5jbGFzcyBQYXJ0IHtcblxuXHQvLyBSZW5hbWVkIHRvIG5hdGl2ZVxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RW52ZWxvcGUoKTogRW52ZWxvcGUge1xuXHRcdHJldHVybiBuZXcgRW52ZWxvcGUodGhpcy5uYXRpdmUuZ2V0RW52ZWxvcGUoKSk7XG5cdH1cbn1cblxuLyoqXG4gKiBTT0FQIE1pbWUgSGVhZGVycyBXcmFwcGVyXG4gKi9cbmNsYXNzIE1pbWVIZWFkZXJzIHtcblxuXHQvLyBSZW5hbWVkIHRvIG5hdGl2ZVxuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRIZWFkZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuYWRkSGVhZGVyKG5hbWUsIHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBhZGRCYXNpY0F1dGhlbnRpY2F0aW9uSGVhZGVyKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCB1c2VyQW5kUGFzc3dvcmQgPSBgJHt1c2VybmFtZX06JHtwYXNzd29yZH1gO1xuXHRcdGNvbnN0IGJhc2ljQXV0aCA9IEJhc2U2NC5lbmNvZGUodXNlckFuZFBhc3N3b3JkKTtcblx0XHR0aGlzLm5hdGl2ZS5hZGRIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIGBCYXNpYyAke2Jhc2ljQXV0aH1gKTtcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgRW52ZWxvcGUgV3JhcHBlclxuICovXG5jbGFzcyBFbnZlbG9wZSB7XG5cdC8vIFJlbmFtZWQgdG8gbmF0aXZlXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXg6IHN0cmluZywgdXJpOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5hZGROYW1lc3BhY2VEZWNsYXJhdGlvbihwcmVmaXgsIHVyaSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qm9keSgpOiBCb2R5IHtcblx0XHRyZXR1cm4gbmV3IEJvZHkodGhpcy5uYXRpdmUuZ2V0Qm9keSgpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRIZWFkZXIoKTogSGVhZGVyIHtcblx0XHRyZXR1cm4gbmV3IEhlYWRlcih0aGlzLm5hdGl2ZS5nZXRIZWFkZXIoKSk7XG5cdH1cblxuXHRwdWJsaWMgY3JlYXRlTmFtZShsb2NhbE5hbWU6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHVyaTogc3RyaW5nKTogTmFtZSB7XG5cdFx0cmV0dXJuIG5ldyBOYW1lKHRoaXMubmF0aXZlLmNyZWF0ZU5hbWUobG9jYWxOYW1lLCBwcmVmaXgsIHVyaSkpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBCb2R5IFdyYXBwZXJcbiAqL1xuY2xhc3MgQm9keSB7XG5cdC8vIFJlbmFtZWQgdG8gbmF0aXZlXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogRWxlbWVudCB7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50KHRoaXMubmF0aXZlLmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUsIHByZWZpeCkpO1xuXHR9XG5cblx0cHVibGljIGdldENoaWxkRWxlbWVudHMoKTogRWxlbWVudFtdIHtcblx0XHRjb25zdCBjaGlsZEVsZW1lbnRzID0gW107XG5cdFx0Y29uc3QgaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yID0gdGhpcy5uYXRpdmUuZ2V0Q2hpbGRFbGVtZW50cygpO1xuXHRcdHdoaWxlIChpbnRlcm5hbEVsZW1lbnRzSXRlcmF0b3IuaGFzTmV4dCgpKSB7XG5cdFx0XHRjaGlsZEVsZW1lbnRzLnB1c2gobmV3IEVsZW1lbnQoaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yLm5leHQoKSkpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2hpbGRFbGVtZW50cztcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgSGVhZGVyIFdyYXBwZXJcbiAqL1xuY2xhc3MgSGVhZGVyIHtcblx0Ly8gUmVuYW1lZCB0byBuYXRpdmVcblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0cHVibGljIGFkZEhlYWRlckVsZW1lbnQoZWxlbWVudDogRWxlbWVudCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmFkZEhlYWRlckVsZW1lbnQoZWxlbWVudC5uYXRpdmUpO1xuXHR9XG59XG5cbi8qKlxuICogU09BUCBOYW1lIFdyYXBwZXJcbiAqL1xuY2xhc3MgTmFtZSB7XG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXHRcblx0cHVibGljIGdldE5hdGl2ZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb2NhbE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TG9jYWxOYW1lKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UHJlZml4KCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFByZWZpeCgpO1xuXHR9XG5cblx0cHVibGljIGdldFF1YWxpZmllZE5hbWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0UXVhbGlmaWVkTmFtZSgpO1xuXHR9XG5cblx0cHVibGljIGdldFVSSSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRVUkkoKTtcblx0fVxufVxuXG4vKipcbiAqIFNPQVAgRWxlbWVudCBXcmFwcGVyXG4gKi9cbmNsYXNzIEVsZW1lbnQge1xuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBhZGRDaGlsZEVsZW1lbnQobG9jYWxOYW1lOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKSB7XG5cdFx0cmV0dXJuIG5ldyBFbGVtZW50KHRoaXMubmF0aXZlLmFkZENoaWxkRWxlbWVudChsb2NhbE5hbWUsIHByZWZpeCkpO1xuXHR9XG5cblx0cHVibGljIGFkZFRleHROb2RlKHRleHQ6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRcdHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5hdGl2ZS5hZGRUZXh0Tm9kZSh0ZXh0KSk7XG5cdH1cblxuXHRwdWJsaWMgYWRkQXR0cmlidXRlKG5hbWU6IE5hbWUsIHZhbHVlOiBhbnkpOiBFbGVtZW50IHtcblx0XHQvLyBVc2UgbmFtZS5uYXRpdmUgZm9yIGludGVybmFsIEphdmEgb2JqZWN0IGFjY2Vzc1xuXHRcdHJldHVybiBuZXcgRWxlbWVudCh0aGlzLm5hdGl2ZS5hZGRBdHRyaWJ1dGUobmFtZS5nZXROYXRpdmUoKSwgdmFsdWUpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDaGlsZEVsZW1lbnRzKCk6IEVsZW1lbnRbXSB7XG5cdFx0Y29uc3QgY2hpbGRFbGVtZW50cyA9IFtdO1xuXHRcdGNvbnN0IGludGVybmFsRWxlbWVudHNJdGVyYXRvciA9IHRoaXMubmF0aXZlLmdldENoaWxkRWxlbWVudHMoKTtcblx0XHR3aGlsZSAoaW50ZXJuYWxFbGVtZW50c0l0ZXJhdG9yLmhhc05leHQoKSkge1xuXHRcdFx0Y2hpbGRFbGVtZW50cy5wdXNoKG5ldyBFbGVtZW50KGludGVybmFsRWxlbWVudHNJdGVyYXRvci5uZXh0KCkpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNoaWxkRWxlbWVudHM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RWxlbWVudE5hbWUoKTogTmFtZSB8IHVuZGVmaW5lZCB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGludGVybmFsTmFtZSA9IHRoaXMubmF0aXZlLmdldEVsZW1lbnROYW1lKCk7XG5cdFx0XHRyZXR1cm4gbmV3IE5hbWUoaW50ZXJuYWxOYW1lKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBUaGlzIGNhdGNoIGhhbmRsZXMgY2FzZXMgd2hlcmUgdGhlIGVsZW1lbnQgbWlnaHQgbm90IGJlIGEgU09BUEVsZW1lbnRcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRWYWx1ZSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRWYWx1ZSgpO1xuXHR9XG5cblx0cHVibGljIGlzU09BUEVsZW1lbnQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RWxlbWVudE5hbWUoKSAhPT0gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0gU09BUDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHFCQUF3QjtBQUN4QixvQkFBdUI7QUFDdkIscUJBQXFDO0FBRXJDLE1BQU0saUJBQWlCLEtBQUssS0FBSyxpQ0FBaUM7QUFDbEUsTUFBTSxzQkFBc0IsS0FBSyxLQUFLLDhCQUE4QjtBQUNwRSxNQUFNLHdCQUF3QixLQUFLLEtBQUssd0NBQXdDO0FBTXpFLE1BQU0sS0FBSztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9qQixPQUFjLEtBQUssU0FBa0IsS0FBYTtBQUNqRCxVQUFNLHdCQUF3QixzQkFBc0IsWUFBWTtBQUNoRSxVQUFNLHFCQUFxQixzQkFBc0IsaUJBQWlCO0FBRWxFLFVBQU0sbUJBQW1CLG1CQUFtQixLQUFLLFFBQVEsUUFBUSxHQUFHO0FBQ3BFLFdBQU8sSUFBSSxRQUFRLGdCQUFnQjtBQUFBLEVBQ3BDO0FBQUEsRUFFQSxPQUFjLFdBQVc7QUFBQSxFQUV6QjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBYyxnQkFBeUI7QUFDdEMsV0FBTyxJQUFJLFFBQVEsZUFBZSxZQUFZLEVBQUUsY0FBYyxDQUFDO0FBQUEsRUFDaEU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPQSxPQUFjLGFBQWEsYUFBMEIsYUFBbUM7QUFDdkYsVUFBTSxrQkFBa0IsZUFBZSxZQUFZO0FBRW5ELFFBQUksWUFBWSxRQUFRO0FBQ3ZCLFVBQUk7QUFFSCxjQUFNLGtCQUFrQixn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
|