angular-odata 0.99.0 → 0.99.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -25
- package/esm2020/lib/client.mjs +3 -3
- package/esm2020/lib/models/collection.mjs +23 -7
- package/esm2020/lib/models/model.mjs +1 -1
- package/esm2020/lib/models/options.mjs +25 -14
- package/esm2020/lib/module.mjs +4 -4
- package/esm2020/lib/resources/resource.mjs +6 -14
- package/esm2020/lib/resources/types/action.mjs +4 -1
- package/esm2020/lib/resources/types/batch.mjs +6 -1
- package/esm2020/lib/resources/types/count.mjs +4 -1
- package/esm2020/lib/resources/types/entity-set.mjs +4 -1
- package/esm2020/lib/resources/types/entity.mjs +4 -1
- package/esm2020/lib/resources/types/function.mjs +4 -1
- package/esm2020/lib/resources/types/media.mjs +4 -1
- package/esm2020/lib/resources/types/metadata.mjs +4 -1
- package/esm2020/lib/resources/types/navigation-property.mjs +4 -1
- package/esm2020/lib/resources/types/property.mjs +4 -1
- package/esm2020/lib/resources/types/reference.mjs +4 -1
- package/esm2020/lib/resources/types/singleton.mjs +4 -1
- package/esm2020/lib/resources/types/value.mjs +4 -1
- package/esm2020/lib/schema/element.mjs +12 -2
- package/esm2020/lib/schema/structured-type.mjs +11 -2
- package/esm2020/lib/services/factory.mjs +3 -3
- package/fesm2015/angular-odata.mjs +123 -43
- package/fesm2015/angular-odata.mjs.map +1 -1
- package/fesm2020/angular-odata.mjs +122 -43
- package/fesm2020/angular-odata.mjs.map +1 -1
- package/lib/models/model.d.ts +1 -1
- package/lib/models/options.d.ts +3 -3
- package/lib/resources/resource.d.ts +2 -1
- package/lib/resources/types/action.d.ts +1 -0
- package/lib/resources/types/batch.d.ts +1 -0
- package/lib/resources/types/count.d.ts +1 -0
- package/lib/resources/types/entity-set.d.ts +1 -0
- package/lib/resources/types/entity.d.ts +1 -0
- package/lib/resources/types/function.d.ts +1 -0
- package/lib/resources/types/media.d.ts +1 -0
- package/lib/resources/types/metadata.d.ts +1 -0
- package/lib/resources/types/navigation-property.d.ts +1 -0
- package/lib/resources/types/property.d.ts +1 -0
- package/lib/resources/types/reference.d.ts +1 -0
- package/lib/resources/types/singleton.d.ts +1 -0
- package/lib/resources/types/value.d.ts +1 -0
- package/lib/schema/element.d.ts +7 -1
- package/lib/schema/structured-type.d.ts +7 -1
- package/package.json +1 -1
|
@@ -344,8 +344,8 @@ export class ODataModelOptions {
|
|
|
344
344
|
attach(self, resource) {
|
|
345
345
|
if (self._resource !== null &&
|
|
346
346
|
resource.type() !== self._resource.type() &&
|
|
347
|
-
!
|
|
348
|
-
throw new Error(`Can't
|
|
347
|
+
!self._resource.isSubtypeOf(resource))
|
|
348
|
+
throw new Error(`Can't attach ${resource.type()} to ${self._resource.type()}`);
|
|
349
349
|
const current = self._resource;
|
|
350
350
|
if (current === null || !current.isEqualTo(resource)) {
|
|
351
351
|
self._resource = resource;
|
|
@@ -372,12 +372,7 @@ export class ODataModelOptions {
|
|
|
372
372
|
static resource(child) {
|
|
373
373
|
let resource = undefined;
|
|
374
374
|
for (let [model, field] of ODataModelOptions.chain(child)) {
|
|
375
|
-
resource =
|
|
376
|
-
resource ||
|
|
377
|
-
model._resource ||
|
|
378
|
-
(ODataModelOptions.isModel(model)
|
|
379
|
-
? model._meta.modelResourceFactory()
|
|
380
|
-
: model._model.meta.collectionResourceFactory());
|
|
375
|
+
resource = resource || model._resource;
|
|
381
376
|
if (resource === undefined)
|
|
382
377
|
break;
|
|
383
378
|
if (ODataModelOptions.isModel(model)) {
|
|
@@ -392,7 +387,7 @@ export class ODataModelOptions {
|
|
|
392
387
|
}
|
|
393
388
|
if (field === null) {
|
|
394
389
|
const query = model._resource?.cloneQuery().toQueryArguments();
|
|
395
|
-
if (query !== undefined)
|
|
390
|
+
if (query !== undefined && resource !== undefined)
|
|
396
391
|
resource.query((q) => q.apply(query));
|
|
397
392
|
continue;
|
|
398
393
|
}
|
|
@@ -433,7 +428,8 @@ export class ODataModelOptions {
|
|
|
433
428
|
self._parent = parent;
|
|
434
429
|
}
|
|
435
430
|
// Resource
|
|
436
|
-
|
|
431
|
+
if (self._parent === null && resource === undefined)
|
|
432
|
+
resource = this.modelResourceFactory();
|
|
437
433
|
if (resource !== undefined) {
|
|
438
434
|
this.attach(self, resource);
|
|
439
435
|
}
|
|
@@ -556,14 +552,29 @@ export class ODataModelOptions {
|
|
|
556
552
|
(model != undefined && model.hasChanged({ include_navigation })))));
|
|
557
553
|
}
|
|
558
554
|
asEntity(self, func) {
|
|
559
|
-
|
|
555
|
+
// Build new resource
|
|
556
|
+
const query = self.resource().cloneQuery();
|
|
557
|
+
let resource = this.modelResourceFactory(query);
|
|
558
|
+
if (resource === undefined)
|
|
559
|
+
throw new Error('Model does not have associated Entity endpoint');
|
|
560
|
+
// Store parent and resource
|
|
561
|
+
const store = { parent: self._parent, resource: self._resource };
|
|
562
|
+
// Replace parent and resource
|
|
560
563
|
self._parent = null;
|
|
564
|
+
self._resource = resource;
|
|
565
|
+
// Execute function
|
|
561
566
|
const result = func(self);
|
|
562
567
|
if (result instanceof Observable) {
|
|
563
|
-
return result.pipe(finalize(() =>
|
|
568
|
+
return result.pipe(finalize(() => {
|
|
569
|
+
// Restore parent and resource
|
|
570
|
+
self._parent = store.parent;
|
|
571
|
+
self._resource = store.resource;
|
|
572
|
+
}));
|
|
564
573
|
}
|
|
565
574
|
else {
|
|
566
|
-
|
|
575
|
+
// Restore parent and resource
|
|
576
|
+
self._parent = store.parent;
|
|
577
|
+
self._resource = store.resource;
|
|
567
578
|
return result;
|
|
568
579
|
}
|
|
569
580
|
}
|
|
@@ -942,4 +953,4 @@ export class ODataModelOptions {
|
|
|
942
953
|
});
|
|
943
954
|
}
|
|
944
955
|
}
|
|
945
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9tb2RlbHMvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxRQUFRLEVBQ1IsZUFBZSxFQUNmLHNCQUFzQixHQUN2QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUMvQixxQkFBcUIsR0FLdEIsTUFBTSxjQUFjLENBQUM7QUFPdEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFlMUMsTUFBTSxPQUFPLGVBQWU7SUFZMUIsWUFDRSxJQUF5QixFQUN6QixFQUNFLEtBQUssRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxNQVFMLEVBQUU7UUExQlIsYUFBUSxHQUFZLElBQUksQ0FBQztRQTRCdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxP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ZCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQ3BCO2dCQUNBLElBQUksS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsS0FBSyxFQUFFO29CQUNsQyxJQUNFLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTt3QkFDdkIsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVO3dCQUN6QixLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFDbEI7d0JBQ0EsSUFBSSxHQUFHLEdBQUksUUFBUSxDQUFDLEtBQXlCLENBQUMsV0FBVyxDQUN2RCxRQUFRLENBQUMsS0FBSyxDQUNmLENBQUM7d0JBQ0YsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFOzRCQUNyQixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FDbEMsQ0FBQzt5QkFDSDtxQkFDRjtpQkFDRjtnQkFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENJRF9GSUVMRF9OQU1FLFxuICBDT01QVVRFRCxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBPUFRJTUlTVElDX0NPTkNVUlJFTkNZLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT0RhdGFIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXInO1xuaW1wb3J0IHsgT0RhdGFQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi4vb3B0aW9ucyc7XG5pbXBvcnQge1xuICBFbnRpdHlLZXksXG4gIE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyxcbiAgT0RhdGFFbnRpdHlBbm5vdGF0aW9ucyxcbiAgT0RhdGFFbnRpdHlSZXNvdXJjZSxcbiAgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZSxcbiAgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFQcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YVF1ZXJ5T3B0aW9ucyxcbiAgT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyLFxuICBPRGF0YVJlc291cmNlLFxuICBPRGF0YVNpbmdsZXRvblJlc291cmNlLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdHlTZXQsXG4gIE9EYXRhU3RydWN0dXJlZFR5cGUsXG4gIE9EYXRhU3RydWN0dXJlZFR5cGVGaWVsZFBhcnNlcixcbn0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7IE9wdGlvbnMsIE9wdGlvbnNIZWxwZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgT0RhdGFDb2xsZWN0aW9uIH0gZnJvbSAnLi9jb2xsZWN0aW9uJztcbmltcG9ydCB0eXBlIHsgT0RhdGFNb2RlbCB9IGZyb20gJy4vbW9kZWwnO1xuXG5leHBvcnQgdHlwZSBPRGF0YU1vZGVsRXZlbnRUeXBlID1cbiAgfCAnY2hhbmdlJ1xuICB8ICdyZXNldCdcbiAgfCAndXBkYXRlJ1xuICB8ICdkZXN0cm95J1xuICB8ICdhZGQnXG4gIHwgJ3JlbW92ZSdcbiAgfCAnaW52YWxpZCdcbiAgfCAncmVxdWVzdCdcbiAgfCAnc3luYydcbiAgfCAnYXR0YWNoJztcbmV4cG9ydCBjbGFzcyBPRGF0YU1vZGVsRXZlbnQ8VD4ge1xuICBuYW1lOiBPRGF0YU1vZGVsRXZlbnRUeXBlO1xuICBidWJibGluZzogYm9vbGVhbiA9IHRydWU7XG4gIG1vZGVsPzogT0RhdGFNb2RlbDxUPjtcbiAgY29sbGVjdGlvbj86IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PjtcbiAgY2hhaW46IFtcbiAgICBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgIHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgXVtdO1xuICB2YWx1ZT86IGFueTtcbiAgcHJldmlvdXM/OiBhbnk7XG4gIG9wdGlvbnM/OiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IE9EYXRhTW9kZWxFdmVudFR5cGUsXG4gICAge1xuICAgICAgbW9kZWwsXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgcHJldmlvdXMsXG4gICAgICB2YWx1ZSxcbiAgICAgIHRyYWNrLFxuICAgICAgb3B0aW9ucyxcbiAgICB9OiB7XG4gICAgICBtb2RlbD86IE9EYXRhTW9kZWw8VD47XG4gICAgICBjb2xsZWN0aW9uPzogT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+O1xuICAgICAgdHJhY2s/OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICBwcmV2aW91cz86IGFueTtcbiAgICAgIHZhbHVlPzogYW55O1xuICAgICAgb3B0aW9ucz86IGFueTtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgICB0aGlzLnByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jaGFpbiA9IFtcbiAgICAgIFtcbiAgICAgICAgKHRoaXMuY29sbGVjdGlvbiB8fCB0aGlzLm1vZGVsKSBhc1xuICAgICAgICAgIHwgT0RhdGFNb2RlbDxhbnk+XG4gICAgICAgICAgfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICB0cmFjayB8fCBudWxsLFxuICAgICAgXSxcbiAgICBdO1xuICB9XG5cbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuYnViYmxpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHB1c2goXG4gICAgbW9kZWw6IE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgdHJhY2s6IHN0cmluZyB8IG51bWJlclxuICApIHtcbiAgICB0aGlzLmNoYWluLnNwbGljZSgwLCAwLCBbbW9kZWwsIHRyYWNrXSk7XG4gIH1cblxuICB2aXNpdGVkKG1vZGVsOiBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2hhaW4uc29tZSgoYykgPT4gY1swXSA9PT0gbW9kZWwpICYmXG4gICAgICB0aGlzLmNoYWluW3RoaXMuY2hhaW4ubGVuZ3RoIC0gMV1bMF0gIT09IG1vZGVsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBwYXRoKCkge1xuICAgIHJldHVybiB0aGlzLmNoYWluXG4gICAgICAubWFwKChbLCB0cmFja10sIGluZGV4KSA9PlxuICAgICAgICB0eXBlb2YgdHJhY2sgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBgWyR7dHJhY2t9XWBcbiAgICAgICAgICA6IHR5cGVvZiB0cmFjayA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGluZGV4ID09PSAwXG4gICAgICAgICAgICA/IHRyYWNrXG4gICAgICAgICAgICA6IGAuJHt0cmFja31gXG4gICAgICAgICAgOiAnJ1xuICAgICAgKVxuICAgICAgLmpvaW4oJycpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBCVUJCTElORyA9IFtcbiAgJ2NoYW5nZScsXG4gICdyZXNldCcsXG4gICd1cGRhdGUnLFxuICAnZGVzdHJveScsXG4gICdhZGQnLFxuICAncmVtb3ZlJyxcbl07XG5cbmV4cG9ydCBjb25zdCBJTkNMVURFX1NIQUxMT1cgPSB7XG4gIGluY2x1ZGVfY29uY3VycmVuY3k6IHRydWUsXG4gIGluY2x1ZGVfY29tcHV0ZWQ6IHRydWUsXG4gIGluY2x1ZGVfa2V5OiB0cnVlLFxufTtcblxuZXhwb3J0IGNvbnN0IElOQ0xVREVfREVFUCA9IHtcbiAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICBpbmNsdWRlX25vbl9maWVsZDogdHJ1ZSxcbiAgLi4uSU5DTFVERV9TSEFMTE9XLFxufTtcblxuZXhwb3J0IGVudW0gT0RhdGFNb2RlbFN0YXRlIHtcbiAgQWRkZWQsXG4gIFJlbW92ZWQsXG4gIENoYW5nZWQsXG4gIFVuY2hhbmdlZCxcbn1cblxuZXhwb3J0IHR5cGUgTW9kZWxPcHRpb25zID0ge1xuICBjaWQ/OiBzdHJpbmc7XG4gIGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogTW9kZWxGaWVsZE9wdGlvbnMgfTtcbn07XG5cbmV4cG9ydCB0eXBlIE1vZGVsRmllbGRPcHRpb25zID0ge1xuICBmaWVsZD86IHN0cmluZztcbiAgZGVmYXVsdD86IGFueTtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBjb25jdXJyZW5jeT86IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbCh7IGNpZCA9IENJRF9GSUVMRF9OQU1FIH06IHsgY2lkPzogc3RyaW5nIH0gPSB7fSkge1xuICByZXR1cm4gPFQgZXh0ZW5kcyB7IG5ldyAoLi4uYXJnczogYW55W10pOiB7fSB9Pihjb25zdHJ1Y3RvcjogVCkgPT4ge1xuICAgIGNvbnN0IEtsYXNzID0gPGFueT5jb25zdHJ1Y3RvcjtcbiAgICBpZiAoIUtsYXNzLmhhc093blByb3BlcnR5KCdvcHRpb25zJykpXG4gICAgICBLbGFzcy5vcHRpb25zID0geyBmaWVsZHM6IHt9IH0gYXMgTW9kZWxPcHRpb25zO1xuICAgIEtsYXNzLm9wdGlvbnMuY2lkID0gY2lkO1xuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vZGVsRmllbGQoe1xuICBuYW1lLFxuICAuLi5vcHRpb25zXG59OiB7IG5hbWU/OiBzdHJpbmcgfSAmIE1vZGVsRmllbGRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBjb25zdCBLbGFzcyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgICBpZiAoIUtsYXNzLmhhc093blByb3BlcnR5KCdvcHRpb25zJykpXG4gICAgICBLbGFzcy5vcHRpb25zID0geyBmaWVsZHM6IHt9IH0gYXMgTW9kZWxPcHRpb25zO1xuICAgIG9wdGlvbnMuZmllbGQgPSBuYW1lIHx8IGtleTtcbiAgICBLbGFzcy5vcHRpb25zLmZpZWxkc1trZXldID0gb3B0aW9ucztcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbEZpZWxkT3B0aW9uczxGPiA9IE1vZGVsRmllbGRPcHRpb25zICYge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHBhcnNlcjogT0RhdGFTdHJ1Y3R1cmVkVHlwZUZpZWxkUGFyc2VyPEY+O1xufTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhTW9kZWxGaWVsZDxGPiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZmllbGQ6IHN0cmluZztcbiAgcGFyc2VyOiBPRGF0YVN0cnVjdHVyZWRUeXBlRmllbGRQYXJzZXI8Rj47XG4gIG9wdGlvbnM6IE9EYXRhTW9kZWxPcHRpb25zPGFueT47XG4gIG1ldGE/OiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICBkZWZhdWx0PzogYW55O1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgY29uY3VycmVuY3k6IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogT0RhdGFNb2RlbE9wdGlvbnM8YW55PixcbiAgICB7IG5hbWUsIGZpZWxkLCBwYXJzZXIsIC4uLm9wdHMgfTogT0RhdGFNb2RlbEZpZWxkT3B0aW9uczxGPlxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5maWVsZCA9IGZpZWxkO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuZGVmYXVsdCA9IG9wdHMuZGVmYXVsdCB8fCBwYXJzZXIuZGVmYXVsdDtcbiAgICB0aGlzLnJlcXVpcmVkID0gQm9vbGVhbihvcHRzLnJlcXVpcmVkIHx8ICFwYXJzZXIubnVsbGFibGUpO1xuICAgIHRoaXMuY29uY3VycmVuY3kgPSBCb29sZWFuKG9wdHMuY29uY3VycmVuY3kpO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gb3B0cy5tYXhMZW5ndGggfHwgcGFyc2VyLm1heExlbmd0aDtcbiAgICB0aGlzLm1pbkxlbmd0aCA9IG9wdHMubWluTGVuZ3RoO1xuICAgIHRoaXMubWluID0gb3B0cy5taW47XG4gICAgdGhpcy5tYXggPSBvcHRzLm1heDtcbiAgICB0aGlzLnBhdHRlcm4gPSBvcHRzLnBhdHRlcm47XG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXBpO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnR5cGU7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvbigpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcnNlci5uYXZpZ2F0aW9uKTtcbiAgfVxuXG4gIGdldCBjb2xsZWN0aW9uKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMucGFyc2VyLmNvbGxlY3Rpb24pO1xuICB9XG5cbiAgYW5ub3RhdGVkVmFsdWU8VD4odGVybTogc3RyaW5nIHwgUmVnRXhwKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmFubm90YXRlZFZhbHVlPFQ+KHRlcm0pO1xuICB9XG5cbiAgY29uZmlndXJlKHtcbiAgICBmaW5kT3B0aW9uc0ZvclR5cGUsXG4gICAgY29uY3VycmVuY3ksXG4gICAgb3B0aW9ucyxcbiAgfToge1xuICAgIGZpbmRPcHRpb25zRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25jdXJyZW5jeTogYm9vbGVhbjtcbiAgICBvcHRpb25zOiBPcHRpb25zSGVscGVyO1xuICB9KSB7XG4gICAgdGhpcy5tZXRhID0gZmluZE9wdGlvbnNGb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuICAgIGlmIChjb25jdXJyZW5jeSkgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgIGlmICh0aGlzLmRlZmF1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVzZXJpYWxpemUodGhpcy5kZWZhdWx0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlzS2V5KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5pc0tleSgpO1xuICB9XG5cbiAgaGFzUmVmZXJlbnRpYWxzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5oYXNSZWZlcmVudGlhbHMoKTtcbiAgfVxuXG4gIGdldCByZWZlcmVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnJlZmVyZW50aWFscztcbiAgfVxuXG4gIGlzU3RydWN0dXJlZFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmlzU3RydWN0dXJlZFR5cGUoKTtcbiAgfVxuXG4gIHN0cnVjdHVyZWQoKSB7XG4gICAgbGV0IHN0cnVjdHVyZWRUeXBlID0gdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxGPihcbiAgICAgIHRoaXMucGFyc2VyLnR5cGVcbiAgICApO1xuICAgIC8vVGhyb3cgZXJyb3IgaWYgbm90IGZvdW5kXG4gICAgaWYgKCFzdHJ1Y3R1cmVkVHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc3RydWN0dXJlZCB0eXBlIGZvciAke3RoaXMucGFyc2VyLnR5cGV9YCk7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRUeXBlO1xuICB9XG5cbiAgaXNFbnVtVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaXNFbnVtVHlwZSgpO1xuICB9XG5cbiAgZW51bSgpIHtcbiAgICBsZXQgZW51bVR5cGUgPSB0aGlzLmFwaS5maW5kRW51bVR5cGVGb3JUeXBlPEY+KHRoaXMucGFyc2VyLnR5cGUpO1xuICAgIC8vVGhyb3cgZXJyb3IgaWYgbm90IGZvdW5kXG4gICAgaWYgKCFlbnVtVHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgZW51bSB0eXBlIGZvciAke3RoaXMucGFyc2VyLnR5cGV9YCk7XG4gICAgcmV0dXJuIGVudW1UeXBlO1xuICB9XG5cbiAgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICB7XG4gICAgICBtZXRob2QsXG4gICAgICBuYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgICAgbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8qXG4gICAgaWYgKCdpc1ZhbGlkJyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuaXNWYWxpZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuICF2YWx1ZS5pc1ZhbGlkKHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pID8gdmFsdWUuX2Vycm9ycyA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKCdtb2RlbHMnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5tb2RlbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICovXG4gICAgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gIXZhbHVlLmlzVmFsaWQoeyBtZXRob2QsIG5hdmlnYXRpb24gfSkgPyB2YWx1ZS5fZXJyb3JzIDogdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5tb2RlbHMoKVxuICAgICAgICAuc29tZSgobTogT0RhdGFNb2RlbDxhbnk+KSA9PiAhbS5pc1ZhbGlkKHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pKVxuICAgICAgICA/IHZhbHVlLm1vZGVscygpLm1hcCgobTogT0RhdGFNb2RlbDxhbnk+KSA9PiBtLl9lcnJvcnMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb21wdXRlZCA9IHRoaXMuYW5ub3RhdGVkVmFsdWU8Ym9vbGVhbj4oQ09NUFVURUQpO1xuICAgICAgbGV0IGVycm9ycyA9IHRoaXMucGFyc2VyPy52YWxpZGF0ZSh2YWx1ZSwgeyBtZXRob2QsIG5hdmlnYXRpb24gfSkgfHwgW107XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucmVxdWlyZWQgJiZcbiAgICAgICAgKHZhbHVlID09PSBudWxsIHx8ICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG1ldGhvZCAhPT0gJ21vZGlmeScpKSAmJiAvLyBJcyBudWxsIG9yIHVuZGVmaW5lZCB3aXRob3V0IHBhdGNoP1xuICAgICAgICAhKGNvbXB1dGVkICYmIG1ldGhvZCA9PT0gJ2NyZWF0ZScpIC8vIE5vdCAoSXMgQ29tcHV0ZWQgZmllbGQgYW5kIGNyZWF0ZSkgP1xuICAgICAgKSB7XG4gICAgICAgIGVycm9yc1sncHVzaCddKGByZXF1aXJlZGApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGhcbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgbWF4bGVuZ3RoYCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGVycm9yc1sncHVzaCddKGBtaW5sZW5ndGhgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5taW4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgIHZhbHVlIDwgdGhpcy5taW5cbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgbWluYCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICB2YWx1ZSA+IHRoaXMubWF4XG4gICAgICApIHtcbiAgICAgICAgZXJyb3JzWydwdXNoJ10oYG1heGApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnBhdHRlcm4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICF0aGlzLnBhdHRlcm4udGVzdCh2YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgcGF0dGVybmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFUeXBlcy5pc0VtcHR5KGVycm9ycykgPyBlcnJvcnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdHMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc1N0cnVjdHVyZWRUeXBlKCkgJiYgdGhpcy5tZXRhICE9PSB1bmRlZmluZWRcbiAgICAgID8gdGhpcy5tZXRhLmRlZmF1bHRzKClcbiAgICAgIDogdGhpcy5kZWZhdWx0O1xuICB9XG5cbiAgZGVzZXJpYWxpemUodmFsdWU6IGFueSwgb3B0aW9ucz86IE9wdGlvbnMpOiBGIHtcbiAgICBjb25zdCBwYXJzZXJPcHRpb25zID1cbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG5ldyBPRGF0YVBhcnNlck9wdGlvbnMob3B0aW9ucylcbiAgICAgICAgOiB0aGlzLmFwaS5vcHRpb25zO1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5kZXNlcmlhbGl6ZSh2YWx1ZSwgcGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICBzZXJpYWxpemUodmFsdWU6IEYsIG9wdGlvbnM/OiBPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCBwYXJzZXJPcHRpb25zID1cbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG5ldyBPRGF0YVBhcnNlck9wdGlvbnMob3B0aW9ucylcbiAgICAgICAgOiB0aGlzLmFwaS5vcHRpb25zO1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5zZXJpYWxpemUodmFsdWUsIHBhcnNlck9wdGlvbnMpO1xuICB9XG5cbiAgZW5jb2RlKHZhbHVlOiBGLCBvcHRpb25zPzogT3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgcGFyc2VyT3B0aW9ucyA9XG4gICAgICBvcHRpb25zICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBuZXcgT0RhdGFQYXJzZXJPcHRpb25zKG9wdGlvbnMpXG4gICAgICAgIDogdGhpcy5hcGkub3B0aW9ucztcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuZW5jb2RlKHZhbHVlLCBwYXJzZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJlc291cmNlRmFjdG9yeTxULCBGPihcbiAgICBiYXNlOiBPRGF0YVJlc291cmNlPFQ+XG4gICk6IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8Rj4gfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8Rj4ge1xuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIGJhc2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlIHx8XG4gICAgICAgIGJhc2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIHx8XG4gICAgICAgIGJhc2UgaW5zdGFuY2VvZiBPRGF0YVByb3BlcnR5UmVzb3VyY2VcbiAgICAgIClcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBidWlsZCByZXNvdXJjZSBmb3Igbm9uIGNvbXBhdGlibGUgYmFzZSB0eXBlXCIpO1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25cbiAgICAgID8gKGJhc2UgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPikubmF2aWdhdGlvblByb3BlcnR5PEY+KHRoaXMucGFyc2VyLm5hbWUpXG4gICAgICA6IChiYXNlIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8VD4pLnByb3BlcnR5PEY+KHRoaXMucGFyc2VyLm5hbWUpO1xuICB9XG5cbiAgYW5ub3RhdGlvbnNGYWN0b3J5KFxuICAgIGJhc2U6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnNcbiAgKTogT0RhdGFFbnRpdHlBbm5vdGF0aW9ucyB8IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmNvbGxlY3Rpb25cbiAgICAgID8gbmV3IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyhcbiAgICAgICAgICBiYXNlLmhlbHBlcixcbiAgICAgICAgICBiYXNlLnByb3BlcnR5KHRoaXMucGFyc2VyLm5hbWUpIHx8IHt9XG4gICAgICAgIClcbiAgICAgIDogbmV3IE9EYXRhRW50aXR5QW5ub3RhdGlvbnMoXG4gICAgICAgICAgYmFzZS5oZWxwZXIsXG4gICAgICAgICAgYmFzZS5wcm9wZXJ0eSh0aGlzLnBhcnNlci5uYW1lKSB8fCB7fVxuICAgICAgICApO1xuICB9XG5cbiAgc2NoZW1hRmFjdG9yeTxULCBGPihcbiAgICBiYXNlOiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+XG4gICk6IE9EYXRhU3RydWN0dXJlZFR5cGU8Rj4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuICB9XG5cbiAgbW9kZWxDb2xsZWN0aW9uRmFjdG9yeTxULCBGPih7XG4gICAgcGFyZW50LFxuICAgIHZhbHVlLFxuICAgIHJlc2V0LFxuICB9OiB7XG4gICAgcGFyZW50OiBPRGF0YU1vZGVsPGFueT47XG4gICAgdmFsdWU/OiBGIHwgRltdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdO1xuICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgfSk6IE9EYXRhTW9kZWw8Rj4gfCBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4ge1xuICAgIGNvbnN0IGFubm90cyA9IHRoaXMuYW5ub3RhdGlvbnNGYWN0b3J5KHBhcmVudC5hbm5vdHMoKSk7XG4gICAgY29uc3QgTW9kZWwgPSB0aGlzLmFwaS5tb2RlbEZvclR5cGUodGhpcy5wYXJzZXIudHlwZSk7XG4gICAgY29uc3QgQ29sbGVjdGlvbiA9IHRoaXMuYXBpLmNvbGxlY3Rpb25Gb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuXG4gICAgaWYgKE1vZGVsID09PSB1bmRlZmluZWQgfHwgQ29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgRXJyb3IoYE5vIG1vZGVsIGZvciAke3RoaXMubmFtZX1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuY29sbGVjdGlvblxuICAgICAgPyAobmV3IENvbGxlY3Rpb24oKHZhbHVlIHx8IFtdKSBhcyBGW10sIHtcbiAgICAgICAgICBhbm5vdHM6IGFubm90cyBhcyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gICAgICAgICAgcGFyZW50OiBbcGFyZW50LCB0aGlzXSxcbiAgICAgICAgICByZXNldCxcbiAgICAgICAgfSkgYXMgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+KVxuICAgICAgOiAobmV3IE1vZGVsKCh2YWx1ZSB8fCB7fSkgYXMgRiwge1xuICAgICAgICAgIGFubm90czogYW5ub3RzIGFzIE9EYXRhRW50aXR5QW5ub3RhdGlvbnMsXG4gICAgICAgICAgcGFyZW50OiBbcGFyZW50LCB0aGlzXSxcbiAgICAgICAgICByZXNldCxcbiAgICAgICAgfSkgYXMgT0RhdGFNb2RlbDxGPik7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbFJlbGF0aW9uPFQ+ID0ge1xuICBzdGF0ZTogT0RhdGFNb2RlbFN0YXRlO1xuICBtb2RlbD86IE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj4gfCBudWxsO1xuICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPFQ+O1xuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG59O1xuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbEVudHJ5PFQsIE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PiA9IHtcbiAgc3RhdGU6IE9EYXRhTW9kZWxTdGF0ZTtcbiAgbW9kZWw6IE07XG4gIGtleT86IEVudGl0eUtleTxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG59O1xuXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbE9wdGlvbnM8VD4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNpZDogc3RyaW5nO1xuICBiYXNlPzogc3RyaW5nO1xuICBvcGVuPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmllbGRzOiBPRGF0YU1vZGVsRmllbGQ8YW55PltdO1xuICBzY2hlbWE6IE9EYXRhU3RydWN0dXJlZFR5cGU8VD47XG4gIGVudGl0eVNldD86IE9EYXRhRW50aXR5U2V0O1xuICAvLyBIaWVyYXJjaHlcbiAgcGFyZW50PzogT0RhdGFNb2RlbE9wdGlvbnM8YW55PjtcbiAgY2hpbGRyZW46IE9EYXRhTW9kZWxPcHRpb25zPGFueT5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBvcHRpb25zLFxuICAgIHNjaGVtYSxcbiAgfToge1xuICAgIG9wdGlvbnM6IE1vZGVsT3B0aW9ucztcbiAgICBzY2hlbWE6IE9EYXRhU3RydWN0dXJlZFR5cGU8VD47XG4gIH0pIHtcbiAgICB0aGlzLm5hbWUgPSBzY2hlbWEubmFtZTtcbiAgICB0aGlzLmJhc2UgPSBzY2hlbWEuYmFzZTtcbiAgICB0aGlzLm9wZW4gPSBzY2hlbWEub3BlbjtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICB0aGlzLmNpZCA9IG9wdGlvbnM/LmNpZCB8fCBDSURfRklFTERfTkFNRTtcbiAgICB0aGlzLl9maWVsZHMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zLmZpZWxkcykubWFwKChbbmFtZSwgb3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IHsgZmllbGQsIC4uLm9wdHMgfSA9IG9wdGlvbnM7XG4gICAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTW9kZWwgUHJvcGVydGllcyBuZWVkIG5hbWUgYW5kIGZpZWxkJyk7XG4gICAgICBjb25zdCBwYXJzZXIgPSB0aGlzLnNjaGVtYS5maW5kRmllbGRCeU5hbWU8VD4oZmllbGQgYXMga2V5b2YgVCk7XG4gICAgICBpZiAocGFyc2VyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGFyc2VyIGZvciAke2ZpZWxkfSB3aXRoIG5hbWUgPSAke25hbWV9YCk7XG4gICAgICByZXR1cm4gbmV3IE9EYXRhTW9kZWxGaWVsZDxUPih0aGlzLCB7IG5hbWUsIGZpZWxkLCBwYXJzZXIsIC4uLm9wdHMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS5hcGk7XG4gIH1cblxuICB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlKCk7XG4gIH1cblxuICBpc1R5cGVPZih0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEuaXNUeXBlT2YodHlwZSk7XG4gIH1cblxuICBmaW5kQ2hpbGRPcHRpb25zKFxuICAgIHByZWRpY2F0ZTogKG9wdGlvbnM6IE9EYXRhTW9kZWxPcHRpb25zPGFueT4pID0+IGJvb2xlYW5cbiAgKTogT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByZWRpY2F0ZSh0aGlzKSkgcmV0dXJuIHRoaXM7XG4gICAgbGV0IG1hdGNoOiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGNoIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIG1hdGNoID0gY2guZmluZENoaWxkT3B0aW9ucyhwcmVkaWNhdGUpO1xuICAgICAgaWYgKG1hdGNoICE9PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25maWd1cmUoe1xuICAgIGZpbmRPcHRpb25zRm9yVHlwZSxcbiAgICBvcHRpb25zLFxuICB9OiB7XG4gICAgZmluZE9wdGlvbnNGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIG9wdGlvbnM6IE9wdGlvbnNIZWxwZXI7XG4gIH0pIHtcbiAgICBpZiAodGhpcy5iYXNlKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBmaW5kT3B0aW9uc0ZvclR5cGUodGhpcy5iYXNlKSBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2godGhpcyk7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdGhpcy5lbnRpdHlTZXQgPSB0aGlzLmFwaS5maW5kRW50aXR5U2V0Rm9yRW50aXR5VHlwZSh0aGlzLnR5cGUoKSk7XG4gICAgbGV0IGNvbmN1cnJlbmN5RmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLmVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25jdXJyZW5jeUZpZWxkcyA9XG4gICAgICAgIHRoaXMuZW50aXR5U2V0LmFubm90YXRlZFZhbHVlPHN0cmluZ1tdPihPUFRJTUlTVElDX0NPTkNVUlJFTkNZKSB8fCBbXTtcbiAgICB9XG4gICAgdGhpcy5fZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBsZXQgY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeUZpZWxkcy5pbmRleE9mKGZpZWxkLmZpZWxkKSAhPT0gLTE7XG4gICAgICBmaWVsZC5jb25maWd1cmUoe1xuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGUsXG4gICAgICAgIGNvbmN1cnJlbmN5LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmaWVsZHMoe1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbiA9IGZhbHNlLFxuICAgIGluY2x1ZGVfcGFyZW50cyA9IHRydWUsXG4gIH06IHtcbiAgICBpbmNsdWRlX3BhcmVudHM/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gIH0gPSB7fSk6IE9EYXRhTW9kZWxGaWVsZDxhbnk+W10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oaW5jbHVkZV9wYXJlbnRzICYmIHRoaXMucGFyZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLnBhcmVudC5maWVsZHMoeyBpbmNsdWRlX25hdmlnYXRpb24sIGluY2x1ZGVfcGFyZW50cyB9KVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLnRoaXMuX2ZpZWxkcy5maWx0ZXIoXG4gICAgICAgIChmaWVsZCkgPT4gaW5jbHVkZV9uYXZpZ2F0aW9uIHx8ICFmaWVsZC5uYXZpZ2F0aW9uXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICBmaWVsZDxGPihuYW1lOiBrZXlvZiBUIHwgc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gdGhpcy5maWVsZHMoe1xuICAgICAgaW5jbHVkZV9wYXJlbnRzOiB0cnVlLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICAgIH0pLmZpbmQoXG4gICAgICAobW9kZWxGaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+KSA9PlxuICAgICAgICBtb2RlbEZpZWxkLm5hbWUgPT09IG5hbWUgfHwgbW9kZWxGaWVsZC5maWVsZCA9PT0gbmFtZVxuICAgICk7XG4gICAgLy9UaHJvdyBlcnJvciBpZiBub3QgZm91bmRcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKGBObyBmaWVsZCB3aXRoIG5hbWUgJHtuYW1lfWApO1xuICAgIHJldHVybiBmaWVsZDtcbiAgfVxuXG4gIGF0dGFjaChcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHJlc291cmNlOlxuICAgICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD5cbiAgKSB7XG4gICAgaWYgKFxuICAgICAgc2VsZi5fcmVzb3VyY2UgIT09IG51bGwgJiZcbiAgICAgIHJlc291cmNlLnR5cGUoKSAhPT0gc2VsZi5fcmVzb3VyY2UudHlwZSgpICYmXG4gICAgICAhcmVzb3VyY2UuaXNTdWJ0eXBlT2Yoc2VsZi5fcmVzb3VyY2UpXG4gICAgKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2FuJ3QgcmVhdHRhY2ggJHtyZXNvdXJjZS50eXBlKCl9IHRvICR7c2VsZi5fcmVzb3VyY2UudHlwZSgpfWBcbiAgICAgICk7XG5cbiAgICBjb25zdCBjdXJyZW50ID0gc2VsZi5fcmVzb3VyY2U7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgIWN1cnJlbnQuaXNFcXVhbFRvKHJlc291cmNlKSkge1xuICAgICAgc2VsZi5fcmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdhdHRhY2gnLCB7XG4gICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgcHJldmlvdXM6IGN1cnJlbnQsXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyMgcmVnaW9uIFJlc291cmNlXG4gIHN0YXRpYyBjaGFpbihcbiAgICBjaGlsZDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PlxuICApOiBbXG4gICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgXVtdIHtcbiAgICBjb25zdCBjaGFpbiA9IFtdIGFzIGFueVtdO1xuICAgIGxldCB0dXBsZTpcbiAgICAgIHwgW1xuICAgICAgICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICAgIF1cbiAgICAgIHwgbnVsbCA9IFtjaGlsZCwgbnVsbF07XG4gICAgd2hpbGUgKHR1cGxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0dXBsZSBhcyBbXG4gICAgICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgIE9EYXRhTW9kZWxGaWVsZDxhbnk+IHwgbnVsbFxuICAgICAgXTtcbiAgICAgIGlmIChjaGFpbi5zb21lKChwKSA9PiBwWzBdID09PSBwYXJlbnRbMF0pKSBicmVhaztcbiAgICAgIGNoYWluLnNwbGljZSgwLCAwLCBwYXJlbnQpO1xuICAgICAgdHVwbGUgPSB0dXBsZVswXS5fcGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gY2hhaW47XG4gIH1cblxuICBzdGF0aWMgcmVzb3VyY2U8VD4oXG4gICAgY2hpbGQ6IE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj5cbiAgKTogT0RhdGFSZXNvdXJjZTxUPiB8IE9EYXRhUmVzb3VyY2U8VD4ge1xuICAgIGxldCByZXNvdXJjZTogT0RhdGFSZXNvdXJjZTxhbnk+IHwgT0RhdGFSZXNvdXJjZTxhbnk+IHwgdW5kZWZpbmVkID1cbiAgICAgIHVuZGVmaW5lZDtcbiAgICBmb3IgKGxldCBbbW9kZWwsIGZpZWxkXSBvZiBPRGF0YU1vZGVsT3B0aW9ucy5jaGFpbihjaGlsZCkpIHtcbiAgICAgIHJlc291cmNlID1cbiAgICAgICAgcmVzb3VyY2UgfHxcbiAgICAgICAgbW9kZWwuX3Jlc291cmNlIHx8XG4gICAgICAgIChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKG1vZGVsKVxuICAgICAgICAgID8gKG1vZGVsIGFzIE9EYXRhTW9kZWw8YW55PikuX21ldGEubW9kZWxSZXNvdXJjZUZhY3RvcnkoKVxuICAgICAgICAgIDogKFxuICAgICAgICAgICAgICBtb2RlbCBhcyBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+XG4gICAgICAgICAgICApLl9tb2RlbC5tZXRhLmNvbGxlY3Rpb25SZXNvdXJjZUZhY3RvcnkoKSk7XG4gICAgICBpZiAocmVzb3VyY2UgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbChtb2RlbCkpIHtcbiAgICAgICAgbGV0IGtleSA9IChtb2RlbCBhcyBPRGF0YU1vZGVsPGFueT4pLmtleSh7XG4gICAgICAgICAgZmllbGRfbWFwcGluZzogdHJ1ZSxcbiAgICAgICAgfSkgYXMgRW50aXR5S2V5PGFueT47XG4gICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICByZXNvdXJjZSA9XG4gICAgICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5U2V0UmVzb3VyY2VcbiAgICAgICAgICAgICAgPyByZXNvdXJjZS5lbnRpdHkoa2V5KVxuICAgICAgICAgICAgICA6IChyZXNvdXJjZSBhcyBPRGF0YUVudGl0eVJlc291cmNlPFQ+KS5rZXkoa2V5KTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZCA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IG1vZGVsLl9yZXNvdXJjZT8uY2xvbmVRdWVyeTxUPigpLnRvUXVlcnlBcmd1bWVudHMoKTtcbiAgICAgICAgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQpIHJlc291cmNlLnF1ZXJ5KChxKSA9PiBxLmFwcGx5KHF1ZXJ5KSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzb3VyY2UgPSAoZmllbGQgYXMgT0RhdGFNb2RlbEZpZWxkPGFueT4pLnJlc291cmNlRmFjdG9yeTxhbnksIGFueT4oXG4gICAgICAgIHJlc291cmNlIGFzIE9EYXRhUmVzb3VyY2U8YW55PlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlc291cmNlOiBDYW4ndCBidWlsZCByZXNvdXJjZSBmb3IgJHtjaGlsZH1gKTtcbiAgICByZXR1cm4gcmVzb3VyY2U7XG4gIH1cblxuICBjb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KFxuICAgIHF1ZXJ5PzogT0RhdGFRdWVyeU9wdGlvbnM8VD5cbiAgKTpcbiAgICB8IE9EYXRhRW50aXR5U2V0UmVzb3VyY2U8VD5cbiAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5lbnRpdHlTZXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT0RhdGFFbnRpdHlTZXRSZXNvdXJjZS5mYWN0b3J5PFQ+KHRoaXMuYXBpLCB7XG4gICAgICBwYXRoOiB0aGlzLmVudGl0eVNldC5uYW1lLFxuICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSxcbiAgICAgIHF1ZXJ5LFxuICAgIH0pO1xuICB9XG5cbiAgbW9kZWxSZXNvdXJjZUZhY3RvcnkoXG4gICAgcXVlcnk/OiBPRGF0YVF1ZXJ5T3B0aW9uczxUPlxuICApOlxuICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+XG4gICAgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5jb2xsZWN0aW9uUmVzb3VyY2VGYWN0b3J5KHF1ZXJ5KTtcbiAgICBpZiAocmVzb3VyY2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVNldFJlc291cmNlKSByZXR1cm4gcmVzb3VyY2UuZW50aXR5KCk7XG4gICAgcmV0dXJuIHJlc291cmNlIGFzXG4gICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPlxuICAgICAgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBlbnRpdHlSZXNvdXJjZShzZWxmOiBPRGF0YU1vZGVsPFQ+KTogT0RhdGFSZXNvdXJjZTxUPiB7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5tb2RlbFJlc291cmNlRmFjdG9yeShcbiAgICAgIHNlbGYuX3Jlc291cmNlICE9PSBudWxsID8gc2VsZi5fcmVzb3VyY2UuY2xvbmVRdWVyeSgpIDogdW5kZWZpbmVkXG4gICAgKTtcbiAgICBpZiAocmVzb3VyY2UgPT09IHVuZGVmaW5lZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZW50aXR5UmVzb3VyY2U6IENhbid0IGJ1aWxkIHJlc291cmNlIGZvciAke3NlbGZ9YCk7XG4gICAgY29uc3Qga2V5ID0gc2VsZi5rZXkoeyBmaWVsZF9tYXBwaW5nOiB0cnVlIH0pIGFzIEVudGl0eUtleTxUPjtcbiAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHJldHVybiByZXNvdXJjZS5rZXkoa2V5KTtcbiAgICByZXR1cm4gcmVzb3VyY2UgYXMgT0RhdGFSZXNvdXJjZTxUPjtcbiAgfVxuICAvLyNlbmRyZWdpb25cblxuICBiaW5kKFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAge1xuICAgICAgcGFyZW50LFxuICAgICAgcmVzb3VyY2UsXG4gICAgICBhbm5vdHMsXG4gICAgfToge1xuICAgICAgcGFyZW50PzogW1xuICAgICAgICBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgICAgIF07XG4gICAgICByZXNvdXJjZT86IE9EYXRhUmVzb3VyY2U8VD47XG4gICAgICBhbm5vdHM/OiBPRGF0YUVudGl0eUFubm90YXRpb25zO1xuICAgIH0gPSB7fVxuICApIHtcbiAgICAvLyBQYXJlbnRcbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNlbGYuX3BhcmVudCA9IHBhcmVudDtcbiAgICB9XG5cbiAgICAvLyBSZXNvdXJjZVxuICAgIHJlc291cmNlID0gcmVzb3VyY2UgfHwgdGhpcy5tb2RlbFJlc291cmNlRmFjdG9yeSgpO1xuICAgIGlmIChyZXNvdXJjZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmF0dGFjaChcbiAgICAgICAgc2VsZixcbiAgICAgICAgcmVzb3VyY2UgYXNcbiAgICAgICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICAgICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBbm5vdGF0aW9uc1xuICAgIHNlbGYuX2Fubm90YXRpb25zID1cbiAgICAgIGFubm90cyB8fCBuZXcgT0RhdGFFbnRpdHlBbm5vdGF0aW9ucyhPRGF0YUhlbHBlcltERUZBVUxUX1ZFUlNJT05dKTtcblxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuZmllbGRzKHtcbiAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfcGFyZW50czogdHJ1ZSxcbiAgICB9KTtcbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLCBmaWVsZC5uYW1lLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLl9nZXQoc2VsZiwgZmllbGQgYXMgT0RhdGFNb2RlbEZpZWxkPGFueT4pLFxuICAgICAgICBzZXQ6ICh2YWx1ZTogYW55KSA9PlxuICAgICAgICAgIHRoaXMuX3NldChzZWxmLCBmaWVsZCBhcyBPRGF0YU1vZGVsRmllbGQ8YW55PiwgdmFsdWUpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcXVlcnkoXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICByZXNvdXJjZTpcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+LFxuICAgIGZ1bmM6IChxOiBPRGF0YVF1ZXJ5T3B0aW9uc0hhbmRsZXI8VD4pID0+IHZvaWRcbiAgKSB7XG4gICAgcmVzb3VyY2UucXVlcnkoZnVuYyk7XG4gICAgdGhpcy5hdHRhY2goc2VsZiwgcmVzb3VyY2UpO1xuICAgIHJldHVybiBzZWxmO1xuICB9XG5cbiAgcmVzb2x2ZUtleShcbiAgICB2YWx1ZTogT0RhdGFNb2RlbDxUPiB8IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICB7XG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgICByZXNvbHZlID0gdHJ1ZSxcbiAgICB9OiB7IGZpZWxkX21hcHBpbmc/OiBib29sZWFuOyByZXNvbHZlPzogYm9vbGVhbiB9ID0ge31cbiAgKTogRW50aXR5S2V5PFQ+IHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGtleVR5cGVzID0gdGhpcy5zY2hlbWEua2V5cyh7IGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KTtcbiAgICBjb25zdCBrZXk6IGFueSA9IHt9O1xuICAgIGZvciAodmFyIGt0IG9mIGtleVR5cGVzKSB7XG4gICAgICBsZXQgdiA9IHZhbHVlIGFzIGFueTtcbiAgICAgIGxldCBvcHRpb25zID0gdGhpcyBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICAgICAgbGV0IGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IHVuZGVmaW5lZDtcbiAgICAgIGZvciAobGV0IG5hbWUgb2Yga3QubmFtZS5zcGxpdCgnLycpKSB7XG4gICAgICAgIGlmIChvcHRpb25zID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgICBmaWVsZCA9IG9wdGlvbnNcbiAgICAgICAgICAuZmllbGRzKHsgaW5jbHVkZV9wYXJlbnRzOiB0cnVlIH0pXG4gICAgICAgICAgLmZpbmQoKGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PikgPT4gZmllbGQuZmllbGQgPT09IG5hbWUpO1xuICAgICAgICBpZiAoZmllbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHYgPVxuICAgICAgICAgICAgVHlwZXMuaXNQbGFpbk9iamVjdCh2KSB8fCBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHYpXG4gICAgICAgICAgICAgID8gdltmaWVsZC5uYW1lXVxuICAgICAgICAgICAgICA6IHY7XG4gICAgICAgICAgb3B0aW9ucyA9IGZpZWxkLm1ldGEgYXMgT0RhdGFNb2RlbE9wdGlvbnM8YW55PjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZpZWxkID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBsZXQgbmFtZSA9IGZpZWxkX21hcHBpbmcgPyBmaWVsZC5maWVsZCA6IGZpZWxkLm5hbWU7XG4gICAgICBpZiAoa3QuYWxpYXMgIT09IHVuZGVmaW5lZCkgbmFtZSA9IGt0LmFsaWFzO1xuICAgICAga2V5W25hbWVdID0gdjtcbiAgICB9XG4gICAgaWYgKFR5cGVzLmlzRW1wdHkoa2V5KSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzb2x2ZSA/IE9iamVjdHMucmVzb2x2ZUtleShrZXkpIDoga2V5O1xuICB9XG5cbiAgcmVzb2x2ZVJlZmVyZW50aWFsKFxuICAgIHZhbHVlOiBPRGF0YU1vZGVsPFQ+IHwgVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgbnVsbCxcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4sXG4gICAge1xuICAgICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgICAgcmVzb2x2ZSA9IHRydWUsXG4gICAgfTogeyBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjsgcmVzb2x2ZT86IGJvb2xlYW4gfSA9IHt9XG4gICk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWZlcmVudGlhbDogYW55ID0ge307XG4gICAgZm9yICh2YXIgcmVmIG9mIGZpZWxkLnJlZmVyZW50aWFscykge1xuICAgICAgbGV0IGZyb20gPSB0aGlzLmZpZWxkcyh7IGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KS5maW5kKFxuICAgICAgICAocDogYW55KSA9PiBwLmZpZWxkID09PSByZWYucmVmZXJlbmNlZFByb3BlcnR5XG4gICAgICApO1xuICAgICAgbGV0IHRvID0gZmllbGQub3B0aW9uc1xuICAgICAgICAuZmllbGRzKHsgaW5jbHVkZV9wYXJlbnRzOiB0cnVlIH0pXG4gICAgICAgIC5maW5kKChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+IGZpZWxkLmZpZWxkID09PSByZWYucHJvcGVydHkpO1xuICAgICAgaWYgKGZyb20gIT09IHVuZGVmaW5lZCAmJiB0byAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxldCBuYW1lID0gZmllbGRfbWFwcGluZyA/IHRvLmZpZWxkIDogdG8ubmFtZTtcbiAgICAgICAgcmVmZXJlbnRpYWxbbmFtZV0gPSB2YWx1ZSAmJiAodmFsdWUgYXMgYW55KVtmcm9tLm5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoVHlwZXMuaXNFbXB0eShyZWZlcmVudGlhbCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVcbiAgICAgID8gT2JqZWN0cy5yZXNvbHZlS2V5KHJlZmVyZW50aWFsLCB7IHNpbmdsZTogZmFsc2UgfSlcbiAgICAgIDogcmVmZXJlbnRpYWw7XG4gIH1cblxuICByZXNvbHZlUmVmZXJlbmNlZChcbiAgICB2YWx1ZTogT0RhdGFNb2RlbDxUPiB8IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwsXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+LFxuICAgIHtcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIHJlc29sdmUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fVxuICApOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVmZXJlbmNlZDogYW55ID0ge307XG4gICAgZm9yICh2YXIgcmVmIG9mIGZpZWxkLnJlZmVyZW50aWFscykge1xuICAgICAgbGV0IGZyb20gPSB0aGlzLmZpZWxkcyh7IGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KS5maW5kKFxuICAgICAgICAoZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+KSA9PiBmaWVsZC5maWVsZCA9PT0gcmVmLnByb3BlcnR5XG4gICAgICApO1xuICAgICAgbGV0IHRvID0gKGZpZWxkLm1ldGEgYXMgT0RhdGFNb2RlbE9wdGlvbnM8YW55PilcbiAgICAgICAgLmZpZWxkcyh7IGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KVxuICAgICAgICAuZmluZChcbiAgICAgICAgICAoZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+KSA9PlxuICAgICAgICAgICAgZmllbGQuZmllbGQgPT09IHJlZi5yZWZlcmVuY2VkUHJvcGVydHlcbiAgICAgICAgKTtcbiAgICAgIGlmIChmcm9tICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkX21hcHBpbmcgPyB0by5maWVsZCA6IHRvLm5hbWU7XG4gICAgICAgIHJlZmVyZW5jZWRbbmFtZV0gPSB2YWx1ZSAmJiAodmFsdWUgYXMgYW55KVtmcm9tLm5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoVHlwZXMuaXNFbXB0eShyZWZlcmVuY2VkKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzb2x2ZVxuICAgICAgPyBPYmplY3RzLnJlc29sdmVLZXkocmVmZXJlbmNlZCwgeyBzaW5nbGU6IGZhbHNlIH0pXG4gICAgICA6IHJlZmVyZW5jZWQ7XG4gIH1cblxuICB2YWxpZGF0ZShcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIG5hdmlnYXRpb24gPSBmYWxzZSxcbiAgICB9OiB7XG4gICAgICBtZXRob2Q/OiAnY3JlYXRlJyB8ICd1cGRhdGUnIHwgJ21vZGlmeSc7XG4gICAgICBuYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nW10gfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZXJyb3JzID0gdGhpcy5maWVsZHMoe1xuICAgICAgaW5jbHVkZV9wYXJlbnRzOiB0cnVlLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiBuYXZpZ2F0aW9uLFxuICAgIH0pLnJlZHVjZSgoYWNjLCBmaWVsZCkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gKHNlbGYgYXMgYW55KVtmaWVsZC5uYW1lXTtcbiAgICAgIGxldCBlcnJzID0gZmllbGQudmFsaWRhdGUodmFsdWUsIHsgbWV0aG9kIH0pO1xuICAgICAgcmV0dXJuIGVycnMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtmaWVsZC5uYW1lXTogZXJycyB9KVxuICAgICAgICA6IGFjYztcbiAgICB9LCB7fSk7XG4gICAgcmV0dXJuICFUeXBlcy5pc0VtcHR5KGVycm9ycykgPyBlcnJvcnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBkZWZhdWx0cygpOiBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGRlZnMgPSB0aGlzLmZpZWxkcygpLnJlZHVjZSgoYWNjLCBmaWVsZCkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZmllbGQuZGVmYXVsdHMoKTtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gT2JqZWN0LmFzc2lnbihhY2MsIHsgW2ZpZWxkLm5hbWVdOiB2YWx1ZSB9KVxuICAgICAgICA6IGFjYztcbiAgICB9LCB7fSk7XG4gICAgcmV0dXJuICFUeXBlcy5pc0VtcHR5KGRlZnMpID8gZGVmcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGhhc0NoYW5nZWQoXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICB7IGluY2x1ZGVfbmF2aWdhdGlvbiA9IGZhbHNlIH06IHsgaW5jbHVkZV9uYXZpZ2F0aW9uPzogYm9vbGVhbiB9ID0ge31cbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICFUeXBlcy5pc0VtcHR5KHNlbGYuX2NoYW5nZXMpIHx8XG4gICAgICBPYmplY3QudmFsdWVzKHNlbGYuX3JlbGF0aW9ucylcbiAgICAgICAgLmZpbHRlcigoeyBmaWVsZCB9KSA9PiAhZmllbGQubmF2aWdhdGlvbiB8fCBpbmNsdWRlX25hdmlnYXRpb24pXG4gICAgICAgIC5zb21lKFxuICAgICAgICAgICh7IGZpZWxkLCBzdGF0ZSwgbW9kZWwgfSkgPT5cbiAgICAgICAgICAgICghaW5jbHVkZV9uYXZpZ2F0aW9uIHx8IGZpZWxkLm5hdmlnYXRpb24pICYmXG4gICAgICAgICAgICAoc3RhdGUgPT09IE9EYXRhTW9kZWxTdGF0ZS5DaGFuZ2VkIHx8XG4gICAgICAgICAgICAgIChtb2RlbCAhPSB1bmRlZmluZWQgJiYgbW9kZWwuaGFzQ2hhbmdlZCh7IGluY2x1ZGVfbmF2aWdhdGlvbiB9KSkpXG4gICAgICAgIClcbiAgICApO1xuICB9XG5cbiAgYXNFbnRpdHk8UiwgTSBleHRlbmRzIE9EYXRhTW9kZWw8VD4+KHNlbGY6IE0sIGZ1bmM6IChtb2RlbDogTSkgPT4gUik6IFIge1xuICAgIGNvbnN0IHBhcmVudCA9IHNlbGYuX3BhcmVudDtcbiAgICBzZWxmLl9wYXJlbnQgPSBudWxsO1xuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmMoc2VsZik7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgIHJldHVybiAocmVzdWx0IGFzIGFueSkucGlwZShmaW5hbGl6ZSgoKSA9PiAoc2VsZi5fcGFyZW50ID0gcGFyZW50KSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxmLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHRvRW50aXR5KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAge1xuICAgICAgY2xpZW50X2lkID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX25hdmlnYXRpb24gPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3kgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVfY29tcHV0ZWQgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVfa2V5ID0gdHJ1ZSxcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkID0gZmFsc2UsXG4gICAgICBjaGFuZ2VzX29ubHkgPSBmYWxzZSxcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIGNoYWluID0gW10sXG4gICAgfToge1xuICAgICAgY2xpZW50X2lkPzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5PzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfY29tcHV0ZWQ/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZV9rZXk/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZV9ub25fZmllbGQ/OiBib29sZWFuO1xuICAgICAgY2hhbmdlc19vbmx5PzogYm9vbGVhbjtcbiAgICAgIGZpZWxkX21hcHBpbmc/OiBib29sZWFuO1xuICAgICAgY2hhaW4/OiAoT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PilbXTtcbiAgICB9ID0ge31cbiAgKTogVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBsZXQgYXR0cnMgPSBzZWxmLmF0dHJpYnV0ZXMoe1xuICAgICAgY2hhbmdlc19vbmx5LFxuICAgICAgZmllbGRfbWFwcGluZyxcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3ksXG4gICAgICBpbmNsdWRlX2NvbXB1dGVkLFxuICAgICAgaW5jbHVkZV9ub25fZmllbGQsXG4gICAgfSk7XG5cbiAgICBsZXQgcmVsYXRpb25zID0gT2JqZWN0LmVudHJpZXMoc2VsZi5fcmVsYXRpb25zKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgLy8gQ2hhaW5cbiAgICAgICAgKFssIHsgbW9kZWwgfV0pID0+IGNoYWluLmV2ZXJ5KChjKSA9PiBjICE9PSBtb2RlbClcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIC8vIENoYW5nZXMgb25seVxuICAgICAgICAoWywgeyBtb2RlbCwgc3RhdGUgfV0pID0+XG4gICAgICAgICAgIWNoYW5nZXNfb25seSB8fFxuICAgICAgICAgIChjaGFuZ2VzX29ubHkgJiZcbiAgICAgICAgICAgIChzdGF0ZSA9PT0gT0RhdGFNb2RlbFN0YXRlLkNoYW5nZWQgfHxcbiAgICAgICAgICAgICAgKG1vZGVsICE9IHVuZGVmaW5lZCAmJiBtb2RlbC5oYXNDaGFuZ2VkKHsgaW5jbHVkZV9uYXZpZ2F0aW9uIH0pKSkpXG4gICAgICApXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoWywgeyBmaWVsZCwgbW9kZWwgfV0pID0+XG4gICAgICAgICAgLy8gTmF2aWdhdGlvblxuICAgICAgICAgIChpbmNsdWRlX25hdmlnYXRpb24gJiYgZmllbGQubmF2aWdhdGlvbiAmJiBtb2RlbCAhPT0gbnVsbCkgfHxcbiAgICAgICAgICAhZmllbGQubmF2aWdhdGlvblxuICAgICAgKVxuICAgICAgLm1hcCgoW2ssIHsgbW9kZWwsIGZpZWxkLCBzdGF0ZSB9XSkgPT4ge1xuICAgICAgICBsZXQgY2hhbmdlc09ubHkgPVxuICAgICAgICAgIGNoYW5nZXNfb25seSAmJlxuICAgICAgICAgIHN0YXRlICE9PSBPRGF0YU1vZGVsU3RhdGUuQ2hhbmdlZCAmJlxuICAgICAgICAgICEhZmllbGQubmF2aWdhdGlvbjtcbiAgICAgICAgbGV0IGluY2x1ZGVLZXkgPSBpbmNsdWRlX2tleSAmJiAhIWZpZWxkLm5hdmlnYXRpb247XG4gICAgICAgIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKG1vZGVsKSkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBrLFxuICAgICAgICAgICAgKG1vZGVsIGFzIE9EYXRhTW9kZWw8YW55PikudG9FbnRpdHkoe1xuICAgICAgICAgICAgICBjbGllbnRfaWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbixcbiAgICAgICAgICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeSxcbiAgICAgICAgICAgICAgaW5jbHVkZV9ub25fZmllbGQsXG4gICAgICAgICAgICAgIGZpZWxkX21hcHBpbmcsXG4gICAgICAgICAgICAgIGNoYW5nZXNfb25seTogY2hhbmdlc09ubHksXG4gICAgICAgICAgICAgIGluY2x1ZGVfa2V5OiBpbmNsdWRlS2V5LFxuICAgICAgICAgICAgICBjaGFpbjogW3NlbGYsIC4uLmNoYWluXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKG1vZGVsKSkge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBrLFxuICAgICAgICAgICAgKG1vZGVsIGFzIE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pLnRvRW50aXRpZXMoe1xuICAgICAgICAgICAgICBjbGllbnRfaWQsXG4gICAgICAgICAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbixcbiAgICAgICAgICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeSxcbiAgICAgICAgICAgICAgaW5jbHVkZV9ub25fZmllbGQsXG4gICAgICAgICAgICAgIGZpZWxkX21hcHBpbmcsXG4gICAgICAgICAgICAgIGNoYW5nZXNfb25seTogY2hhbmdlc09ubHksXG4gICAgICAgICAgICAgIGluY2x1ZGVfa2V5OiBpbmNsdWRlS2V5LFxuICAgICAgICAgICAgICBjaGFpbjogW3NlbGYsIC4uLmNoYWluXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtrLCBtb2RlbF07XG4gICAgICB9KVxuICAgICAgLnJlZHVjZSgoYWNjLCBbaywgdl0pID0+IHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGZpZWxkX21hcHBpbmdcbiAgICAgICAgICA/IHRoaXMuZmllbGRzKCkuZmluZChcbiAgICAgICAgICAgICAgKGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PikgPT4gZmllbGQubmFtZSA9PT0ga1xuICAgICAgICAgICAgKT8uZmllbGQgfHwga1xuICAgICAgICAgIDogaztcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7IFtuYW1lXTogdiB9KTtcbiAgICAgIH0sIHt9KTtcblxuICAgIC8vIENyZWF0ZSBlbnRpdHlcbiAgICBsZXQgZW50aXR5ID0geyAuLi5hdHRycywgLi4ucmVsYXRpb25zIH07XG5cbiAgICAvLyBBZGQgY2xpZW50X2lkXG4gICAgaWYgKGNsaWVudF9pZCkge1xuICAgICAgKDxhbnk+ZW50aXR5KVt0aGlzLmNpZF0gPSAoPGFueT5zZWxmKVt0aGlzLmNpZF07XG4gICAgfVxuXG4gICAgLy8gQWRkIGtleVxuICAgIGlmIChpbmNsdWRlX2tleSkge1xuICAgICAgZW50aXR5ID0ge1xuICAgICAgICAuLi5lbnRpdHksXG4gICAgICAgIC4uLih0aGlzLnJlc29sdmVLZXkoc2VsZiwgeyBmaWVsZF9tYXBwaW5nLCByZXNvbHZlOiBmYWxzZSB9KSBhcyB7fSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEFkZCB0eXBlXG4gICAgaWYgKFxuICAgICAgc2VsZi5fcGFyZW50ICE9PSBudWxsICYmXG4gICAgICAoKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwoc2VsZi5fcGFyZW50WzBdKSAmJlxuICAgICAgICAoc2VsZi5fcGFyZW50WzFdIGFzIE9EYXRhTW9kZWxGaWVsZDxhbnk+KS5tZXRhICE9PSBzZWxmLl9tZXRhKSB8fFxuICAgICAgICAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHNlbGYuX3BhcmVudFswXSkgJiZcbiAgICAgICAgICAoc2VsZi5fcGFyZW50WzBdIGFzIE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pLl9tb2RlbFxuICAgICAgICAgICAgLm1ldGEgIT09IHNlbGYuX21ldGEpKVxuICAgICkge1xuICAgICAgdGhpcy5hcGkub3B0aW9ucy5oZWxwZXIudHlwZShlbnRpdHksIHRoaXMuc2NoZW1hLnR5cGUoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eTtcbiAgfVxuXG4gIGF0dHJpYnV0ZXMoXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICB7XG4gICAgICBjaGFuZ2VzX29ubHkgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3kgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVfY29tcHV0ZWQgPSBmYWxzZSxcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkID0gZmFsc2UsXG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgY2hhbmdlc19vbmx5PzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfY29uY3VycmVuY3k/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZV9jb21wdXRlZD86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX25vbl9maWVsZD86IGJvb2xlYW47XG4gICAgICBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjtcbiAgICB9ID0ge31cbiAgKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIC8vIEF0dHJpYnV0ZXMgYnkgZmllbGRzIChhdHRyaWJ1dGVzIGZvciB0aGUgbW9kZWwgdHlwZSlcbiAgICBjb25zdCBmaWVsZEF0dHJzID0gdGhpcy5maWVsZHMoKS5yZWR1Y2UoKGFjYywgZikgPT4ge1xuICAgICAgY29uc3QgaXNDaGFuZ2VkID0gZi5uYW1lIGluIHNlbGYuX2NoYW5nZXM7XG4gICAgICBjb25zdCBuYW1lID0gZmllbGRfbWFwcGluZyA/IGYuZmllbGQgOiBmLm5hbWU7XG4gICAgICBjb25zdCBjb21wdXRlZCA9IGYuYW5ub3RhdGVkVmFsdWU8Ym9vbGVhbj4oQ09NUFVURUQpO1xuICAgICAgY29uc3QgdmFsdWUgPSBpc0NoYW5nZWRcbiAgICAgICAgPyBzZWxmLl9jaGFuZ2VzW2YubmFtZV1cbiAgICAgICAgOiBzZWxmLl9hdHRyaWJ1dGVzW2YubmFtZV07XG4gICAgICBpZiAoZi5jb25jdXJyZW5jeSAmJiBpbmNsdWRlX2NvbmN1cnJlbmN5KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjb21wdXRlZCAmJiBpbmNsdWRlX2NvbXB1dGVkKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgfSBlbHNlIGlmIChjaGFuZ2VzX29ubHkgJiYgaXNDaGFuZ2VkKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgICAgfSBlbHNlIGlmICghY2hhbmdlc19vbmx5ICYmICFmLmNvbmN1cnJlbmN5ICYmICFjb21wdXRlZCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9XG4gICAgfSwge30pO1xuICAgIGlmICghaW5jbHVkZV9ub25fZmllbGQpIHJldHVybiBmaWVsZEF0dHJzO1xuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMoZmllbGRBdHRycyk7XG4gICAgLy8gQXR0cmlidXRlcyBmcm9tIG9iamVjdCAoYXR0cmlidXRlcyBmb3Igb2JqZWN0KVxuICAgIGNvbnN0IG5vbkZpZWxkQXR0cnMgPSBPYmplY3QuZW50cmllcyhzZWxmKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKFtrXSkgPT5cbiAgICAgICAgICBuYW1lcy5pbmRleE9mKGspID09PSAtMSAmJiAhay5zdGFydHNXaXRoKCdfJykgJiYgIWsuZW5kc1dpdGgoJyQnKVxuICAgICAgKVxuICAgICAgLnJlZHVjZSgoYWNjLCBbaywgdl0pID0+IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtrXTogdiB9KSwge30pO1xuICAgIHJldHVybiB7IC4uLmZpZWxkQXR0cnMsIC4uLm5vbkZpZWxkQXR0cnMgfTtcbiAgfVxuXG4gIHJlc2V0KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgeyBuYW1lLCBzaWxlbnQgPSBmYWxzZSB9OiB7IG5hbWU/OiBzdHJpbmc7IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9XG4gICkge1xuICAgIGlmICghVHlwZXMuaXNFbXB0eShuYW1lKSAmJiAobmFtZSBhcyBzdHJpbmcpIGluIHNlbGYuX2NoYW5nZXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gc2VsZi5fYXR0cmlidXRlc1tuYW1lIGFzIHN0cmluZ107XG4gICAgICBjb25zdCBwcmV2aW91cyA9IHNlbGYuX2NoYW5nZXNbbmFtZSBhcyBzdHJpbmddO1xuICAgICAgZGVsZXRlIHNlbGYuX2NoYW5nZXNbbmFtZSBhcyBzdHJpbmddO1xuICAgICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgICAgc2VsZi5ldmVudHMkLmVtaXQoXG4gICAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgnY2hhbmdlJywge1xuICAgICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgICB0cmFjazogbmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgcHJldmlvdXMsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFR5cGVzLmlzRW1wdHkobmFtZSkpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhzZWxmLl9jaGFuZ2VzKTtcbiAgICAgIHNlbGYuX2NoYW5nZXMgPSB7fTtcbiAgICAgIGlmICghc2lsZW50KSB7XG4gICAgICAgIGVudHJpZXMuZm9yRWFjaCgoZW50cnkpID0+IHtcbiAgICAgICAgICBzZWxmLmV2ZW50cyQuZW1pdChcbiAgICAgICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgdHJhY2s6IGVudHJ5WzBdLFxuICAgICAgICAgICAgICBtb2RlbDogc2VsZixcbiAgICAgICAgICAgICAgdmFsdWU6IHNlbGYuX2F0dHJpYnV0ZXNbZW50cnlbMF1dLFxuICAgICAgICAgICAgICBwcmV2aW91czogZW50cnlbMV0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzc2lnbihcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIGVudGl0eTogUGFydGlhbDxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxuICAgIHtcbiAgICAgIHJlc2V0ID0gZmFsc2UsXG4gICAgICByZXBhcmVudCA9IGZhbHNlLFxuICAgICAgc2lsZW50ID0gZmFsc2UsXG4gICAgfTogeyByZXNldD86IGJvb2xlYW47IHJlcGFyZW50PzogYm9vbGVhbjsgc2lsZW50PzogYm9vbGVhbiB9ID0ge31cbiAgKSB7XG4gICAgc2VsZi5fcmVzZXQgPSByZXNldDtcbiAgICBzZWxmLl9yZXBhcmVudCA9IHJlcGFyZW50O1xuICAgIHNlbGYuX3NpbGVudCA9IHNpbGVudDtcblxuICAgIGNvbnN0IGNoYW5nZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvLyBBcHBseSBlbnRpdHlcbiAgICBjb25zdCBtb2RlbCA9IHNlbGYgYXMgYW55O1xuICAgIE9iamVjdC5lbnRyaWVzKGVudGl0eSlcbiAgICAgIC5maWx0ZXIoKFssIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCkgLy8gRmlsdGVyIHVuZGVmaW5lZFxuICAgICAgLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzKHtcbiAgICAgICAgICBpbmNsdWRlX3BhcmVudHM6IHRydWUsXG4gICAgICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICAgICAgICB9KS5maW5kKFxuICAgICAgICAgIChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+XG4gICAgICAgICAgICAoc2VsZi5fcmVzZXQgJiYgZmllbGQuZmllbGQgPT09IGtleSkgfHwgZmllbGQubmFtZSA9PT0ga2V5XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGZpZWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBEZWxlZ2F0ZWQgdG8gcHJpdmF0ZSBzZXR0ZXJcbiAgICAgICAgICBpZiAodGhpcy5fc2V0KHNlbGYsIGZpZWxkLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNoYW5nZXMucHVzaChmaWVsZC5uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQmFzaWMgYXNzaWdubWVudFxuICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBtb2RlbFtrZXldO1xuICAgICAgICAgIG1vZGVsW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gdmFsdWUpIGNoYW5nZXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIGlmICgoIXNlbGYuX3NpbGVudCAmJiBjaGFuZ2VzLmxlbmd0aCA+IDApIHx8IHNlbGYuX3Jlc2V0KSB7XG4gICAgICBzZWxmLmV2ZW50cyQuZW1pdChcbiAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudChzZWxmLl9yZXNldCA/ICdyZXNldCcgOiAndXBkYXRlJywge1xuICAgICAgICAgIG1vZGVsOiBzZWxmLFxuICAgICAgICAgIG9wdGlvbnM6IHsgY2hhbmdlcyB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgc2VsZi5fcmVzZXQgPSBmYWxzZTtcbiAgICBzZWxmLl9yZXBhcmVudCA9IGZhbHNlO1xuICAgIHNlbGYuX3NpbGVudCA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGlzTW9kZWwob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gVHlwZXMucmF3VHlwZShvYmopID09PSAnTW9kZWwnO1xuICB9XG5cbiAgc3RhdGljIGlzQ29sbGVjdGlvbihvYmo6IGFueSkge1xuICAgIHJldHVybiBUeXBlcy5yYXdUeXBlKG9iaikgPT09ICdDb2xsZWN0aW9uJztcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sbGVjdGlvbjxGPihcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8Rj4sXG4gICAgY29sbGVjdGlvbjogT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+LFxuICAgIHZhbHVlOiBUW10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdXG4gICkge1xuICAgIGNvbGxlY3Rpb24uX2Fubm90YXRpb25zID0gZmllbGQuYW5ub3RhdGlvbnNGYWN0b3J5KFxuICAgICAgc2VsZi5hbm5vdHMoKVxuICAgICkgYXMgT0RhdGFFbnRpdGllc0Fubm90YXRpb25zO1xuICAgIGNvbGxlY3Rpb24uYXNzaWduKHZhbHVlIGFzIFRbXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W10sIHtcbiAgICAgIHJlc2V0OiBzZWxmLl9yZXNldCxcbiAgICAgIHJlcGFyZW50OiBzZWxmLl9yZXBhcmVudCxcbiAgICAgIHNpbGVudDogc2VsZi5fc2lsZW50LFxuICAgIH0pO1xuICAgIHJldHVybiBjb2xsZWN0aW9uLmhhc0NoYW5nZWQoKTtcbiAgfVxuICBwcml2YXRlIHVwZGF0ZU1vZGVsPEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPixcbiAgICBtb2RlbDogT0RhdGFNb2RlbDxGPixcbiAgICB2YWx1ZTogRiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9XG4gICkge1xuICAgIG1vZGVsLl9hbm5vdGF0aW9ucyA9IGZpZWxkLmFubm90YXRpb25zRmFjdG9yeShcbiAgICAgIHNlbGYuYW5ub3RzKClcbiAgICApIGFzIE9EYXRhRW50aXR5QW5ub3RhdGlvbnM7XG4gICAgbW9kZWwuYXNzaWduKHZhbHVlIGFzIEYgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSwge1xuICAgICAgcmVzZXQ6IHNlbGYuX3Jlc2V0LFxuICAgICAgcmVwYXJlbnQ6IHNlbGYuX3JlcGFyZW50LFxuICAgICAgc2lsZW50OiBzZWxmLl9zaWxlbnQsXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGVsLmhhc0NoYW5nZWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldDxGPihcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8Rj5cbiAgKTogRiB8IE9EYXRhTW9kZWw8Rj4gfCBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4gfCBudWxsIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZmllbGQuaXNTdHJ1Y3R1cmVkVHlwZSgpKSB7XG4gICAgICByZXR1cm4gc2VsZi5fcmVsYXRpb25zW2ZpZWxkLm5hbWVdPy5tb2RlbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlcyhzZWxmLCB7XG4gICAgICAgIGluY2x1ZGVfY29uY3VycmVuY3k6IHRydWUsXG4gICAgICAgIGluY2x1ZGVfY29tcHV0ZWQ6IHRydWUsXG4gICAgICB9KVtmaWVsZC5uYW1lXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRTdHJ1Y3R1cmVkPEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPixcbiAgICB2YWx1ZTpcbiAgICAgIHwgRlxuICAgICAgfCBGW11cbiAgICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbiAgICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXVxuICAgICAgfCBPRGF0YU1vZGVsPEY+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PlxuICAgICAgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgLy8gRW5zdXJlcyB0aGF0IHRoZSByZWxhdGlvbiBleGlzdHNcbiAgICBpZiAoIShmaWVsZC5uYW1lIGluIHNlbGYuX3JlbGF0aW9ucykpIHtcbiAgICAgIHNlbGYuX3JlbGF0aW9uc1tmaWVsZC5uYW1lXSA9IHtcbiAgICAgICAgc3RhdGU6IE9EYXRhTW9kZWxTdGF0ZS5VbmNoYW5nZWQsXG4gICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRpb24gPSBzZWxmLl9yZWxhdGlvbnNbZmllbGQubmFtZV07XG4gICAgY29uc3QgY3VycmVudE1vZGVsID0gcmVsYXRpb24ubW9kZWw7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJlbGF0aW9uLm1vZGVsID0gdmFsdWUgYXMgbnVsbDtcbiAgICAgIGNoYW5nZWQgPSBjdXJyZW50TW9kZWwgIT09IHZhbHVlO1xuICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoc2VsZiwgcmVsYXRpb24pO1xuICAgIH0gZWxzZSBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKGN1cnJlbnRNb2RlbCkpIHtcbiAgICAgIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24odmFsdWUpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoY3VycmVudE1vZGVsIGFzIE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PikuZXF1YWxzKFxuICAgICAgICAgICAgdmFsdWUgYXMgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+XG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoc2VsZiwgcmVsYXRpb24pO1xuICAgICAgICByZWxhdGlvbi5tb2RlbCA9IHZhbHVlIGFzIE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PjtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlKHNlbGYsIHJlbGF0aW9uKTtcbiAgICAgICAgaWYgKHNlbGYuX3JlcGFyZW50KSByZWxhdGlvbi5tb2RlbC5fcGFyZW50ID0gW3NlbGYsIGZpZWxkXTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKFR5cGVzLmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLnVwZGF0ZUNvbGxlY3Rpb248Rj4oXG4gICAgICAgICAgc2VsZixcbiAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICBjdXJyZW50TW9kZWwgYXMgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+LFxuICAgICAgICAgIHZhbHVlIGFzIFRbXSB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W11cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwoY3VycmVudE1vZGVsKSkge1xuICAgICAgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpKSB7XG4gICAgICAgIGlmICgoY3VycmVudE1vZGVsIGFzIE9EYXRhTW9kZWw8Rj4pLmVxdWFscyh2YWx1ZSBhcyBPRGF0YU1vZGVsPEY+KSkge1xuICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bnN1YnNjcmliZShzZWxmLCByZWxhdGlvbik7XG4gICAgICAgIHJlbGF0aW9uLm1vZGVsID0gdmFsdWUgYXMgT0RhdGFNb2RlbDxGPjtcbiAgICAgICAgdGhpcy5fc3Vic2NyaWJlKHNlbGYsIHJlbGF0aW9uKTtcbiAgICAgICAgaWYgKHNlbGYuX3JlcGFyZW50KSByZWxhdGlvbi5tb2RlbC5fcGFyZW50ID0gW3NlbGYsIGZpZWxkXTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKFR5cGVzLmlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgIGNoYW5nZWQgPSB0aGlzLnVwZGF0ZU1vZGVsPEY+KFxuICAgICAgICAgIHNlbGYsXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgY3VycmVudE1vZGVsIGFzIE9EYXRhTW9kZWw8Rj4sXG4gICAgICAgICAgdmFsdWUgYXMgRiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbGF0aW9uLm1vZGVsID1cbiAgICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKSB8fFxuICAgICAgICBPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKVxuICAgICAgICAgID8gKHZhbHVlIGFzIE9EYXRhTW9kZWw8Rj4gfCBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4pXG4gICAgICAgICAgOiBmaWVsZC5tb2RlbENvbGxlY3Rpb25GYWN0b3J5PFQsIEY+KHtcbiAgICAgICAgICAgICAgcGFyZW50OiBzZWxmLFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgIHJlc2V0OiBzZWxmLl9yZXNldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB0aGlzLl9zdWJzY3JpYmUoc2VsZiwgcmVsYXRpb24pO1xuICAgICAgaWYgKHNlbGYuX3JlcGFyZW50KSByZWxhdGlvbi5tb2RlbC5fcGFyZW50ID0gW3NlbGYsIGZpZWxkXTtcbiAgICB9XG4gICAgaWYgKCFPRGF0YU1vZGVsT3B0aW9ucy5pc0NvbGxlY3Rpb24ocmVsYXRpb24ubW9kZWwpKSB7XG4gICAgICB2YXIgcmVmID0gZmllbGQubWV0YT8ucmVzb2x2ZVJlZmVyZW50aWFsKHJlbGF0aW9uLm1vZGVsLCBmaWVsZCk7XG4gICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMocmVmKS5mb3JFYWNoKChbaywgdl0pID0+XG4gICAgICAgICAgdGhpcy5fc2V0VmFsdWUoc2VsZiwgaywgdiwgZmFsc2UpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlbGF0aW9uLnN0YXRlID1cbiAgICAgIHNlbGYuX3Jlc2V0IHx8ICFjaGFuZ2VkXG4gICAgICAgID8gT0RhdGFNb2RlbFN0YXRlLlVuY2hhbmdlZFxuICAgICAgICA6IE9EYXRhTW9kZWxTdGF0ZS5DaGFuZ2VkO1xuICAgIGlmICghc2VsZi5fc2lsZW50ICYmIGNoYW5nZWQpIHtcbiAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgdHJhY2s6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgdmFsdWU6IHJlbGF0aW9uLm1vZGVsLFxuICAgICAgICAgIHByZXZpb3VzOiBjdXJyZW50TW9kZWwsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldFZhbHVlPEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICB2YWx1ZTpcbiAgICAgIHwgRlxuICAgICAgfCBGW11cbiAgICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbiAgICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXVxuICAgICAgfCBPRGF0YU1vZGVsPEY+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PlxuICAgICAgfCBudWxsLFxuICAgIGtleT86IGJvb2xlYW5cbiAgKTogYm9vbGVhbiB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICBjb25zdCBhdHRycyA9IHRoaXMuYXR0cmlidXRlcyhzZWxmLCB7XG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5OiB0cnVlLFxuICAgICAgaW5jbHVkZV9jb21wdXRlZDogdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBhdHRyc1tmaWVsZF07XG4gICAgY2hhbmdlZCA9ICFUeXBlcy5pc0VxdWFsKGN1cnJlbnRWYWx1ZSwgdmFsdWUpO1xuICAgIGlmIChzZWxmLl9yZXNldCkge1xuICAgICAgZGVsZXRlIHNlbGYuX2NoYW5nZXNbZmllbGRdO1xuICAgICAgc2VsZi5fYXR0cmlidXRlc1tmaWVsZF0gPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKFR5cGVzLmlzRXF1YWwodmFsdWUsIHNlbGYuX2F0dHJpYnV0ZXNbZmllbGRdKSkge1xuICAgICAgZGVsZXRlIHNlbGYuX2NoYW5nZXNbZmllbGRdO1xuICAgIH0gZWxzZSBpZiAoY2hhbmdlZCkge1xuICAgICAgc2VsZi5fY2hhbmdlc1tmaWVsZF0gPSB2YWx1ZTtcbiAgICB9XG4gICAgaWYgKCFzZWxmLl9zaWxlbnQgJiYgY2hhbmdlZCkge1xuICAgICAgc2VsZi5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgICB0cmFjazogZmllbGQsXG4gICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXM6IGN1cnJlbnRWYWx1ZSxcbiAgICAgICAgICBvcHRpb25zOiB7IGtleSB9LFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG4gIH1cblxuICBwcml2YXRlIF9zZXQ8Rj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+LFxuICAgIHZhbHVlOlxuICAgICAgfCBGXG4gICAgICB8IEZbXVxuICAgICAgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVxuICAgICAgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdXG4gICAgICB8IE9EYXRhTW9kZWw8Rj5cbiAgICAgIHwgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+XG4gICAgICB8IG51bGxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpZWxkLmlzU3RydWN0dXJlZFR5cGUoKVxuICAgICAgPyB0aGlzLl9zZXRTdHJ1Y3R1cmVkKHNlbGYsIGZpZWxkLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5fc2V0VmFsdWUoc2VsZiwgZmllbGQubmFtZSwgdmFsdWUsIGZpZWxkLmlzS2V5KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdW5zdWJzY3JpYmU8Rj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICByZWxhdGlvbjogT0RhdGFNb2RlbFJlbGF0aW9uPEY+XG4gICkge1xuICAgIGlmIChyZWxhdGlvbi5zdWJzY3JpcHRpb24pIHtcbiAgICAgIHJlbGF0aW9uLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgZGVsZXRlIHJlbGF0aW9uLnN1YnNjcmlwdGlvbjtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfc3Vic2NyaWJlPEY+KHNlbGY6IE9EYXRhTW9kZWw8VD4sIHJlbGF0aW9uOiBPRGF0YU1vZGVsUmVsYXRpb248Rj4pIHtcbiAgICBpZiAocmVsYXRpb24uc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1YnNjcmlwdGlvbiBhbHJlYWR5IGV4aXN0cycpO1xuICAgIH1cbiAgICBpZiAocmVsYXRpb24ubW9kZWwgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdWJzY3JpcHRpb24gbW9kZWwgaXMgbnVsbCcpO1xuICAgIH1cbiAgICByZWxhdGlvbi5zdWJzY3JpcHRpb24gPSByZWxhdGlvbi5tb2RlbC5ldmVudHMkLnN1YnNjcmliZShcbiAgICAgIChldmVudDogT0RhdGFNb2RlbEV2ZW50PGFueT4pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIEJVQkJMSU5HLmluZGV4T2YoZXZlbnQubmFtZSkgIT09IC0xICYmXG4gICAgICAgICAgZXZlbnQuYnViYmxpbmcgJiZcbiAgICAgICAgICAhZXZlbnQudmlzaXRlZChzZWxmKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAoZXZlbnQubW9kZWwgPT09IHJlbGF0aW9uLm1vZGVsKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGV2ZW50Lm5hbWUgPT09ICdjaGFuZ2UnICYmXG4gICAgICAgICAgICAgIHJlbGF0aW9uLmZpZWxkLm5hdmlnYXRpb24gJiZcbiAgICAgICAgICAgICAgZXZlbnQub3B0aW9ucz8ua2V5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFyIHJlZiA9IChyZWxhdGlvbi5tb2RlbCBhcyBPRGF0YU1vZGVsPGFueT4pLnJlZmVyZW50aWFsKFxuICAgICAgICAgICAgICAgIHJlbGF0aW9uLmZpZWxkXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHJlZikuZm9yRWFjaCgoW2ssIHZdKSA9PlxuICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VmFsdWUoc2VsZiwgaywgdiwgZmFsc2UpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGV2ZW50LnB1c2goc2VsZiwgcmVsYXRpb24uZmllbGQubmFtZSk7XG4gICAgICAgICAgc2VsZi5ldmVudHMkLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgfVxufVxuIl19
|
|
956
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItb2RhdGEvc3JjL2xpYi9tb2RlbHMvb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUNMLGNBQWMsRUFDZCxRQUFRLEVBQ1IsZUFBZSxFQUNmLHNCQUFzQixHQUN2QixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN0QixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUMvQixxQkFBcUIsR0FLdEIsTUFBTSxjQUFjLENBQUM7QUFPdEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFlMUMsTUFBTSxPQUFPLGVBQWU7SUFZMUIsWUFDRSxJQUF5QixFQUN6QixFQUNFLEtBQUssRUFDTCxVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxNQVFMLEVBQUU7UUExQlIsYUFBUSxHQUFZLElBQUksQ0FBQztRQTRCdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxP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SUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENJRF9GSUVMRF9OQU1FLFxuICBDT01QVVRFRCxcbiAgREVGQVVMVF9WRVJTSU9OLFxuICBPUFRJTUlTVElDX0NPTkNVUlJFTkNZLFxufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT0RhdGFIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXInO1xuaW1wb3J0IHsgT0RhdGFQYXJzZXJPcHRpb25zIH0gZnJvbSAnLi4vb3B0aW9ucyc7XG5pbXBvcnQge1xuICBFbnRpdHlLZXksXG4gIE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyxcbiAgT0RhdGFFbnRpdHlBbm5vdGF0aW9ucyxcbiAgT0RhdGFFbnRpdHlSZXNvdXJjZSxcbiAgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZSxcbiAgT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZSxcbiAgT0RhdGFQcm9wZXJ0eVJlc291cmNlLFxuICBPRGF0YVF1ZXJ5T3B0aW9ucyxcbiAgT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyLFxuICBPRGF0YVJlc291cmNlLFxuICBPRGF0YVNpbmdsZXRvblJlc291cmNlLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuaW1wb3J0IHtcbiAgT0RhdGFFbnRpdHlTZXQsXG4gIE9EYXRhU3RydWN0dXJlZFR5cGUsXG4gIE9EYXRhU3RydWN0dXJlZFR5cGVGaWVsZFBhcnNlcixcbn0gZnJvbSAnLi4vc2NoZW1hJztcbmltcG9ydCB7IE9wdGlvbnMsIE9wdGlvbnNIZWxwZXIgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgT0RhdGFDb2xsZWN0aW9uIH0gZnJvbSAnLi9jb2xsZWN0aW9uJztcbmltcG9ydCB0eXBlIHsgT0RhdGFNb2RlbCB9IGZyb20gJy4vbW9kZWwnO1xuXG5leHBvcnQgdHlwZSBPRGF0YU1vZGVsRXZlbnRUeXBlID1cbiAgfCAnY2hhbmdlJ1xuICB8ICdyZXNldCdcbiAgfCAndXBkYXRlJ1xuICB8ICdkZXN0cm95J1xuICB8ICdhZGQnXG4gIHwgJ3JlbW92ZSdcbiAgfCAnaW52YWxpZCdcbiAgfCAncmVxdWVzdCdcbiAgfCAnc3luYydcbiAgfCAnYXR0YWNoJztcbmV4cG9ydCBjbGFzcyBPRGF0YU1vZGVsRXZlbnQ8VD4ge1xuICBuYW1lOiBPRGF0YU1vZGVsRXZlbnRUeXBlO1xuICBidWJibGluZzogYm9vbGVhbiA9IHRydWU7XG4gIG1vZGVsPzogT0RhdGFNb2RlbDxUPjtcbiAgY29sbGVjdGlvbj86IE9EYXRhQ29sbGVjdGlvbjxULCBPRGF0YU1vZGVsPFQ+PjtcbiAgY2hhaW46IFtcbiAgICBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgIHN0cmluZyB8IG51bWJlciB8IG51bGxcbiAgXVtdO1xuICB2YWx1ZT86IGFueTtcbiAgcHJldmlvdXM/OiBhbnk7XG4gIG9wdGlvbnM/OiBhbnk7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG5hbWU6IE9EYXRhTW9kZWxFdmVudFR5cGUsXG4gICAge1xuICAgICAgbW9kZWwsXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgcHJldmlvdXMsXG4gICAgICB2YWx1ZSxcbiAgICAgIHRyYWNrLFxuICAgICAgb3B0aW9ucyxcbiAgICB9OiB7XG4gICAgICBtb2RlbD86IE9EYXRhTW9kZWw8VD47XG4gICAgICBjb2xsZWN0aW9uPzogT0RhdGFDb2xsZWN0aW9uPFQsIE9EYXRhTW9kZWw8VD4+O1xuICAgICAgdHJhY2s/OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgICBwcmV2aW91cz86IGFueTtcbiAgICAgIHZhbHVlPzogYW55O1xuICAgICAgb3B0aW9ucz86IGFueTtcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLm1vZGVsID0gbW9kZWw7XG4gICAgdGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcbiAgICB0aGlzLnByZXZpb3VzID0gcHJldmlvdXM7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5jaGFpbiA9IFtcbiAgICAgIFtcbiAgICAgICAgKHRoaXMuY29sbGVjdGlvbiB8fCB0aGlzLm1vZGVsKSBhc1xuICAgICAgICAgIHwgT0RhdGFNb2RlbDxhbnk+XG4gICAgICAgICAgfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+LFxuICAgICAgICB0cmFjayB8fCBudWxsLFxuICAgICAgXSxcbiAgICBdO1xuICB9XG5cbiAgc3RvcFByb3BhZ2F0aW9uKCkge1xuICAgIHRoaXMuYnViYmxpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHB1c2goXG4gICAgbW9kZWw6IE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgdHJhY2s6IHN0cmluZyB8IG51bWJlclxuICApIHtcbiAgICB0aGlzLmNoYWluLnNwbGljZSgwLCAwLCBbbW9kZWwsIHRyYWNrXSk7XG4gIH1cblxuICB2aXNpdGVkKG1vZGVsOiBPRGF0YU1vZGVsPGFueT4gfCBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuY2hhaW4uc29tZSgoYykgPT4gY1swXSA9PT0gbW9kZWwpICYmXG4gICAgICB0aGlzLmNoYWluW3RoaXMuY2hhaW4ubGVuZ3RoIC0gMV1bMF0gIT09IG1vZGVsXG4gICAgKTtcbiAgfVxuXG4gIGdldCBwYXRoKCkge1xuICAgIHJldHVybiB0aGlzLmNoYWluXG4gICAgICAubWFwKChbLCB0cmFja10sIGluZGV4KSA9PlxuICAgICAgICB0eXBlb2YgdHJhY2sgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBgWyR7dHJhY2t9XWBcbiAgICAgICAgICA6IHR5cGVvZiB0cmFjayA9PT0gJ3N0cmluZydcbiAgICAgICAgICA/IGluZGV4ID09PSAwXG4gICAgICAgICAgICA/IHRyYWNrXG4gICAgICAgICAgICA6IGAuJHt0cmFja31gXG4gICAgICAgICAgOiAnJ1xuICAgICAgKVxuICAgICAgLmpvaW4oJycpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBCVUJCTElORyA9IFtcbiAgJ2NoYW5nZScsXG4gICdyZXNldCcsXG4gICd1cGRhdGUnLFxuICAnZGVzdHJveScsXG4gICdhZGQnLFxuICAncmVtb3ZlJyxcbl07XG5cbmV4cG9ydCBjb25zdCBJTkNMVURFX1NIQUxMT1cgPSB7XG4gIGluY2x1ZGVfY29uY3VycmVuY3k6IHRydWUsXG4gIGluY2x1ZGVfY29tcHV0ZWQ6IHRydWUsXG4gIGluY2x1ZGVfa2V5OiB0cnVlLFxufTtcblxuZXhwb3J0IGNvbnN0IElOQ0xVREVfREVFUCA9IHtcbiAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICBpbmNsdWRlX25vbl9maWVsZDogdHJ1ZSxcbiAgLi4uSU5DTFVERV9TSEFMTE9XLFxufTtcblxuZXhwb3J0IGVudW0gT0RhdGFNb2RlbFN0YXRlIHtcbiAgQWRkZWQsXG4gIFJlbW92ZWQsXG4gIENoYW5nZWQsXG4gIFVuY2hhbmdlZCxcbn1cblxuZXhwb3J0IHR5cGUgTW9kZWxPcHRpb25zID0ge1xuICBjaWQ/OiBzdHJpbmc7XG4gIGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogTW9kZWxGaWVsZE9wdGlvbnMgfTtcbn07XG5cbmV4cG9ydCB0eXBlIE1vZGVsRmllbGRPcHRpb25zID0ge1xuICBmaWVsZD86IHN0cmluZztcbiAgZGVmYXVsdD86IGFueTtcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBjb25jdXJyZW5jeT86IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBNb2RlbCh7IGNpZCA9IENJRF9GSUVMRF9OQU1FIH06IHsgY2lkPzogc3RyaW5nIH0gPSB7fSkge1xuICByZXR1cm4gPFQgZXh0ZW5kcyB7IG5ldyAoLi4uYXJnczogYW55W10pOiB7fSB9Pihjb25zdHJ1Y3RvcjogVCkgPT4ge1xuICAgIGNvbnN0IEtsYXNzID0gPGFueT5jb25zdHJ1Y3RvcjtcbiAgICBpZiAoIUtsYXNzLmhhc093blByb3BlcnR5KCdvcHRpb25zJykpXG4gICAgICBLbGFzcy5vcHRpb25zID0geyBmaWVsZHM6IHt9IH0gYXMgTW9kZWxPcHRpb25zO1xuICAgIEtsYXNzLm9wdGlvbnMuY2lkID0gY2lkO1xuICAgIHJldHVybiBjb25zdHJ1Y3RvcjtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIE1vZGVsRmllbGQoe1xuICBuYW1lLFxuICAuLi5vcHRpb25zXG59OiB7IG5hbWU/OiBzdHJpbmcgfSAmIE1vZGVsRmllbGRPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICBjb25zdCBLbGFzcyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgICBpZiAoIUtsYXNzLmhhc093blByb3BlcnR5KCdvcHRpb25zJykpXG4gICAgICBLbGFzcy5vcHRpb25zID0geyBmaWVsZHM6IHt9IH0gYXMgTW9kZWxPcHRpb25zO1xuICAgIG9wdGlvbnMuZmllbGQgPSBuYW1lIHx8IGtleTtcbiAgICBLbGFzcy5vcHRpb25zLmZpZWxkc1trZXldID0gb3B0aW9ucztcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbEZpZWxkT3B0aW9uczxGPiA9IE1vZGVsRmllbGRPcHRpb25zICYge1xuICBuYW1lOiBzdHJpbmc7XG4gIGZpZWxkOiBzdHJpbmc7XG4gIHBhcnNlcjogT0RhdGFTdHJ1Y3R1cmVkVHlwZUZpZWxkUGFyc2VyPEY+O1xufTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhTW9kZWxGaWVsZDxGPiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZmllbGQ6IHN0cmluZztcbiAgcGFyc2VyOiBPRGF0YVN0cnVjdHVyZWRUeXBlRmllbGRQYXJzZXI8Rj47XG4gIG9wdGlvbnM6IE9EYXRhTW9kZWxPcHRpb25zPGFueT47XG4gIG1ldGE/OiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICBkZWZhdWx0PzogYW55O1xuICByZXF1aXJlZDogYm9vbGVhbjtcbiAgY29uY3VycmVuY3k6IGJvb2xlYW47XG4gIG1heExlbmd0aD86IG51bWJlcjtcbiAgbWluTGVuZ3RoPzogbnVtYmVyO1xuICBtaW4/OiBudW1iZXI7XG4gIG1heD86IG51bWJlcjtcbiAgcGF0dGVybj86IFJlZ0V4cDtcbiAgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogT0RhdGFNb2RlbE9wdGlvbnM8YW55PixcbiAgICB7IG5hbWUsIGZpZWxkLCBwYXJzZXIsIC4uLm9wdHMgfTogT0RhdGFNb2RlbEZpZWxkT3B0aW9uczxGPlxuICApIHtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5maWVsZCA9IGZpZWxkO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuZGVmYXVsdCA9IG9wdHMuZGVmYXVsdCB8fCBwYXJzZXIuZGVmYXVsdDtcbiAgICB0aGlzLnJlcXVpcmVkID0gQm9vbGVhbihvcHRzLnJlcXVpcmVkIHx8ICFwYXJzZXIubnVsbGFibGUpO1xuICAgIHRoaXMuY29uY3VycmVuY3kgPSBCb29sZWFuKG9wdHMuY29uY3VycmVuY3kpO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gb3B0cy5tYXhMZW5ndGggfHwgcGFyc2VyLm1heExlbmd0aDtcbiAgICB0aGlzLm1pbkxlbmd0aCA9IG9wdHMubWluTGVuZ3RoO1xuICAgIHRoaXMubWluID0gb3B0cy5taW47XG4gICAgdGhpcy5tYXggPSBvcHRzLm1heDtcbiAgICB0aGlzLnBhdHRlcm4gPSBvcHRzLnBhdHRlcm47XG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuYXBpO1xuICB9XG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnR5cGU7XG4gIH1cblxuICBnZXQgbmF2aWdhdGlvbigpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcnNlci5uYXZpZ2F0aW9uKTtcbiAgfVxuXG4gIGdldCBjb2xsZWN0aW9uKCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMucGFyc2VyLmNvbGxlY3Rpb24pO1xuICB9XG5cbiAgYW5ub3RhdGVkVmFsdWU8VD4odGVybTogc3RyaW5nIHwgUmVnRXhwKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmFubm90YXRlZFZhbHVlPFQ+KHRlcm0pO1xuICB9XG5cbiAgY29uZmlndXJlKHtcbiAgICBmaW5kT3B0aW9uc0ZvclR5cGUsXG4gICAgY29uY3VycmVuY3ksXG4gICAgb3B0aW9ucyxcbiAgfToge1xuICAgIGZpbmRPcHRpb25zRm9yVHlwZTogKHR5cGU6IHN0cmluZykgPT4gT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZDtcbiAgICBjb25jdXJyZW5jeTogYm9vbGVhbjtcbiAgICBvcHRpb25zOiBPcHRpb25zSGVscGVyO1xuICB9KSB7XG4gICAgdGhpcy5tZXRhID0gZmluZE9wdGlvbnNGb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuICAgIGlmIChjb25jdXJyZW5jeSkgdGhpcy5jb25jdXJyZW5jeSA9IGNvbmN1cnJlbmN5O1xuICAgIGlmICh0aGlzLmRlZmF1bHQgIT09IHVuZGVmaW5lZClcbiAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVzZXJpYWxpemUodGhpcy5kZWZhdWx0LCBvcHRpb25zKTtcbiAgfVxuXG4gIGlzS2V5KCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5pc0tleSgpO1xuICB9XG5cbiAgaGFzUmVmZXJlbnRpYWxzKCkge1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5oYXNSZWZlcmVudGlhbHMoKTtcbiAgfVxuXG4gIGdldCByZWZlcmVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLnJlZmVyZW50aWFscztcbiAgfVxuXG4gIGlzU3RydWN0dXJlZFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmlzU3RydWN0dXJlZFR5cGUoKTtcbiAgfVxuXG4gIHN0cnVjdHVyZWQoKSB7XG4gICAgbGV0IHN0cnVjdHVyZWRUeXBlID0gdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlRm9yVHlwZTxGPihcbiAgICAgIHRoaXMucGFyc2VyLnR5cGVcbiAgICApO1xuICAgIC8vVGhyb3cgZXJyb3IgaWYgbm90IGZvdW5kXG4gICAgaWYgKCFzdHJ1Y3R1cmVkVHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgc3RydWN0dXJlZCB0eXBlIGZvciAke3RoaXMucGFyc2VyLnR5cGV9YCk7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRUeXBlO1xuICB9XG5cbiAgaXNFbnVtVHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuaXNFbnVtVHlwZSgpO1xuICB9XG5cbiAgZW51bSgpIHtcbiAgICBsZXQgZW51bVR5cGUgPSB0aGlzLmFwaS5maW5kRW51bVR5cGVGb3JUeXBlPEY+KHRoaXMucGFyc2VyLnR5cGUpO1xuICAgIC8vVGhyb3cgZXJyb3IgaWYgbm90IGZvdW5kXG4gICAgaWYgKCFlbnVtVHlwZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGZpbmQgZW51bSB0eXBlIGZvciAke3RoaXMucGFyc2VyLnR5cGV9YCk7XG4gICAgcmV0dXJuIGVudW1UeXBlO1xuICB9XG5cbiAgdmFsaWRhdGUoXG4gICAgdmFsdWU6IGFueSxcbiAgICB7XG4gICAgICBtZXRob2QsXG4gICAgICBuYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgICAgbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICkge1xuICAgIC8qXG4gICAgaWYgKCdpc1ZhbGlkJyBpbiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUuaXNWYWxpZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuICF2YWx1ZS5pc1ZhbGlkKHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pID8gdmFsdWUuX2Vycm9ycyA6IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKCdtb2RlbHMnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5tb2RlbHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICovXG4gICAgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzTW9kZWwodmFsdWUpKSB7XG4gICAgICByZXR1cm4gIXZhbHVlLmlzVmFsaWQoeyBtZXRob2QsIG5hdmlnYXRpb24gfSkgPyB2YWx1ZS5fZXJyb3JzIDogdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgIC5tb2RlbHMoKVxuICAgICAgICAuc29tZSgobTogT0RhdGFNb2RlbDxhbnk+KSA9PiAhbS5pc1ZhbGlkKHsgbWV0aG9kLCBuYXZpZ2F0aW9uIH0pKVxuICAgICAgICA/IHZhbHVlLm1vZGVscygpLm1hcCgobTogT0RhdGFNb2RlbDxhbnk+KSA9PiBtLl9lcnJvcnMpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb21wdXRlZCA9IHRoaXMuYW5ub3RhdGVkVmFsdWU8Ym9vbGVhbj4oQ09NUFVURUQpO1xuICAgICAgbGV0IGVycm9ycyA9IHRoaXMucGFyc2VyPy52YWxpZGF0ZSh2YWx1ZSwgeyBtZXRob2QsIG5hdmlnYXRpb24gfSkgfHwgW107XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucmVxdWlyZWQgJiZcbiAgICAgICAgKHZhbHVlID09PSBudWxsIHx8ICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIG1ldGhvZCAhPT0gJ21vZGlmeScpKSAmJiAvLyBJcyBudWxsIG9yIHVuZGVmaW5lZCB3aXRob3V0IHBhdGNoP1xuICAgICAgICAhKGNvbXB1dGVkICYmIG1ldGhvZCA9PT0gJ2NyZWF0ZScpIC8vIE5vdCAoSXMgQ29tcHV0ZWQgZmllbGQgYW5kIGNyZWF0ZSkgP1xuICAgICAgKSB7XG4gICAgICAgIGVycm9yc1sncHVzaCddKGByZXF1aXJlZGApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm1heExlbmd0aCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgdmFsdWUubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGhcbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgbWF4bGVuZ3RoYCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubWluTGVuZ3RoICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICB2YWx1ZS5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aFxuICAgICAgKSB7XG4gICAgICAgIGVycm9yc1sncHVzaCddKGBtaW5sZW5ndGhgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5taW4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmXG4gICAgICAgIHZhbHVlIDwgdGhpcy5taW5cbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgbWluYCk7XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJlxuICAgICAgICB2YWx1ZSA+IHRoaXMubWF4XG4gICAgICApIHtcbiAgICAgICAgZXJyb3JzWydwdXNoJ10oYG1heGApO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnBhdHRlcm4gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICF0aGlzLnBhdHRlcm4udGVzdCh2YWx1ZSlcbiAgICAgICkge1xuICAgICAgICBlcnJvcnNbJ3B1c2gnXShgcGF0dGVybmApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFUeXBlcy5pc0VtcHR5KGVycm9ycykgPyBlcnJvcnMgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgZGVmYXVsdHMoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pc1N0cnVjdHVyZWRUeXBlKCkgJiYgdGhpcy5tZXRhICE9PSB1bmRlZmluZWRcbiAgICAgID8gdGhpcy5tZXRhLmRlZmF1bHRzKClcbiAgICAgIDogdGhpcy5kZWZhdWx0O1xuICB9XG5cbiAgZGVzZXJpYWxpemUodmFsdWU6IGFueSwgb3B0aW9ucz86IE9wdGlvbnMpOiBGIHtcbiAgICBjb25zdCBwYXJzZXJPcHRpb25zID1cbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG5ldyBPRGF0YVBhcnNlck9wdGlvbnMob3B0aW9ucylcbiAgICAgICAgOiB0aGlzLmFwaS5vcHRpb25zO1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5kZXNlcmlhbGl6ZSh2YWx1ZSwgcGFyc2VyT3B0aW9ucyk7XG4gIH1cblxuICBzZXJpYWxpemUodmFsdWU6IEYsIG9wdGlvbnM/OiBPcHRpb25zKTogYW55IHtcbiAgICBjb25zdCBwYXJzZXJPcHRpb25zID1cbiAgICAgIG9wdGlvbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IG5ldyBPRGF0YVBhcnNlck9wdGlvbnMob3B0aW9ucylcbiAgICAgICAgOiB0aGlzLmFwaS5vcHRpb25zO1xuICAgIHJldHVybiB0aGlzLnBhcnNlci5zZXJpYWxpemUodmFsdWUsIHBhcnNlck9wdGlvbnMpO1xuICB9XG5cbiAgZW5jb2RlKHZhbHVlOiBGLCBvcHRpb25zPzogT3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgcGFyc2VyT3B0aW9ucyA9XG4gICAgICBvcHRpb25zICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBuZXcgT0RhdGFQYXJzZXJPcHRpb25zKG9wdGlvbnMpXG4gICAgICAgIDogdGhpcy5hcGkub3B0aW9ucztcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuZW5jb2RlKHZhbHVlLCBwYXJzZXJPcHRpb25zKTtcbiAgfVxuXG4gIHJlc291cmNlRmFjdG9yeTxULCBGPihcbiAgICBiYXNlOiBPRGF0YVJlc291cmNlPFQ+XG4gICk6IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8Rj4gfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8Rj4ge1xuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIGJhc2UgaW5zdGFuY2VvZiBPRGF0YUVudGl0eVJlc291cmNlIHx8XG4gICAgICAgIGJhc2UgaW5zdGFuY2VvZiBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlIHx8XG4gICAgICAgIGJhc2UgaW5zdGFuY2VvZiBPRGF0YVByb3BlcnR5UmVzb3VyY2VcbiAgICAgIClcbiAgICApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBidWlsZCByZXNvdXJjZSBmb3Igbm9uIGNvbXBhdGlibGUgYmFzZSB0eXBlXCIpO1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25cbiAgICAgID8gKGJhc2UgYXMgT0RhdGFFbnRpdHlSZXNvdXJjZTxUPikubmF2aWdhdGlvblByb3BlcnR5PEY+KHRoaXMucGFyc2VyLm5hbWUpXG4gICAgICA6IChiYXNlIGFzIE9EYXRhRW50aXR5UmVzb3VyY2U8VD4pLnByb3BlcnR5PEY+KHRoaXMucGFyc2VyLm5hbWUpO1xuICB9XG5cbiAgYW5ub3RhdGlvbnNGYWN0b3J5KFxuICAgIGJhc2U6IE9EYXRhRW50aXR5QW5ub3RhdGlvbnNcbiAgKTogT0RhdGFFbnRpdHlBbm5vdGF0aW9ucyB8IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMucGFyc2VyLmNvbGxlY3Rpb25cbiAgICAgID8gbmV3IE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucyhcbiAgICAgICAgICBiYXNlLmhlbHBlcixcbiAgICAgICAgICBiYXNlLnByb3BlcnR5KHRoaXMucGFyc2VyLm5hbWUpIHx8IHt9XG4gICAgICAgIClcbiAgICAgIDogbmV3IE9EYXRhRW50aXR5QW5ub3RhdGlvbnMoXG4gICAgICAgICAgYmFzZS5oZWxwZXIsXG4gICAgICAgICAgYmFzZS5wcm9wZXJ0eSh0aGlzLnBhcnNlci5uYW1lKSB8fCB7fVxuICAgICAgICApO1xuICB9XG5cbiAgc2NoZW1hRmFjdG9yeTxULCBGPihcbiAgICBiYXNlOiBPRGF0YVN0cnVjdHVyZWRUeXBlPFQ+XG4gICk6IE9EYXRhU3RydWN0dXJlZFR5cGU8Rj4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmFwaS5maW5kU3RydWN0dXJlZFR5cGVGb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuICB9XG5cbiAgbW9kZWxDb2xsZWN0aW9uRmFjdG9yeTxULCBGPih7XG4gICAgcGFyZW50LFxuICAgIHZhbHVlLFxuICAgIHJlc2V0LFxuICB9OiB7XG4gICAgcGFyZW50OiBPRGF0YU1vZGVsPGFueT47XG4gICAgdmFsdWU/OiBGIHwgRltdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdO1xuICAgIHJlc2V0PzogYm9vbGVhbjtcbiAgfSk6IE9EYXRhTW9kZWw8Rj4gfCBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4ge1xuICAgIGNvbnN0IGFubm90cyA9IHRoaXMuYW5ub3RhdGlvbnNGYWN0b3J5KHBhcmVudC5hbm5vdHMoKSk7XG4gICAgY29uc3QgTW9kZWwgPSB0aGlzLmFwaS5tb2RlbEZvclR5cGUodGhpcy5wYXJzZXIudHlwZSk7XG4gICAgY29uc3QgQ29sbGVjdGlvbiA9IHRoaXMuYXBpLmNvbGxlY3Rpb25Gb3JUeXBlKHRoaXMucGFyc2VyLnR5cGUpO1xuXG4gICAgaWYgKE1vZGVsID09PSB1bmRlZmluZWQgfHwgQ29sbGVjdGlvbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgRXJyb3IoYE5vIG1vZGVsIGZvciAke3RoaXMubmFtZX1gKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZXIuY29sbGVjdGlvblxuICAgICAgPyAobmV3IENvbGxlY3Rpb24oKHZhbHVlIHx8IFtdKSBhcyBGW10sIHtcbiAgICAgICAgICBhbm5vdHM6IGFubm90cyBhcyBPRGF0YUVudGl0aWVzQW5ub3RhdGlvbnMsXG4gICAgICAgICAgcGFyZW50OiBbcGFyZW50LCB0aGlzXSxcbiAgICAgICAgICByZXNldCxcbiAgICAgICAgfSkgYXMgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+KVxuICAgICAgOiAobmV3IE1vZGVsKCh2YWx1ZSB8fCB7fSkgYXMgRiwge1xuICAgICAgICAgIGFubm90czogYW5ub3RzIGFzIE9EYXRhRW50aXR5QW5ub3RhdGlvbnMsXG4gICAgICAgICAgcGFyZW50OiBbcGFyZW50LCB0aGlzXSxcbiAgICAgICAgICByZXNldCxcbiAgICAgICAgfSkgYXMgT0RhdGFNb2RlbDxGPik7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbFJlbGF0aW9uPFQ+ID0ge1xuICBzdGF0ZTogT0RhdGFNb2RlbFN0YXRlO1xuICBtb2RlbD86IE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj4gfCBudWxsO1xuICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPFQ+O1xuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG59O1xuZXhwb3J0IHR5cGUgT0RhdGFNb2RlbEVudHJ5PFQsIE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PiA9IHtcbiAgc3RhdGU6IE9EYXRhTW9kZWxTdGF0ZTtcbiAgbW9kZWw6IE07XG4gIGtleT86IEVudGl0eUtleTxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9O1xuICBzdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG59O1xuXG5leHBvcnQgY2xhc3MgT0RhdGFNb2RlbE9wdGlvbnM8VD4ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGNpZDogc3RyaW5nO1xuICBiYXNlPzogc3RyaW5nO1xuICBvcGVuPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmllbGRzOiBPRGF0YU1vZGVsRmllbGQ8YW55PltdO1xuICBzY2hlbWE6IE9EYXRhU3RydWN0dXJlZFR5cGU8VD47XG4gIGVudGl0eVNldD86IE9EYXRhRW50aXR5U2V0O1xuICAvLyBIaWVyYXJjaHlcbiAgcGFyZW50PzogT0RhdGFNb2RlbE9wdGlvbnM8YW55PjtcbiAgY2hpbGRyZW46IE9EYXRhTW9kZWxPcHRpb25zPGFueT5bXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBvcHRpb25zLFxuICAgIHNjaGVtYSxcbiAgfToge1xuICAgIG9wdGlvbnM6IE1vZGVsT3B0aW9ucztcbiAgICBzY2hlbWE6IE9EYXRhU3RydWN0dXJlZFR5cGU8VD47XG4gIH0pIHtcbiAgICB0aGlzLm5hbWUgPSBzY2hlbWEubmFtZTtcbiAgICB0aGlzLmJhc2UgPSBzY2hlbWEuYmFzZTtcbiAgICB0aGlzLm9wZW4gPSBzY2hlbWEub3BlbjtcbiAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICB0aGlzLmNpZCA9IG9wdGlvbnM/LmNpZCB8fCBDSURfRklFTERfTkFNRTtcbiAgICB0aGlzLl9maWVsZHMgPSBPYmplY3QuZW50cmllcyhvcHRpb25zLmZpZWxkcykubWFwKChbbmFtZSwgb3B0aW9uc10pID0+IHtcbiAgICAgIGNvbnN0IHsgZmllbGQsIC4uLm9wdHMgfSA9IG9wdGlvbnM7XG4gICAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCB8fCBuYW1lID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTW9kZWwgUHJvcGVydGllcyBuZWVkIG5hbWUgYW5kIGZpZWxkJyk7XG4gICAgICBjb25zdCBwYXJzZXIgPSB0aGlzLnNjaGVtYS5maW5kRmllbGRCeU5hbWU8VD4oZmllbGQgYXMga2V5b2YgVCk7XG4gICAgICBpZiAocGFyc2VyID09PSB1bmRlZmluZWQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcGFyc2VyIGZvciAke2ZpZWxkfSB3aXRoIG5hbWUgPSAke25hbWV9YCk7XG4gICAgICByZXR1cm4gbmV3IE9EYXRhTW9kZWxGaWVsZDxUPih0aGlzLCB7IG5hbWUsIGZpZWxkLCBwYXJzZXIsIC4uLm9wdHMgfSk7XG4gICAgfSk7XG4gIH1cblxuICBnZXQgYXBpKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS5hcGk7XG4gIH1cblxuICB0eXBlKCkge1xuICAgIHJldHVybiB0aGlzLnNjaGVtYS50eXBlKCk7XG4gIH1cblxuICBpc1R5cGVPZih0eXBlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5zY2hlbWEuaXNUeXBlT2YodHlwZSk7XG4gIH1cblxuICBmaW5kQ2hpbGRPcHRpb25zKFxuICAgIHByZWRpY2F0ZTogKG9wdGlvbnM6IE9EYXRhTW9kZWxPcHRpb25zPGFueT4pID0+IGJvb2xlYW5cbiAgKTogT0RhdGFNb2RlbE9wdGlvbnM8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHByZWRpY2F0ZSh0aGlzKSkgcmV0dXJuIHRoaXM7XG4gICAgbGV0IG1hdGNoOiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIGZvciAobGV0IGNoIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIG1hdGNoID0gY2guZmluZENoaWxkT3B0aW9ucyhwcmVkaWNhdGUpO1xuICAgICAgaWYgKG1hdGNoICE9PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH1cblxuICBjb25maWd1cmUoe1xuICAgIGZpbmRPcHRpb25zRm9yVHlwZSxcbiAgICBvcHRpb25zLFxuICB9OiB7XG4gICAgZmluZE9wdGlvbnNGb3JUeXBlOiAodHlwZTogc3RyaW5nKSA9PiBPRGF0YU1vZGVsT3B0aW9uczxhbnk+IHwgdW5kZWZpbmVkO1xuICAgIG9wdGlvbnM6IE9wdGlvbnNIZWxwZXI7XG4gIH0pIHtcbiAgICBpZiAodGhpcy5iYXNlKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBmaW5kT3B0aW9uc0ZvclR5cGUodGhpcy5iYXNlKSBhcyBPRGF0YU1vZGVsT3B0aW9uczxhbnk+O1xuICAgICAgcGFyZW50LmNoaWxkcmVuLnB1c2godGhpcyk7XG4gICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgdGhpcy5lbnRpdHlTZXQgPSB0aGlzLmFwaS5maW5kRW50aXR5U2V0Rm9yRW50aXR5VHlwZSh0aGlzLnR5cGUoKSk7XG4gICAgbGV0IGNvbmN1cnJlbmN5RmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmICh0aGlzLmVudGl0eVNldCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25jdXJyZW5jeUZpZWxkcyA9XG4gICAgICAgIHRoaXMuZW50aXR5U2V0LmFubm90YXRlZFZhbHVlPHN0cmluZ1tdPihPUFRJTUlTVElDX0NPTkNVUlJFTkNZKSB8fCBbXTtcbiAgICB9XG4gICAgdGhpcy5fZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICBsZXQgY29uY3VycmVuY3kgPSBjb25jdXJyZW5jeUZpZWxkcy5pbmRleE9mKGZpZWxkLmZpZWxkKSAhPT0gLTE7XG4gICAgICBmaWVsZC5jb25maWd1cmUoe1xuICAgICAgICBmaW5kT3B0aW9uc0ZvclR5cGUsXG4gICAgICAgIGNvbmN1cnJlbmN5LFxuICAgICAgICBvcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBmaWVsZHMoe1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbiA9IGZhbHNlLFxuICAgIGluY2x1ZGVfcGFyZW50cyA9IHRydWUsXG4gIH06IHtcbiAgICBpbmNsdWRlX3BhcmVudHM/OiBib29sZWFuO1xuICAgIGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gIH0gPSB7fSk6IE9EYXRhTW9kZWxGaWVsZDxhbnk+W10ge1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oaW5jbHVkZV9wYXJlbnRzICYmIHRoaXMucGFyZW50ICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyB0aGlzLnBhcmVudC5maWVsZHMoeyBpbmNsdWRlX25hdmlnYXRpb24sIGluY2x1ZGVfcGFyZW50cyB9KVxuICAgICAgICA6IFtdKSxcbiAgICAgIC4uLnRoaXMuX2ZpZWxkcy5maWx0ZXIoXG4gICAgICAgIChmaWVsZCkgPT4gaW5jbHVkZV9uYXZpZ2F0aW9uIHx8ICFmaWVsZC5uYXZpZ2F0aW9uXG4gICAgICApLFxuICAgIF07XG4gIH1cblxuICBmaWVsZDxGPihuYW1lOiBrZXlvZiBUIHwgc3RyaW5nKSB7XG4gICAgbGV0IGZpZWxkID0gdGhpcy5maWVsZHMoe1xuICAgICAgaW5jbHVkZV9wYXJlbnRzOiB0cnVlLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uOiB0cnVlLFxuICAgIH0pLmZpbmQoXG4gICAgICAobW9kZWxGaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+KSA9PlxuICAgICAgICBtb2RlbEZpZWxkLm5hbWUgPT09IG5hbWUgfHwgbW9kZWxGaWVsZC5maWVsZCA9PT0gbmFtZVxuICAgICk7XG4gICAgLy9UaHJvdyBlcnJvciBpZiBub3QgZm91bmRcbiAgICBpZiAoZmllbGQgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKGBObyBmaWVsZCB3aXRoIG5hbWUgJHtuYW1lfWApO1xuICAgIHJldHVybiBmaWVsZCBhcyBPRGF0YU1vZGVsRmllbGQ8Rj47XG4gIH1cblxuICBhdHRhY2g8Uj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICByZXNvdXJjZTpcbiAgICAgIHwgT0RhdGFFbnRpdHlSZXNvdXJjZTxSPlxuICAgICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFI+XG4gICAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxSPlxuICAgICAgfCBPRGF0YVNpbmdsZXRvblJlc291cmNlPFI+XG4gICkge1xuICAgIGlmIChcbiAgICAgIHNlbGYuX3Jlc291cmNlICE9PSBudWxsICYmXG4gICAgICByZXNvdXJjZS50eXBlKCkgIT09IHNlbGYuX3Jlc291cmNlLnR5cGUoKSAmJlxuICAgICAgIXNlbGYuX3Jlc291cmNlLmlzU3VidHlwZU9mKHJlc291cmNlKVxuICAgIClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbid0IGF0dGFjaCAke3Jlc291cmNlLnR5cGUoKX0gdG8gJHtzZWxmLl9yZXNvdXJjZS50eXBlKCl9YFxuICAgICAgKTtcblxuICAgIGNvbnN0IGN1cnJlbnQgPSBzZWxmLl9yZXNvdXJjZTtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCAhY3VycmVudC5pc0VxdWFsVG8ocmVzb3VyY2UpKSB7XG4gICAgICBzZWxmLl9yZXNvdXJjZSA9IHJlc291cmNlIGFzIE9EYXRhUmVzb3VyY2U8YW55PjtcbiAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdhdHRhY2gnLCB7XG4gICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgcHJldmlvdXM6IGN1cnJlbnQsXG4gICAgICAgICAgdmFsdWU6IHJlc291cmNlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyMgcmVnaW9uIFJlc291cmNlXG4gIHN0YXRpYyBjaGFpbihcbiAgICBjaGlsZDogT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PlxuICApOiBbXG4gICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICBPRGF0YU1vZGVsRmllbGQ8YW55PiB8IG51bGxcbiAgXVtdIHtcbiAgICBjb25zdCBjaGFpbiA9IFtdIGFzIGFueVtdO1xuICAgIGxldCB0dXBsZTpcbiAgICAgIHwgW1xuICAgICAgICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICAgIF1cbiAgICAgIHwgbnVsbCA9IFtjaGlsZCwgbnVsbF07XG4gICAgd2hpbGUgKHR1cGxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0dXBsZSBhcyBbXG4gICAgICAgIE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4sXG4gICAgICAgIE9EYXRhTW9kZWxGaWVsZDxhbnk+IHwgbnVsbFxuICAgICAgXTtcbiAgICAgIGlmIChjaGFpbi5zb21lKChwKSA9PiBwWzBdID09PSBwYXJlbnRbMF0pKSBicmVhaztcbiAgICAgIGNoYWluLnNwbGljZSgwLCAwLCBwYXJlbnQpO1xuICAgICAgdHVwbGUgPSB0dXBsZVswXS5fcGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gY2hhaW47XG4gIH1cblxuICBzdGF0aWMgcmVzb3VyY2U8VD4oXG4gICAgY2hpbGQ6IE9EYXRhTW9kZWw8VD4gfCBPRGF0YUNvbGxlY3Rpb248VCwgT0RhdGFNb2RlbDxUPj5cbiAgKTogT0RhdGFSZXNvdXJjZTxUPiB7XG4gICAgbGV0IHJlc291cmNlOiBPRGF0YVJlc291cmNlPGFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgZm9yIChsZXQgW21vZGVsLCBmaWVsZF0gb2YgT0RhdGFNb2RlbE9wdGlvbnMuY2hhaW4oY2hpbGQpKSB7XG4gICAgICByZXNvdXJjZSA9IHJlc291cmNlIHx8IChtb2RlbC5fcmVzb3VyY2UgYXMgT0RhdGFSZXNvdXJjZTxUPik7XG4gICAgICBpZiAocmVzb3VyY2UgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbChtb2RlbCkpIHtcbiAgICAgICAgbGV0IGtleSA9IChtb2RlbCBhcyBPRGF0YU1vZGVsPGFueT4pLmtleSh7XG4gICAgICAgICAgZmllbGRfbWFwcGluZzogdHJ1ZSxcbiAgICAgICAgfSkgYXMgRW50aXR5S2V5PGFueT47XG4gICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICByZXNvdXJjZSA9XG4gICAgICAgICAgICByZXNvdXJjZSBpbnN0YW5jZW9mIE9EYXRhRW50aXR5U2V0UmVzb3VyY2VcbiAgICAgICAgICAgICAgPyByZXNvdXJjZS5lbnRpdHkoa2V5KVxuICAgICAgICAgICAgICA6IChyZXNvdXJjZSBhcyBPRGF0YUVudGl0eVJlc291cmNlPFQ+KS5rZXkoa2V5KTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZCA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IG1vZGVsLl9yZXNvdXJjZT8uY2xvbmVRdWVyeTxUPigpLnRvUXVlcnlBcmd1bWVudHMoKTtcbiAgICAgICAgaWYgKHF1ZXJ5ICE9PSB1bmRlZmluZWQgJiYgcmVzb3VyY2UgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICByZXNvdXJjZS5xdWVyeSgocSkgPT4gcS5hcHBseShxdWVyeSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHJlc291cmNlID0gKGZpZWxkIGFzIE9EYXRhTW9kZWxGaWVsZDxhbnk+KS5yZXNvdXJjZUZhY3Rvcnk8YW55LCBhbnk+KFxuICAgICAgICByZXNvdXJjZSBhcyBPRGF0YVJlc291cmNlPGFueT5cbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXNvdXJjZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXNvdXJjZTogQ2FuJ3QgYnVpbGQgcmVzb3VyY2UgZm9yICR7Y2hpbGR9YCk7XG4gICAgcmV0dXJuIHJlc291cmNlO1xuICB9XG5cbiAgY29sbGVjdGlvblJlc291cmNlRmFjdG9yeShcbiAgICBxdWVyeT86IE9EYXRhUXVlcnlPcHRpb25zPFQ+XG4gICk6XG4gICAgfCBPRGF0YUVudGl0eVNldFJlc291cmNlPFQ+XG4gICAgfCBPRGF0YU5hdmlnYXRpb25Qcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuZW50aXR5U2V0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9EYXRhRW50aXR5U2V0UmVzb3VyY2UuZmFjdG9yeTxUPih0aGlzLmFwaSwge1xuICAgICAgcGF0aDogdGhpcy5lbnRpdHlTZXQubmFtZSxcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXG4gICAgICBxdWVyeSxcbiAgICB9KTtcbiAgfVxuXG4gIG1vZGVsUmVzb3VyY2VGYWN0b3J5KFxuICAgIHF1ZXJ5PzogT0RhdGFRdWVyeU9wdGlvbnM8VD5cbiAgKTpcbiAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICB8IE9EYXRhUHJvcGVydHlSZXNvdXJjZTxUPlxuICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPlxuICAgIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuY29sbGVjdGlvblJlc291cmNlRmFjdG9yeShxdWVyeSk7XG4gICAgaWYgKHJlc291cmNlIGluc3RhbmNlb2YgT0RhdGFFbnRpdHlTZXRSZXNvdXJjZSkgcmV0dXJuIHJlc291cmNlLmVudGl0eSgpO1xuICAgIHJldHVybiByZXNvdXJjZSBhc1xuICAgICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD5cbiAgICAgIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgZW50aXR5UmVzb3VyY2Uoc2VsZjogT0RhdGFNb2RlbDxUPik6IE9EYXRhUmVzb3VyY2U8VD4ge1xuICAgIGxldCByZXNvdXJjZSA9IHRoaXMubW9kZWxSZXNvdXJjZUZhY3RvcnkoXG4gICAgICBzZWxmLl9yZXNvdXJjZSAhPT0gbnVsbCA/IHNlbGYuX3Jlc291cmNlLmNsb25lUXVlcnkoKSA6IHVuZGVmaW5lZFxuICAgICk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGVudGl0eVJlc291cmNlOiBDYW4ndCBidWlsZCByZXNvdXJjZSBmb3IgJHtzZWxmfWApO1xuICAgIGNvbnN0IGtleSA9IHNlbGYua2V5KHsgZmllbGRfbWFwcGluZzogdHJ1ZSB9KSBhcyBFbnRpdHlLZXk8VD47XG4gICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmVzb3VyY2Uua2V5KGtleSk7XG4gICAgcmV0dXJuIHJlc291cmNlIGFzIE9EYXRhUmVzb3VyY2U8VD47XG4gIH1cbiAgLy8jZW5kcmVnaW9uXG5cbiAgYmluZChcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHtcbiAgICAgIHBhcmVudCxcbiAgICAgIHJlc291cmNlLFxuICAgICAgYW5ub3RzLFxuICAgIH06IHtcbiAgICAgIHBhcmVudD86IFtcbiAgICAgICAgT0RhdGFNb2RlbDxhbnk+IHwgT0RhdGFDb2xsZWN0aW9uPGFueSwgT0RhdGFNb2RlbDxhbnk+PixcbiAgICAgICAgT0RhdGFNb2RlbEZpZWxkPGFueT4gfCBudWxsXG4gICAgICBdO1xuICAgICAgcmVzb3VyY2U/OiBPRGF0YVJlc291cmNlPFQ+O1xuICAgICAgYW5ub3RzPzogT0RhdGFFbnRpdHlBbm5vdGF0aW9ucztcbiAgICB9ID0ge31cbiAgKSB7XG4gICAgLy8gUGFyZW50XG4gICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZWxmLl9wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxuXG4gICAgLy8gUmVzb3VyY2VcbiAgICBpZiAoc2VsZi5fcGFyZW50ID09PSBudWxsICYmIHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICByZXNvdXJjZSA9IHRoaXMubW9kZWxSZXNvdXJjZUZhY3RvcnkoKTtcbiAgICBpZiAocmVzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5hdHRhY2goXG4gICAgICAgIHNlbGYsXG4gICAgICAgIHJlc291cmNlIGFzXG4gICAgICAgICAgfCBPRGF0YUVudGl0eVJlc291cmNlPFQ+XG4gICAgICAgICAgfCBPRGF0YVByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgICAgICB8IE9EYXRhU2luZ2xldG9uUmVzb3VyY2U8VD5cbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQW5ub3RhdGlvbnNcbiAgICBzZWxmLl9hbm5vdGF0aW9ucyA9XG4gICAgICBhbm5vdHMgfHwgbmV3IE9EYXRhRW50aXR5QW5ub3RhdGlvbnMoT0RhdGFIZWxwZXJbREVGQVVMVF9WRVJTSU9OXSk7XG5cbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLmZpZWxkcyh7XG4gICAgICBpbmNsdWRlX25hdmlnYXRpb246IHRydWUsXG4gICAgICBpbmNsdWRlX3BhcmVudHM6IHRydWUsXG4gICAgfSk7XG4gICAgZm9yIChsZXQgZmllbGQgb2YgZmllbGRzKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgZmllbGQubmFtZSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogKCkgPT4gdGhpcy5fZ2V0KHNlbGYsIGZpZWxkIGFzIE9EYXRhTW9kZWxGaWVsZDxhbnk+KSxcbiAgICAgICAgc2V0OiAodmFsdWU6IGFueSkgPT5cbiAgICAgICAgICB0aGlzLl9zZXQoc2VsZiwgZmllbGQgYXMgT0RhdGFNb2RlbEZpZWxkPGFueT4sIHZhbHVlKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXJ5KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgcmVzb3VyY2U6XG4gICAgICB8IE9EYXRhRW50aXR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFQcm9wZXJ0eVJlc291cmNlPFQ+XG4gICAgICB8IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2U8VD5cbiAgICAgIHwgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPixcbiAgICBmdW5jOiAocTogT0RhdGFRdWVyeU9wdGlvbnNIYW5kbGVyPFQ+KSA9PiB2b2lkXG4gICkge1xuICAgIHJlc291cmNlLnF1ZXJ5KGZ1bmMpO1xuICAgIHRoaXMuYXR0YWNoKHNlbGYsIHJlc291cmNlKTtcbiAgICByZXR1cm4gc2VsZjtcbiAgfVxuXG4gIHJlc29sdmVLZXkoXG4gICAgdmFsdWU6IE9EYXRhTW9kZWw8VD4gfCBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sXG4gICAge1xuICAgICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgICAgcmVzb2x2ZSA9IHRydWUsXG4gICAgfTogeyBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjsgcmVzb2x2ZT86IGJvb2xlYW4gfSA9IHt9XG4gICk6IEVudGl0eUtleTxUPiB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXlUeXBlcyA9IHRoaXMuc2NoZW1hLmtleXMoeyBpbmNsdWRlX3BhcmVudHM6IHRydWUgfSk7XG4gICAgY29uc3Qga2V5OiBhbnkgPSB7fTtcbiAgICBmb3IgKHZhciBrdCBvZiBrZXlUeXBlcykge1xuICAgICAgbGV0IHYgPSB2YWx1ZSBhcyBhbnk7XG4gICAgICBsZXQgb3B0aW9ucyA9IHRoaXMgYXMgT0RhdGFNb2RlbE9wdGlvbnM8YW55PjtcbiAgICAgIGxldCBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4gfCB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGxldCBuYW1lIG9mIGt0Lm5hbWUuc3BsaXQoJy8nKSkge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSBicmVhaztcbiAgICAgICAgZmllbGQgPSBvcHRpb25zXG4gICAgICAgICAgLmZpZWxkcyh7IGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KVxuICAgICAgICAgIC5maW5kKChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+IGZpZWxkLmZpZWxkID09PSBuYW1lKTtcbiAgICAgICAgaWYgKGZpZWxkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2ID1cbiAgICAgICAgICAgIFR5cGVzLmlzUGxhaW5PYmplY3QodikgfHwgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2KVxuICAgICAgICAgICAgICA/IHZbZmllbGQubmFtZV1cbiAgICAgICAgICAgICAgOiB2O1xuICAgICAgICAgIG9wdGlvbnMgPSBmaWVsZC5tZXRhIGFzIE9EYXRhTW9kZWxPcHRpb25zPGFueT47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmaWVsZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgbGV0IG5hbWUgPSBmaWVsZF9tYXBwaW5nID8gZmllbGQuZmllbGQgOiBmaWVsZC5uYW1lO1xuICAgICAgaWYgKGt0LmFsaWFzICE9PSB1bmRlZmluZWQpIG5hbWUgPSBrdC5hbGlhcztcbiAgICAgIGtleVtuYW1lXSA9IHY7XG4gICAgfVxuICAgIGlmIChUeXBlcy5pc0VtcHR5KGtleSkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc29sdmUgPyBPYmplY3RzLnJlc29sdmVLZXkoa2V5KSA6IGtleTtcbiAgfVxuXG4gIHJlc29sdmVSZWZlcmVudGlhbChcbiAgICB2YWx1ZTogT0RhdGFNb2RlbDxUPiB8IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IG51bGwsXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+LFxuICAgIHtcbiAgICAgIGZpZWxkX21hcHBpbmcgPSBmYWxzZSxcbiAgICAgIHJlc29sdmUgPSB0cnVlLFxuICAgIH06IHsgZmllbGRfbWFwcGluZz86IGJvb2xlYW47IHJlc29sdmU/OiBib29sZWFuIH0gPSB7fVxuICApOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVmZXJlbnRpYWw6IGFueSA9IHt9O1xuICAgIGZvciAodmFyIHJlZiBvZiBmaWVsZC5yZWZlcmVudGlhbHMpIHtcbiAgICAgIGxldCBmcm9tID0gdGhpcy5maWVsZHMoeyBpbmNsdWRlX3BhcmVudHM6IHRydWUgfSkuZmluZChcbiAgICAgICAgKHA6IGFueSkgPT4gcC5maWVsZCA9PT0gcmVmLnJlZmVyZW5jZWRQcm9wZXJ0eVxuICAgICAgKTtcbiAgICAgIGxldCB0byA9IGZpZWxkLm9wdGlvbnNcbiAgICAgICAgLmZpZWxkcyh7IGluY2x1ZGVfcGFyZW50czogdHJ1ZSB9KVxuICAgICAgICAuZmluZCgoZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+KSA9PiBmaWVsZC5maWVsZCA9PT0gcmVmLnByb3BlcnR5KTtcbiAgICAgIGlmIChmcm9tICE9PSB1bmRlZmluZWQgJiYgdG8gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgbmFtZSA9IGZpZWxkX21hcHBpbmcgPyB0by5maWVsZCA6IHRvLm5hbWU7XG4gICAgICAgIHJlZmVyZW50aWFsW25hbWVdID0gdmFsdWUgJiYgKHZhbHVlIGFzIGFueSlbZnJvbS5uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFR5cGVzLmlzRW1wdHkocmVmZXJlbnRpYWwpKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXNvbHZlXG4gICAgICA/IE9iamVjdHMucmVzb2x2ZUtleShyZWZlcmVudGlhbCwgeyBzaW5nbGU6IGZhbHNlIH0pXG4gICAgICA6IHJlZmVyZW50aWFsO1xuICB9XG5cbiAgcmVzb2x2ZVJlZmVyZW5jZWQoXG4gICAgdmFsdWU6IE9EYXRhTW9kZWw8VD4gfCBUIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCBudWxsLFxuICAgIGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PixcbiAgICB7XG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgICByZXNvbHZlID0gdHJ1ZSxcbiAgICB9OiB7IGZpZWxkX21hcHBpbmc/OiBib29sZWFuOyByZXNvbHZlPzogYm9vbGVhbiB9ID0ge31cbiAgKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlZmVyZW5jZWQ6IGFueSA9IHt9O1xuICAgIGZvciAodmFyIHJlZiBvZiBmaWVsZC5yZWZlcmVudGlhbHMpIHtcbiAgICAgIGxldCBmcm9tID0gdGhpcy5maWVsZHMoeyBpbmNsdWRlX3BhcmVudHM6IHRydWUgfSkuZmluZChcbiAgICAgICAgKGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PikgPT4gZmllbGQuZmllbGQgPT09IHJlZi5wcm9wZXJ0eVxuICAgICAgKTtcbiAgICAgIGxldCB0byA9IChmaWVsZC5tZXRhIGFzIE9EYXRhTW9kZWxPcHRpb25zPGFueT4pXG4gICAgICAgIC5maWVsZHMoeyBpbmNsdWRlX3BhcmVudHM6IHRydWUgfSlcbiAgICAgICAgLmZpbmQoXG4gICAgICAgICAgKGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8YW55PikgPT5cbiAgICAgICAgICAgIGZpZWxkLmZpZWxkID09PSByZWYucmVmZXJlbmNlZFByb3BlcnR5XG4gICAgICAgICk7XG4gICAgICBpZiAoZnJvbSAhPT0gdW5kZWZpbmVkICYmIHRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGV0IG5hbWUgPSBmaWVsZF9tYXBwaW5nID8gdG8uZmllbGQgOiB0by5uYW1lO1xuICAgICAgICByZWZlcmVuY2VkW25hbWVdID0gdmFsdWUgJiYgKHZhbHVlIGFzIGFueSlbZnJvbS5uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFR5cGVzLmlzRW1wdHkocmVmZXJlbmNlZCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc29sdmVcbiAgICAgID8gT2JqZWN0cy5yZXNvbHZlS2V5KHJlZmVyZW5jZWQsIHsgc2luZ2xlOiBmYWxzZSB9KVxuICAgICAgOiByZWZlcmVuY2VkO1xuICB9XG5cbiAgdmFsaWRhdGUoXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICB7XG4gICAgICBtZXRob2QsXG4gICAgICBuYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgfToge1xuICAgICAgbWV0aG9kPzogJ2NyZWF0ZScgfCAndXBkYXRlJyB8ICdtb2RpZnknO1xuICAgICAgbmF2aWdhdGlvbj86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ1tdIH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuZmllbGRzKHtcbiAgICAgIGluY2x1ZGVfcGFyZW50czogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogbmF2aWdhdGlvbixcbiAgICB9KS5yZWR1Y2UoKGFjYywgZmllbGQpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IChzZWxmIGFzIGFueSlbZmllbGQubmFtZV07XG4gICAgICBsZXQgZXJycyA9IGZpZWxkLnZhbGlkYXRlKHZhbHVlLCB7IG1ldGhvZCB9KTtcbiAgICAgIHJldHVybiBlcnJzICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBPYmplY3QuYXNzaWduKGFjYywgeyBbZmllbGQubmFtZV06IGVycnMgfSlcbiAgICAgICAgOiBhY2M7XG4gICAgfSwge30pO1xuICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eShlcnJvcnMpID8gZXJyb3JzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZGVmYXVsdHMoKTogVCB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkZWZzID0gdGhpcy5maWVsZHMoKS5yZWR1Y2UoKGFjYywgZmllbGQpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGZpZWxkLmRlZmF1bHRzKCk7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IE9iamVjdC5hc3NpZ24oYWNjLCB7IFtmaWVsZC5uYW1lXTogdmFsdWUgfSlcbiAgICAgICAgOiBhY2M7XG4gICAgfSwge30pO1xuICAgIHJldHVybiAhVHlwZXMuaXNFbXB0eShkZWZzKSA/IGRlZnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBoYXNDaGFuZ2VkKFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgeyBpbmNsdWRlX25hdmlnYXRpb24gPSBmYWxzZSB9OiB7IGluY2x1ZGVfbmF2aWdhdGlvbj86IGJvb2xlYW4gfSA9IHt9XG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAhVHlwZXMuaXNFbXB0eShzZWxmLl9jaGFuZ2VzKSB8fFxuICAgICAgT2JqZWN0LnZhbHVlcyhzZWxmLl9yZWxhdGlvbnMpXG4gICAgICAgIC5maWx0ZXIoKHsgZmllbGQgfSkgPT4gIWZpZWxkLm5hdmlnYXRpb24gfHwgaW5jbHVkZV9uYXZpZ2F0aW9uKVxuICAgICAgICAuc29tZShcbiAgICAgICAgICAoeyBmaWVsZCwgc3RhdGUsIG1vZGVsIH0pID0+XG4gICAgICAgICAgICAoIWluY2x1ZGVfbmF2aWdhdGlvbiB8fCBmaWVsZC5uYXZpZ2F0aW9uKSAmJlxuICAgICAgICAgICAgKHN0YXRlID09PSBPRGF0YU1vZGVsU3RhdGUuQ2hhbmdlZCB8fFxuICAgICAgICAgICAgICAobW9kZWwgIT0gdW5kZWZpbmVkICYmIG1vZGVsLmhhc0NoYW5nZWQoeyBpbmNsdWRlX25hdmlnYXRpb24gfSkpKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGFzRW50aXR5PFIsIE0gZXh0ZW5kcyBPRGF0YU1vZGVsPFQ+PihzZWxmOiBNLCBmdW5jOiAobW9kZWw6IE0pID0+IFIpOiBSIHtcbiAgICAvLyBCdWlsZCBuZXcgcmVzb3VyY2VcbiAgICBjb25zdCBxdWVyeSA9IHNlbGYucmVzb3VyY2UoKS5jbG9uZVF1ZXJ5PFQ+KCk7XG4gICAgbGV0IHJlc291cmNlID0gdGhpcy5tb2RlbFJlc291cmNlRmFjdG9yeShxdWVyeSk7XG4gICAgaWYgKHJlc291cmNlID09PSB1bmRlZmluZWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01vZGVsIGRvZXMgbm90IGhhdmUgYXNzb2NpYXRlZCBFbnRpdHkgZW5kcG9pbnQnKTtcbiAgICAvLyBTdG9yZSBwYXJlbnQgYW5kIHJlc291cmNlXG4gICAgY29uc3Qgc3RvcmUgPSB7IHBhcmVudDogc2VsZi5fcGFyZW50LCByZXNvdXJjZTogc2VsZi5fcmVzb3VyY2UgfTtcbiAgICAvLyBSZXBsYWNlIHBhcmVudCBhbmQgcmVzb3VyY2VcbiAgICBzZWxmLl9wYXJlbnQgPSBudWxsO1xuICAgIHNlbGYuX3Jlc291cmNlID0gcmVzb3VyY2U7XG4gICAgLy8gRXhlY3V0ZSBmdW5jdGlvblxuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmMoc2VsZik7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgIHJldHVybiAocmVzdWx0IGFzIGFueSkucGlwZShcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIC8vIFJlc3RvcmUgcGFyZW50IGFuZCByZXNvdXJjZVxuICAgICAgICAgIHNlbGYuX3BhcmVudCA9IHN0b3JlLnBhcmVudDtcbiAgICAgICAgICBzZWxmLl9yZXNvdXJjZSA9IHN0b3JlLnJlc291cmNlO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVzdG9yZSBwYXJlbnQgYW5kIHJlc291cmNlXG4gICAgICBzZWxmLl9wYXJlbnQgPSBzdG9yZS5wYXJlbnQ7XG4gICAgICBzZWxmLl9yZXNvdXJjZSA9IHN0b3JlLnJlc291cmNlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICB0b0VudGl0eShcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHtcbiAgICAgIGNsaWVudF9pZCA9IGZhbHNlLFxuICAgICAgaW5jbHVkZV9uYXZpZ2F0aW9uID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2NvbXB1dGVkID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2tleSA9IHRydWUsXG4gICAgICBpbmNsdWRlX25vbl9maWVsZCA9IGZhbHNlLFxuICAgICAgY2hhbmdlc19vbmx5ID0gZmFsc2UsXG4gICAgICBmaWVsZF9tYXBwaW5nID0gZmFsc2UsXG4gICAgICBjaGFpbiA9IFtdLFxuICAgIH06IHtcbiAgICAgIGNsaWVudF9pZD86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX25hdmlnYXRpb24/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeT86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX2NvbXB1dGVkPzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfa2V5PzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkPzogYm9vbGVhbjtcbiAgICAgIGNoYW5nZXNfb25seT86IGJvb2xlYW47XG4gICAgICBmaWVsZF9tYXBwaW5nPzogYm9vbGVhbjtcbiAgICAgIGNoYWluPzogKE9EYXRhTW9kZWw8YW55PiB8IE9EYXRhQ29sbGVjdGlvbjxhbnksIE9EYXRhTW9kZWw8YW55Pj4pW107XG4gICAgfSA9IHt9XG4gICk6IFQgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSB7XG4gICAgbGV0IGF0dHJzID0gc2VsZi5hdHRyaWJ1dGVzKHtcbiAgICAgIGNoYW5nZXNfb25seSxcbiAgICAgIGZpZWxkX21hcHBpbmcsXG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5LFxuICAgICAgaW5jbHVkZV9jb21wdXRlZCxcbiAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkLFxuICAgIH0pO1xuXG4gICAgbGV0IHJlbGF0aW9ucyA9IE9iamVjdC5lbnRyaWVzKHNlbGYuX3JlbGF0aW9ucylcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIC8vIENoYWluXG4gICAgICAgIChbLCB7IG1vZGVsIH1dKSA9PiBjaGFpbi5ldmVyeSgoYykgPT4gYyAhPT0gbW9kZWwpXG4gICAgICApXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAvLyBDaGFuZ2VzIG9ubHlcbiAgICAgICAgKFssIHsgbW9kZWwsIHN0YXRlIH1dKSA9PlxuICAgICAgICAgICFjaGFuZ2VzX29ubHkgfHxcbiAgICAgICAgICAoY2hhbmdlc19vbmx5ICYmXG4gICAgICAgICAgICAoc3RhdGUgPT09IE9EYXRhTW9kZWxTdGF0ZS5DaGFuZ2VkIHx8XG4gICAgICAgICAgICAgIChtb2RlbCAhPSB1bmRlZmluZWQgJiYgbW9kZWwuaGFzQ2hhbmdlZCh7IGluY2x1ZGVfbmF2aWdhdGlvbiB9KSkpKVxuICAgICAgKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKFssIHsgZmllbGQsIG1vZGVsIH1dKSA9PlxuICAgICAgICAgIC8vIE5hdmlnYXRpb25cbiAgICAgICAgICAoaW5jbHVkZV9uYXZpZ2F0aW9uICYmIGZpZWxkLm5hdmlnYXRpb24gJiYgbW9kZWwgIT09IG51bGwpIHx8XG4gICAgICAgICAgIWZpZWxkLm5hdmlnYXRpb25cbiAgICAgIClcbiAgICAgIC5tYXAoKFtrLCB7IG1vZGVsLCBmaWVsZCwgc3RhdGUgfV0pID0+IHtcbiAgICAgICAgbGV0IGNoYW5nZXNPbmx5ID1cbiAgICAgICAgICBjaGFuZ2VzX29ubHkgJiZcbiAgICAgICAgICBzdGF0ZSAhPT0gT0RhdGFNb2RlbFN0YXRlLkNoYW5nZWQgJiZcbiAgICAgICAgICAhIWZpZWxkLm5hdmlnYXRpb247XG4gICAgICAgIGxldCBpbmNsdWRlS2V5ID0gaW5jbHVkZV9rZXkgJiYgISFmaWVsZC5uYXZpZ2F0aW9uO1xuICAgICAgICBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbChtb2RlbCkpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgayxcbiAgICAgICAgICAgIChtb2RlbCBhcyBPRGF0YU1vZGVsPGFueT4pLnRvRW50aXR5KHtcbiAgICAgICAgICAgICAgY2xpZW50X2lkLFxuICAgICAgICAgICAgICBpbmNsdWRlX25hdmlnYXRpb24sXG4gICAgICAgICAgICAgIGluY2x1ZGVfY29uY3VycmVuY3ksXG4gICAgICAgICAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkLFxuICAgICAgICAgICAgICBmaWVsZF9tYXBwaW5nLFxuICAgICAgICAgICAgICBjaGFuZ2VzX29ubHk6IGNoYW5nZXNPbmx5LFxuICAgICAgICAgICAgICBpbmNsdWRlX2tleTogaW5jbHVkZUtleSxcbiAgICAgICAgICAgICAgY2hhaW46IFtzZWxmLCAuLi5jaGFpbl0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdO1xuICAgICAgICB9IGVsc2UgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihtb2RlbCkpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgayxcbiAgICAgICAgICAgIChtb2RlbCBhcyBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+KS50b0VudGl0aWVzKHtcbiAgICAgICAgICAgICAgY2xpZW50X2lkLFxuICAgICAgICAgICAgICBpbmNsdWRlX25hdmlnYXRpb24sXG4gICAgICAgICAgICAgIGluY2x1ZGVfY29uY3VycmVuY3ksXG4gICAgICAgICAgICAgIGluY2x1ZGVfbm9uX2ZpZWxkLFxuICAgICAgICAgICAgICBmaWVsZF9tYXBwaW5nLFxuICAgICAgICAgICAgICBjaGFuZ2VzX29ubHk6IGNoYW5nZXNPbmx5LFxuICAgICAgICAgICAgICBpbmNsdWRlX2tleTogaW5jbHVkZUtleSxcbiAgICAgICAgICAgICAgY2hhaW46IFtzZWxmLCAuLi5jaGFpbl0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaywgbW9kZWxdO1xuICAgICAgfSlcbiAgICAgIC5yZWR1Y2UoKGFjYywgW2ssIHZdKSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBmaWVsZF9tYXBwaW5nXG4gICAgICAgICAgPyB0aGlzLmZpZWxkcygpLmZpbmQoXG4gICAgICAgICAgICAgIChmaWVsZDogT0RhdGFNb2RlbEZpZWxkPGFueT4pID0+IGZpZWxkLm5hbWUgPT09IGtcbiAgICAgICAgICAgICk/LmZpZWxkIHx8IGtcbiAgICAgICAgICA6IGs7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGFjYywgeyBbbmFtZV06IHYgfSk7XG4gICAgICB9LCB7fSk7XG5cbiAgICAvLyBDcmVhdGUgZW50aXR5XG4gICAgbGV0IGVudGl0eSA9IHsgLi4uYXR0cnMsIC4uLnJlbGF0aW9ucyB9O1xuXG4gICAgLy8gQWRkIGNsaWVudF9pZFxuICAgIGlmIChjbGllbnRfaWQpIHtcbiAgICAgICg8YW55PmVudGl0eSlbdGhpcy5jaWRdID0gKDxhbnk+c2VsZilbdGhpcy5jaWRdO1xuICAgIH1cblxuICAgIC8vIEFkZCBrZXlcbiAgICBpZiAoaW5jbHVkZV9rZXkpIHtcbiAgICAgIGVudGl0eSA9IHtcbiAgICAgICAgLi4uZW50aXR5LFxuICAgICAgICAuLi4odGhpcy5yZXNvbHZlS2V5KHNlbGYsIHsgZmllbGRfbWFwcGluZywgcmVzb2x2ZTogZmFsc2UgfSkgYXMge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdHlwZVxuICAgIGlmIChcbiAgICAgIHNlbGYuX3BhcmVudCAhPT0gbnVsbCAmJlxuICAgICAgKChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHNlbGYuX3BhcmVudFswXSkgJiZcbiAgICAgICAgKHNlbGYuX3BhcmVudFsxXSBhcyBPRGF0YU1vZGVsRmllbGQ8YW55PikubWV0YSAhPT0gc2VsZi5fbWV0YSkgfHxcbiAgICAgICAgKE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihzZWxmLl9wYXJlbnRbMF0pICYmXG4gICAgICAgICAgKHNlbGYuX3BhcmVudFswXSBhcyBPRGF0YUNvbGxlY3Rpb248YW55LCBPRGF0YU1vZGVsPGFueT4+KS5fbW9kZWxcbiAgICAgICAgICAgIC5tZXRhICE9PSBzZWxmLl9tZXRhKSlcbiAgICApIHtcbiAgICAgIHRoaXMuYXBpLm9wdGlvbnMuaGVscGVyLnR5cGUoZW50aXR5LCB0aGlzLnNjaGVtYS50eXBlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHk7XG4gIH1cblxuICBhdHRyaWJ1dGVzKFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAge1xuICAgICAgY2hhbmdlc19vbmx5ID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5ID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX2NvbXB1dGVkID0gZmFsc2UsXG4gICAgICBpbmNsdWRlX25vbl9maWVsZCA9IGZhbHNlLFxuICAgICAgZmllbGRfbWFwcGluZyA9IGZhbHNlLFxuICAgIH06IHtcbiAgICAgIGNoYW5nZXNfb25seT86IGJvb2xlYW47XG4gICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5PzogYm9vbGVhbjtcbiAgICAgIGluY2x1ZGVfY29tcHV0ZWQ/OiBib29sZWFuO1xuICAgICAgaW5jbHVkZV9ub25fZmllbGQ/OiBib29sZWFuO1xuICAgICAgZmllbGRfbWFwcGluZz86IGJvb2xlYW47XG4gICAgfSA9IHt9XG4gICk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICAvLyBBdHRyaWJ1dGVzIGJ5IGZpZWxkcyAoYXR0cmlidXRlcyBmb3IgdGhlIG1vZGVsIHR5cGUpXG4gICAgY29uc3QgZmllbGRBdHRycyA9IHRoaXMuZmllbGRzKCkucmVkdWNlKChhY2MsIGYpID0+IHtcbiAgICAgIGNvbnN0IGlzQ2hhbmdlZCA9IGYubmFtZSBpbiBzZWxmLl9jaGFuZ2VzO1xuICAgICAgY29uc3QgbmFtZSA9IGZpZWxkX21hcHBpbmcgPyBmLmZpZWxkIDogZi5uYW1lO1xuICAgICAgY29uc3QgY29tcHV0ZWQgPSBmLmFubm90YXRlZFZhbHVlPGJvb2xlYW4+KENPTVBVVEVEKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gaXNDaGFuZ2VkXG4gICAgICAgID8gc2VsZi5fY2hhbmdlc1tmLm5hbWVdXG4gICAgICAgIDogc2VsZi5fYXR0cmlidXRlc1tmLm5hbWVdO1xuICAgICAgaWYgKGYuY29uY3VycmVuY3kgJiYgaW5jbHVkZV9jb25jdXJyZW5jeSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcHV0ZWQgJiYgaW5jbHVkZV9jb21wdXRlZCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlc19vbmx5ICYmIGlzQ2hhbmdlZCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihhY2MsIHsgW25hbWVdOiB2YWx1ZSB9KTtcbiAgICAgIH0gZWxzZSBpZiAoIWNoYW5nZXNfb25seSAmJiAhZi5jb25jdXJyZW5jeSAmJiAhY29tcHV0ZWQpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYWNjLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfVxuICAgIH0sIHt9KTtcbiAgICBpZiAoIWluY2x1ZGVfbm9uX2ZpZWxkKSByZXR1cm4gZmllbGRBdHRycztcbiAgICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKGZpZWxkQXR0cnMpO1xuICAgIC8vIEF0dHJpYnV0ZXMgZnJvbSBvYmplY3QgKGF0dHJpYnV0ZXMgZm9yIG9iamVjdClcbiAgICBjb25zdCBub25GaWVsZEF0dHJzID0gT2JqZWN0LmVudHJpZXMoc2VsZilcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChba10pID0+XG4gICAgICAgICAgbmFtZXMuaW5kZXhPZihrKSA9PT0gLTEgJiYgIWsuc3RhcnRzV2l0aCgnXycpICYmICFrLmVuZHNXaXRoKCckJylcbiAgICAgIClcbiAgICAgIC5yZWR1Y2UoKGFjYywgW2ssIHZdKSA9PiBPYmplY3QuYXNzaWduKGFjYywgeyBba106IHYgfSksIHt9KTtcbiAgICByZXR1cm4geyAuLi5maWVsZEF0dHJzLCAuLi5ub25GaWVsZEF0dHJzIH07XG4gIH1cblxuICByZXNldChcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIHsgbmFtZSwgc2lsZW50ID0gZmFsc2UgfTogeyBuYW1lPzogc3RyaW5nOyBzaWxlbnQ/OiBib29sZWFuIH0gPSB7fVxuICApIHtcbiAgICBpZiAoIVR5cGVzLmlzRW1wdHkobmFtZSkgJiYgKG5hbWUgYXMgc3RyaW5nKSBpbiBzZWxmLl9jaGFuZ2VzKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHNlbGYuX2F0dHJpYnV0ZXNbbmFtZSBhcyBzdHJpbmddO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSBzZWxmLl9jaGFuZ2VzW25hbWUgYXMgc3RyaW5nXTtcbiAgICAgIGRlbGV0ZSBzZWxmLl9jaGFuZ2VzW25hbWUgYXMgc3RyaW5nXTtcbiAgICAgIGlmICghc2lsZW50KSB7XG4gICAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgIG1vZGVsOiBzZWxmLFxuICAgICAgICAgICAgdHJhY2s6IG5hbWUsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHByZXZpb3VzLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChUeXBlcy5pc0VtcHR5KG5hbWUpKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMoc2VsZi5fY2hhbmdlcyk7XG4gICAgICBzZWxmLl9jaGFuZ2VzID0ge307XG4gICAgICBpZiAoIXNpbGVudCkge1xuICAgICAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICAgICAgc2VsZi5ldmVudHMkLmVtaXQoXG4gICAgICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgIHRyYWNrOiBlbnRyeVswXSxcbiAgICAgICAgICAgICAgbW9kZWw6IHNlbGYsXG4gICAgICAgICAgICAgIHZhbHVlOiBzZWxmLl9hdHRyaWJ1dGVzW2VudHJ5WzBdXSxcbiAgICAgICAgICAgICAgcHJldmlvdXM6IGVudHJ5WzFdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3NpZ24oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICBlbnRpdHk6IFBhcnRpYWw8VD4gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcbiAgICB7XG4gICAgICByZXNldCA9IGZhbHNlLFxuICAgICAgcmVwYXJlbnQgPSBmYWxzZSxcbiAgICAgIHNpbGVudCA9IGZhbHNlLFxuICAgIH06IHsgcmVzZXQ/OiBib29sZWFuOyByZXBhcmVudD86IGJvb2xlYW47IHNpbGVudD86IGJvb2xlYW4gfSA9IHt9XG4gICkge1xuICAgIHNlbGYuX3Jlc2V0ID0gcmVzZXQ7XG4gICAgc2VsZi5fcmVwYXJlbnQgPSByZXBhcmVudDtcbiAgICBzZWxmLl9zaWxlbnQgPSBzaWxlbnQ7XG5cbiAgICBjb25zdCBjaGFuZ2VzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gQXBwbHkgZW50aXR5XG4gICAgY29uc3QgbW9kZWwgPSBzZWxmIGFzIGFueTtcbiAgICBPYmplY3QuZW50cmllcyhlbnRpdHkpXG4gICAgICAuZmlsdGVyKChbLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpIC8vIEZpbHRlciB1bmRlZmluZWRcbiAgICAgIC5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmZpZWxkcyh7XG4gICAgICAgICAgaW5jbHVkZV9wYXJlbnRzOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVfbmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgfSkuZmluZChcbiAgICAgICAgICAoZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxhbnk+KSA9PlxuICAgICAgICAgICAgKHNlbGYuX3Jlc2V0ICYmIGZpZWxkLmZpZWxkID09PSBrZXkpIHx8IGZpZWxkLm5hbWUgPT09IGtleVxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChmaWVsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gRGVsZWdhdGVkIHRvIHByaXZhdGUgc2V0dGVyXG4gICAgICAgICAgaWYgKHRoaXMuX3NldChzZWxmLCBmaWVsZCwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjaGFuZ2VzLnB1c2goZmllbGQubmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEJhc2ljIGFzc2lnbm1lbnRcbiAgICAgICAgICBjb25zdCBjdXJyZW50ID0gbW9kZWxba2V5XTtcbiAgICAgICAgICBtb2RlbFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IHZhbHVlKSBjaGFuZ2VzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAoKCFzZWxmLl9zaWxlbnQgJiYgY2hhbmdlcy5sZW5ndGggPiAwKSB8fCBzZWxmLl9yZXNldCkge1xuICAgICAgc2VsZi5ldmVudHMkLmVtaXQoXG4gICAgICAgIG5ldyBPRGF0YU1vZGVsRXZlbnQoc2VsZi5fcmVzZXQgPyAncmVzZXQnIDogJ3VwZGF0ZScsIHtcbiAgICAgICAgICBtb2RlbDogc2VsZixcbiAgICAgICAgICBvcHRpb25zOiB7IGNoYW5nZXMgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHNlbGYuX3Jlc2V0ID0gZmFsc2U7XG4gICAgc2VsZi5fcmVwYXJlbnQgPSBmYWxzZTtcbiAgICBzZWxmLl9zaWxlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIHN0YXRpYyBpc01vZGVsKG9iajogYW55KSB7XG4gICAgcmV0dXJuIFR5cGVzLnJhd1R5cGUob2JqKSA9PT0gJ01vZGVsJztcbiAgfVxuXG4gIHN0YXRpYyBpc0NvbGxlY3Rpb24ob2JqOiBhbnkpIHtcbiAgICByZXR1cm4gVHlwZXMucmF3VHlwZShvYmopID09PSAnQ29sbGVjdGlvbic7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUNvbGxlY3Rpb248Rj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+LFxuICAgIGNvbGxlY3Rpb246IE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PixcbiAgICB2YWx1ZTogVFtdIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXVxuICApIHtcbiAgICBjb2xsZWN0aW9uLl9hbm5vdGF0aW9ucyA9IGZpZWxkLmFubm90YXRpb25zRmFjdG9yeShcbiAgICAgIHNlbGYuYW5ub3RzKClcbiAgICApIGFzIE9EYXRhRW50aXRpZXNBbm5vdGF0aW9ucztcbiAgICBjb2xsZWN0aW9uLmFzc2lnbih2YWx1ZSBhcyBUW10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdLCB7XG4gICAgICByZXNldDogc2VsZi5fcmVzZXQsXG4gICAgICByZXBhcmVudDogc2VsZi5fcmVwYXJlbnQsXG4gICAgICBzaWxlbnQ6IHNlbGYuX3NpbGVudCxcbiAgICB9KTtcbiAgICByZXR1cm4gY29sbGVjdGlvbi5oYXNDaGFuZ2VkKCk7XG4gIH1cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbDxGPihcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8Rj4sXG4gICAgbW9kZWw6IE9EYXRhTW9kZWw8Rj4sXG4gICAgdmFsdWU6IEYgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVxuICApIHtcbiAgICBtb2RlbC5fYW5ub3RhdGlvbnMgPSBmaWVsZC5hbm5vdGF0aW9uc0ZhY3RvcnkoXG4gICAgICBzZWxmLmFubm90cygpXG4gICAgKSBhcyBPRGF0YUVudGl0eUFubm90YXRpb25zO1xuICAgIG1vZGVsLmFzc2lnbih2YWx1ZSBhcyBGIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH0sIHtcbiAgICAgIHJlc2V0OiBzZWxmLl9yZXNldCxcbiAgICAgIHJlcGFyZW50OiBzZWxmLl9yZXBhcmVudCxcbiAgICAgIHNpbGVudDogc2VsZi5fc2lsZW50LFxuICAgIH0pO1xuICAgIHJldHVybiBtb2RlbC5oYXNDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXQ8Rj4oXG4gICAgc2VsZjogT0RhdGFNb2RlbDxUPixcbiAgICBmaWVsZDogT0RhdGFNb2RlbEZpZWxkPEY+XG4gICk6IEYgfCBPRGF0YU1vZGVsPEY+IHwgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGZpZWxkLmlzU3RydWN0dXJlZFR5cGUoKSkge1xuICAgICAgcmV0dXJuIHNlbGYuX3JlbGF0aW9uc1tmaWVsZC5uYW1lXT8ubW9kZWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZXMoc2VsZiwge1xuICAgICAgICBpbmNsdWRlX2NvbmN1cnJlbmN5OiB0cnVlLFxuICAgICAgICBpbmNsdWRlX2NvbXB1dGVkOiB0cnVlLFxuICAgICAgfSlbZmllbGQubmFtZV07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0U3RydWN0dXJlZDxGPihcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIGZpZWxkOiBPRGF0YU1vZGVsRmllbGQ8Rj4sXG4gICAgdmFsdWU6XG4gICAgICB8IEZcbiAgICAgIHwgRltdXG4gICAgICB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9XG4gICAgICB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W11cbiAgICAgIHwgT0RhdGFNb2RlbDxGPlxuICAgICAgfCBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj5cbiAgICAgIHwgbnVsbFxuICApOiBib29sZWFuIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuICAgIC8vIEVuc3VyZXMgdGhhdCB0aGUgcmVsYXRpb24gZXhpc3RzXG4gICAgaWYgKCEoZmllbGQubmFtZSBpbiBzZWxmLl9yZWxhdGlvbnMpKSB7XG4gICAgICBzZWxmLl9yZWxhdGlvbnNbZmllbGQubmFtZV0gPSB7XG4gICAgICAgIHN0YXRlOiBPRGF0YU1vZGVsU3RhdGUuVW5jaGFuZ2VkLFxuICAgICAgICBmaWVsZDogZmllbGQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0aW9uID0gc2VsZi5fcmVsYXRpb25zW2ZpZWxkLm5hbWVdO1xuICAgIGNvbnN0IGN1cnJlbnRNb2RlbCA9IHJlbGF0aW9uLm1vZGVsO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZWxhdGlvbi5tb2RlbCA9IHZhbHVlIGFzIG51bGw7XG4gICAgICBjaGFuZ2VkID0gY3VycmVudE1vZGVsICE9PSB2YWx1ZTtcbiAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlKHNlbGYsIHJlbGF0aW9uKTtcbiAgICB9IGVsc2UgaWYgKE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbihjdXJyZW50TW9kZWwpKSB7XG4gICAgICBpZiAoT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHZhbHVlKSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgKGN1cnJlbnRNb2RlbCBhcyBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj4pLmVxdWFscyhcbiAgICAgICAgICAgIHZhbHVlIGFzIE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PlxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlKHNlbGYsIHJlbGF0aW9uKTtcbiAgICAgICAgcmVsYXRpb24ubW9kZWwgPSB2YWx1ZSBhcyBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj47XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZShzZWxmLCByZWxhdGlvbik7XG4gICAgICAgIGlmIChzZWxmLl9yZXBhcmVudCkgcmVsYXRpb24ubW9kZWwuX3BhcmVudCA9IFtzZWxmLCBmaWVsZF07XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChUeXBlcy5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBjaGFuZ2VkID0gdGhpcy51cGRhdGVDb2xsZWN0aW9uPEY+KFxuICAgICAgICAgIHNlbGYsXG4gICAgICAgICAgZmllbGQsXG4gICAgICAgICAgY3VycmVudE1vZGVsIGFzIE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PixcbiAgICAgICAgICB2YWx1ZSBhcyBUW10gfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVtdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKGN1cnJlbnRNb2RlbCkpIHtcbiAgICAgIGlmIChPRGF0YU1vZGVsT3B0aW9ucy5pc01vZGVsKHZhbHVlKSkge1xuICAgICAgICBpZiAoKGN1cnJlbnRNb2RlbCBhcyBPRGF0YU1vZGVsPEY+KS5lcXVhbHModmFsdWUgYXMgT0RhdGFNb2RlbDxGPikpIHtcbiAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmUoc2VsZiwgcmVsYXRpb24pO1xuICAgICAgICByZWxhdGlvbi5tb2RlbCA9IHZhbHVlIGFzIE9EYXRhTW9kZWw8Rj47XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZShzZWxmLCByZWxhdGlvbik7XG4gICAgICAgIGlmIChzZWxmLl9yZXBhcmVudCkgcmVsYXRpb24ubW9kZWwuX3BhcmVudCA9IFtzZWxmLCBmaWVsZF07XG4gICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChUeXBlcy5pc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBjaGFuZ2VkID0gdGhpcy51cGRhdGVNb2RlbDxGPihcbiAgICAgICAgICBzZWxmLFxuICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgIGN1cnJlbnRNb2RlbCBhcyBPRGF0YU1vZGVsPEY+LFxuICAgICAgICAgIHZhbHVlIGFzIEYgfCB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZWxhdGlvbi5tb2RlbCA9XG4gICAgICAgIE9EYXRhTW9kZWxPcHRpb25zLmlzQ29sbGVjdGlvbih2YWx1ZSkgfHxcbiAgICAgICAgT0RhdGFNb2RlbE9wdGlvbnMuaXNNb2RlbCh2YWx1ZSlcbiAgICAgICAgICA/ICh2YWx1ZSBhcyBPRGF0YU1vZGVsPEY+IHwgT0RhdGFDb2xsZWN0aW9uPEYsIE9EYXRhTW9kZWw8Rj4+KVxuICAgICAgICAgIDogZmllbGQubW9kZWxDb2xsZWN0aW9uRmFjdG9yeTxULCBGPih7XG4gICAgICAgICAgICAgIHBhcmVudDogc2VsZixcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICByZXNldDogc2VsZi5fcmVzZXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fc3Vic2NyaWJlKHNlbGYsIHJlbGF0aW9uKTtcbiAgICAgIGlmIChzZWxmLl9yZXBhcmVudCkgcmVsYXRpb24ubW9kZWwuX3BhcmVudCA9IFtzZWxmLCBmaWVsZF07XG4gICAgfVxuICAgIGlmICghT0RhdGFNb2RlbE9wdGlvbnMuaXNDb2xsZWN0aW9uKHJlbGF0aW9uLm1vZGVsKSkge1xuICAgICAgdmFyIHJlZiA9IGZpZWxkLm1ldGE/LnJlc29sdmVSZWZlcmVudGlhbChyZWxhdGlvbi5tb2RlbCwgZmllbGQpO1xuICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHJlZikuZm9yRWFjaCgoW2ssIHZdKSA9PlxuICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHNlbGYsIGssIHYsIGZhbHNlKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZWxhdGlvbi5zdGF0ZSA9XG4gICAgICBzZWxmLl9yZXNldCB8fCAhY2hhbmdlZFxuICAgICAgICA/IE9EYXRhTW9kZWxTdGF0ZS5VbmNoYW5nZWRcbiAgICAgICAgOiBPRGF0YU1vZGVsU3RhdGUuQ2hhbmdlZDtcbiAgICBpZiAoIXNlbGYuX3NpbGVudCAmJiBjaGFuZ2VkKSB7XG4gICAgICBzZWxmLmV2ZW50cyQuZW1pdChcbiAgICAgICAgbmV3IE9EYXRhTW9kZWxFdmVudCgnY2hhbmdlJywge1xuICAgICAgICAgIHRyYWNrOiBmaWVsZC5uYW1lLFxuICAgICAgICAgIG1vZGVsOiBzZWxmLFxuICAgICAgICAgIHZhbHVlOiByZWxhdGlvbi5tb2RlbCxcbiAgICAgICAgICBwcmV2aW91czogY3VycmVudE1vZGVsLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG4gIH1cblxuICBwcml2YXRlIF9zZXRWYWx1ZTxGPihcbiAgICBzZWxmOiBPRGF0YU1vZGVsPFQ+LFxuICAgIGZpZWxkOiBzdHJpbmcsXG4gICAgdmFsdWU6XG4gICAgICB8IEZcbiAgICAgIHwgRltdXG4gICAgICB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9XG4gICAgICB8IHsgW25hbWU6IHN0cmluZ106IGFueSB9W11cbiAgICAgIHwgT0RhdGFNb2RlbDxGPlxuICAgICAgfCBPRGF0YUNvbGxlY3Rpb248RiwgT0RhdGFNb2RlbDxGPj5cbiAgICAgIHwgbnVsbCxcbiAgICBrZXk/OiBib29sZWFuXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgY29uc3QgYXR0cnMgPSB0aGlzLmF0dHJpYnV0ZXMoc2VsZiwge1xuICAgICAgaW5jbHVkZV9jb25jdXJyZW5jeTogdHJ1ZSxcbiAgICAgIGluY2x1ZGVfY29tcHV0ZWQ6IHRydWUsXG4gICAgfSk7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gYXR0cnNbZmllbGRdO1xuICAgIGNoYW5nZWQgPSAhVHlwZXMuaXNFcXVhbChjdXJyZW50VmFsdWUsIHZhbHVlKTtcbiAgICBpZiAoc2VsZi5fcmVzZXQpIHtcbiAgICAgIGRlbGV0ZSBzZWxmLl9jaGFuZ2VzW2ZpZWxkXTtcbiAgICAgIHNlbGYuX2F0dHJpYnV0ZXNbZmllbGRdID0gdmFsdWU7XG4gICAgfSBlbHNlIGlmIChUeXBlcy5pc0VxdWFsKHZhbHVlLCBzZWxmLl9hdHRyaWJ1dGVzW2ZpZWxkXSkpIHtcbiAgICAgIGRlbGV0ZSBzZWxmLl9jaGFuZ2VzW2ZpZWxkXTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHNlbGYuX2NoYW5nZXNbZmllbGRdID0gdmFsdWU7XG4gICAgfVxuICAgIGlmICghc2VsZi5fc2lsZW50ICYmIGNoYW5nZWQpIHtcbiAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KFxuICAgICAgICBuZXcgT0RhdGFNb2RlbEV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgdHJhY2s6IGZpZWxkLFxuICAgICAgICAgIG1vZGVsOiBzZWxmLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBjdXJyZW50VmFsdWUsXG4gICAgICAgICAgb3B0aW9uczogeyBrZXkgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0PEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgZmllbGQ6IE9EYXRhTW9kZWxGaWVsZDxGPixcbiAgICB2YWx1ZTpcbiAgICAgIHwgRlxuICAgICAgfCBGW11cbiAgICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1cbiAgICAgIHwgeyBbbmFtZTogc3RyaW5nXTogYW55IH1bXVxuICAgICAgfCBPRGF0YU1vZGVsPEY+XG4gICAgICB8IE9EYXRhQ29sbGVjdGlvbjxGLCBPRGF0YU1vZGVsPEY+PlxuICAgICAgfCBudWxsXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaWVsZC5pc1N0cnVjdHVyZWRUeXBlKClcbiAgICAgID8gdGhpcy5fc2V0U3RydWN0dXJlZChzZWxmLCBmaWVsZCwgdmFsdWUpXG4gICAgICA6IHRoaXMuX3NldFZhbHVlKHNlbGYsIGZpZWxkLm5hbWUsIHZhbHVlLCBmaWVsZC5pc0tleSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3Vuc3Vic2NyaWJlPEY+KFxuICAgIHNlbGY6IE9EYXRhTW9kZWw8VD4sXG4gICAgcmVsYXRpb246IE9EYXRhTW9kZWxSZWxhdGlvbjxGPlxuICApIHtcbiAgICBpZiAocmVsYXRpb24uc3Vic2NyaXB0aW9uKSB7XG4gICAgICByZWxhdGlvbi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIGRlbGV0ZSByZWxhdGlvbi5zdWJzY3JpcHRpb247XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3N1YnNjcmliZTxGPihzZWxmOiBPRGF0YU1vZGVsPFQ+LCByZWxhdGlvbjogT0RhdGFNb2RlbFJlbGF0aW9uPEY+KSB7XG4gICAgaWYgKHJlbGF0aW9uLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdWJzY3JpcHRpb24gYWxyZWFkeSBleGlzdHMnKTtcbiAgICB9XG4gICAgaWYgKHJlbGF0aW9uLm1vZGVsID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3Vic2NyaXB0aW9uIG1vZGVsIGlzIG51bGwnKTtcbiAgICB9XG4gICAgcmVsYXRpb24uc3Vic2NyaXB0aW9uID0gcmVsYXRpb24ubW9kZWwuZXZlbnRzJC5zdWJzY3JpYmUoXG4gICAgICAoZXZlbnQ6IE9EYXRhTW9kZWxFdmVudDxhbnk+KSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBCVUJCTElORy5pbmRleE9mKGV2ZW50Lm5hbWUpICE9PSAtMSAmJlxuICAgICAgICAgIGV2ZW50LmJ1YmJsaW5nICYmXG4gICAgICAgICAgIWV2ZW50LnZpc2l0ZWQoc2VsZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKGV2ZW50Lm1vZGVsID09PSByZWxhdGlvbi5tb2RlbCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBldmVudC5uYW1lID09PSAnY2hhbmdlJyAmJlxuICAgICAgICAgICAgICByZWxhdGlvbi5maWVsZC5uYXZpZ2F0aW9uICYmXG4gICAgICAgICAgICAgIGV2ZW50Lm9wdGlvbnM/LmtleVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhciByZWYgPSAocmVsYXRpb24ubW9kZWwgYXMgT0RhdGFNb2RlbDxhbnk+KS5yZWZlcmVudGlhbChcbiAgICAgICAgICAgICAgICByZWxhdGlvbi5maWVsZFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhyZWYpLmZvckVhY2goKFtrLCB2XSkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFZhbHVlKHNlbGYsIGssIHYsIGZhbHNlKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudC5wdXNoKHNlbGYsIHJlbGF0aW9uLmZpZWxkLm5hbWUpO1xuICAgICAgICAgIHNlbGYuZXZlbnRzJC5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
package/esm2020/lib/module.mjs
CHANGED
|
@@ -25,10 +25,10 @@ export class ODataModule {
|
|
|
25
25
|
};
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
|
-
ODataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.
|
|
29
|
-
ODataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.
|
|
30
|
-
ODataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.
|
|
31
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.
|
|
28
|
+
ODataModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ODataModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
29
|
+
ODataModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ODataModule, imports: [HttpClientModule] });
|
|
30
|
+
ODataModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ODataModule, providers: [ODataClient, ODataServiceFactory], imports: [[HttpClientModule]] });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: ODataModule, decorators: [{
|
|
32
32
|
type: NgModule,
|
|
33
33
|
args: [{
|
|
34
34
|
imports: [HttpClientModule],
|