@sumaris-net/ngx-components 18.21.2 → 18.21.3
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/doc/changelog.md +1 -0
- package/esm2022/src/app/core/form/properties/properties.form.mjs +2 -3
- package/esm2022/src/app/shared/validator/validators.mjs +9 -4
- package/fesm2022/sumaris-net.ngx-components.mjs +9 -5
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/manifest.json +1 -1
package/doc/changelog.md
CHANGED
|
@@ -144,8 +144,7 @@ export class AppPropertiesForm extends AppForm {
|
|
|
144
144
|
equals: (v1, v2) => (v1?.key || v1) === (v2?.key || v2),
|
|
145
145
|
displayWith: (value) => {
|
|
146
146
|
// DEBUG
|
|
147
|
-
if (this.debug)
|
|
148
|
-
console.debug('[app-properties-form] Displaying value', value);
|
|
147
|
+
//if (this.debug) console.debug('[app-properties-form] Displaying value', value);
|
|
149
148
|
// Value is an object (a Property)
|
|
150
149
|
if (value && typeof value === 'object') {
|
|
151
150
|
return value.value;
|
|
@@ -392,4 +391,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
392
391
|
}], importPolicy: [{
|
|
393
392
|
type: Input
|
|
394
393
|
}] } });
|
|
395
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLmZvcm0udHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvZm9ybS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuZm9ybS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5KLE9BQU8sRUFBK0Msd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBYzVHLE1BQU0sT0FBTyxpQkFDWCxTQUFRLE9BQVk7SUFzRlI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNVO0lBeEZILE1BQU0sR0FBZSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUUzQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDbEQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUVsRSxJQUFjLGVBQWUsQ0FBQyxLQUFpQjtRQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQ0QsSUFBYyxlQUFlO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRVMsZ0JBQWdCLEdBQTJCLEVBQUUsQ0FBQztJQUM5QyxtQkFBbUIsR0FBNkMsRUFBRSxDQUFDO0lBQ25FLE9BQU8sQ0FBNEI7SUFDbkMsc0JBQXNCLENBQXdCO0lBRTlDLG1CQUFtQixDQUE2QjtJQUNoRCxvQkFBb0IsQ0FBUztJQUVDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDbkQsYUFBYSxDQUFTO0lBQ3RCLFNBQVMsQ0FBbUI7SUFDNUIsT0FBTyxDQUF5QjtJQUNoQyxTQUFTLEdBQW9DLFFBQVEsQ0FBQztJQUN2QixNQUFNLENBQVU7SUFDL0MsVUFBVSxDQUF5QjtJQUNuQyxlQUFlLENBQWtCO0lBQ0YsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUNuRCxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ1ksY0FBYyxHQUFHLElBQUksQ0FBQztJQUNyRCxhQUFhLEdBQUcsZ0JBQWdCLENBQUM7SUFDakMsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUNXLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDcEQsVUFBVSxDQUFTO0lBQ25CLFVBQVUsQ0FBUztJQUNZLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUUxRDs7O09BR0c7SUFDSCxJQUFhLG1CQUFtQixDQUFDLEtBQWE7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxXQUFXLENBQUMsS0FBNEI7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxJQUFTO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFZLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBOEIsQ0FBQztJQUN2RCxDQUFDO0lBRUQsSUFBYSxZQUFZLENBQUMsS0FBOEI7UUFDdEQsSUFBSSxJQUFJLENBQUMsc0JBQXNCO1lBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDcEYsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLFlBQVksSUFBSSxlQUFlLENBQUM7SUFDdEUsQ0FBQztJQUVELFlBQ1ksUUFBa0IsRUFDbEIsV0FBK0IsRUFDL0IsV0FBZ0MsRUFDaEMsRUFBcUIsRUFDckIsU0FBNEIsRUFDbEIsWUFBZ0M7UUFFcEQsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztRQVBaLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBQy9CLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyxPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUNsQixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFJcEQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUkscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7UUFDNUQsdUNBQXVDO0lBQ3pDLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsS0FBSyxLQUFLLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzlFLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLE1BQU0sSUFBSSxHQUNSLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQTJCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqSixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFzQixDQUFDLENBQUM7UUFDOUcsSUFBSSxDQUFDLGFBQWE7WUFDaEIsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLFlBQVksQ0FBQztRQUN2SSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLElBQUksQ0FBQyxhQUFhLG9CQUFvQixDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FDaEMsSUFBSSxDQUFDLFNBQVMsRUFDZCxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQzdDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFDN0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQ3RDLElBQUksQ0FBQyxPQUFPLENBQ2IsQ0FBQztRQUVGLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixpQkFBaUI7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QyxZQUFZO1FBQ1osSUFBSSxDQUFDLG1CQUFtQixHQUFHO1lBQ3pCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDO1lBQ2xJLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3ZELFdBQVcsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUMxQixRQUFRO2dCQUNSLElBQUksSUFBSSxDQUFDLEtBQUs7b0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFFL0Usa0NBQWtDO2dCQUNsQyxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDdkMsT0FBUSxLQUFrQixDQUFDLEtBQUssQ0FBQztnQkFDbkMsQ0FBQztnQkFFRCxpQkFBaUI7Z0JBQ2pCLE1BQU0sR0FBRyxHQUFHLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksQ0FBQyxHQUFHO29CQUFFLE9BQU8sS0FBSyxDQUFDO2dCQUN2QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsVUFBVSxFQUFFLENBQUMsT0FBTyxDQUFDO1lBQ3JCLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDOUQsZUFBZSxFQUFFLEtBQUs7WUFDdEIsY0FBYyxFQUFFLElBQUk7WUFDcEIseUJBQXlCLEVBQUUsSUFBSTtTQUNoQyxDQUFDO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUNsRSxJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVTLGtCQUFrQixDQUFDLFdBQWtDO1FBQzdELElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFFNUIsUUFBUTtRQUNSLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGlEQUFpRCxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTlGLGtEQUFrRDtRQUNsRCxXQUFXLEdBQUcsd0JBQXdCLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7UUFFNUYsbUJBQW1CO1FBQ25CLE1BQU0sZ0JBQWdCLEdBQTJCLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVc7YUFDL0IsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDWCxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2hDLElBQUksR0FBRyxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDOUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0lBQzNDLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYTtRQUMzQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsSUFBOEI7UUFDOUQsTUFBTSxLQUFLLEdBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFzQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ2hGLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUFHLElBQUksS0FBSyxDQUFDO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUMvRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsc0JBQXNCO1FBQ3BFLElBQUksSUFBSSxFQUFFLFNBQVMsS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBYTtRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBdUIsRUFBRSxJQUE4QjtRQUNwRSxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sQ0FBQyxPQUFPO1FBRTFCLE1BQU0sQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ3RELGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDekUsQ0FBQyxDQUFDO1FBRUgsc0NBQXNDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLE1BQU0sa0JBQWtCLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUzRSx5SUFBeUk7UUFDekksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUMxQixRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQWMsRUFBRSxHQUFHLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFRLENBQUM7WUFDL0ksQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVoRSxJQUFJLElBQUksRUFBRSxTQUFTLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELGNBQWM7UUFDWixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hCLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwRSxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsS0FBSyxJQUFJO1NBQzdELENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsaURBQWlELEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELDZCQUE2QjtJQUVuQixrQkFBa0I7UUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDckMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFUyxrQkFBa0I7UUFDMUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxDQUFDLHFCQUFxQjtJQUN0RCxDQUFDO0lBRVMsS0FBSyxDQUFDLHFCQUFxQixDQUNuQyxLQUFVLEVBQ1YsTUFBWSxFQUNaLE1BQWdDLEVBQ2hDLGFBQTZCLEVBQzdCLElBSUM7UUFFRCxJQUFJLEtBQUssR0FBRyxNQUFNLGtCQUFrQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUUzRixRQUFRO1FBQ1IsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0RBQWtELEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWhHLGFBQWE7UUFDYixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFFLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDL0MsSUFBSSxHQUFHO2dCQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBMEIsQ0FBQztRQUMxRCxDQUFDO1FBRUQsZ0JBQWdCO1FBQ2hCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBMEIsQ0FBQztRQUNuRCxDQUFDO1FBRUQsMkJBQTJCO1FBQzNCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqRCxNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztpQkFDOUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztpQkFDekQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQ3hDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUVELEtBQUssR0FBRyxLQUFLLElBQUksR0FBRyxDQUFDO1FBRXJCLFlBQVk7UUFDWixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7WUFBRSxLQUFLLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztRQUVoRCxPQUFPLGdCQUFnQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RyxDQUFDO0lBRVMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFnQixFQUFFO1FBQzVDLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLENBQUMsT0FBTztRQUNqQyxNQUFNLFVBQVUsR0FBRyxNQUFNLGtCQUFrQixDQUFDLGVBQWUsQ0FBTSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRVMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFhO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxDQUFDLE9BQU87UUFFbEQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksQ0FBQztZQUNILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pELE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3BILElBQUksZ0JBQWdCLEdBQWdCLEVBQUUsQ0FBQztZQUV2QyxRQUFRLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxlQUFlO29CQUNsQixnREFBZ0Q7b0JBQ2hELGdCQUFnQixHQUFHLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLGtCQUFrQixFQUFFLENBQUM7b0JBQ3BFLE1BQU07Z0JBQ1IsS0FBSyxhQUFhO29CQUNoQiw4Q0FBOEM7b0JBQzlDLGdCQUFnQixHQUFHLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxHQUFHLGtCQUFrQixFQUFFLENBQUM7b0JBQ3BFLE1BQU07Z0JBQ1IsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDO29CQUNuQixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQ25ELGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQ3ZELENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO3dCQUNYLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDOzRCQUM3QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ3JDLENBQUM7d0JBQ0QsT0FBTyxHQUFHLENBQUM7b0JBQ2IsQ0FBQyxFQUNZLEVBQUUsR0FBRyxrQkFBa0IsRUFBRSxDQUN2QyxDQUFDO29CQUNGLE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7WUFFRCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVTLFlBQVk7UUFDcEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRVMsZUFBZSxDQUFDLEdBQWE7UUFDckMsT0FBTyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQzt3R0E5V1UsaUJBQWlCOzRGQUFqQixpQkFBaUIseUZBeUJSLGdCQUFnQixvSUFLaEIsZ0JBQWdCLDZHQUdoQixnQkFBZ0Isd0ZBRWhCLGdCQUFnQix1SEFHaEIsZ0JBQWdCLG1HQUdoQixnQkFBZ0IseUNBQ2hCLGdCQUFnQixzSEE3Q3pCLENBQUMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsT0FBTyxDQUFDLGlEQ2hDbkYsZzlTQTZPQTs7NEZEMU1hLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDRSxxQkFBcUIsYUFHcEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxPQUFPLENBQUMsbUJBQ2hFLHVCQUF1QixDQUFDLE1BQU07OzBCQThGNUMsUUFBUTt5Q0FuRTZCLFdBQVc7c0JBQWxELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDa0MsTUFBTTtzQkFBN0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDN0IsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNrQyxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixhQUFhO3NCQUFyQixLQUFLO2dCQUNrQyxjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ2tDLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDa0MsV0FBVztzQkFBbEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU16QixtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBT08sV0FBVztzQkFBdkIsS0FBSztnQkF1Qk8sWUFBWTtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwLCBGb3JtRmllbGREZWZpbml0aW9uVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdE5pbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFwcEZvcm0gfSBmcm9tICcuLi9mb3JtLmNsYXNzJztcbmltcG9ydCB7IFByb3BlcnR5LCBQcm9wZXJ0eU1hcCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eVZhbGlkYXRvciB9IGZyb20gJy4vcHJvcGVydHkudmFsaWRhdG9yJztcbmltcG9ydCB7IFByZWRlZmluZWRDb2xvcnMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXlIZWxwZXIsIEZvcm1BcnJheUhlbHBlck9wdGlvbnMgfSBmcm9tICcuLi9hcnJheS9mb3JtLWFycmF5JztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IHN1Z2dlc3RGcm9tQXJyYXkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBQcm9wZXJ0aWVzVXRpbHMsIEFwcFByb3BlcnR5VXRpbHMgfSBmcm9tICcuL3Byb3BlcnRpZXMudXRpbHMnO1xuaW1wb3J0IHsgUnhTdGF0ZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3N0YXRlJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBSZWdFeHBVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yZWdleHBzJztcbmltcG9ydCB7IElNUE9SVF9QT0xJQ0lFUywgUHJvcGVydGllc0ZpbGVTZXJ2aWNlLCBSZWZlcmVudGlhbEltcG9ydFBvbGljeSB9IGZyb20gJy4vcHJvcGVydGllcy1maWxlLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFByb3BlcnRpZXNGb3JtU3RhdGUge1xuICBkZWZpbml0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBkZWZpbml0aW9uS2V5czogUHJvcGVydHlbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb3BlcnRpZXMtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAncHJvcGVydGllcy5mb3JtLmh0bWwnLFxuICBzdHlsZVVybHM6IFsncHJvcGVydGllcy5mb3JtLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBQcm9wZXJ0eVZhbGlkYXRvciwgdXNlQ2xhc3M6IFByb3BlcnR5VmFsaWRhdG9yIH0sIFJ4U3RhdGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwUHJvcGVydGllc0Zvcm08TyA9IGFueSwgVCBleHRlbmRzIFByb3BlcnR5PE8+ID0gUHJvcGVydHk8Tz4sIFMgZXh0ZW5kcyBBcHBQcm9wZXJ0aWVzRm9ybVN0YXRlID0gQXBwUHJvcGVydGllc0Zvcm1TdGF0ZT5cbiAgZXh0ZW5kcyBBcHBGb3JtPFRbXT5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0ZTogUnhTdGF0ZTxTPiA9IGluamVjdChSeFN0YXRlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbXBvcnRQb2xpY2llcyA9IElNUE9SVF9QT0xJQ0lFUztcblxuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25zJCA9IHRoaXMuX3N0YXRlLnNlbGVjdCgnZGVmaW5pdGlvbnMnKTtcbiAgcHJvdGVjdGVkIF9kZWZpbml0aW9uS2V5cyQgPSB0aGlzLl9zdGF0ZS5zZWxlY3QoJ2RlZmluaXRpb25LZXlzJyk7XG5cbiAgcHJvdGVjdGVkIHNldCBfZGVmaW5pdGlvbktleXModmFsdWU6IFByb3BlcnR5W10pIHtcbiAgICB0aGlzLl9zdGF0ZS5zZXQoJ2RlZmluaXRpb25LZXlzJywgKCkgPT4gdmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgX2RlZmluaXRpb25LZXlzKCk6IFByb3BlcnR5W10ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXQoJ2RlZmluaXRpb25LZXlzJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25CeUtleTogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcCA9IHt9O1xuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25zQnlJbmRleDogeyBbaW5kZXg6IG51bWJlcl06IEZvcm1GaWVsZERlZmluaXRpb24gfSA9IHt9O1xuICBwcm90ZWN0ZWQgX2hlbHBlcjogRm9ybUFycmF5SGVscGVyPFByb3BlcnR5PjtcbiAgcHJvdGVjdGVkIF9wcm9wZXJ0aWVzRmlsZVNlcnZpY2U6IFByb3BlcnRpZXNGaWxlU2VydmljZTtcblxuICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZUNvbmZpZzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIHByb3RlY3RlZCBfZm9jdXNlZENvbnRyb2xJbmRleDogbnVtYmVyO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93VG9vbGJhciA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtQXJyYXlOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm1BcnJheTogVW50eXBlZEZvcm1BcnJheTtcbiAgQElucHV0KCkgb3B0aW9uczogRm9ybUFycmF5SGVscGVyT3B0aW9ucztcbiAgQElucHV0KCkgY2hpcENvbG9yOiBUaGVtZVBhbGV0dGUgfCBQcmVkZWZpbmVkQ29sb3JzID0gJ2FjY2VudCc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0hpbnRLZXkgPSBmYWxzZTtcbiAgQElucHV0KCkgaGludEtleVByZWZpeCA9ICcnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd01vcmVCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBhZGRCdXR0b25UZXh0ID0gJ0NPTU1PTi5CVE5fQUREJztcbiAgQElucHV0KCkgYWRkQnV0dG9uVGl0bGUgPSAnJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dBZGRCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBwYW5lbENsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkRvd25sb2FkID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5JbXBvcnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFkZEJ1dHRvblRpdGxlIGluc3RlYWRcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2hvd01vcmVCdXR0b25UaXRsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5hZGRCdXR0b25UaXRsZSA9IHZhbHVlO1xuICB9XG4gIGdldCBzaG93TW9yZUJ1dHRvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQnV0dG9uVGl0bGU7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGVmaW5pdGlvbnModmFsdWU6IEZvcm1GaWVsZERlZmluaXRpb25bXSkge1xuICAgIHRoaXMuX3N0YXRlLnNldCgnZGVmaW5pdGlvbnMnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGRlZmluaXRpb25zKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldCgnZGVmaW5pdGlvbnMnKTtcbiAgfVxuXG4gIHNldCB2YWx1ZShkYXRhOiBUW10pIHtcbiAgICB0aGlzLnNldFZhbHVlKGRhdGEpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUFycmF5LnZhbHVlIGFzIFRbXTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXk/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgZ2V0IGZpZWxkRm9ybXMoKTogVW50eXBlZEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGltcG9ydFBvbGljeSh2YWx1ZTogUmVmZXJlbnRpYWxJbXBvcnRQb2xpY3kpIHtcbiAgICBpZiAodGhpcy5fcHJvcGVydGllc0ZpbGVTZXJ2aWNlKSB0aGlzLl9wcm9wZXJ0aWVzRmlsZVNlcnZpY2UuaW1wb3J0UG9saWN5ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW1wb3J0UG9saWN5KCk6IFJlZmVyZW50aWFsSW1wb3J0UG9saWN5IHtcbiAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllc0ZpbGVTZXJ2aWNlPy5pbXBvcnRQb2xpY3kgfHwgJ2luc2VydC11cGRhdGUnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPE1vbWVudD4sXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdG9yOiBQcm9wZXJ0eVZhbGlkYXRvcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCBudWxsKTtcblxuICAgIHRoaXMuX3Byb3BlcnRpZXNGaWxlU2VydmljZSA9IG5ldyBQcm9wZXJ0aWVzRmlsZVNlcnZpY2UoaW5qZWN0b3IpO1xuXG4gICAgdGhpcy50YWJpbmRleCA9IDIwOyAvLyBGb3IgY29tcGF0aWJpbGl0eSAtIFRPRE8gcmVtb3ZlIGxhdGVyXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd0VtcHR5QXJyYXkgPT09IGZhbHNlICYmIGlzRW1wdHlBcnJheSh0aGlzLmRlZmluaXRpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBvciBpbnZhbGlkIGF0dHJpYnV0ZSAnZGVmaW5pdGlvbnMnXCIpO1xuICAgIH1cblxuICAgIC8vIFJldHJpZXZlIHRoZSBmb3JtXG4gICAgY29uc3QgZm9ybSA9XG4gICAgICAodGhpcy5mb3JtQXJyYXkgJiYgKHRoaXMuZm9ybUFycmF5LnBhcmVudCBhcyBVbnR5cGVkRm9ybUdyb3VwKSkgfHwgKHRoaXMuZm9ybUdyb3VwRGlyICYmIHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0pIHx8IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe30pO1xuICAgIHRoaXMuc2V0Rm9ybShmb3JtKTtcblxuICAgIHRoaXMuZm9ybUFycmF5ID0gdGhpcy5mb3JtQXJyYXkgfHwgKHRoaXMuZm9ybUFycmF5TmFtZSAmJiAoZm9ybS5nZXQodGhpcy5mb3JtQXJyYXlOYW1lKSBhcyBVbnR5cGVkRm9ybUFycmF5KSk7XG4gICAgdGhpcy5mb3JtQXJyYXlOYW1lID1cbiAgICAgIHRoaXMuZm9ybUFycmF5TmFtZSB8fCAodGhpcy5mb3JtQXJyYXkgJiYgT2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZmluZCgoa2V5KSA9PiBmb3JtLmdldChrZXkpID09PSB0aGlzLmZvcm1BcnJheSkpIHx8ICdwcm9wZXJ0aWVzJztcbiAgICBpZiAoIXRoaXMuZm9ybUFycmF5KSB7XG4gICAgICBjb25zb2xlLndhcm4oYE1pc3NpbmcgYXJyYXkgY29udHJvbCAnJHt0aGlzLmZvcm1BcnJheU5hbWV9Jy4gV2lsbCBjcmVhdGUgaXQhYCk7XG4gICAgICB0aGlzLmZvcm1BcnJheSA9IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pO1xuICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2wodGhpcy5mb3JtQXJyYXlOYW1lLCB0aGlzLmZvcm1BcnJheSk7XG4gICAgfVxuXG4gICAgdGhpcy5faGVscGVyID0gbmV3IEZvcm1BcnJheUhlbHBlcjxQcm9wZXJ0eT4oXG4gICAgICB0aGlzLmZvcm1BcnJheSxcbiAgICAgICh2YWx1ZSkgPT4gdGhpcy52YWxpZGF0b3IuZ2V0Rm9ybUdyb3VwKHZhbHVlKSxcbiAgICAgICh2MSwgdjIpID0+ICghdjEgJiYgIXYyKSB8fCB2MS5rZXkgPT09IHYyLmtleSxcbiAgICAgICh2YWx1ZSkgPT4gdGhpcy5pc0VtcHR5UHJvcGVydHkodmFsdWUpLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgIHRoaXMubW9iaWxlID0gdGhpcy5tb2JpbGUgPz8gaXNNb2JpbGUod2luZG93KTtcblxuICAgIC8vIENvbWJvIGtleVxuICAgIHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZyA9IHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgb3B0cykgPT4gdGhpcy5zdWdnZXN0RGVmaW5pdGlvbktleXModmFsdWUsIGZpbHRlciwgJ3ZhbHVlJywgc29ydERpcmVjdGlvbiwgb3B0cyksXG4gICAgICBlcXVhbHM6ICh2MSwgdjIpID0+ICh2MT8ua2V5IHx8IHYxKSA9PT0gKHYyPy5rZXkgfHwgdjIpLFxuICAgICAgZGlzcGxheVdpdGg6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbYXBwLXByb3BlcnRpZXMtZm9ybV0gRGlzcGxheWluZyB2YWx1ZScsIHZhbHVlKTtcblxuICAgICAgICAvLyBWYWx1ZSBpcyBhbiBvYmplY3QgKGEgUHJvcGVydHkpXG4gICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZSBhcyBQcm9wZXJ0eSkudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBpcyBhIGtleVxuICAgICAgICBjb25zdCBkZWYgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHRoaXMuX2RlZmluaXRpb25CeUtleVt2YWx1ZV07XG4gICAgICAgIGlmICghZGVmKSByZXR1cm4gdmFsdWU7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRlZi5sYWJlbCk7XG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczogWyd2YWx1ZSddLFxuICAgICAgY29sdW1uTmFtZXM6IFt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdTRVRUSU5HUy5QUk9QRVJUWV9LRVknKV0sXG4gICAgICBzcGxpdFNlYXJjaFRleHQ6IGZhbHNlLFxuICAgICAgc2hvd0FsbE9uRm9jdXM6IHRydWUsXG4gICAgICBzZWxlY3RJbnB1dENvbnRlbnRPbkZvY3VzOiB0cnVlLFxuICAgIH07XG5cbiAgICB0aGlzLl9zdGF0ZS5ob2xkKHRoaXMuX3N0YXRlLnNlbGVjdCgnZGVmaW5pdGlvbnMnKSwgKGRlZmluaXRpb25zKSA9PiB7XG4gICAgICBpZiAodGhpcy5sb2FkZWQpIHRoaXMucHJvY2Vzc0RlZmluaXRpb25zKGRlZmluaXRpb25zKTtcbiAgICB9KTtcblxuICAgIHRoaXMucHJvY2Vzc0RlZmluaXRpb25zKHRoaXMuZGVmaW5pdGlvbnMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NEZWZpbml0aW9ucyhkZWZpbml0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbltdKSB7XG4gICAgaWYgKCFkZWZpbml0aW9ucykgcmV0dXJuIFtdO1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FwcC1wcm9wZXJ0aWVzLWZvcm1dIFByb2Nlc3NpbmcgZGVmaW5pdGlvbnMuLi4nLCBkZWZpbml0aW9ucyk7XG5cbiAgICAvLyBQcmVwYXJlIGRlZmluaXRpb24gKGUuZy4gcmVzb2x2ZSB0b2tlbnMgaWYgYW55KVxuICAgIGRlZmluaXRpb25zID0gRm9ybUZpZWxkRGVmaW5pdGlvblV0aWxzLnByZXBhcmVEZWZpbml0aW9ucyh0aGlzLmluamVjdG9yLCBkZWZpbml0aW9ucyB8fCBbXSk7XG5cbiAgICAvLyBGaWxsIG9wdGlvbnMgbWFwXG4gICAgY29uc3QgZGVmaW5pdGlvbnNCeUtleSA9IDxGb3JtRmllbGREZWZpbml0aW9uTWFwPnt9O1xuICAgIHRoaXMuX2RlZmluaXRpb25LZXlzID0gZGVmaW5pdGlvbnNcbiAgICAgIC5tYXAoKGRlZikgPT4ge1xuICAgICAgICBkZWZpbml0aW9uc0J5S2V5W2RlZi5rZXldID0gZGVmO1xuICAgICAgICBpZiAoZGVmLmRpc2FibGVkKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHsga2V5OiBkZWYua2V5LCB2YWx1ZTogdGhpcy50cmFuc2xhdGUuaW5zdGFudChkZWYubGFiZWwpIH07XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihpc05vdE5pbCk7XG4gICAgdGhpcy5fZGVmaW5pdGlvbkJ5S2V5ID0gZGVmaW5pdGlvbnNCeUtleTtcbiAgfVxuXG4gIGdldERlZmluaXRpb25BdChpbmRleDogbnVtYmVyKTogRm9ybUZpZWxkRGVmaW5pdGlvbiB7XG4gICAgbGV0IGRlZmluaXRpb24gPSB0aGlzLl9kZWZpbml0aW9uc0J5SW5kZXhbaW5kZXhdO1xuICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgZGVmaW5pdGlvbiA9IHRoaXMudXBkYXRlRGVmaW5pdGlvbkF0KGluZGV4LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgdXBkYXRlRGVmaW5pdGlvbkF0KGluZGV4OiBudW1iZXIsIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSk6IEZvcm1GaWVsZERlZmluaXRpb24ge1xuICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuZm9ybUFycmF5LmF0KGluZGV4KSBhcyBVbnR5cGVkRm9ybUdyb3VwKS5jb250cm9scy5rZXkudmFsdWU7XG4gICAgY29uc3Qga2V5ID0gdmFsdWU/LmtleSB8fCB2YWx1ZTtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gKGtleSAmJiB0aGlzLl9kZWZpbml0aW9uQnlLZXlba2V5XSkgfHwgbnVsbDtcbiAgICB0aGlzLl9kZWZpbml0aW9uc0J5SW5kZXhbaW5kZXhdID0gZGVmaW5pdGlvbjsgLy8gdXBkYXRlIG1hcCBieSBpbmRleFxuICAgIGlmIChvcHRzPy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHJlbW92ZUF0KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLl9oZWxwZXIucmVtb3ZlQXQoaW5kZXgpO1xuICAgIHRoaXMuY2xlYXJUZW1wbGF0ZUNhY2hlKCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFzeW5jIHNldFZhbHVlKGRhdGE6IFByb3BlcnR5TWFwIHwgVFtdLCBvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pIHtcbiAgICBpZiAoIWRhdGEpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc3QgW2RlZmluaXRpb25zLCBkZWZpbml0aW9uS2V5c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5fZGVmaW5pdGlvbnMkLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QgfSksXG4gICAgICBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5fZGVmaW5pdGlvbktleXMkLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QgfSksXG4gICAgXSk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcHJvcGVydGllcyBtYXAgaW50byBhcnJheVxuICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IEFwcFByb3BlcnRpZXNVdGlscy5hcnJheUZyb21PYmplY3QoZGF0YSwgZGVmaW5pdGlvbnMpO1xuXG4gICAgLy8gV29ya2Fyb3VuZCBiZWNhdXNlIHdoZW4gYXV0b2NvbXBsZXRlIHVzZSBtYXQtc2VsZWN0ICh3aGVuIG1vYmlsZSksIGl0IG5lZWRzIHRvIGRpc3BsYXkgdGhlIHZhbHVlIC0gZml4IGlzc3VlIG5neC1zdW1hcmlzLWNvbXBvbmVudHMjMTZcbiAgICBpZiAodGhpcy5tb2JpbGUpIHtcbiAgICAgIHZhbHVlcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICBwcm9wZXJ0eS5rZXkgPSAoZGVmaW5pdGlvbktleXMuZmluZCgoZGVmS2V5KSA9PiBkZWZLZXkua2V5ID09PSBwcm9wZXJ0eS5rZXkpIHx8IDxQcm9wZXJ0eT57IGtleTogcHJvcGVydHkua2V5LCB2YWx1ZTogcHJvcGVydHkua2V5IH0pIGFzIGFueTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2xlYXJUZW1wbGF0ZUNhY2hlKCk7XG4gICAgdGhpcy5faGVscGVyLnJlc2l6ZSh2YWx1ZXMubGVuZ3RoKTtcbiAgICB0aGlzLl9oZWxwZXIuZm9ybUFycmF5LnBhdGNoVmFsdWUodmFsdWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG5cbiAgICBpZiAob3B0cz8uZW1pdEV2ZW50ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgdGhpcy5tYXJrQXNMb2FkZWQoKTtcbiAgICB9XG4gIH1cblxuICBnZXRWYWx1ZUFzSnNvbigpOiBQcm9wZXJ0eU1hcCB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMudmFsdWU7XG4gICAgY29uc3QganNvbiA9IEFwcFByb3BlcnRpZXNVdGlscy5hcnJheUFzT2JqZWN0KGRhdGEsIHRoaXMuZGVmaW5pdGlvbnMsIHtcbiAgICAgIG9taXROaWxPckJsYW5rOiB0aGlzLm9wdGlvbnM/LmFsbG93RHVwbGljYXRlZFZhbHVlcyAhPT0gdHJ1ZSxcbiAgICB9KTtcbiAgICBjb25zb2xlLmRlYnVnKCdbYXBwLXByb3BlcnRpZXMtZm9ybV0gQ29udmVydGluZyBkYXRhIGFzIG9iamVjdCcsIGRhdGEsIGpzb24pO1xuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuX2hlbHBlci5mb3JtQXJyYXkubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9oZWxwZXIucmVzaXplKDApO1xuICAgIH1cbiAgICB0aGlzLmNsZWFyVGVtcGxhdGVDYWNoZSgpO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCB0b2dnbGVTaG93SGludEtleXMoKSB7XG4gICAgdGhpcy5zaG93SGludEtleSA9ICF0aGlzLnNob3dIaW50S2V5O1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xlYXJUZW1wbGF0ZUNhY2hlKCkge1xuICAgIHRoaXMuX2RlZmluaXRpb25zQnlJbmRleCA9IHt9OyAvLyBjbGVhciBtYXAgYnkgaW5kZXhcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzdWdnZXN0RGVmaW5pdGlvbktleXMoXG4gICAgdmFsdWU6IGFueSxcbiAgICBmaWx0ZXI/OiBhbnksXG4gICAgc29ydEJ5Pzogc3RyaW5nIHwga2V5b2YgUHJvcGVydHksXG4gICAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb24sXG4gICAgb3B0cz86IHtcbiAgICAgIG9mZnNldD86IG51bWJlcjtcbiAgICAgIHNpemU/OiBudW1iZXI7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfVxuICApOiBQcm9taXNlPExvYWRSZXN1bHQ8UHJvcGVydHk+PiB7XG4gICAgbGV0IGl0ZW1zID0gYXdhaXQgZmlyc3ROb3ROaWxQcm9taXNlKHRoaXMuX2RlZmluaXRpb25LZXlzJCwgeyBzdG9wOiB0aGlzLmRlc3Ryb3lTdWJqZWN0IH0pO1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2FwcC1wcm9wZXJ0aWVzLWZvcm1dIFN1Z2dlc3RpbmcgZGVmaW5pdGlvbiBrZXlzJywgdmFsdWUsIGl0ZW1zKTtcblxuICAgIC8vIEdldCBhcyBrZXlcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAhUmVnRXhwVXRpbHMuaGFzV2lsZGNhcmRDaGFyYWN0ZXIodmFsdWUpKSB7XG4gICAgICBjb25zdCBvYmogPSBpdGVtcy5maW5kKChvKSA9PiBvLmtleSA9PT0gdmFsdWUpO1xuICAgICAgaWYgKG9iaikgcmV0dXJuIHsgZGF0YTogW29ial0gfSBhcyBMb2FkUmVzdWx0PFByb3BlcnR5PjtcbiAgICB9XG5cbiAgICAvLyBHZXQgYXMgb2JqZWN0XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB7IGRhdGE6IFt2YWx1ZV0gfSBhcyBMb2FkUmVzdWx0PFByb3BlcnR5PjtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgYWxyZWFkeSB1c2VkIGtleXNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd0R1cGxpY2F0ZWRWYWx1ZXMgIT09IHRydWUpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9ICh0aGlzLmZvcm1BcnJheS52YWx1ZSB8fCBbXSlcbiAgICAgICAgLmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSB0aGlzLl9mb2N1c2VkQ29udHJvbEluZGV4KVxuICAgICAgICAubWFwKEFwcFByb3BlcnR5VXRpbHMuZ2V0UHJvcGVydHlLZXkpO1xuICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICFleGlzdGluZ0tleXMuaW5jbHVkZXMoaXRlbS5rZXkpKTtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlID8/ICcqJztcblxuICAgIC8vIEFueSBtYXRjaFxuICAgIGlmICghdmFsdWUuc3RhcnRzV2l0aCgnKicpKSB2YWx1ZSA9ICcqJyArIHZhbHVlO1xuXG4gICAgcmV0dXJuIHN1Z2dlc3RGcm9tQXJyYXkoaXRlbXMsIHZhbHVlLCB7IHNlYXJjaEF0dHJpYnV0ZTogJ3ZhbHVlJywgLi4uZmlsdGVyIH0sIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZXhwb3J0VG9Dc3YobGFiZWw6IHN0cmluZyA9ICcnKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuOyAvLyBza2lwXG4gICAgY29uc3QgcHJvcGVydGllcyA9IGF3YWl0IEFwcFByb3BlcnRpZXNVdGlscy5hcnJheUZyb21PYmplY3Q8YW55Pih0aGlzLmdldFZhbHVlQXNKc29uKCkpO1xuICAgIHRoaXMuX3Byb3BlcnRpZXNGaWxlU2VydmljZS5leHBvcnRUb0Nzdihwcm9wZXJ0aWVzLCB7IGNvbnRleHQ6IHsgbGFiZWwgfSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBpbXBvcnRGcm9tQ3N2KGV2ZW50PzogRXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuZW5hYmxlZCB8fCB0aGlzLmxvYWRpbmcpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZXhpc3RpbmdQcm9wZXJ0aWVzID0gdGhpcy5nZXRWYWx1ZUFzSnNvbigpO1xuICAgICAgY29uc3QgaW1wb3J0ZWRQcm9wZXJ0aWVzID0gQXBwUHJvcGVydGllc1V0aWxzLmFycmF5QXNPYmplY3QoYXdhaXQgdGhpcy5fcHJvcGVydGllc0ZpbGVTZXJ2aWNlLmltcG9ydEZyb21Dc3YoZXZlbnQpKTtcbiAgICAgIGxldCBtZXJnZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eU1hcCA9IHt9O1xuXG4gICAgICBzd2l0Y2ggKHRoaXMuaW1wb3J0UG9saWN5KSB7XG4gICAgICAgIGNhc2UgJ2luc2VydC11cGRhdGUnOlxuICAgICAgICAgIC8vIFVzZSBpbXBvcnRlZCBwcm9wZXJ0aWVzIGZpcnN0LCBhbmQgcmVtb3ZlIG9sZFxuICAgICAgICAgIG1lcmdlZFByb3BlcnRpZXMgPSB7IC4uLmV4aXN0aW5nUHJvcGVydGllcywgLi4uaW1wb3J0ZWRQcm9wZXJ0aWVzIH07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2luc2VydC1vbmx5JzpcbiAgICAgICAgICAvLyBQcmVmZXIgZXhpc3RpbmcgcHJvcGVydGllcywgdGhlbiBpbnNlcnQgbmV3XG4gICAgICAgICAgbWVyZ2VkUHJvcGVydGllcyA9IHsgLi4uaW1wb3J0ZWRQcm9wZXJ0aWVzLCAuLi5leGlzdGluZ1Byb3BlcnRpZXMgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAndXBkYXRlLW9ubHknOiB7XG4gICAgICAgICAgY29uc3QgaW1wb3J0S2V5cyA9IE9iamVjdC5rZXlzKGltcG9ydGVkUHJvcGVydGllcyk7XG4gICAgICAgICAgbWVyZ2VkUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKGV4aXN0aW5nUHJvcGVydGllcykucmVkdWNlKFxuICAgICAgICAgICAgKHJlcywga2V5KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChpbXBvcnRLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICByZXNba2V5XSA9IGltcG9ydGVkUHJvcGVydGllc1trZXldO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgPFByb3BlcnR5TWFwPnsgLi4uZXhpc3RpbmdQcm9wZXJ0aWVzIH1cbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuc2V0VmFsdWUobWVyZ2VkUHJvcGVydGllcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5tYXJrQXNEaXJ0eSgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5zZXRFcnJvcihlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0VtcHR5UHJvcGVydHkob2JqOiBQcm9wZXJ0eSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbChvYmo/LmtleSkgfHwgaXNOaWwob2JqLnZhbHVlKTtcbiAgfVxufVxuIiwiQGlmIChzaG93VG9vbGJhcikge1xuICA8bWF0LXRvb2xiYXI+XG4gICAgPGRpdiBjbGFzcz1cInRvb2xiYXItc3BhY2VyXCI+PC9kaXY+XG5cbiAgICA8aW9uLWl0ZW0gbGluZXM9XCJub25lXCIgKGNsaWNrKT1cInRvZ2dsZVNob3dIaW50S2V5cygpXCI+XG4gICAgICA8aW9uLWxhYmVsIGNvbG9yPVwiZGFya1wiPnt7ICdGSUxFLlBST1BFUlRJRVMuQlROX1NIT1dfSElOVF9LRVknIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICA8aW9uLXRvZ2dsZSBjb2xvcj1cInByaW1hcnlcIiBbY2hlY2tlZF09XCJzaG93SGludEtleVwiPjwvaW9uLXRvZ2dsZT5cbiAgICA8L2lvbi1pdGVtPlxuXG4gICAgPCEtLSBvcHRpb25zIHN1YiBtZW51IC0tPlxuICAgIEBpZiAoY2FuRG93bmxvYWQgfHwgY2FuSW1wb3J0KSB7XG4gICAgICA8YnV0dG9uIHNsb3Q9XCJlbmRcIiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cIm9wdGlvbnNNZW51XCIgW3RpdGxlXT1cIidDT01NT04uQlROX09QVElPTlMnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgIDxtYXQtaWNvbj5tb3JlX3ZlcnQ8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuXG4gIDwvbWF0LXRvb2xiYXI+XG59XG5cbjwhLS0gT3B0aW9ucyBtZW51IC0tPlxuPG1hdC1tZW51ICNvcHRpb25zTWVudT1cIm1hdE1lbnVcIj5cbiAgPCEtLSBEb3dubG9hZCBhcyBDU1YgLS0+XG4gIEBpZiAoY2FuRG93bmxvYWQpIHtcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cImxvYWRpbmdcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiZG93bmxvYWRNZW51XCI+XG4gICAgICA8bWF0LWljb24+ZG93bmxvYWQ8L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9ET1dOTE9BRF9ET1RTPC9pb24tbGFiZWw+XG4gICAgPC9idXR0b24+XG4gIH1cblxuICA8IS0tIEltcG9ydCBmcm9tIGZpbGUgLS0+XG4gIEBpZiAoY2FuSW1wb3J0KSB7XG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJsb2FkaW5nIHx8IGRpc2FibGVkXCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImltcG9ydE1lbnVcIj5cbiAgICAgIDxtYXQtaWNvbj51cGxvYWQ8L21hdC1pY29uPlxuICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9JTVBPUlRfRlJPTV9GSUxFX0RPVFM8L2lvbi1sYWJlbD5cbiAgICA8L2J1dHRvbj5cbiAgfVxuPC9tYXQtbWVudT5cblxuPCEtLSBEb3dubG9hZCBtZW51IC0tPlxuPG1hdC1tZW51ICNkb3dubG9hZE1lbnU9XCJtYXRNZW51XCI+XG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIChjbGljayk9XCJleHBvcnRUb0NzdigpXCI+XG4gICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+RklMRS5QUk9QRVJUSUVTLkJUTl9ET1dOTE9BRF9BU19DU1Y8L2lvbi1sYWJlbD5cbiAgPC9idXR0b24+XG48L21hdC1tZW51PlxuXG48IS0tIEltcG9ydCBtZW51IC0tPlxuPG1hdC1tZW51ICNpbXBvcnRNZW51PVwibWF0TWVudVwiPlxuICA8IS0tIGltcG9ydCBmcm9tIGZpbGUgLS0+XG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiaW1wb3J0RnJvbUNzdigkZXZlbnQpXCI+XG4gICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+RklMRS5QUk9QRVJUSUVTLkJUTl9JTVBPUlRfRlJPTV9DU1Y8L2lvbi1sYWJlbD5cbiAgPC9idXR0b24+XG5cbiAgPCEtLSBpbXBvcnQgcG9saWN5IC0tPlxuICA8bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJpbXBvcnRQb2xpY3lNZW51XCI+XG4gICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+RklMRS5VUExPQUQuQlROX0lNUE9SVF9QT0xJQ1lfRE9UUzwvaW9uLWxhYmVsPlxuICA8L2J1dHRvbj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gSW1wb3J0IHBvbGljeSBtZW51IC0tPlxuPG1hdC1tZW51ICNpbXBvcnRQb2xpY3lNZW51PVwibWF0TWVudVwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50PlxuICAgIDwhLS0gaGVhZGVyLS0+XG4gICAgPGlvbi1yb3cgY2xhc3M9XCJtYXQtbWVudS1oZWFkZXIgaW9uLW5vLXBhZGRpbmcgY29sdW1uXCI+XG4gICAgICA8aW9uLWNvbD5cbiAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+RklMRS5VUExPQUQuSU1QT1JUX1BPTElDWS5USVRMRTwvaW9uLWxhYmVsPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cbiAgICBAZm9yIChwb2xpY3kgb2YgX2ltcG9ydFBvbGljaWVzOyB0cmFjayBwb2xpY3kpIHtcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiaW1wb3J0UG9saWN5ID0gcG9saWN5XCI+XG4gICAgICAgIDxtYXQtaWNvbj57eyBpbXBvcnRQb2xpY3kgPT09IHBvbGljeSA/ICdjaGVja19ib3gnIDogJ2NoZWNrX2JveF9vdXRsaW5lX2JsYW5rJyB9fTwvbWF0LWljb24+XG4gICAgICAgIDxpb24tbGFiZWw+e3sgJ0ZJTEUuVVBMT0FELklNUE9SVF9QT0xJQ1kuJyArIHBvbGljeSB8IHVwcGVyY2FzZSB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgPC9idXR0b24+XG4gICAgfVxuICA8L25nLXRlbXBsYXRlPlxuPC9tYXQtbWVudT5cblxuPCEtLSBQcm9wZXJ0aWVzIC0tPlxuPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiPlxuICBAaWYgKGxvYWRpbmdTdWJqZWN0IHwgYXN5bmMpIHtcbiAgICA8aW9uLWxpc3QgW2luc2V0XT1cIm1vYmlsZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BlcnR5Um93U2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wZXJ0eVJvd1NrZWxldG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvcGVydHlSb3dTa2VsZXRvblwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvaW9uLWxpc3Q+XG4gIH0gQGVsc2Uge1xuICAgIDxpb24tbGlzdCBmb3JtQXJyYXlOYW1lPVwicHJvcGVydGllc1wiIFtpbnNldF09XCJtb2JpbGVcIj5cbiAgICAgIDwhLS0gU2hvdyBtb3JlIG9wdGlvbnMgLS0+XG4gICAgICBAaWYgKChfZGVmaW5pdGlvbktleXMkIHwgYXN5bmMgfCBpc05vdEVtcHR5QXJyYXkpICYmIGZvcm1BcnJheT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cImxpZ2h0XCIgW3RpdGxlXT1cImFkZEJ1dHRvblRpdGxlIHwgdHJhbnNsYXRlXCIgKGNsaWNrKT1cIl9oZWxwZXIuYWRkKClcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWw+e3sgYWRkQnV0dG9uVGV4dCB8IHRyYW5zbGF0ZSB9fTwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPG1hdC1pY29uIHNsb3Q9XCJlbmRcIj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgIH1cblxuICAgICAgQGZvciAoZmllbGRGb3JtIG9mIGZpZWxkRm9ybXM7IHRyYWNrIGk7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiBbY2xhc3Mub3V0bGluZV09XCJhcHBlYXJhbmNlID09PSAnb3V0bGluZSdcIj5cbiAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1yb3cgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgQGxldCBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbkF0KGkpO1xuXG4gICAgICAgICAgICAgIDwhLS0gcHJvcGVydHkga2V5IC0tPlxuICAgICAgICAgICAgICBAaWYgKGZpZWxkRm9ybSB8IGZvcm1HZXRDb250cm9sOiAna2V5JzsgYXMgY29udHJvbCkge1xuICAgICAgICAgICAgICAgIDxpb24tY29sXG4gICAgICAgICAgICAgICAgICBzaXplPVwiMTJcIlxuICAgICAgICAgICAgICAgICAgc2l6ZS1zbT1cIjZcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIihkZWZpbml0aW9uIHwgcHJvcGVydHlHZXQ6ICdsYWJlbCcgfCB0cmFuc2xhdGUpIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGZsb2F0TGFiZWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N1YnNjcmlwdFNpemluZ109XCJzaG93SGludEtleSA/ICdmaXhlZCcgOiBzdWJzY3JpcHRTaXppbmdcIlxuICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInVwZGF0ZURlZmluaXRpb25BdChpKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleCArIGkgKiAyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJfYXV0b2NvbXBsZXRlQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTRVRUSU5HUy5QUk9QRVJUWV9LRVknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiX2ZvY3VzZWRDb250cm9sSW5kZXggPSBpXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImRlZmluaXRpb24/LmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW21vYmlsZV09XCJtb2JpbGVcIlxuICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwicGFuZWxXaWR0aFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaGludCBbY2xhc3MuY2RrLXZpc3VhbGx5LWhpZGRlbl09XCIhc2hvd0hpbnRLZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAbGV0IGtleVZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICB7eyBoaW50S2V5UHJlZml4IHx8ICcnIH19e3sga2V5VmFsdWU/LmtleSB8fCBrZXlWYWx1ZSB8fCAnJyB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIDwhLS0gcHJvcGVydHkgdmFsdWUgLS0+XG4gICAgICAgICAgICAgIDxpb24tY29sIHNpemU9XCJcIiBzaXplLXNtPVwiXCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZyBpb24tcGFkZGluZy1zdGFydC14c1wiPlxuICAgICAgICAgICAgICAgIEBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgICAgICAgPGFwcC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGZsb2F0TGFiZWw9XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIm1vYmlsZSA/ICgnU0VUVElOR1MuUFJPUEVSVFlfVkFMVUUnIHwgdHJhbnNsYXRlKSA6ICcgJ1wiXG4gICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiXG4gICAgICAgICAgICAgICAgICAgIFtkZWZpbml0aW9uXT1cImRlZmluaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZmllbGRGb3JtIHwgZm9ybUdldENvbnRyb2w6ICd2YWx1ZSdcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFVFRJTkdTLlBST1BFUlRZX1ZBTFVFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjaGlwQ29sb3JdPVwiY2hpcENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbaGlkZVJlcXVpcmVkTWFya2VyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXggKyBpICogMiArIDFcIlxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZGVmaW5pdGlvbj8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwicGFuZWxXaWR0aFwiXG4gICAgICAgICAgICAgICAgICA+PC9hcHAtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gdW5rbm93biBkZWZpbml0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIiBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1vYmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgJ1NFVFRJTkdTLlBST1BFUlRZX1ZBTFVFJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmaWVsZEZvcm0gfCBmb3JtR2V0Q29udHJvbDogJ3ZhbHVlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1vYmlsZSA/ICcnIDogKCdTRVRUSU5HUy5QUk9QRVJUWV9WQUxVRScgfCB0cmFuc2xhdGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIjIwICsgaSAqIDIgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgQGlmIChfaGVscGVyLmlzTGFzdChpKSkge1xuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgfHwgKGZpZWxkRm9ybS52YWx1ZSB8IGFzQm9vbGVhbjogaXNFbXB0eVByb3BlcnR5KSB8fCAoX2RlZmluaXRpb25LZXlzIHwgaXNFbXB0eUFycmF5KVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ1NFVFRJTkdTLkJUTl9BRERfUFJPUEVSVFknIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9oZWxwZXIuYWRkKClcIlxuICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMjAgKyBpICogMiArIDJcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGVmaW5pdGlvbj8uZGlzYWJsZWQgfHwgZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIidDT01NT04uQlROX0RFTEVURScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUF0KGkpXCJcbiAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgIDwvaW9uLWdyaWQ+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICB9XG4gICAgPC9pb24tbGlzdD5cbiAgfVxuPC9mb3JtPlxuXG48bmctdGVtcGxhdGUgI3Byb3BlcnR5Um93U2tlbGV0b24+XG4gIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIj5cbiAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICA8IS0tIHByb3BlcnR5IGtleSAtLT5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjZcIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIGRpc2FibGVkIC8+XG4gICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiA2MCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJhcnJvdy1kcm9wZG93blwiIG1hdFN1ZmZpeD48L2lvbi1pY29uPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPCEtLSB2YWx1ZSAtLT5cbiAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiBkaXNhYmxlZCAvPlxuICAgICAgICAgICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJ0cnVlXCIgc3R5bGU9XCJ3aWR0aDogNjAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgIDwhLS0gYnV0dG9ucyAtLT5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gY29sb3I9XCJsaWdodFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvaW9uLWl0ZW0+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcGVydGllcy5mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2Zvcm0vcHJvcGVydGllcy9wcm9wZXJ0aWVzLmZvcm0udHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvZm9ybS9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuZm9ybS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBWSxLQUFLLEVBQVUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5KLE9BQU8sRUFBK0Msd0JBQXdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6SCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUcxRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBMkIsTUFBTSwyQkFBMkIsQ0FB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O3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixhQUFhO3NCQUFyQixLQUFLO2dCQUNrQyxjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ2tDLGFBQWE7c0JBQXBELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQzdCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDa0MsV0FBVztzQkFBbEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQU16QixtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBT08sV0FBVztzQkFBdkIsS0FBSztnQkF1Qk8sWUFBWTtzQkFBeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBpbmplY3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBVbnR5cGVkRm9ybUFycmF5LCBVbnR5cGVkRm9ybUJ1aWxkZXIsIFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uLCBGb3JtRmllbGREZWZpbml0aW9uTWFwLCBGb3JtRmllbGREZWZpbml0aW9uVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBpc0VtcHR5QXJyYXksIGlzTmlsLCBpc05vdE5pbCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIsIFRoZW1lUGFsZXR0ZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEFwcEZvcm0gfSBmcm9tICcuLi9mb3JtLmNsYXNzJztcbmltcG9ydCB7IFByb3BlcnR5LCBQcm9wZXJ0eU1hcCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC90eXBlcyc7XG5pbXBvcnQgeyBQcm9wZXJ0eVZhbGlkYXRvciB9IGZyb20gJy4vcHJvcGVydHkudmFsaWRhdG9yJztcbmltcG9ydCB7IFByZWRlZmluZWRDb2xvcnMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXlIZWxwZXIsIEZvcm1BcnJheUhlbHBlck9wdGlvbnMgfSBmcm9tICcuLi9hcnJheS9mb3JtLWFycmF5JztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IHN1Z2dlc3RGcm9tQXJyYXkgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBBcHBQcm9wZXJ0aWVzVXRpbHMsIEFwcFByb3BlcnR5VXRpbHMgfSBmcm9tICcuL3Byb3BlcnRpZXMudXRpbHMnO1xuaW1wb3J0IHsgUnhTdGF0ZSB9IGZyb20gJ0ByeC1hbmd1bGFyL3N0YXRlJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydCc7XG5pbXBvcnQgeyBSZWdFeHBVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9yZWdleHBzJztcbmltcG9ydCB7IElNUE9SVF9QT0xJQ0lFUywgUHJvcGVydGllc0ZpbGVTZXJ2aWNlLCBSZWZlcmVudGlhbEltcG9ydFBvbGljeSB9IGZyb20gJy4vcHJvcGVydGllcy1maWxlLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFByb3BlcnRpZXNGb3JtU3RhdGUge1xuICBkZWZpbml0aW9uczogRm9ybUZpZWxkRGVmaW5pdGlvbltdO1xuICBkZWZpbml0aW9uS2V5czogUHJvcGVydHlbXTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLXByb3BlcnRpZXMtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAncHJvcGVydGllcy5mb3JtLmh0bWwnLFxuICBzdHlsZVVybHM6IFsncHJvcGVydGllcy5mb3JtLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBQcm9wZXJ0eVZhbGlkYXRvciwgdXNlQ2xhc3M6IFByb3BlcnR5VmFsaWRhdG9yIH0sIFJ4U3RhdGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwUHJvcGVydGllc0Zvcm08TyA9IGFueSwgVCBleHRlbmRzIFByb3BlcnR5PE8+ID0gUHJvcGVydHk8Tz4sIFMgZXh0ZW5kcyBBcHBQcm9wZXJ0aWVzRm9ybVN0YXRlID0gQXBwUHJvcGVydGllc0Zvcm1TdGF0ZT5cbiAgZXh0ZW5kcyBBcHBGb3JtPFRbXT5cbiAgaW1wbGVtZW50cyBPbkluaXRcbntcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0ZTogUnhTdGF0ZTxTPiA9IGluamVjdChSeFN0YXRlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbXBvcnRQb2xpY2llcyA9IElNUE9SVF9QT0xJQ0lFUztcblxuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25zJCA9IHRoaXMuX3N0YXRlLnNlbGVjdCgnZGVmaW5pdGlvbnMnKTtcbiAgcHJvdGVjdGVkIF9kZWZpbml0aW9uS2V5cyQgPSB0aGlzLl9zdGF0ZS5zZWxlY3QoJ2RlZmluaXRpb25LZXlzJyk7XG5cbiAgcHJvdGVjdGVkIHNldCBfZGVmaW5pdGlvbktleXModmFsdWU6IFByb3BlcnR5W10pIHtcbiAgICB0aGlzLl9zdGF0ZS5zZXQoJ2RlZmluaXRpb25LZXlzJywgKCkgPT4gdmFsdWUpO1xuICB9XG4gIHByb3RlY3RlZCBnZXQgX2RlZmluaXRpb25LZXlzKCk6IFByb3BlcnR5W10ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5nZXQoJ2RlZmluaXRpb25LZXlzJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25CeUtleTogRm9ybUZpZWxkRGVmaW5pdGlvbk1hcCA9IHt9O1xuICBwcm90ZWN0ZWQgX2RlZmluaXRpb25zQnlJbmRleDogeyBbaW5kZXg6IG51bWJlcl06IEZvcm1GaWVsZERlZmluaXRpb24gfSA9IHt9O1xuICBwcm90ZWN0ZWQgX2hlbHBlcjogRm9ybUFycmF5SGVscGVyPFByb3BlcnR5PjtcbiAgcHJvdGVjdGVkIF9wcm9wZXJ0aWVzRmlsZVNlcnZpY2U6IFByb3BlcnRpZXNGaWxlU2VydmljZTtcblxuICBwcm90ZWN0ZWQgX2F1dG9jb21wbGV0ZUNvbmZpZzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIHByb3RlY3RlZCBfZm9jdXNlZENvbnRyb2xJbmRleDogbnVtYmVyO1xuXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93VG9vbGJhciA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtQXJyYXlOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZvcm1BcnJheTogVW50eXBlZEZvcm1BcnJheTtcbiAgQElucHV0KCkgb3B0aW9uczogRm9ybUFycmF5SGVscGVyT3B0aW9ucztcbiAgQElucHV0KCkgY2hpcENvbG9yOiBUaGVtZVBhbGV0dGUgfCBQcmVkZWZpbmVkQ29sb3JzID0gJ2FjY2VudCc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0hpbnRLZXkgPSBmYWxzZTtcbiAgQElucHV0KCkgaGludEtleVByZWZpeCA9ICcnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd01vcmVCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBhZGRCdXR0b25UZXh0ID0gJ0NPTU1PTi5CVE5fQUREJztcbiAgQElucHV0KCkgYWRkQnV0dG9uVGl0bGUgPSAnJztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dBZGRCdXR0b24gPSB0cnVlO1xuICBASW5wdXQoKSBwYW5lbENsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZztcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNhbkRvd25sb2FkID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjYW5JbXBvcnQgPSBmYWxzZTtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGFkZEJ1dHRvblRpdGxlIGluc3RlYWRcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqL1xuICBASW5wdXQoKSBzZXQgc2hvd01vcmVCdXR0b25UaXRsZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5hZGRCdXR0b25UaXRsZSA9IHZhbHVlO1xuICB9XG4gIGdldCBzaG93TW9yZUJ1dHRvblRpdGxlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQnV0dG9uVGl0bGU7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZGVmaW5pdGlvbnModmFsdWU6IEZvcm1GaWVsZERlZmluaXRpb25bXSkge1xuICAgIHRoaXMuX3N0YXRlLnNldCgnZGVmaW5pdGlvbnMnLCAoKSA9PiB2YWx1ZSk7XG4gIH1cbiAgZ2V0IGRlZmluaXRpb25zKCk6IEZvcm1GaWVsZERlZmluaXRpb25bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldCgnZGVmaW5pdGlvbnMnKTtcbiAgfVxuXG4gIHNldCB2YWx1ZShkYXRhOiBUW10pIHtcbiAgICB0aGlzLnNldFZhbHVlKGRhdGEpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUFycmF5LnZhbHVlIGFzIFRbXTtcbiAgfVxuXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXk/Lmxlbmd0aCB8fCAwO1xuICB9XG5cbiAgZ2V0IGZpZWxkRm9ybXMoKTogVW50eXBlZEZvcm1Hcm91cFtdIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQXJyYXkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGltcG9ydFBvbGljeSh2YWx1ZTogUmVmZXJlbnRpYWxJbXBvcnRQb2xpY3kpIHtcbiAgICBpZiAodGhpcy5fcHJvcGVydGllc0ZpbGVTZXJ2aWNlKSB0aGlzLl9wcm9wZXJ0aWVzRmlsZVNlcnZpY2UuaW1wb3J0UG9saWN5ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgaW1wb3J0UG9saWN5KCk6IFJlZmVyZW50aWFsSW1wb3J0UG9saWN5IHtcbiAgICByZXR1cm4gdGhpcy5fcHJvcGVydGllc0ZpbGVTZXJ2aWNlPy5pbXBvcnRQb2xpY3kgfHwgJ2luc2VydC11cGRhdGUnO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcm90ZWN0ZWQgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPE1vbWVudD4sXG4gICAgcHJvdGVjdGVkIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdG9yOiBQcm9wZXJ0eVZhbGlkYXRvcixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCBudWxsKTtcblxuICAgIHRoaXMuX3Byb3BlcnRpZXNGaWxlU2VydmljZSA9IG5ldyBQcm9wZXJ0aWVzRmlsZVNlcnZpY2UoaW5qZWN0b3IpO1xuXG4gICAgdGhpcy50YWJpbmRleCA9IDIwOyAvLyBGb3IgY29tcGF0aWJpbGl0eSAtIFRPRE8gcmVtb3ZlIGxhdGVyXG4gICAgLy90aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd0VtcHR5QXJyYXkgPT09IGZhbHNlICYmIGlzRW1wdHlBcnJheSh0aGlzLmRlZmluaXRpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBvciBpbnZhbGlkIGF0dHJpYnV0ZSAnZGVmaW5pdGlvbnMnXCIpO1xuICAgIH1cblxuICAgIC8vIFJldHJpZXZlIHRoZSBmb3JtXG4gICAgY29uc3QgZm9ybSA9XG4gICAgICAodGhpcy5mb3JtQXJyYXkgJiYgKHRoaXMuZm9ybUFycmF5LnBhcmVudCBhcyBVbnR5cGVkRm9ybUdyb3VwKSkgfHwgKHRoaXMuZm9ybUdyb3VwRGlyICYmIHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0pIHx8IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe30pO1xuICAgIHRoaXMuc2V0Rm9ybShmb3JtKTtcblxuICAgIHRoaXMuZm9ybUFycmF5ID0gdGhpcy5mb3JtQXJyYXkgfHwgKHRoaXMuZm9ybUFycmF5TmFtZSAmJiAoZm9ybS5nZXQodGhpcy5mb3JtQXJyYXlOYW1lKSBhcyBVbnR5cGVkRm9ybUFycmF5KSk7XG4gICAgdGhpcy5mb3JtQXJyYXlOYW1lID1cbiAgICAgIHRoaXMuZm9ybUFycmF5TmFtZSB8fCAodGhpcy5mb3JtQXJyYXkgJiYgT2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZmluZCgoa2V5KSA9PiBmb3JtLmdldChrZXkpID09PSB0aGlzLmZvcm1BcnJheSkpIHx8ICdwcm9wZXJ0aWVzJztcbiAgICBpZiAoIXRoaXMuZm9ybUFycmF5KSB7XG4gICAgICBjb25zb2xlLndhcm4oYE1pc3NpbmcgYXJyYXkgY29udHJvbCAnJHt0aGlzLmZvcm1BcnJheU5hbWV9Jy4gV2lsbCBjcmVhdGUgaXQhYCk7XG4gICAgICB0aGlzLmZvcm1BcnJheSA9IHRoaXMuZm9ybUJ1aWxkZXIuYXJyYXkoW10pO1xuICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2wodGhpcy5mb3JtQXJyYXlOYW1lLCB0aGlzLmZvcm1BcnJheSk7XG4gICAgfVxuXG4gICAgdGhpcy5faGVscGVyID0gbmV3IEZvcm1BcnJheUhlbHBlcjxQcm9wZXJ0eT4oXG4gICAgICB0aGlzLmZvcm1BcnJheSxcbiAgICAgICh2YWx1ZSkgPT4gdGhpcy52YWxpZGF0b3IuZ2V0Rm9ybUdyb3VwKHZhbHVlKSxcbiAgICAgICh2MSwgdjIpID0+ICghdjEgJiYgIXYyKSB8fCB2MS5rZXkgPT09IHYyLmtleSxcbiAgICAgICh2YWx1ZSkgPT4gdGhpcy5pc0VtcHR5UHJvcGVydHkodmFsdWUpLFxuICAgICAgdGhpcy5vcHRpb25zXG4gICAgKTtcblxuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgIHRoaXMubW9iaWxlID0gdGhpcy5tb2JpbGUgPz8gaXNNb2JpbGUod2luZG93KTtcblxuICAgIC8vIENvbWJvIGtleVxuICAgIHRoaXMuX2F1dG9jb21wbGV0ZUNvbmZpZyA9IHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIsIHNvcnRCeSwgc29ydERpcmVjdGlvbiwgb3B0cykgPT4gdGhpcy5zdWdnZXN0RGVmaW5pdGlvbktleXModmFsdWUsIGZpbHRlciwgJ3ZhbHVlJywgc29ydERpcmVjdGlvbiwgb3B0cyksXG4gICAgICBlcXVhbHM6ICh2MSwgdjIpID0+ICh2MT8ua2V5IHx8IHYxKSA9PT0gKHYyPy5rZXkgfHwgdjIpLFxuICAgICAgZGlzcGxheVdpdGg6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thcHAtcHJvcGVydGllcy1mb3JtXSBEaXNwbGF5aW5nIHZhbHVlJywgdmFsdWUpO1xuXG4gICAgICAgIC8vIFZhbHVlIGlzIGFuIG9iamVjdCAoYSBQcm9wZXJ0eSlcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZXR1cm4gKHZhbHVlIGFzIFByb3BlcnR5KS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIGlzIGEga2V5XG4gICAgICAgIGNvbnN0IGRlZiA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5fZGVmaW5pdGlvbkJ5S2V5W3ZhbHVlXTtcbiAgICAgICAgaWYgKCFkZWYpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZGVmLmxhYmVsKTtcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiBbJ3ZhbHVlJ10sXG4gICAgICBjb2x1bW5OYW1lczogW3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ1NFVFRJTkdTLlBST1BFUlRZX0tFWScpXSxcbiAgICAgIHNwbGl0U2VhcmNoVGV4dDogZmFsc2UsXG4gICAgICBzaG93QWxsT25Gb2N1czogdHJ1ZSxcbiAgICAgIHNlbGVjdElucHV0Q29udGVudE9uRm9jdXM6IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuX3N0YXRlLmhvbGQodGhpcy5fc3RhdGUuc2VsZWN0KCdkZWZpbml0aW9ucycpLCAoZGVmaW5pdGlvbnMpID0+IHtcbiAgICAgIGlmICh0aGlzLmxvYWRlZCkgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnMoZGVmaW5pdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9jZXNzRGVmaW5pdGlvbnModGhpcy5kZWZpbml0aW9ucyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvY2Vzc0RlZmluaXRpb25zKGRlZmluaXRpb25zOiBGb3JtRmllbGREZWZpbml0aW9uW10pIHtcbiAgICBpZiAoIWRlZmluaXRpb25zKSByZXR1cm4gW107XG5cbiAgICAvLyBERUJVR1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbYXBwLXByb3BlcnRpZXMtZm9ybV0gUHJvY2Vzc2luZyBkZWZpbml0aW9ucy4uLicsIGRlZmluaXRpb25zKTtcblxuICAgIC8vIFByZXBhcmUgZGVmaW5pdGlvbiAoZS5nLiByZXNvbHZlIHRva2VucyBpZiBhbnkpXG4gICAgZGVmaW5pdGlvbnMgPSBGb3JtRmllbGREZWZpbml0aW9uVXRpbHMucHJlcGFyZURlZmluaXRpb25zKHRoaXMuaW5qZWN0b3IsIGRlZmluaXRpb25zIHx8IFtdKTtcblxuICAgIC8vIEZpbGwgb3B0aW9ucyBtYXBcbiAgICBjb25zdCBkZWZpbml0aW9uc0J5S2V5ID0gPEZvcm1GaWVsZERlZmluaXRpb25NYXA+e307XG4gICAgdGhpcy5fZGVmaW5pdGlvbktleXMgPSBkZWZpbml0aW9uc1xuICAgICAgLm1hcCgoZGVmKSA9PiB7XG4gICAgICAgIGRlZmluaXRpb25zQnlLZXlbZGVmLmtleV0gPSBkZWY7XG4gICAgICAgIGlmIChkZWYuZGlzYWJsZWQpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4geyBrZXk6IGRlZi5rZXksIHZhbHVlOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KGRlZi5sYWJlbCkgfTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzTm90TmlsKTtcbiAgICB0aGlzLl9kZWZpbml0aW9uQnlLZXkgPSBkZWZpbml0aW9uc0J5S2V5O1xuICB9XG5cbiAgZ2V0RGVmaW5pdGlvbkF0KGluZGV4OiBudW1iZXIpOiBGb3JtRmllbGREZWZpbml0aW9uIHtcbiAgICBsZXQgZGVmaW5pdGlvbiA9IHRoaXMuX2RlZmluaXRpb25zQnlJbmRleFtpbmRleF07XG4gICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uID0gdGhpcy51cGRhdGVEZWZpbml0aW9uQXQoaW5kZXgsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICB1cGRhdGVEZWZpbml0aW9uQXQoaW5kZXg6IG51bWJlciwgb3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogRm9ybUZpZWxkRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgdmFsdWUgPSAodGhpcy5mb3JtQXJyYXkuYXQoaW5kZXgpIGFzIFVudHlwZWRGb3JtR3JvdXApLmNvbnRyb2xzLmtleS52YWx1ZTtcbiAgICBjb25zdCBrZXkgPSB2YWx1ZT8ua2V5IHx8IHZhbHVlO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSAoa2V5ICYmIHRoaXMuX2RlZmluaXRpb25CeUtleVtrZXldKSB8fCBudWxsO1xuICAgIHRoaXMuX2RlZmluaXRpb25zQnlJbmRleFtpbmRleF0gPSBkZWZpbml0aW9uOyAvLyB1cGRhdGUgbWFwIGJ5IGluZGV4XG4gICAgaWYgKG9wdHM/LmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcmVtb3ZlQXQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuX2hlbHBlci5yZW1vdmVBdChpbmRleCk7XG4gICAgdGhpcy5jbGVhclRlbXBsYXRlQ2FjaGUoKTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYXN5bmMgc2V0VmFsdWUoZGF0YTogUHJvcGVydHlNYXAgfCBUW10sIG9wdHM/OiB7IGVtaXRFdmVudD86IGJvb2xlYW4gfSkge1xuICAgIGlmICghZGF0YSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zdCBbZGVmaW5pdGlvbnMsIGRlZmluaXRpb25LZXlzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl9kZWZpbml0aW9ucyQsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KSxcbiAgICAgIGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl9kZWZpbml0aW9uS2V5cyQsIHsgc3RvcDogdGhpcy5kZXN0cm95U3ViamVjdCB9KSxcbiAgICBdKTtcblxuICAgIC8vIFRyYW5zZm9ybSBwcm9wZXJ0aWVzIG1hcCBpbnRvIGFycmF5XG4gICAgY29uc3QgdmFsdWVzID0gYXdhaXQgQXBwUHJvcGVydGllc1V0aWxzLmFycmF5RnJvbU9iamVjdChkYXRhLCBkZWZpbml0aW9ucyk7XG5cbiAgICAvLyBXb3JrYXJvdW5kIGJlY2F1c2Ugd2hlbiBhdXRvY29tcGxldGUgdXNlIG1hdC1zZWxlY3QgKHdoZW4gbW9iaWxlKSwgaXQgbmVlZHMgdG8gZGlzcGxheSB0aGUgdmFsdWUgLSBmaXggaXNzdWUgbmd4LXN1bWFyaXMtY29tcG9uZW50cyMxNlxuICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgdmFsdWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgICAgIHByb3BlcnR5LmtleSA9IChkZWZpbml0aW9uS2V5cy5maW5kKChkZWZLZXkpID0+IGRlZktleS5rZXkgPT09IHByb3BlcnR5LmtleSkgfHwgPFByb3BlcnR5Pnsga2V5OiBwcm9wZXJ0eS5rZXksIHZhbHVlOiBwcm9wZXJ0eS5rZXkgfSkgYXMgYW55O1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhclRlbXBsYXRlQ2FjaGUoKTtcbiAgICB0aGlzLl9oZWxwZXIucmVzaXplKHZhbHVlcy5sZW5ndGgpO1xuICAgIHRoaXMuX2hlbHBlci5mb3JtQXJyYXkucGF0Y2hWYWx1ZSh2YWx1ZXMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcblxuICAgIGlmIChvcHRzPy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLm1hcmtBc0xvYWRlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFZhbHVlQXNKc29uKCk6IFByb3BlcnR5TWFwIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy52YWx1ZTtcbiAgICBjb25zdCBqc29uID0gQXBwUHJvcGVydGllc1V0aWxzLmFycmF5QXNPYmplY3QoZGF0YSwgdGhpcy5kZWZpbml0aW9ucywge1xuICAgICAgb21pdE5pbE9yQmxhbms6IHRoaXMub3B0aW9ucz8uYWxsb3dEdXBsaWNhdGVkVmFsdWVzICE9PSB0cnVlLFxuICAgIH0pO1xuICAgIGNvbnNvbGUuZGVidWcoJ1thcHAtcHJvcGVydGllcy1mb3JtXSBDb252ZXJ0aW5nIGRhdGEgYXMgb2JqZWN0JywgZGF0YSwganNvbik7XG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5faGVscGVyLmZvcm1BcnJheS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2hlbHBlci5yZXNpemUoMCk7XG4gICAgfVxuICAgIHRoaXMuY2xlYXJUZW1wbGF0ZUNhY2hlKCk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIHRvZ2dsZVNob3dIaW50S2V5cygpIHtcbiAgICB0aGlzLnNob3dIaW50S2V5ID0gIXRoaXMuc2hvd0hpbnRLZXk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhclRlbXBsYXRlQ2FjaGUoKSB7XG4gICAgdGhpcy5fZGVmaW5pdGlvbnNCeUluZGV4ID0ge307IC8vIGNsZWFyIG1hcCBieSBpbmRleFxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHN1Z2dlc3REZWZpbml0aW9uS2V5cyhcbiAgICB2YWx1ZTogYW55LFxuICAgIGZpbHRlcj86IGFueSxcbiAgICBzb3J0Qnk/OiBzdHJpbmcgfCBrZXlvZiBQcm9wZXJ0eSxcbiAgICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvbixcbiAgICBvcHRzPzoge1xuICAgICAgb2Zmc2V0PzogbnVtYmVyO1xuICAgICAgc2l6ZT86IG51bWJlcjtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9XG4gICk6IFByb21pc2U8TG9hZFJlc3VsdDxQcm9wZXJ0eT4+IHtcbiAgICBsZXQgaXRlbXMgPSBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5fZGVmaW5pdGlvbktleXMkLCB7IHN0b3A6IHRoaXMuZGVzdHJveVN1YmplY3QgfSk7XG5cbiAgICAvLyBERUJVR1xuICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKCdbYXBwLXByb3BlcnRpZXMtZm9ybV0gU3VnZ2VzdGluZyBkZWZpbml0aW9uIGtleXMnLCB2YWx1ZSwgaXRlbXMpO1xuXG4gICAgLy8gR2V0IGFzIGtleVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmICFSZWdFeHBVdGlscy5oYXNXaWxkY2FyZENoYXJhY3Rlcih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IGl0ZW1zLmZpbmQoKG8pID0+IG8ua2V5ID09PSB2YWx1ZSk7XG4gICAgICBpZiAob2JqKSByZXR1cm4geyBkYXRhOiBbb2JqXSB9IGFzIExvYWRSZXN1bHQ8UHJvcGVydHk+O1xuICAgIH1cblxuICAgIC8vIEdldCBhcyBvYmplY3RcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHsgZGF0YTogW3ZhbHVlXSB9IGFzIExvYWRSZXN1bHQ8UHJvcGVydHk+O1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBhbHJlYWR5IHVzZWQga2V5c1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmFsbG93RHVwbGljYXRlZFZhbHVlcyAhPT0gdHJ1ZSkge1xuICAgICAgY29uc3QgZXhpc3RpbmdLZXlzID0gKHRoaXMuZm9ybUFycmF5LnZhbHVlIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKChfLCBpbmRleCkgPT4gaW5kZXggIT09IHRoaXMuX2ZvY3VzZWRDb250cm9sSW5kZXgpXG4gICAgICAgIC5tYXAoQXBwUHJvcGVydHlVdGlscy5nZXRQcm9wZXJ0eUtleSk7XG4gICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIWV4aXN0aW5nS2V5cy5pbmNsdWRlcyhpdGVtLmtleSkpO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgPz8gJyonO1xuXG4gICAgLy8gQW55IG1hdGNoXG4gICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKCcqJykpIHZhbHVlID0gJyonICsgdmFsdWU7XG5cbiAgICByZXR1cm4gc3VnZ2VzdEZyb21BcnJheShpdGVtcywgdmFsdWUsIHsgc2VhcmNoQXR0cmlidXRlOiAndmFsdWUnLCAuLi5maWx0ZXIgfSwgc29ydEJ5LCBzb3J0RGlyZWN0aW9uLCBvcHRzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBleHBvcnRUb0NzdihsYWJlbDogc3RyaW5nID0gJycpIHtcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47IC8vIHNraXBcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gYXdhaXQgQXBwUHJvcGVydGllc1V0aWxzLmFycmF5RnJvbU9iamVjdDxhbnk+KHRoaXMuZ2V0VmFsdWVBc0pzb24oKSk7XG4gICAgdGhpcy5fcHJvcGVydGllc0ZpbGVTZXJ2aWNlLmV4cG9ydFRvQ3N2KHByb3BlcnRpZXMsIHsgY29udGV4dDogeyBsYWJlbCB9IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGltcG9ydEZyb21Dc3YoZXZlbnQ/OiBFdmVudCkge1xuICAgIGlmICghdGhpcy5lbmFibGVkIHx8IHRoaXMubG9hZGluZykgcmV0dXJuOyAvLyBza2lwXG5cbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBleGlzdGluZ1Byb3BlcnRpZXMgPSB0aGlzLmdldFZhbHVlQXNKc29uKCk7XG4gICAgICBjb25zdCBpbXBvcnRlZFByb3BlcnRpZXMgPSBBcHBQcm9wZXJ0aWVzVXRpbHMuYXJyYXlBc09iamVjdChhd2FpdCB0aGlzLl9wcm9wZXJ0aWVzRmlsZVNlcnZpY2UuaW1wb3J0RnJvbUNzdihldmVudCkpO1xuICAgICAgbGV0IG1lcmdlZFByb3BlcnRpZXM6IFByb3BlcnR5TWFwID0ge307XG5cbiAgICAgIHN3aXRjaCAodGhpcy5pbXBvcnRQb2xpY3kpIHtcbiAgICAgICAgY2FzZSAnaW5zZXJ0LXVwZGF0ZSc6XG4gICAgICAgICAgLy8gVXNlIGltcG9ydGVkIHByb3BlcnRpZXMgZmlyc3QsIGFuZCByZW1vdmUgb2xkXG4gICAgICAgICAgbWVyZ2VkUHJvcGVydGllcyA9IHsgLi4uZXhpc3RpbmdQcm9wZXJ0aWVzLCAuLi5pbXBvcnRlZFByb3BlcnRpZXMgfTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnaW5zZXJ0LW9ubHknOlxuICAgICAgICAgIC8vIFByZWZlciBleGlzdGluZyBwcm9wZXJ0aWVzLCB0aGVuIGluc2VydCBuZXdcbiAgICAgICAgICBtZXJnZWRQcm9wZXJ0aWVzID0geyAuLi5pbXBvcnRlZFByb3BlcnRpZXMsIC4uLmV4aXN0aW5nUHJvcGVydGllcyB9O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICd1cGRhdGUtb25seSc6IHtcbiAgICAgICAgICBjb25zdCBpbXBvcnRLZXlzID0gT2JqZWN0LmtleXMoaW1wb3J0ZWRQcm9wZXJ0aWVzKTtcbiAgICAgICAgICBtZXJnZWRQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoZXhpc3RpbmdQcm9wZXJ0aWVzKS5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGltcG9ydEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIHJlc1trZXldID0gaW1wb3J0ZWRQcm9wZXJ0aWVzW2tleV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICA8UHJvcGVydHlNYXA+eyAuLi5leGlzdGluZ1Byb3BlcnRpZXMgfVxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy5zZXRWYWx1ZShtZXJnZWRQcm9wZXJ0aWVzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLm1hcmtBc0RpcnR5KCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnNldEVycm9yKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubWFya0FzTG9hZGVkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzRW1wdHlQcm9wZXJ0eShvYmo6IFByb3BlcnR5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKG9iaj8ua2V5KSB8fCBpc05pbChvYmoudmFsdWUpO1xuICB9XG59XG4iLCJAaWYgKHNob3dUb29sYmFyKSB7XG4gIDxtYXQtdG9vbGJhcj5cbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1zcGFjZXJcIj48L2Rpdj5cblxuICAgIDxpb24taXRlbSBsaW5lcz1cIm5vbmVcIiAoY2xpY2spPVwidG9nZ2xlU2hvd0hpbnRLZXlzKClcIj5cbiAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJkYXJrXCI+e3sgJ0ZJTEUuUFJPUEVSVElFUy5CVE5fU0hPV19ISU5UX0tFWScgfCB0cmFuc2xhdGUgfX08L2lvbi1sYWJlbD5cbiAgICAgIDxpb24tdG9nZ2xlIGNvbG9yPVwicHJpbWFyeVwiIFtjaGVja2VkXT1cInNob3dIaW50S2V5XCI+PC9pb24tdG9nZ2xlPlxuICAgIDwvaW9uLWl0ZW0+XG5cbiAgICA8IS0tIG9wdGlvbnMgc3ViIG1lbnUgLS0+XG4gICAgQGlmIChjYW5Eb3dubG9hZCB8fCBjYW5JbXBvcnQpIHtcbiAgICAgIDxidXR0b24gc2xvdD1cImVuZFwiIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwib3B0aW9uc01lbnVcIiBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fT1BUSU9OUycgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG5cbiAgPC9tYXQtdG9vbGJhcj5cbn1cblxuPCEtLSBPcHRpb25zIG1lbnUgLS0+XG48bWF0LW1lbnUgI29wdGlvbnNNZW51PVwibWF0TWVudVwiPlxuICA8IS0tIERvd25sb2FkIGFzIENTViAtLT5cbiAgQGlmIChjYW5Eb3dubG9hZCkge1xuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbZGlzYWJsZWRdPVwibG9hZGluZ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJkb3dubG9hZE1lbnVcIj5cbiAgICAgIDxtYXQtaWNvbj5kb3dubG9hZDwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0RPV05MT0FEX0RPVFM8L2lvbi1sYWJlbD5cbiAgICA8L2J1dHRvbj5cbiAgfVxuXG4gIDwhLS0gSW1wb3J0IGZyb20gZmlsZSAtLT5cbiAgQGlmIChjYW5JbXBvcnQpIHtcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2Rpc2FibGVkXT1cImxvYWRpbmcgfHwgZGlzYWJsZWRcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiaW1wb3J0TWVudVwiPlxuICAgICAgPG1hdC1pY29uPnVwbG9hZDwvbWF0LWljb24+XG4gICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0lNUE9SVF9GUk9NX0ZJTEVfRE9UUzwvaW9uLWxhYmVsPlxuICAgIDwvYnV0dG9uPlxuICB9XG48L21hdC1tZW51PlxuXG48IS0tIERvd25sb2FkIG1lbnUgLS0+XG48bWF0LW1lbnUgI2Rvd25sb2FkTWVudT1cIm1hdE1lbnVcIj5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFtkaXNhYmxlZF09XCJsb2FkaW5nXCIgKGNsaWNrKT1cImV4cG9ydFRvQ3N2KClcIj5cbiAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5GSUxFLlBST1BFUlRJRVMuQlROX0RPV05MT0FEX0FTX0NTVjwvaW9uLWxhYmVsPlxuICA8L2J1dHRvbj5cbjwvbWF0LW1lbnU+XG5cbjwhLS0gSW1wb3J0IG1lbnUgLS0+XG48bWF0LW1lbnUgI2ltcG9ydE1lbnU9XCJtYXRNZW51XCI+XG4gIDwhLS0gaW1wb3J0IGZyb20gZmlsZSAtLT5cbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJpbXBvcnRGcm9tQ3N2KCRldmVudClcIj5cbiAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5GSUxFLlBST1BFUlRJRVMuQlROX0lNUE9SVF9GUk9NX0NTVjwvaW9uLWxhYmVsPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIGltcG9ydCBwb2xpY3kgLS0+XG4gIDxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImltcG9ydFBvbGljeU1lbnVcIj5cbiAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5GSUxFLlVQTE9BRC5CVE5fSU1QT1JUX1BPTElDWV9ET1RTPC9pb24tbGFiZWw+XG4gIDwvYnV0dG9uPlxuPC9tYXQtbWVudT5cblxuPCEtLSBJbXBvcnQgcG9saWN5IG1lbnUgLS0+XG48bWF0LW1lbnUgI2ltcG9ydFBvbGljeU1lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICA8bmctdGVtcGxhdGUgbWF0TWVudUNvbnRlbnQ+XG4gICAgPCEtLSBoZWFkZXItLT5cbiAgICA8aW9uLXJvdyBjbGFzcz1cIm1hdC1tZW51LWhlYWRlciBpb24tbm8tcGFkZGluZyBjb2x1bW5cIj5cbiAgICAgIDxpb24tY29sPlxuICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5GSUxFLlVQTE9BRC5JTVBPUlRfUE9MSUNZLlRJVExFPC9pb24tbGFiZWw+XG4gICAgICA8L2lvbi1jb2w+XG4gICAgPC9pb24tcm93PlxuICAgIEBmb3IgKHBvbGljeSBvZiBfaW1wb3J0UG9saWNpZXM7IHRyYWNrIHBvbGljeSkge1xuICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJpbXBvcnRQb2xpY3kgPSBwb2xpY3lcIj5cbiAgICAgICAgPG1hdC1pY29uPnt7IGltcG9ydFBvbGljeSA9PT0gcG9saWN5ID8gJ2NoZWNrX2JveCcgOiAnY2hlY2tfYm94X291dGxpbmVfYmxhbmsnIH19PC9tYXQtaWNvbj5cbiAgICAgICAgPGlvbi1sYWJlbD57eyAnRklMRS5VUExPQUQuSU1QT1JUX1BPTElDWS4nICsgcG9saWN5IHwgdXBwZXJjYXNlIHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gIDwvbmctdGVtcGxhdGU+XG48L21hdC1tZW51PlxuXG48IS0tIFByb3BlcnRpZXMgLS0+XG48Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cImZvcm0tY29udGFpbmVyXCI+XG4gIEBpZiAobG9hZGluZ1N1YmplY3QgfCBhc3luYykge1xuICAgIDxpb24tbGlzdCBbaW5zZXRdPVwibW9iaWxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJvcGVydHlSb3dTa2VsZXRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByb3BlcnR5Um93U2tlbGV0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcm9wZXJ0eVJvd1NrZWxldG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9pb24tbGlzdD5cbiAgfSBAZWxzZSB7XG4gICAgPGlvbi1saXN0IGZvcm1BcnJheU5hbWU9XCJwcm9wZXJ0aWVzXCIgW2luc2V0XT1cIm1vYmlsZVwiPlxuICAgICAgPCEtLSBTaG93IG1vcmUgb3B0aW9ucyAtLT5cbiAgICAgIEBpZiAoKF9kZWZpbml0aW9uS2V5cyQgfCBhc3luYyB8IGlzTm90RW1wdHlBcnJheSkgJiYgZm9ybUFycmF5Py5sZW5ndGggPT09IDApIHtcbiAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwibGlnaHRcIiBbdGl0bGVdPVwiYWRkQnV0dG9uVGl0bGUgfCB0cmFuc2xhdGVcIiAoY2xpY2spPVwiX2hlbHBlci5hZGQoKVwiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbD57eyBhZGRCdXR0b25UZXh0IHwgdHJhbnNsYXRlIH19PC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8bWF0LWljb24gc2xvdD1cImVuZFwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgfVxuXG4gICAgICBAZm9yIChmaWVsZEZvcm0gb2YgZmllbGRGb3JtczsgdHJhY2sgaTsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiIFtjbGFzcy5vdXRsaW5lXT1cImFwcGVhcmFuY2UgPT09ICdvdXRsaW5lJ1wiPlxuICAgICAgICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICA8aW9uLXJvdyBbZm9ybUdyb3VwTmFtZV09XCJpXCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICBAbGV0IGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uQXQoaSk7XG5cbiAgICAgICAgICAgICAgPCEtLSBwcm9wZXJ0eSBrZXkgLS0+XG4gICAgICAgICAgICAgIEBpZiAoZmllbGRGb3JtIHwgZm9ybUdldENvbnRyb2w6ICdrZXknOyBhcyBjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgPGlvbi1jb2xcbiAgICAgICAgICAgICAgICAgIHNpemU9XCIxMlwiXG4gICAgICAgICAgICAgICAgICBzaXplLXNtPVwiNlwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGRlZmluaXRpb24gfCBwcm9wZXJ0eUdldDogJ2xhYmVsJyB8IHRyYW5zbGF0ZSkgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cImF1dG9cIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInNob3dIaW50S2V5ID8gJ2ZpeGVkJyA6IHN1YnNjcmlwdFNpemluZ1wiXG4gICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwidXBkYXRlRGVmaW5pdGlvbkF0KGkpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4ICsgaSAqIDJcIlxuICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cIl9hdXRvY29tcGxldGVDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NFVFRJTkdTLlBST1BFUlRZX0tFWScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJfZm9jdXNlZENvbnRyb2xJbmRleCA9IGlcIlxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiZGVmaW5pdGlvbj8uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICBbbW9iaWxlXT1cIm1vYmlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtwYW5lbENsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbcGFuZWxXaWR0aF09XCJwYW5lbFdpZHRoXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1oaW50IFtjbGFzcy5jZGstdmlzdWFsbHktaGlkZGVuXT1cIiFzaG93SGludEtleVwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBsZXQga2V5VmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgIHt7IGhpbnRLZXlQcmVmaXggfHwgJycgfX17eyBrZXlWYWx1ZT8ua2V5IHx8IGtleVZhbHVlIHx8ICcnIH19XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGUtZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgPCEtLSBwcm9wZXJ0eSB2YWx1ZSAtLT5cbiAgICAgICAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIlwiIHNpemUtc209XCJcIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nIGlvbi1wYWRkaW5nLXN0YXJ0LXhzXCI+XG4gICAgICAgICAgICAgICAgQGlmIChkZWZpbml0aW9uKSB7XG4gICAgICAgICAgICAgICAgICA8YXBwLWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cImF1dG9cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibW9iaWxlID8gKCdTRVRUSU5HUy5QUk9QRVJUWV9WQUxVRScgfCB0cmFuc2xhdGUpIDogJyAnXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW2RlZmluaXRpb25dPVwiZGVmaW5pdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmaWVsZEZvcm0gfCBmb3JtR2V0Q29udHJvbDogJ3ZhbHVlJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU0VUVElOR1MuUFJPUEVSVFlfVkFMVUUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoaXBDb2xvcl09XCJjaGlwQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleCArIGkgKiAyICsgMVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJkZWZpbml0aW9uPy5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIFtwYW5lbENsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbcGFuZWxXaWR0aF09XCJwYW5lbFdpZHRoXCJcbiAgICAgICAgICAgICAgICAgID48L2FwcC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPCEtLSB1bmtub3duIGRlZmluaXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyAnU0VUVElOR1MuUFJPUEVSVFlfVkFMVUUnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpZWxkRm9ybSB8IGZvcm1HZXRDb250cm9sOiAndmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibW9iaWxlID8gJycgOiAoJ1NFVFRJTkdTLlBST1BFUlRZX1ZBTFVFJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiMjAgKyBpICogMiArIDFcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICBAaWYgKF9oZWxwZXIuaXNMYXN0KGkpKSB7XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCB8fCAoZmllbGRGb3JtLnZhbHVlIHwgYXNCb29sZWFuOiBpc0VtcHR5UHJvcGVydHkpIHx8IChfZGVmaW5pdGlvbktleXMgfCBpc0VtcHR5QXJyYXkpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCInU0VUVElOR1MuQlROX0FERF9QUk9QRVJUWScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX2hlbHBlci5hZGQoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCIyMCArIGkgKiAyICsgMlwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICBjb2xvcj1cImxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZWZpbml0aW9uPy5kaXNhYmxlZCB8fCBkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0NPTU1PTi5CVE5fREVMRVRFJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQXQoaSlcIlxuICAgICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgIH1cbiAgICA8L2lvbi1saXN0PlxuICB9XG48L2Zvcm0+XG5cbjxuZy10ZW1wbGF0ZSAjcHJvcGVydHlSb3dTa2VsZXRvbj5cbiAgPGlvbi1pdGVtIGxpbmVzPVwibm9uZVwiPlxuICAgIDxpb24tZ3JpZCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgIDwhLS0gcHJvcGVydHkga2V5IC0tPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiNlwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW3N1YnNjcmlwdFNpemluZ109XCJzdWJzY3JpcHRTaXppbmdcIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gZGlzYWJsZWQgLz5cbiAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDYwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImFycm93LWRyb3Bkb3duXCIgbWF0U3VmZml4PjwvaW9uLWljb24+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8IS0tIHZhbHVlIC0tPlxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIGRpc2FibGVkIC8+XG4gICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiA2MCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPCEtLSBidXR0b25zIC0tPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cImxpZ2h0XCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tZ3JpZD5cbiAgPC9pb24taXRlbT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -359,13 +359,18 @@ export class SharedFormGroupValidators {
|
|
|
359
359
|
};
|
|
360
360
|
}
|
|
361
361
|
static requiredIf(fieldName, anotherFieldToCheck, opts) {
|
|
362
|
-
const isEmpty = opts?.isEmpty || ((control) => isNilOrBlank(control
|
|
363
|
-
const predicate = opts?.predicate || ((control) => isNotNilOrBlank(control
|
|
362
|
+
const isEmpty = opts?.isEmpty || ((control) => isNilOrBlank(control?.value));
|
|
363
|
+
const predicate = opts?.predicate || ((control) => isNotNilOrBlank(control?.value));
|
|
364
364
|
return (group) => {
|
|
365
365
|
const control = group.get(fieldName);
|
|
366
|
+
// Workaround - When control is missing (can occur when form has been upgrade, but the validator is still on the form group)
|
|
367
|
+
if (!control) {
|
|
368
|
+
console.warn(`Unable to find control '${fieldName}' used by ShareFormGroupValidators.requiredIf validator!`);
|
|
369
|
+
return null;
|
|
370
|
+
}
|
|
366
371
|
const anotherControl = anotherFieldToCheck instanceof AbstractControl ? anotherFieldToCheck : group.get(anotherFieldToCheck);
|
|
367
372
|
if (!anotherControl)
|
|
368
|
-
throw new Error(
|
|
373
|
+
throw new Error(`Unable to find control ${typeof anotherFieldToCheck === 'string' ? anotherFieldToCheck + ' ' : ''}used by ShareFormGroupValidators.requiredIf validator!`);
|
|
369
374
|
if (isEmpty(control) && predicate(anotherControl)) {
|
|
370
375
|
const error = { required: true };
|
|
371
376
|
control.setErrors(error);
|
|
@@ -618,4 +623,4 @@ export class SharedAsyncValidators {
|
|
|
618
623
|
return subscription;
|
|
619
624
|
}
|
|
620
625
|
}
|
|
621
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEdBT2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBc0IsTUFBTSxRQUFRLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoSSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQUMsb0JBQW9CLEdBQUc7UUFDcEMsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCO1FBQ3ZDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUI7UUFDN0MsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQjtLQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFtQjtRQUNoRCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLElBQUksQ0FB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QztRQUVELElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxNQUFNLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBRW5HLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFckMsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZILElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFDLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFFeEMsNkNBQTZDO1FBQzdDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3BCLDBHQUEwRztZQUMxRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUU1QixnRUFBZ0U7WUFDaEUsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2hCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QixDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFlBQVksQ0FBQztJQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBBc3luY1ZhbGlkYXRvckZuLFxuICBVbnR5cGVkRm9ybUFycmF5LFxuICBVbnR5cGVkRm9ybUNvbnRyb2wsXG4gIFVudHlwZWRGb3JtR3JvdXAsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvckZuLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc01vbWVudCwgTW9tZW50LCB1bml0T2ZUaW1lIH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IFBVQktFWV9SRUdFWFAgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgaXNFbXB0eUFycmF5LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCBpc05vdE5pbE9yTmFOLCB0b0Jvb2xlYW4sIHRvTnVtYmVyIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IERhdGVVdGlscywgZnJvbURhdGVJU09TdHJpbmcgfSBmcm9tICcuLi9kYXRlcyc7XG5pbXBvcnQgeyBkZWxheSwgZnJvbSwgaXNPYnNlcnZhYmxlLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlyc3QsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgU2hhcmVkVmFsaWRhdG9ycyB7XG4gIHByaXZhdGUgc3RhdGljIF9ET1VCTEVfUkVHRVhQX0NBQ0hFID0ge1xuICAgIE5PX0xJTUlUOiAvXi0/XFxkKyhbLixdXFxkKik/JC8sXG4gICAgMTogL14tP1xcZCsoWy4sXVxcZCk/JC8sIC8vIDEgZGVjaW1hbCBtYXhcbiAgICAyOiAvXi0/XFxkKyhbLixdXFxkezEsMn0pPyQvLCAvLyAyIGRlY2ltYWxzIG1heFxuICAgIDM6IC9eLT9cXGQrKFsuLF1cXGR7MSwzfSk/JC8sIC8vIDMgZGVjaW1hbHMgbWF4XG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RG91YmxlUmVnZXhwKG1heERlY2ltYWxzOiBudW1iZXIpOiBSZWdFeHAge1xuICAgIGlmIChpc05pbChtYXhEZWNpbWFscykpIHJldHVybiB0aGlzLl9ET1VCTEVfUkVHRVhQX0NBQ0hFLk5PX0xJTUlUO1xuXG4gICAgaWYgKG1heERlY2ltYWxzIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG1heERlY2ltYWxzIHZhbHVlOiAke21heERlY2ltYWxzfWApO1xuICAgIGNvbnN0IHJlZ2V4cCA9IHRoaXMuX0RPVUJMRV9SRUdFWFBfQ0FDSEVbbWF4RGVjaW1hbHNdO1xuICAgIGlmIChyZWdleHApIHJldHVybiByZWdleHA7XG5cbiAgICAvLyBOZXc6IGFkZCB0byBjYWNoZVxuICAgIHRoaXMuX0RPVUJMRV9SRUdFWFBfQ0FDSEVbbWF4RGVjaW1hbHNdID0gbmV3IFJlZ0V4cChgXi0/XFxcXGQrKFsuLF1cXFxcZHsxLCR7bWF4RGVjaW1hbHN9fSk/JGApO1xuICAgIHJldHVybiB0aGlzLl9ET1VCTEVfUkVHRVhQX0NBQ0hFW21heERlY2ltYWxzXTtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHMob3RoZXJDb250cm9sTmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgb3RoZXJDb250cm9sID0gYy5wYXJlbnQ/LmdldChvdGhlckNvbnRyb2xOYW1lKTtcbiAgICAgIGlmIChvdGhlckNvbnRyb2wgJiYgYy52YWx1ZSAhPT0gb3RoZXJDb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZXF1YWxzOiB0cnVlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZWFkb25seSBJMThOX0VSUk9SX0tFWVMgPSB7XG4gICAgcmVxdWlyZWQ6ICdFUlJPUi5GSUVMRF9SRVFVSVJFRCcsXG4gICAgbWluOiAnRVJST1IuRklFTERfTUlOJyxcbiAgICBtYXg6ICdFUlJPUi5GSUVMRF9NQVgnLFxuICAgIG1pbmxlbmd0aDogJ0VSUk9SLkZJRUxEX01JTl9MRU5HVEgnLFxuICAgIG1heGxlbmd0aDogJ0VSUk9SLkZJRUxEX01BWF9MRU5HVEgnLFxuICAgIHB1YmtleTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9QVUJLRVknLFxuICAgIHZhbGlkRGF0ZTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFJyxcbiAgICBkYXRlSXNBZnRlcjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX0FGVEVSJyxcbiAgICBkYXRlSXNCZWZvcmU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9CRUZPUkUnLFxuICAgIGRhdGVSYW5nZTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX1JBTkdFJyxcbiAgICBkYXRlTWluRHVyYXRpb246ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9NSU5fRFVSQVRJT04nLFxuICAgIGRhdGVNYXhEdXJhdGlvbjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01BWF9EVVJBVElPTicsXG4gICAgbWF4RGVjaW1hbHM6ICdFUlJPUi5GSUVMRF9NQVhJTVVNX0RFQ0lNQUxTJyxcbiAgICBkZWNpbWFsOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RFQ0lNQUwnLFxuICAgIGludGVnZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfSU5URUdFUicsXG4gICAgcHJlY2lzaW9uOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX1BSRUNJU0lPTicsXG4gICAgZW1haWw6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfRU1BSUwnLFxuICAgIGxhdGl0dWRlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0xBVElUVURFJyxcbiAgICBsb25naXR1ZGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfTE9OR0lUVURFJyxcbiAgICBwYXR0ZXJuOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX1BBVFRFUk4nLFxuICAgIHVuaXF1ZTogJ0VSUk9SLkZJRUxEX05PVF9VTklRVUUnLFxuICAgIGVudGl0eTogJ0VSUk9SLkZJRUxEX0lOVkFMSUQnLFxuICAgIGludmFsaWQ6ICdFUlJPUi5GSUVMRF9JTlZBTElEJyxcbiAgICBpbmNvbnNpc3RlbnQ6ICdFUlJPUi5GSUVMRF9JTkNPTlNJU1RFTlQnLFxuICAgIGVxdWFsczogJ0VSUk9SLkZJRUxEX05PVF9FUVVBTFMnLFxuICB9O1xuXG4gIHN0YXRpYyBsYXRpdHVkZShjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgKHZhbHVlIDwgLTkwIHx8IHZhbHVlID4gOTApKSB7XG4gICAgICByZXR1cm4geyBsYXRpdHVkZTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBsb25naXR1ZGUoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmICh2YWx1ZSA8IC0xODAgfHwgdmFsdWUgPiAxODApKSB7XG4gICAgICByZXR1cm4geyBsb25naXR1ZGU6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgb2JqZWN0KGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB7IG9iamVjdDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBlbnRpdHkoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgaXNOaWwodmFsdWUuaWQpKSkge1xuICAgICAgcmV0dXJuIHsgZW50aXR5OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGVudGl0aWVzKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUuZXZlcnkoKGUpID0+IGlzTmlsKGU/LmlkKSkpKSB7XG4gICAgICByZXR1cm4geyBlbnRpdHk6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZW1wdHkoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7IGVtcHR5OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHB1YmtleShjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhUFVCS0VZX1JFR0VYUC50ZXN0KHZhbHVlKSkpIHtcbiAgICAgIHJldHVybiB7IHB1YmtleTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBpbnRlZ2VyKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQoY29udHJvbC52YWx1ZSk7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSB8fCAodmFsdWUgfCAwKSAhPT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiB7IGludGVnZXI6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZGVjaW1hbChvcHRzPzogeyBtYXhEZWNpbWFscz86IG51bWJlciB9KTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IHJlZ2V4cCA9IHRoaXMuZ2V0RG91YmxlUmVnZXhwKG9wdHM/Lm1heERlY2ltYWxzKTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIldBUk46IEdldHRpbmcgYSBOYU4gdmFsdWUgKGRlY2ltYWwgd2FzIGV4cGVjdGVkKSAhXCIpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgdmFsdWUgIT09ICcnICYmICFyZWdleHAudGVzdCh2YWx1ZSBhcyBzdHJpbmcpKSB7XG4gICAgICAgIHJldHVybiBpc05vdE5pbChvcHRzPy5tYXhEZWNpbWFscykgPyB7IG1heERlY2ltYWxzOiB7IG1heERlY2ltYWxzOiBvcHRzLm1heERlY2ltYWxzIH0gfSA6IHsgZGVjaW1hbDogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBwcmVjaXNpb24uIGUuZy4gaWYgcHJlY2lzaW9uPTAuNSB0aGVuIHZhbHVlPTAuNiBpcyBpbnZhbGlkLCBidXQgMS41IGlzIHZhbGlkXG4gICAqXG4gICAqIEBwYXJhbSBwcmVjaXNpb25cbiAgICovXG4gIHN0YXRpYyBwcmVjaXNpb24ocHJlY2lzaW9uOiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgaWYgKGlzTmlsKHByZWNpc2lvbikpIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgYSBub3QgbmlsIHByZWNpc2lvbicpO1xuXG4gICAgLy8gV0FSTjogd2Ugc2hvdWxkIGRlZmluZSBhIG11bHRpcGxpZXIsIGJlY2F1c2UgbW9kdWxvIGluIGphdmFzY3JpcHQgd2lsbCBvbmx5IHdvcmsgb24gaW50ZWdlclxuICAgIC8vIChlLmcuIFwiNyAlIDAuMVwiIGluIGphdmFzY3JpcHQgd2lsbCBOT1QgcmV0dXJuIHplcm8gKGJ1dCAwLjA5OTk5OTk5OTk5OTk5OTYyKVxuICAgIGNvbnN0IHByZWNpc2lvbk5iRGVjaW1hbHMgPSAocHJlY2lzaW9uLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoO1xuICAgIGNvbnN0IG11bHRpcGxpZXIgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uTmJEZWNpbWFscyk7XG4gICAgY29uc3QgbXVsdGlwbGllZFByZWNpc2lvbiA9IE1hdGgucm91bmQobXVsdGlwbGllciAqIHByZWNpc2lvbik7XG5cbiAgICAvLyBUaGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG4gICAgcmV0dXJuIChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSB8fCBOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gV0FSTjogQ29udmVydCB2YWx1ZSBpbnRvIGludGVnZXIsIGJlZm9yZSBhcHBseWluZyBtb2R1bG8gb3BlcmF0b3JcbiAgICAgIGNvbnN0IG1vZCA9IE1hdGgucm91bmQoK3ZhbHVlICogbXVsdGlwbGllcikgJSBtdWx0aXBsaWVkUHJlY2lzaW9uO1xuICAgICAgaWYgKG1vZCAhPT0gMCkge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoYFdBUk4gR2V0dGluZyBhICR7dmFsdWV9IHdpdGggYW4gaW52YWxpZCBwcmVjaXNpb24gKGV4cGVjdGVkIHByZWNpc2lvbiBpczogJHtwcmVjaXNpb259KWApO1xuICAgICAgICByZXR1cm4geyBwcmVjaXNpb246IHsgcHJlY2lzaW9uIH0gfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdmFsaWREYXRlVGltZShyZXF1aXJlZFRpbWUgPSB0cnVlKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgICAgY29uc3QgZGF0ZSA9ICF2YWx1ZSB8fCBpc01vbWVudCh2YWx1ZSkgPyB2YWx1ZSA6IGZyb21EYXRlSVNPU3RyaW5nKHZhbHVlKTtcbiAgICAgIGlmIChkYXRlICYmICghZGF0ZS5pc1ZhbGlkKCkgfHwgZGF0ZS55ZWFyKCkgPCAxOTAwIHx8IChyZXF1aXJlZFRpbWUgJiYgRGF0ZVV0aWxzLmlzTm9UaW1lKGRhdGUpKSkpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWREYXRlOiB0cnVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHZhbGlkRGF0ZSA9IFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlVGltZSh0cnVlKTtcbiAgc3RhdGljIHZhbGlkRGF0ZUFsbG93Tm9UaW1lID0gU2hhcmVkVmFsaWRhdG9ycy52YWxpZERhdGVUaW1lKGZhbHNlKTtcblxuICBzdGF0aWMgZGF0ZUlzQWZ0ZXIocHJldmlvdXNWYWx1ZTogTW9tZW50LCBlcnJvclBhcmFtOiBzdHJpbmcsIGdyYW51bGFyaXR5PzogdW5pdE9mVGltZS5TdGFydE9mKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgaXNOb3ROaWwocHJldmlvdXNWYWx1ZSkgJiYgdmFsdWUuaXNTYW1lT3JCZWZvcmUocHJldmlvdXNWYWx1ZSwgZ3JhbnVsYXJpdHkpKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3JcbiAgICAgICAgcmV0dXJuIHsgZGF0ZUlzQWZ0ZXI6IHsgbWluRGF0ZTogZXJyb3JQYXJhbSB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVJc0JlZm9yZShtYXhWYWx1ZTogTW9tZW50LCBlcnJvclBhcmFtOiBzdHJpbmcsIGdyYW51bGFyaXR5PzogdW5pdE9mVGltZS5TdGFydE9mKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgaXNOb3ROaWwobWF4VmFsdWUpICYmIHZhbHVlLmlzU2FtZU9yQWZ0ZXIobWF4VmFsdWUsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yXG4gICAgICAgIHJldHVybiB7IGRhdGVJc0JlZm9yZTogeyBtYXhEYXRlOiBlcnJvclBhcmFtIH0gfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZVJhbmdlRW5kKHN0YXJ0RGF0ZUZpZWxkTmFtZTogc3RyaW5nLCBtc2c/OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbXNnID8gJ21zZycgOiAnZGF0ZVJhbmdlJztcbiAgICBjb25zdCBlcnJvciA9IG1zZyA/IHsgbXNnIH0gOiB7IGRhdGVSYW5nZTogdHJ1ZSB9O1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgLy8gRm9ybSBncm91cCBub3QgY3JlYXRlZCB5ZXQ6IHNraXBcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBzdGFydENvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoc3RhcnREYXRlRmllbGROYW1lKTtcbiAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGZpbmQgYnJvdGhlciBjb250cm9sICcke3N0YXJ0RGF0ZUZpZWxkTmFtZX0nIGluIHRoZSBwYXJlbnQgZm9ybWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHN0YXJ0Q29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICAvLyBFcnJvciBpZiB2YWx1ZSA8PSBiZWZvcmVEYXRlXG4gICAgICBpZiAoaXNOb3ROaWwoZW5kRGF0ZSkgJiYgaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBlbmREYXRlLmlzU2FtZU9yQmVmb3JlKHN0YXJ0RGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgLy8gT0s6IGNsZWFyIGV4aXN0aW5nIGVycm9yc1xuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVSYW5nZVN0YXJ0KGVuZERhdGVGaWVsZE5hbWU6IHN0cmluZywgbXNnPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IG1zZyA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgZXJyb3IgPSBtc2cgPyB7IG1zZyB9IDogeyBkYXRlUmFuZ2U6IHRydWUgfTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vIEZvcm0gZ3JvdXAgbm90IGNyZWF0ZWQgeWV0OiBza2lwXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgZW5kRGF0ZUNvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZW5kRGF0ZUZpZWxkTmFtZSk7XG4gICAgICBpZiAoIWVuZERhdGVDb250cm9sKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGZpbmQgY29udHJvbCAnJHtlbmREYXRlRmllbGROYW1lfScgaW4gdGhlIHBhcmVudCBmb3JtYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGVuZERhdGVDb250cm9sLnZhbHVlKTtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgLy8gRXJyb3IgaWYgdmFsdWUgPD0gYmVmb3JlRGF0ZVxuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgc3RhcnREYXRlLmlzU2FtZU9yQWZ0ZXIoZW5kRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgLy8gT0s6IGNsZWFyIGV4aXN0aW5nIGVycm9yc1xuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNvcHlQYXJlbnRFcnJvcnMoZXJyb3JOYW1lcz86IHN0cmluZ1tdKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgLy8gU2tpcCBpZiBjb250cm9sIGFscmVhZHkgaGFzIHNvbWUgZXJyb3JzXG4gICAgICBpZiAoY29udHJvbC5lcnJvcnMpIHJldHVybiBudWxsO1xuICAgICAgLy8gU2tpcCBpZiBwYXJlbnQgZm9ybSBncm91cCBub3QgY3JlYXRlZCB5ZXRcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHJldHVybiBudWxsO1xuXG4gICAgICAvLyBGb3JtIGdyb3VwIG5vdCBjcmVhdGVkIHlldFxuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGVycm9ycyA9IGNvbnRyb2wucGFyZW50LmVycm9ycztcblxuICAgICAgLy8gTm8gZXJyb3JzLCBvciBjb3B5IGFsbCBlcnJvcnNcbiAgICAgIGlmICghZXJyb3JzIHx8IGlzRW1wdHlBcnJheShlcnJvck5hbWVzKSkgcmV0dXJuIGVycm9ycztcblxuICAgICAgLy8gQ29weSBvbmx5IGV4cGVjdGVkIGVycm9yc1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGVycm9ycykucmVkdWNlKChyZXMsIGtleSkgPT4ge1xuICAgICAgICBpZiAoZXJyb3JOYW1lcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgcmVzW2tleV0gPSBlcnJvcnNba2V5XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSwge30pO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgY2xlYXJFcnJvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGVycm9yQ29kZTogc3RyaW5nKSB7XG4gICAgaWYgKGNvbnRyb2wuaGFzRXJyb3IoZXJyb3JDb2RlKSkge1xuICAgICAgY29uc3QgZXJyb3JzID0gY29udHJvbC5lcnJvcnM7XG4gICAgICBpZiAoZXJyb3JzICYmIGVycm9yc1tlcnJvckNvZGVdKSB7XG4gICAgICAgIC8vIE9ubHkgb25lIGVycm9yOiByZXNldCBlcnJvcnNcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGVycm9ycykubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gT3RoZXIgZXJyb3JzIGV4aXN0czoganVzdCByZW1vdmUgdGhpcyBlcnJvclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXJyb3JzW2Vycm9yQ29kZV07XG4gICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEZvcm1Hcm91cFZhbGlkYXRvcnMge1xuICBzdGF0aWMgZGF0ZVJhbmdlKFxuICAgIHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsXG4gICAgZW5kRGF0ZUZpZWxkOiBzdHJpbmcsXG4gICAgb3B0cz86IHsgbXNnPzogc3RyaW5nOyBmaWVsZE9ubHk/OiBib29sZWFuOyBza2lwSWZOb1RpbWU/OiBib29sZWFuIH0gfCBzdHJpbmdcbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IG1zZyA9IHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJyA/IG9wdHMgOiBvcHRzPy5tc2c7XG4gICAgY29uc3QgZmllbGRPbmx5ID0gdHlwZW9mIG9wdHMgPT09ICdvYmplY3QnID8gb3B0cz8uZmllbGRPbmx5IDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHNraXBJZk5vVGltZSA9IHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyA/IG9wdHM/LnNraXBJZk5vVGltZSA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGVycm9yQ29kZSA9IGlzTm90TmlsT3JCbGFuayhtc2cpID8gJ21zZycgOiAnZGF0ZVJhbmdlJztcbiAgICBjb25zdCByYW5nZUVycm9yID0gbXNnID8geyBtc2cgfSA6IHsgZGF0ZVJhbmdlOiB0cnVlIH07XG4gICAgcmV0dXJuIChncm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGdyb3VwLmdldChzdGFydERhdGVGaWVsZCkudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRmllbGQgPSBncm91cC5nZXQoZW5kRGF0ZUZpZWxkKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmRGaWVsZC52YWx1ZSk7XG5cbiAgICAgIGNvbnN0IGhhc1N0YXJ0RGF0ZSA9IGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgKCFza2lwSWZOb1RpbWUgfHwgRGF0ZVV0aWxzLmlzTm9UaW1lKHN0YXJ0RGF0ZSkpO1xuICAgICAgY29uc3QgaGFzRW5kRGF0ZSA9IGlzTm90TmlsKGVuZERhdGUpICYmICghc2tpcElmTm9UaW1lIHx8IERhdGVVdGlscy5pc05vVGltZShlbmREYXRlKSk7XG4gICAgICBpZiAoaGFzU3RhcnREYXRlICYmIGhhc0VuZERhdGUgJiYgc3RhcnREYXRlLmlzQWZ0ZXIoZW5kRGF0ZSkpIHtcbiAgICAgICAgLy8gVXBkYXRlIGVuZCBmaWVsZFxuICAgICAgICBlbmRGaWVsZC5tYXJrQXNQZW5kaW5nKCk7XG4gICAgICAgIGVuZEZpZWxkLnNldEVycm9ycyh7XG4gICAgICAgICAgLi4uZW5kRmllbGQuZXJyb3JzLFxuICAgICAgICAgIC4uLnJhbmdlRXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yIChzaG91bGQgYmUgYXBwbGllZCB0byB0aGUgcGFyZW50IGZvcm0sIGJ5IGRlZmF1bHQpXG4gICAgICAgIHJldHVybiBmaWVsZE9ubHkgPyBudWxsIDogcmFuZ2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiByZW1vdmUgdGhlIGV4aXN0aW5nIG9uIHRoZSBlbmQgZmllbGRcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgZXJyb3JDb2RlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZU1heER1cmF0aW9uKFxuICAgIHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsXG4gICAgZW5kRGF0ZUZpZWxkOiBzdHJpbmcsXG4gICAgbWF4RHVyYXRpb246IG51bWJlcixcbiAgICBkdXJhdGlvblVuaXQ/OiBtb21lbnQudW5pdE9mVGltZS5EaWZmLFxuICAgIG9wdHM/OiB7IHNraXBJZk5vVGltZT86IGJvb2xlYW4gfVxuICApOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgbWF4RHVyYXRpb25FcnJvciA9IHsgZGF0ZU1heER1cmF0aW9uOiB0cnVlIH07XG4gICAgY29uc3Qgc2tpcElmTm9UaW1lID0gb3B0cz8uc2tpcElmTm9UaW1lO1xuXG4gICAgcmV0dXJuIChncm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGdyb3VwLmdldChzdGFydERhdGVGaWVsZCkudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRmllbGQgPSBncm91cC5nZXQoZW5kRGF0ZUZpZWxkKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmRGaWVsZC52YWx1ZSk7XG5cbiAgICAgIGNvbnN0IGhhc1N0YXJ0RGF0ZSA9IGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgKCFza2lwSWZOb1RpbWUgfHwgRGF0ZVV0aWxzLmlzTm9UaW1lKHN0YXJ0RGF0ZSkpO1xuICAgICAgY29uc3QgaGFzRW5kRGF0ZSA9IGlzTm90TmlsKGVuZERhdGUpICYmICghc2tpcElmTm9UaW1lIHx8IERhdGVVdGlscy5pc05vVGltZShlbmREYXRlKSk7XG5cbiAgICAgIGlmIChoYXNTdGFydERhdGUgJiYgaGFzRW5kRGF0ZSAmJiBNYXRoLmFicyhzdGFydERhdGUuZGlmZihlbmREYXRlLCBkdXJhdGlvblVuaXQpKSA+IG1heER1cmF0aW9uKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgZW5kRmllbGQubWFya0FzVG91Y2hlZCh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICBlbmRGaWVsZC5tYXJrQXNQZW5kaW5nKCk7XG4gICAgICAgIGVuZEZpZWxkLnNldEVycm9ycyh7XG4gICAgICAgICAgLi4uZW5kRmllbGQuZXJyb3JzLFxuICAgICAgICAgIC4uLm1heER1cmF0aW9uRXJyb3IsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yIChzaG91bGQgYmUgYXBwbHkgdG8gdGhlIHBhcmVudCBmb3JtKVxuICAgICAgICByZXR1cm4gbWF4RHVyYXRpb25FcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiByZW1vdmUgdGhlIGV4aXN0aW5nIG9uIHRoZSBlbmQgZmllbGRcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgJ2RhdGVNYXhEdXJhdGlvbicpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlTWluRHVyYXRpb24oc3RhcnREYXRlRmllbGQ6IHN0cmluZywgZW5kRGF0ZUZpZWxkOiBzdHJpbmcsIG1pbkR1cmF0aW9uOiBudW1iZXIsIGR1cmF0aW9uVW5pdD86IG1vbWVudC51bml0T2ZUaW1lLkRpZmYpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChncm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmRGaWVsZC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBpc05vdE5pbChlbmREYXRlKSAmJiBNYXRoLmFicyhzdGFydERhdGUuZGlmZihlbmREYXRlLCBkdXJhdGlvblVuaXQpKSA8IG1pbkR1cmF0aW9uKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgY29uc3QgZW5kRmllbGRFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBlbmRGaWVsZC5lcnJvcnMgfHwge307XG4gICAgICAgIGVuZEZpZWxkRXJyb3JzWydkYXRlTWluRHVyYXRpb24nXSA9IHRydWU7XG4gICAgICAgIGVuZEZpZWxkLnNldEVycm9ycyhlbmRGaWVsZEVycm9ycyk7XG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGx5IHRvIHRoZSBwYXJlbnQgZm9ybSlcbiAgICAgICAgcmV0dXJuIHsgZGF0ZU1pbkR1cmF0aW9uOiB0cnVlIH07XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBlbHNlIHtcbiAgICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGVuZEZpZWxkLCAnZGF0ZU1pbkR1cmF0aW9uJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkSWYoXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXG4gICAgYW5vdGhlckZpZWxkVG9DaGVjazogc3RyaW5nIHwgQWJzdHJhY3RDb250cm9sLFxuICAgIG9wdHM/OiB7XG4gICAgICBmaWVsZE9ubHk/OiBib29sZWFuO1xuICAgICAgaXNFbXB0eT86IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IGJvb2xlYW47XG4gICAgICBwcmVkaWNhdGU/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGlzRW1wdHkgPSBvcHRzPy5pc0VtcHR5IHx8ICgoY29udHJvbCkgPT4gaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKTtcbiAgICBjb25zdCBwcmVkaWNhdGUgPSBvcHRzPy5wcmVkaWNhdGUgfHwgKChjb250cm9sKSA9PiBpc05vdE5pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkpO1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBhbm90aGVyQ29udHJvbCA9IGFub3RoZXJGaWVsZFRvQ2hlY2sgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnRyb2wgPyBhbm90aGVyRmllbGRUb0NoZWNrIDogZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spO1xuICAgICAgaWYgKCFhbm90aGVyQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBmaWVsZCB0byBjaGVjayEnKTtcbiAgICAgIGlmIChpc0VtcHR5KGNvbnRyb2wpICYmIHByZWRpY2F0ZShhbm90aGVyQ29udHJvbCkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBvcHRzPy5maWVsZE9ubHkgPyBudWxsIDogZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkSWZUcnVlKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyB8IEFic3RyYWN0Q29udHJvbCxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGlzRW1wdHkgPSBvcHRzPy5pc0VtcHR5IHx8ICgoY29udHJvbCkgPT4gaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKTtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgYW5vdGhlckNvbnRyb2wgPSBhbm90aGVyRmllbGRUb0NoZWNrIGluc3RhbmNlb2YgQWJzdHJhY3RDb250cm9sID8gYW5vdGhlckZpZWxkVG9DaGVjayA6IGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKTtcbiAgICAgIGlmICghYW5vdGhlckNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgZmllbGQgdG8gY2hlY2shJyk7XG4gICAgICBpZiAoaXNFbXB0eShjb250cm9sKSAmJiB0b0Jvb2xlYW4oYW5vdGhlckNvbnRyb2wudmFsdWUsIGZhbHNlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIG9wdHM/LmZpZWxkT25seSA/IG51bGwgOiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZkVtcHR5KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGlzRW1wdHkgPSBvcHRzPy5pc0VtcHR5IHx8ICgoY29udHJvbCkgPT4gaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKTtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKGlzRW1wdHkoY29udHJvbCkgJiYgaXNOaWxPckJsYW5rKGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKS52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBvcHRzPy5maWVsZE9ubHkgPyBudWxsIDogZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHByb3BhZ2F0ZUlmRGlydHkoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkTmFtZVRvUHJvcGFnYXRlOiBzdHJpbmcsIHZhbHVlVG9Qcm9wYWdhdGU6IGFueSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBjb250cm9sVG9Qcm9wYWdhdGUgPSBncm91cC5nZXQoZmllbGROYW1lVG9Qcm9wYWdhdGUpO1xuICAgICAgaWYgKGNvbnRyb2wuZGlydHkgJiYgY29udHJvbFRvUHJvcGFnYXRlLnZhbHVlICE9PSB2YWx1ZVRvUHJvcGFnYXRlKSB7XG4gICAgICAgIGNvbnRyb2xUb1Byb3BhZ2F0ZS5zZXRWYWx1ZSh2YWx1ZVRvUHJvcGFnYXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FtZSBhcyBjb21wb3NlLCBidXQga2VlcCBvbmx5IHRoZSBmaXJzdCBlcnJvcnMgKGluc3RlYWQgb2YgdGhlIHVuaW9uKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yc1xuICAgKi9cbiAgZmlyc3QodmFsaWRhdG9yczogKFZhbGlkYXRvckZuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gKGNvbnRyb2wpID0+XG4gICAgICB2YWxpZGF0b3JzXG4gICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgIC5tYXAoKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yKGNvbnRyb2wpKVxuICAgICAgICAuZmluZChpc05vdE5pbCkgfHwgbnVsbDtcbiAgfVxufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMge1xuICAvKipcbiAgICogVmFsaWRhdGUgdW5pcXVlbmVzcyBvZiBhbiBlbnRpdHkgaW4gYSBGb3JtQXJyYXlcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKi9cbiAgc3RhdGljIHVuaXF1ZUVudGl0eShjb250cm9sTmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYXJyYXk6IFVudHlwZWRGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcbiAgICAgIGlmIChhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgLy8gZ2F0aGVyIGNvbnRyb2xzIGluIGFycmF5IHdpdGggdmFsaWQgZW50aXR5XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgVW50eXBlZEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCEhdmFsdWUgJiYgISF2YWx1ZS5pZCkgY29udHJvbHMucHVzaChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IG9jY3VycmVuY2VzIG9mIGVudGl0eSBieSBpZFxuICAgICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IGNvbnRyb2xzLnJlZHVjZSgoYWNjLCBjb250cm9sKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBjb250cm9sLnZhbHVlLmlkO1xuICAgICAgICAgIGlmIChhY2NbaWRdKSBhY2NbaWRdKys7XG4gICAgICAgICAgZWxzZSBhY2NbaWRdID0gMTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIC8vIGdldCBjb250cm9scyB3aXRoIHZhbHVlIG9jY3VycmVuY2VzID4gMVxuICAgICAgICBjb25zdCBlcnJvciA9IHsgdW5pcXVlRW50aXR5OiB0cnVlIH07XG4gICAgICAgIGxldCByZXR1cm5FcnJvciA9IGZhbHNlO1xuICAgICAgICBjb250cm9sc1xuICAgICAgICAgIC5maWx0ZXIoKGNvbnRyb2wpID0+IG9jY3VycmVuY2VzW2NvbnRyb2wudmFsdWUuaWRdID4gMSlcbiAgICAgICAgICAuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLmVycm9yIH07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm5FcnJvciA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXR1cm5FcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4gU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICd1bmlxdWVFbnRpdHknKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkQXJyYXlNaW5MZW5ndGgobWluTGVuZ3RoPzogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIG1pbkxlbmd0aCA9IG1pbkxlbmd0aCB8fCAxO1xuICAgIHJldHVybiAoYXJyYXk6IFVudHlwZWRGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWFycmF5IHx8IGFycmF5Lmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhcnJheU1heExlbmd0aChtYXhMZW5ndGg/OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgbWF4TGVuZ3RoID0gbWF4TGVuZ3RoIHx8IDE7XG4gICAgcmV0dXJuIChhcnJheTogVW50eXBlZEZvcm1BcnJheSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsgbWF4TGVuZ3RoOiBtYXhMZW5ndGggfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHN1bSBvZiBjb250cm9sIHZhbHVlcyBpbiBhbiBGb3JtQXJyYXkgbm90IG92ZXJmbG93IHRoZSBtYXggdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRTdW1NYXhWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCBtYXg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGFycmF5OiBVbnR5cGVkRm9ybUFycmF5KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdID0gW107XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgVW50eXBlZEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSAmJiBpc05vdE5pbE9yTmFOKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpKSB7XG4gICAgICAgICAgICBjb250cm9scy5wdXNoKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbHMucmVkdWNlKChzdW0sIGNvbnRyb2wpID0+IHN1bSArIGNvbnRyb2wudmFsdWUsIDApID4gbWF4KSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSB7IHN1bU1heFZhbHVlOiB0cnVlIH07XG4gICAgICAgICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLmVycm9yIH07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3N1bU1heFZhbHVlJykpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBPYnNlcnZhYmxlVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPjtcbmV4cG9ydCB0eXBlIFByb21pc2VWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+O1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEFzeW5jVmFsaWRhdG9ycyB7XG4gIHByaXZhdGUgc3RhdGljIERFQk9VTkNFX1RJTUVfVkFMSURBVE9SX0lEID0gMDtcblxuICAvKipcbiAgICogQWRkIGEgZGVib3VuY2UgdGltZSB0byBhIHZhbGlkYXRvci5cbiAgICpcbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuXG4gICAqIEBwYXJhbSBvcHRzIFVzZSBvcHRzLnN0b3BTdWJqZWN0IHRvIHN0b3AgdGhlIHZhbGlkYXRvciwgYmVmb3JlIGVuZFxuICAgKi9cbiAgc3RhdGljIGRlYm91bmNlVGltZShcbiAgICB2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgIG9wdHM/OiB7XG4gICAgICBkaXNwb3NlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgICAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xuICAgICAgbWFya0ZvckNoZWNrPzogKCkgPT4gdm9pZDtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IE9ic2VydmFibGVWYWxpZGF0b3JGbiB7XG4gICAgLy8gREVCVUcgb25seVxuICAgIGNvbnN0IGRlYnVnID0gb3B0cz8uZGVidWcgfHwgZmFsc2U7XG4gICAgY29uc3QgbG9nUHJlZml4ID0gZGVidWcgJiYgYFtkZWJvdW5jZVRpbWUtdmFsaWRhdG9yXSAjJHtTaGFyZWRBc3luY1ZhbGlkYXRvcnMuREVCT1VOQ0VfVElNRV9WQUxJREFUT1JfSUQrK30gLSBgO1xuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcblxuICAgIC8vIERFQlVHXG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArIGBOZXcgdmFsaWRhdG9yIHdpdGggYSBkZWJvdW5jZVRpbWUgYXQgJHtkZWJvdW5jZVRpbWV9bXNgKTtcblxuICAgIGNvbnN0ICRkaXNwb3NlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY29uc3QgZGlzcG9zZUV2ZW50JCA9IG9wdHM/LmRpc3Bvc2UgPyBtZXJnZSgkZGlzcG9zZVN1YmplY3QsIG9wdHM/LmRpc3Bvc2UpIDogJGRpc3Bvc2VTdWJqZWN0O1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAoZGVidWcgJiYgb3B0cz8uZGlzcG9zZSkge1xuICAgICAgb3B0cz8uZGlzcG9zZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ1N0b3BwaW5nJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHtcbiAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnRm9ybSBhc2sgdmFsaWRhdGlvbi4uLicpO1xuXG4gICAgICAvLyBTdG9wIHByZXZpb3VzIG9ic2VydmFibGVzXG4gICAgICAkZGlzcG9zZVN1YmplY3QubmV4dCgpO1xuICAgICAgbGV0IG5vdzogbnVtYmVyO1xuXG4gICAgICByZXR1cm4gb2YobnVsbCkucGlwZShcbiAgICAgICAgLy8gQWRkIGEgZGVsYXkgYmVmb3JlIGV4ZWN1dGlvblxuICAgICAgICBkZWxheShkZWJvdW5jZVRpbWUpLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICB0YXAoKF8pID0+IHtcbiAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ0V4ZWN1dGluZy4uLicpO1xuICAgICAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSB2YWxpZGF0b3JcbiAgICAgICAgICBjb25zdCByZXMgPSB2YWxpZGF0b3JGbihjb250cm9sKTtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmV0dXJuIGFuIE9ic2VydmFibGVcbiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHJldHVybiByZXM7XG4gICAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBmcm9tKHJlcyk7XG4gICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICB0YXAoKHJlcykgPT4gZGVidWcgJiYgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyBgRmluaXNoZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zICgke3JlcyA/ICd3aXRoIGVycm9ycycgOiAnbm8gZXJyb3InfSlgLCByZXMpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZGVib3VuY2VUaW1lLXZhbGlkYXRvcl0gRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHZhbGlkYXRvci4gU3RvcHBpbmcgam9iJywgZXJyb3IpO1xuICAgICAgICAgICRkaXNwb3NlU3ViamVjdC5uZXh0KCk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBSZWZyZXNoIFVJLCBhZnRlciBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uXG4gICAgICAgIHRhcCgoKSA9PiBvcHRzPy5tYXJrRm9yQ2hlY2sgJiYgb3B0cz8ubWFya0ZvckNoZWNrKCkpLFxuICAgICAgICAvLyBNYWtlIHN1cmUgdG8gc3RvcCwgYmVjYXVzZSBvZiB0aGUgc3dpdGNoTWFwXG4gICAgICAgIHRha2VVbnRpbChkaXNwb3NlRXZlbnQkKVxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhc3luYyB2YWxpZGF0b3IsIHRoYXQgY2FuIGJlIGRpc3Bvc2VkIGJ5IHRoZSByZXR1cm5lZCBzdWJzY3JpcHRpb25cbiAgICpcbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuIHRoZSB2YWxpZGF0b3Igb3Igam9iIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHN0YXRpYyByZWdpc3RlckFzeW5jVmFsaWRhdG9yKFxuICAgIGZvcm06IEFic3RyYWN0Q29udHJvbCxcbiAgICB2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gICAgICBtYXJrRm9yQ2hlY2s/OiAoKSA9PiB2b2lkO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH1cbiAgKTogU3Vic2NyaXB0aW9uIHtcbiAgICBpZiAoZm9ybS5hc3luY1ZhbGlkYXRvcikgdGhyb3cgRXJyb3IoJ0Zvcm0gYWxyZWFkeSBoYXZlIGFuIGFzeW5jIHZhbGlkYXRvci4gQ2Fubm90IGNvbmZpZ3VyZSBqb2InKTtcblxuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcbiAgICBjb25zdCAkZGlzcG9zZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvckZuID0gU2hhcmVkQXN5bmNWYWxpZGF0b3JzLmRlYm91bmNlVGltZSh2YWxpZGF0b3JGbiwgeyAuLi5vcHRzLCBkZWJvdW5jZVRpbWUsIGRpc3Bvc2U6ICRkaXNwb3NlIH0pO1xuICAgIGZvcm0uc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yRm4pO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLy8gV2hlbiB1bnN1YnNjcmliaW5nLCByZW1vdmUgYXN5bmMgdmFsaWRhdG9yXG4gICAgc3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICAvLyBDbGVhciBhZGRlZCB2YWxpZGF0b3IuIE11c3QgYmUgZG9uZSBOT1cgKHdpdGhvdXQgZGVsYXkpIGJlY2F1c2UgZ2VuZXJhbGx5IGEgbmV3IEpvYiBpcyBnaXZlbiBqdXN0IGFmdGVyXG4gICAgICBmb3JtLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XG5cbiAgICAgIC8vIFN0b3AgdGhlIGpvYiwgd2l0aCBhIGRlbGF5IHRvIGxldCB0aGUgbGFzdCBleGVjdXRpb24gZmluaXNoZWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAkZGlzcG9zZS5uZXh0KCk7XG4gICAgICAgICRkaXNwb3NlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBkZWJvdW5jZVRpbWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxufVxuIl19
|
|
626
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEdBT2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFFBQVEsRUFBc0IsTUFBTSxRQUFRLENBQUM7QUFDdEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoSSxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0YsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RSxXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixNQUFNLENBQUMsb0JBQW9CLEdBQUc7UUFDcEMsUUFBUSxFQUFFLG1CQUFtQjtRQUM3QixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCO1FBQ3ZDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUI7UUFDN0MsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQjtLQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUFtQjtRQUNoRCxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7WUFBRSxPQUFPLElBQUksQ0FB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YWN0Q29udHJvbCxcbiAgQXN5bmNWYWxpZGF0b3JGbixcbiAgVW50eXBlZEZvcm1BcnJheSxcbiAgVW50eXBlZEZvcm1Db250cm9sLFxuICBVbnR5cGVkRm9ybUdyb3VwLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JGbixcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCwgdW5pdE9mVGltZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBQVUJLRVlfUkVHRVhQIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzRW1wdHlBcnJheSwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgaXNOb3ROaWxPck5hTiwgdG9Cb29sZWFuLCB0b051bWJlciB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBEYXRlVXRpbHMsIGZyb21EYXRlSVNPU3RyaW5nIH0gZnJvbSAnLi4vZGF0ZXMnO1xuaW1wb3J0IHsgZGVsYXksIGZyb20sIGlzT2JzZXJ2YWJsZSwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpcnN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZFZhbGlkYXRvcnMge1xuICBwcml2YXRlIHN0YXRpYyBfRE9VQkxFX1JFR0VYUF9DQUNIRSA9IHtcbiAgICBOT19MSU1JVDogL14tP1xcZCsoWy4sXVxcZCopPyQvLFxuICAgIDE6IC9eLT9cXGQrKFsuLF1cXGQpPyQvLCAvLyAxIGRlY2ltYWwgbWF4XG4gICAgMjogL14tP1xcZCsoWy4sXVxcZHsxLDJ9KT8kLywgLy8gMiBkZWNpbWFscyBtYXhcbiAgICAzOiAvXi0/XFxkKyhbLixdXFxkezEsM30pPyQvLCAvLyAzIGRlY2ltYWxzIG1heFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIGdldERvdWJsZVJlZ2V4cChtYXhEZWNpbWFsczogbnVtYmVyKTogUmVnRXhwIHtcbiAgICBpZiAoaXNOaWwobWF4RGVjaW1hbHMpKSByZXR1cm4gdGhpcy5fRE9VQkxFX1JFR0VYUF9DQUNIRS5OT19MSU1JVDtcblxuICAgIGlmIChtYXhEZWNpbWFscyA8IDApIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtYXhEZWNpbWFscyB2YWx1ZTogJHttYXhEZWNpbWFsc31gKTtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLl9ET1VCTEVfUkVHRVhQX0NBQ0hFW21heERlY2ltYWxzXTtcbiAgICBpZiAocmVnZXhwKSByZXR1cm4gcmVnZXhwO1xuXG4gICAgLy8gTmV3OiBhZGQgdG8gY2FjaGVcbiAgICB0aGlzLl9ET1VCTEVfUkVHRVhQX0NBQ0hFW21heERlY2ltYWxzXSA9IG5ldyBSZWdFeHAoYF4tP1xcXFxkKyhbLixdXFxcXGR7MSwke21heERlY2ltYWxzfX0pPyRgKTtcbiAgICByZXR1cm4gdGhpcy5fRE9VQkxFX1JFR0VYUF9DQUNIRVttYXhEZWNpbWFsc107XG4gIH1cblxuICBzdGF0aWMgZXF1YWxzKG90aGVyQ29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IG90aGVyQ29udHJvbCA9IGMucGFyZW50Py5nZXQob3RoZXJDb250cm9sTmFtZSk7XG4gICAgICBpZiAob3RoZXJDb250cm9sICYmIGMudmFsdWUgIT09IG90aGVyQ29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVxdWFsczogdHJ1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVhZG9ubHkgSTE4Tl9FUlJPUl9LRVlTID0ge1xuICAgIHJlcXVpcmVkOiAnRVJST1IuRklFTERfUkVRVUlSRUQnLFxuICAgIG1pbjogJ0VSUk9SLkZJRUxEX01JTicsXG4gICAgbWF4OiAnRVJST1IuRklFTERfTUFYJyxcbiAgICBtaW5sZW5ndGg6ICdFUlJPUi5GSUVMRF9NSU5fTEVOR1RIJyxcbiAgICBtYXhsZW5ndGg6ICdFUlJPUi5GSUVMRF9NQVhfTEVOR1RIJyxcbiAgICBwdWJrZXk6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZJyxcbiAgICB2YWxpZERhdGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURScsXG4gICAgZGF0ZUlzQWZ0ZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9BRlRFUicsXG4gICAgZGF0ZUlzQmVmb3JlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQkVGT1JFJyxcbiAgICBkYXRlUmFuZ2U6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9SQU5HRScsXG4gICAgZGF0ZU1pbkR1cmF0aW9uOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUlOX0RVUkFUSU9OJyxcbiAgICBkYXRlTWF4RHVyYXRpb246ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9NQVhfRFVSQVRJT04nLFxuICAgIG1heERlY2ltYWxzOiAnRVJST1IuRklFTERfTUFYSU1VTV9ERUNJTUFMUycsXG4gICAgZGVjaW1hbDogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9ERUNJTUFMJyxcbiAgICBpbnRlZ2VyOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0lOVEVHRVInLFxuICAgIHByZWNpc2lvbjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9QUkVDSVNJT04nLFxuICAgIGVtYWlsOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0VNQUlMJyxcbiAgICBsYXRpdHVkZTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9MQVRJVFVERScsXG4gICAgbG9uZ2l0dWRlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0xPTkdJVFVERScsXG4gICAgcGF0dGVybjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9QQVRURVJOJyxcbiAgICB1bmlxdWU6ICdFUlJPUi5GSUVMRF9OT1RfVU5JUVVFJyxcbiAgICBlbnRpdHk6ICdFUlJPUi5GSUVMRF9JTlZBTElEJyxcbiAgICBpbnZhbGlkOiAnRVJST1IuRklFTERfSU5WQUxJRCcsXG4gICAgaW5jb25zaXN0ZW50OiAnRVJST1IuRklFTERfSU5DT05TSVNURU5UJyxcbiAgICBlcXVhbHM6ICdFUlJPUi5GSUVMRF9OT1RfRVFVQUxTJyxcbiAgfTtcblxuICBzdGF0aWMgbGF0aXR1ZGUoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmICh2YWx1ZSA8IC05MCB8fCB2YWx1ZSA+IDkwKSkge1xuICAgICAgcmV0dXJuIHsgbGF0aXR1ZGU6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgbG9uZ2l0dWRlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiAodmFsdWUgPCAtMTgwIHx8IHZhbHVlID4gMTgwKSkge1xuICAgICAgcmV0dXJuIHsgbG9uZ2l0dWRlOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIG9iamVjdChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4geyBvYmplY3Q6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZW50aXR5KGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IGlzTmlsKHZhbHVlLmlkKSkpIHtcbiAgICAgIHJldHVybiB7IGVudGl0eTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBlbnRpdGllcyhjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiAoIUFycmF5LmlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmV2ZXJ5KChlKSA9PiBpc05pbChlPy5pZCkpKSkge1xuICAgICAgcmV0dXJuIHsgZW50aXR5OiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGVtcHR5KGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4geyBlbXB0eTogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBwdWJrZXkoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycgfHwgIVBVQktFWV9SRUdFWFAudGVzdCh2YWx1ZSkpKSB7XG4gICAgICByZXR1cm4geyBwdWJrZXk6IHRydWUgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgaW50ZWdlcihjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJzZUZsb2F0KGNvbnRyb2wudmFsdWUpO1xuICAgIGlmIChpc05hTih2YWx1ZSkgfHwgKHZhbHVlIHwgMCkgIT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4geyBpbnRlZ2VyOiB0cnVlIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGRlY2ltYWwob3B0cz86IHsgbWF4RGVjaW1hbHM/OiBudW1iZXIgfSk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLmdldERvdWJsZVJlZ2V4cChvcHRzPy5tYXhEZWNpbWFscyk7XG4gICAgcmV0dXJuIChjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJXQVJOOiBHZXR0aW5nIGEgTmFOIHZhbHVlIChkZWNpbWFsIHdhcyBleHBlY3RlZCkgIVwiKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIHZhbHVlICE9PSAnJyAmJiAhcmVnZXhwLnRlc3QodmFsdWUgYXMgc3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gaXNOb3ROaWwob3B0cz8ubWF4RGVjaW1hbHMpID8geyBtYXhEZWNpbWFsczogeyBtYXhEZWNpbWFsczogb3B0cy5tYXhEZWNpbWFscyB9IH0gOiB7IGRlY2ltYWw6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgcHJlY2lzaW9uLiBlLmcuIGlmIHByZWNpc2lvbj0wLjUgdGhlbiB2YWx1ZT0wLjYgaXMgaW52YWxpZCwgYnV0IDEuNSBpcyB2YWxpZFxuICAgKlxuICAgKiBAcGFyYW0gcHJlY2lzaW9uXG4gICAqL1xuICBzdGF0aWMgcHJlY2lzaW9uKHByZWNpc2lvbjogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIGlmIChpc05pbChwcmVjaXNpb24pKSB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIGEgbm90IG5pbCBwcmVjaXNpb24nKTtcblxuICAgIC8vIFdBUk46IHdlIHNob3VsZCBkZWZpbmUgYSBtdWx0aXBsaWVyLCBiZWNhdXNlIG1vZHVsbyBpbiBqYXZhc2NyaXB0IHdpbGwgb25seSB3b3JrIG9uIGludGVnZXJcbiAgICAvLyAoZS5nLiBcIjcgJSAwLjFcIiBpbiBqYXZhc2NyaXB0IHdpbGwgTk9UIHJldHVybiB6ZXJvIChidXQgMC4wOTk5OTk5OTk5OTk5OTk2MilcbiAgICBjb25zdCBwcmVjaXNpb25OYkRlY2ltYWxzID0gKHByZWNpc2lvbi50b1N0cmluZygpLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aDtcbiAgICBjb25zdCBtdWx0aXBsaWVyID0gTWF0aC5wb3coMTAsIHByZWNpc2lvbk5iRGVjaW1hbHMpO1xuICAgIGNvbnN0IG11bHRpcGxpZWRQcmVjaXNpb24gPSBNYXRoLnJvdW5kKG11bHRpcGxpZXIgKiBwcmVjaXNpb24pO1xuXG4gICAgLy8gVGhlIHZhbGlkYXRvciBmdW5jdGlvblxuICAgIHJldHVybiAoY29udHJvbDogVW50eXBlZEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayh2YWx1ZSkgfHwgTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIFdBUk46IENvbnZlcnQgdmFsdWUgaW50byBpbnRlZ2VyLCBiZWZvcmUgYXBwbHlpbmcgbW9kdWxvIG9wZXJhdG9yXG4gICAgICBjb25zdCBtb2QgPSBNYXRoLnJvdW5kKCt2YWx1ZSAqIG11bHRpcGxpZXIpICUgbXVsdGlwbGllZFByZWNpc2lvbjtcbiAgICAgIGlmIChtb2QgIT09IDApIHtcbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKGBXQVJOIEdldHRpbmcgYSAke3ZhbHVlfSB3aXRoIGFuIGludmFsaWQgcHJlY2lzaW9uIChleHBlY3RlZCBwcmVjaXNpb24gaXM6ICR7cHJlY2lzaW9ufSlgKTtcbiAgICAgICAgcmV0dXJuIHsgcHJlY2lzaW9uOiB7IHByZWNpc2lvbiB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHZhbGlkRGF0ZVRpbWUocmVxdWlyZWRUaW1lID0gdHJ1ZSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGNvbnN0IGRhdGUgPSAhdmFsdWUgfHwgaXNNb21lbnQodmFsdWUpID8gdmFsdWUgOiBmcm9tRGF0ZUlTT1N0cmluZyh2YWx1ZSk7XG4gICAgICBpZiAoZGF0ZSAmJiAoIWRhdGUuaXNWYWxpZCgpIHx8IGRhdGUueWVhcigpIDwgMTkwMCB8fCAocmVxdWlyZWRUaW1lICYmIERhdGVVdGlscy5pc05vVGltZShkYXRlKSkpKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkRGF0ZTogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyB2YWxpZERhdGUgPSBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZVRpbWUodHJ1ZSk7XG4gIHN0YXRpYyB2YWxpZERhdGVBbGxvd05vVGltZSA9IFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlVGltZShmYWxzZSk7XG5cbiAgc3RhdGljIGRhdGVJc0FmdGVyKHByZXZpb3VzVmFsdWU6IE1vbWVudCwgZXJyb3JQYXJhbTogc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIGlzTm90TmlsKHByZXZpb3VzVmFsdWUpICYmIHZhbHVlLmlzU2FtZU9yQmVmb3JlKHByZXZpb3VzVmFsdWUsIGdyYW51bGFyaXR5KSkge1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yXG4gICAgICAgIHJldHVybiB7IGRhdGVJc0FmdGVyOiB7IG1pbkRhdGU6IGVycm9yUGFyYW0gfSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlSXNCZWZvcmUobWF4VmFsdWU6IE1vbWVudCwgZXJyb3JQYXJhbTogc3RyaW5nLCBncmFudWxhcml0eT86IHVuaXRPZlRpbWUuU3RhcnRPZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmIGlzTm90TmlsKG1heFZhbHVlKSAmJiB2YWx1ZS5pc1NhbWVPckFmdGVyKG1heFZhbHVlLCBncmFudWxhcml0eSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvclxuICAgICAgICByZXR1cm4geyBkYXRlSXNCZWZvcmU6IHsgbWF4RGF0ZTogZXJyb3JQYXJhbSB9IH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVSYW5nZUVuZChzdGFydERhdGVGaWVsZE5hbWU6IHN0cmluZywgbXNnPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IG1zZyA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgZXJyb3IgPSBtc2cgPyB7IG1zZyB9IDogeyBkYXRlUmFuZ2U6IHRydWUgfTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vIEZvcm0gZ3JvdXAgbm90IGNyZWF0ZWQgeWV0OiBza2lwXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3Qgc3RhcnRDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KHN0YXJ0RGF0ZUZpZWxkTmFtZSk7XG4gICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmaW5kIGJyb3RoZXIgY29udHJvbCAnJHtzdGFydERhdGVGaWVsZE5hbWV9JyBpbiB0aGUgcGFyZW50IGZvcm1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzdGFydENvbnRyb2wudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgLy8gRXJyb3IgaWYgdmFsdWUgPD0gYmVmb3JlRGF0ZVxuICAgICAgaWYgKGlzTm90TmlsKGVuZERhdGUpICYmIGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgZW5kRGF0ZS5pc1NhbWVPckJlZm9yZShzdGFydERhdGUpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiBjbGVhciBleGlzdGluZyBlcnJvcnNcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlUmFuZ2VTdGFydChlbmREYXRlRmllbGROYW1lOiBzdHJpbmcsIG1zZz86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBtc2cgPyAnbXNnJyA6ICdkYXRlUmFuZ2UnO1xuICAgIGNvbnN0IGVycm9yID0gbXNnID8geyBtc2cgfSA6IHsgZGF0ZVJhbmdlOiB0cnVlIH07XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICAvLyBGb3JtIGdyb3VwIG5vdCBjcmVhdGVkIHlldDogc2tpcFxuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIGNvbnN0IGVuZERhdGVDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGVuZERhdGVGaWVsZE5hbWUpO1xuICAgICAgaWYgKCFlbmREYXRlQ29udHJvbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmaW5kIGNvbnRyb2wgJyR7ZW5kRGF0ZUZpZWxkTmFtZX0nIGluIHRoZSBwYXJlbnQgZm9ybWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmREYXRlQ29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIC8vIEVycm9yIGlmIHZhbHVlIDw9IGJlZm9yZURhdGVcbiAgICAgIGlmIChpc05vdE5pbChzdGFydERhdGUpICYmIGlzTm90TmlsKGVuZERhdGUpICYmIHN0YXJ0RGF0ZS5pc1NhbWVPckFmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiBjbGVhciBleGlzdGluZyBlcnJvcnNcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5UGFyZW50RXJyb3JzKGVycm9yTmFtZXM/OiBzdHJpbmdbXSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vIFNraXAgaWYgY29udHJvbCBhbHJlYWR5IGhhcyBzb21lIGVycm9yc1xuICAgICAgaWYgKGNvbnRyb2wuZXJyb3JzKSByZXR1cm4gbnVsbDtcbiAgICAgIC8vIFNraXAgaWYgcGFyZW50IGZvcm0gZ3JvdXAgbm90IGNyZWF0ZWQgeWV0XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gRm9ybSBncm91cCBub3QgY3JlYXRlZCB5ZXRcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLnBhcmVudC5lcnJvcnM7XG5cbiAgICAgIC8vIE5vIGVycm9ycywgb3IgY29weSBhbGwgZXJyb3JzXG4gICAgICBpZiAoIWVycm9ycyB8fCBpc0VtcHR5QXJyYXkoZXJyb3JOYW1lcykpIHJldHVybiBlcnJvcnM7XG5cbiAgICAgIC8vIENvcHkgb25seSBleHBlY3RlZCBlcnJvcnNcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGVycm9yTmFtZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHJlc1trZXldID0gZXJyb3JzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sIHt9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNsZWFyRXJyb3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlcnJvckNvZGU6IHN0cmluZykge1xuICAgIGlmIChjb250cm9sLmhhc0Vycm9yKGVycm9yQ29kZSkpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnNbZXJyb3JDb2RlXSkge1xuICAgICAgICAvLyBPbmx5IG9uZSBlcnJvcjogcmVzZXQgZXJyb3JzXG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcnMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIGVycm9ycyBleGlzdHM6IGp1c3QgcmVtb3ZlIHRoaXMgZXJyb3JcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGVycm9yc1tlcnJvckNvZGVdO1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBTaGFyZWRGb3JtR3JvdXBWYWxpZGF0b3JzIHtcbiAgc3RhdGljIGRhdGVSYW5nZShcbiAgICBzdGFydERhdGVGaWVsZDogc3RyaW5nLFxuICAgIGVuZERhdGVGaWVsZDogc3RyaW5nLFxuICAgIG9wdHM/OiB7IG1zZz86IHN0cmluZzsgZmllbGRPbmx5PzogYm9vbGVhbjsgc2tpcElmTm9UaW1lPzogYm9vbGVhbiB9IHwgc3RyaW5nXG4gICk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBtc2cgPSB0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycgPyBvcHRzIDogb3B0cz8ubXNnO1xuICAgIGNvbnN0IGZpZWxkT25seSA9IHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyA/IG9wdHM/LmZpZWxkT25seSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBza2lwSWZOb1RpbWUgPSB0eXBlb2Ygb3B0cyA9PT0gJ29iamVjdCcgPyBvcHRzPy5za2lwSWZOb1RpbWUgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlcnJvckNvZGUgPSBpc05vdE5pbE9yQmxhbmsobXNnKSA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgcmFuZ2VFcnJvciA9IG1zZyA/IHsgbXNnIH0gOiB7IGRhdGVSYW5nZTogdHJ1ZSB9O1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuXG4gICAgICBjb25zdCBoYXNTdGFydERhdGUgPSBpc05vdE5pbChzdGFydERhdGUpICYmICghc2tpcElmTm9UaW1lIHx8IERhdGVVdGlscy5pc05vVGltZShzdGFydERhdGUpKTtcbiAgICAgIGNvbnN0IGhhc0VuZERhdGUgPSBpc05vdE5pbChlbmREYXRlKSAmJiAoIXNraXBJZk5vVGltZSB8fCBEYXRlVXRpbHMuaXNOb1RpbWUoZW5kRGF0ZSkpO1xuICAgICAgaWYgKGhhc1N0YXJ0RGF0ZSAmJiBoYXNFbmREYXRlICYmIHN0YXJ0RGF0ZS5pc0FmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5yYW5nZUVycm9yLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIHBhcmVudCBmb3JtLCBieSBkZWZhdWx0KVxuICAgICAgICByZXR1cm4gZmllbGRPbmx5ID8gbnVsbCA6IHJhbmdlRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVNYXhEdXJhdGlvbihcbiAgICBzdGFydERhdGVGaWVsZDogc3RyaW5nLFxuICAgIGVuZERhdGVGaWVsZDogc3RyaW5nLFxuICAgIG1heER1cmF0aW9uOiBudW1iZXIsXG4gICAgZHVyYXRpb25Vbml0PzogbW9tZW50LnVuaXRPZlRpbWUuRGlmZixcbiAgICBvcHRzPzogeyBza2lwSWZOb1RpbWU/OiBib29sZWFuIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IG1heER1cmF0aW9uRXJyb3IgPSB7IGRhdGVNYXhEdXJhdGlvbjogdHJ1ZSB9O1xuICAgIGNvbnN0IHNraXBJZk5vVGltZSA9IG9wdHM/LnNraXBJZk5vVGltZTtcblxuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuXG4gICAgICBjb25zdCBoYXNTdGFydERhdGUgPSBpc05vdE5pbChzdGFydERhdGUpICYmICghc2tpcElmTm9UaW1lIHx8IERhdGVVdGlscy5pc05vVGltZShzdGFydERhdGUpKTtcbiAgICAgIGNvbnN0IGhhc0VuZERhdGUgPSBpc05vdE5pbChlbmREYXRlKSAmJiAoIXNraXBJZk5vVGltZSB8fCBEYXRlVXRpbHMuaXNOb1RpbWUoZW5kRGF0ZSkpO1xuXG4gICAgICBpZiAoaGFzU3RhcnREYXRlICYmIGhhc0VuZERhdGUgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPiBtYXhEdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5tYXhEdXJhdGlvbkVycm9yLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGx5IHRvIHRoZSBwYXJlbnQgZm9ybSlcbiAgICAgICAgcmV0dXJuIG1heER1cmF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsICdkYXRlTWF4RHVyYXRpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZU1pbkR1cmF0aW9uKHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsIGVuZERhdGVGaWVsZDogc3RyaW5nLCBtaW5EdXJhdGlvbjogbnVtYmVyLCBkdXJhdGlvblVuaXQ/OiBtb21lbnQudW5pdE9mVGltZS5EaWZmKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBlbmRGaWVsZCA9IGdyb3VwLmdldChlbmREYXRlRmllbGQpO1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZ3JvdXAuZ2V0KHN0YXJ0RGF0ZUZpZWxkKS52YWx1ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPCBtaW5EdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGNvbnN0IGVuZEZpZWxkRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gZW5kRmllbGQuZXJyb3JzIHx8IHt9O1xuICAgICAgICBlbmRGaWVsZEVycm9yc1snZGF0ZU1pbkR1cmF0aW9uJ10gPSB0cnVlO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoZW5kRmllbGRFcnJvcnMpO1xuICAgICAgICBlbmRGaWVsZC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgKHNob3VsZCBiZSBhcHBseSB0byB0aGUgcGFyZW50IGZvcm0pXG4gICAgICAgIHJldHVybiB7IGRhdGVNaW5EdXJhdGlvbjogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgLy8gT0s6IHJlbW92ZSB0aGUgZXhpc3Rpbmcgb24gdGhlIGVuZCBmaWVsZFxuICAgICAgZWxzZSB7XG4gICAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgJ2RhdGVNaW5EdXJhdGlvbicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZElmKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyB8IEFic3RyYWN0Q29udHJvbCxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgICAgcHJlZGljYXRlPzogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gYm9vbGVhbjtcbiAgICB9XG4gICk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBpc0VtcHR5ID0gb3B0cz8uaXNFbXB0eSB8fCAoKGNvbnRyb2wpID0+IGlzTmlsT3JCbGFuayhjb250cm9sPy52YWx1ZSkpO1xuICAgIGNvbnN0IHByZWRpY2F0ZSA9IG9wdHM/LnByZWRpY2F0ZSB8fCAoKGNvbnRyb2wpID0+IGlzTm90TmlsT3JCbGFuayhjb250cm9sPy52YWx1ZSkpO1xuICAgIHJldHVybiAoZ3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICAvLyBXb3JrYXJvdW5kIC0gV2hlbiBjb250cm9sIGlzIG1pc3NpbmcgKGNhbiBvY2N1ciB3aGVuIGZvcm0gaGFzIGJlZW4gdXBncmFkZSwgYnV0IHRoZSB2YWxpZGF0b3IgaXMgc3RpbGwgb24gdGhlIGZvcm0gZ3JvdXApXG4gICAgICBpZiAoIWNvbnRyb2wpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBVbmFibGUgdG8gZmluZCBjb250cm9sICcke2ZpZWxkTmFtZX0nIHVzZWQgYnkgU2hhcmVGb3JtR3JvdXBWYWxpZGF0b3JzLnJlcXVpcmVkSWYgdmFsaWRhdG9yIWApXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbm90aGVyQ29udHJvbCA9IGFub3RoZXJGaWVsZFRvQ2hlY2sgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnRyb2wgPyBhbm90aGVyRmllbGRUb0NoZWNrIDogZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spO1xuICAgICAgaWYgKCFhbm90aGVyQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZmluZCBjb250cm9sICR7dHlwZW9mIGFub3RoZXJGaWVsZFRvQ2hlY2sgPT09ICdzdHJpbmcnID8gYW5vdGhlckZpZWxkVG9DaGVjayAgKyAnICcgOiAnJ311c2VkIGJ5IFNoYXJlRm9ybUdyb3VwVmFsaWRhdG9ycy5yZXF1aXJlZElmIHZhbGlkYXRvciFgKTtcbiAgICAgIGlmIChpc0VtcHR5KGNvbnRyb2wpICYmIHByZWRpY2F0ZShhbm90aGVyQ29udHJvbCkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBvcHRzPy5maWVsZE9ubHkgPyBudWxsIDogZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkSWZUcnVlKFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyB8IEFic3RyYWN0Q29udHJvbCxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGlzRW1wdHkgPSBvcHRzPy5pc0VtcHR5IHx8ICgoY29udHJvbCkgPT4gaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKTtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgYW5vdGhlckNvbnRyb2wgPSBhbm90aGVyRmllbGRUb0NoZWNrIGluc3RhbmNlb2YgQWJzdHJhY3RDb250cm9sID8gYW5vdGhlckZpZWxkVG9DaGVjayA6IGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKTtcbiAgICAgIGlmICghYW5vdGhlckNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgZmllbGQgdG8gY2hlY2shJyk7XG4gICAgICBpZiAoaXNFbXB0eShjb250cm9sKSAmJiB0b0Jvb2xlYW4oYW5vdGhlckNvbnRyb2wudmFsdWUsIGZhbHNlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgcmV0dXJuIG9wdHM/LmZpZWxkT25seSA/IG51bGwgOiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZkVtcHR5KFxuICAgIGZpZWxkTmFtZTogc3RyaW5nLFxuICAgIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgZmllbGRPbmx5PzogYm9vbGVhbjtcbiAgICAgIGlzRW1wdHk/OiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBib29sZWFuO1xuICAgIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGlzRW1wdHkgPSBvcHRzPy5pc0VtcHR5IHx8ICgoY29udHJvbCkgPT4gaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpKTtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKGlzRW1wdHkoY29udHJvbCkgJiYgaXNOaWxPckJsYW5rKGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKS52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgIHJldHVybiBvcHRzPy5maWVsZE9ubHkgPyBudWxsIDogZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHByb3BhZ2F0ZUlmRGlydHkoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkTmFtZVRvUHJvcGFnYXRlOiBzdHJpbmcsIHZhbHVlVG9Qcm9wYWdhdGU6IGFueSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBjb250cm9sVG9Qcm9wYWdhdGUgPSBncm91cC5nZXQoZmllbGROYW1lVG9Qcm9wYWdhdGUpO1xuICAgICAgaWYgKGNvbnRyb2wuZGlydHkgJiYgY29udHJvbFRvUHJvcGFnYXRlLnZhbHVlICE9PSB2YWx1ZVRvUHJvcGFnYXRlKSB7XG4gICAgICAgIGNvbnRyb2xUb1Byb3BhZ2F0ZS5zZXRWYWx1ZSh2YWx1ZVRvUHJvcGFnYXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FtZSBhcyBjb21wb3NlLCBidXQga2VlcCBvbmx5IHRoZSBmaXJzdCBlcnJvcnMgKGluc3RlYWQgb2YgdGhlIHVuaW9uKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsaWRhdG9yc1xuICAgKi9cbiAgZmlyc3QodmFsaWRhdG9yczogKFZhbGlkYXRvckZuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gKGNvbnRyb2wpID0+XG4gICAgICB2YWxpZGF0b3JzXG4gICAgICAgIC5maWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgIC5tYXAoKHZhbGlkYXRvcikgPT4gdmFsaWRhdG9yKGNvbnRyb2wpKVxuICAgICAgICAuZmluZChpc05vdE5pbCkgfHwgbnVsbDtcbiAgfVxufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMge1xuICAvKipcbiAgICogVmFsaWRhdGUgdW5pcXVlbmVzcyBvZiBhbiBlbnRpdHkgaW4gYSBGb3JtQXJyYXlcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKi9cbiAgc3RhdGljIHVuaXF1ZUVudGl0eShjb250cm9sTmFtZTogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYXJyYXk6IFVudHlwZWRGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcbiAgICAgIGlmIChhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgLy8gZ2F0aGVyIGNvbnRyb2xzIGluIGFycmF5IHdpdGggdmFsaWQgZW50aXR5XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgVW50eXBlZEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCEhdmFsdWUgJiYgISF2YWx1ZS5pZCkgY29udHJvbHMucHVzaChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IG9jY3VycmVuY2VzIG9mIGVudGl0eSBieSBpZFxuICAgICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IGNvbnRyb2xzLnJlZHVjZSgoYWNjLCBjb250cm9sKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBjb250cm9sLnZhbHVlLmlkO1xuICAgICAgICAgIGlmIChhY2NbaWRdKSBhY2NbaWRdKys7XG4gICAgICAgICAgZWxzZSBhY2NbaWRdID0gMTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIC8vIGdldCBjb250cm9scyB3aXRoIHZhbHVlIG9jY3VycmVuY2VzID4gMVxuICAgICAgICBjb25zdCBlcnJvciA9IHsgdW5pcXVlRW50aXR5OiB0cnVlIH07XG4gICAgICAgIGxldCByZXR1cm5FcnJvciA9IGZhbHNlO1xuICAgICAgICBjb250cm9sc1xuICAgICAgICAgIC5maWx0ZXIoKGNvbnRyb2wpID0+IG9jY3VycmVuY2VzW2NvbnRyb2wudmFsdWUuaWRdID4gMSlcbiAgICAgICAgICAuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLmVycm9yIH07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICByZXR1cm5FcnJvciA9IHRydWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXR1cm5FcnJvcikgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4gU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICd1bmlxdWVFbnRpdHknKSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkQXJyYXlNaW5MZW5ndGgobWluTGVuZ3RoPzogbnVtYmVyKTogVmFsaWRhdG9yRm4ge1xuICAgIG1pbkxlbmd0aCA9IG1pbkxlbmd0aCB8fCAxO1xuICAgIHJldHVybiAoYXJyYXk6IFVudHlwZWRGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWFycmF5IHx8IGFycmF5Lmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBhcnJheU1heExlbmd0aChtYXhMZW5ndGg/OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgbWF4TGVuZ3RoID0gbWF4TGVuZ3RoIHx8IDE7XG4gICAgcmV0dXJuIChhcnJheTogVW50eXBlZEZvcm1BcnJheSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGlmIChhcnJheSAmJiBhcnJheS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHsgbWF4TGVuZ3RoOiBtYXhMZW5ndGggfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHN1bSBvZiBjb250cm9sIHZhbHVlcyBpbiBhbiBGb3JtQXJyYXkgbm90IG92ZXJmbG93IHRoZSBtYXggdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRTdW1NYXhWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCBtYXg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGFycmF5OiBVbnR5cGVkRm9ybUFycmF5KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdID0gW107XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgVW50eXBlZEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSAmJiBpc05vdE5pbE9yTmFOKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWUpKSB7XG4gICAgICAgICAgICBjb250cm9scy5wdXNoKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udHJvbHMucmVkdWNlKChzdW0sIGNvbnRyb2wpID0+IHN1bSArIGNvbnRyb2wudmFsdWUsIDApID4gbWF4KSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSB7IHN1bU1heFZhbHVlOiB0cnVlIH07XG4gICAgICAgICAgY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0geyAuLi5lcnJvcnMsIC4uLmVycm9yIH07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3N1bU1heFZhbHVlJykpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgdHlwZSBPYnNlcnZhYmxlVmFsaWRhdG9yRm4gPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPjtcbmV4cG9ydCB0eXBlIFByb21pc2VWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+O1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEFzeW5jVmFsaWRhdG9ycyB7XG4gIHByaXZhdGUgc3RhdGljIERFQk9VTkNFX1RJTUVfVkFMSURBVE9SX0lEID0gMDtcblxuICAvKipcbiAgICogQWRkIGEgZGVib3VuY2UgdGltZSB0byBhIHZhbGlkYXRvci5cbiAgICpcbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuXG4gICAqIEBwYXJhbSBvcHRzIFVzZSBvcHRzLnN0b3BTdWJqZWN0IHRvIHN0b3AgdGhlIHZhbGlkYXRvciwgYmVmb3JlIGVuZFxuICAgKi9cbiAgc3RhdGljIGRlYm91bmNlVGltZShcbiAgICB2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgIG9wdHM/OiB7XG4gICAgICBkaXNwb3NlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgICAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xuICAgICAgbWFya0ZvckNoZWNrPzogKCkgPT4gdm9pZDtcbiAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICB9XG4gICk6IE9ic2VydmFibGVWYWxpZGF0b3JGbiB7XG4gICAgLy8gREVCVUcgb25seVxuICAgIGNvbnN0IGRlYnVnID0gb3B0cz8uZGVidWcgfHwgZmFsc2U7XG4gICAgY29uc3QgbG9nUHJlZml4ID0gZGVidWcgJiYgYFtkZWJvdW5jZVRpbWUtdmFsaWRhdG9yXSAjJHtTaGFyZWRBc3luY1ZhbGlkYXRvcnMuREVCT1VOQ0VfVElNRV9WQUxJREFUT1JfSUQrK30gLSBgO1xuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcblxuICAgIC8vIERFQlVHXG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArIGBOZXcgdmFsaWRhdG9yIHdpdGggYSBkZWJvdW5jZVRpbWUgYXQgJHtkZWJvdW5jZVRpbWV9bXNgKTtcblxuICAgIGNvbnN0ICRkaXNwb3NlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgY29uc3QgZGlzcG9zZUV2ZW50JCA9IG9wdHM/LmRpc3Bvc2UgPyBtZXJnZSgkZGlzcG9zZVN1YmplY3QsIG9wdHM/LmRpc3Bvc2UpIDogJGRpc3Bvc2VTdWJqZWN0O1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAoZGVidWcgJiYgb3B0cz8uZGlzcG9zZSkge1xuICAgICAgb3B0cz8uZGlzcG9zZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ1N0b3BwaW5nJyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHtcbiAgICAgIGlmIChkZWJ1ZykgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnRm9ybSBhc2sgdmFsaWRhdGlvbi4uLicpO1xuXG4gICAgICAvLyBTdG9wIHByZXZpb3VzIG9ic2VydmFibGVzXG4gICAgICAkZGlzcG9zZVN1YmplY3QubmV4dCgpO1xuICAgICAgbGV0IG5vdzogbnVtYmVyO1xuXG4gICAgICByZXR1cm4gb2YobnVsbCkucGlwZShcbiAgICAgICAgLy8gQWRkIGEgZGVsYXkgYmVmb3JlIGV4ZWN1dGlvblxuICAgICAgICBkZWxheShkZWJvdW5jZVRpbWUpLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICB0YXAoKF8pID0+IHtcbiAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ0V4ZWN1dGluZy4uLicpO1xuICAgICAgICAgICAgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKF8pID0+IHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSB2YWxpZGF0b3JcbiAgICAgICAgICBjb25zdCByZXMgPSB2YWxpZGF0b3JGbihjb250cm9sKTtcbiAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcmV0dXJuIGFuIE9ic2VydmFibGVcbiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHJldHVybiByZXM7XG4gICAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBmcm9tKHJlcyk7XG4gICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICB0YXAoKHJlcykgPT4gZGVidWcgJiYgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyBgRmluaXNoZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zICgke3JlcyA/ICd3aXRoIGVycm9ycycgOiAnbm8gZXJyb3InfSlgLCByZXMpKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZGVib3VuY2VUaW1lLXZhbGlkYXRvcl0gRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHZhbGlkYXRvci4gU3RvcHBpbmcgam9iJywgZXJyb3IpO1xuICAgICAgICAgICRkaXNwb3NlU3ViamVjdC5uZXh0KCk7XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBSZWZyZXNoIFVJLCBhZnRlciBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uXG4gICAgICAgIHRhcCgoKSA9PiBvcHRzPy5tYXJrRm9yQ2hlY2sgJiYgb3B0cz8ubWFya0ZvckNoZWNrKCkpLFxuICAgICAgICAvLyBNYWtlIHN1cmUgdG8gc3RvcCwgYmVjYXVzZSBvZiB0aGUgc3dpdGNoTWFwXG4gICAgICAgIHRha2VVbnRpbChkaXNwb3NlRXZlbnQkKVxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhc3luYyB2YWxpZGF0b3IsIHRoYXQgY2FuIGJlIGRpc3Bvc2VkIGJ5IHRoZSByZXR1cm5lZCBzdWJzY3JpcHRpb25cbiAgICpcbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuIHRoZSB2YWxpZGF0b3Igb3Igam9iIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIHN0YXRpYyByZWdpc3RlckFzeW5jVmFsaWRhdG9yKFxuICAgIGZvcm06IEFic3RyYWN0Q29udHJvbCxcbiAgICB2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgIG9wdHM/OiB7XG4gICAgICBkZWJvdW5jZVRpbWU/OiBudW1iZXI7XG4gICAgICBtYXJrRm9yQ2hlY2s/OiAoKSA9PiB2b2lkO1xuICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgIH1cbiAgKTogU3Vic2NyaXB0aW9uIHtcbiAgICBpZiAoZm9ybS5hc3luY1ZhbGlkYXRvcikgdGhyb3cgRXJyb3IoJ0Zvcm0gYWxyZWFkeSBoYXZlIGFuIGFzeW5jIHZhbGlkYXRvci4gQ2Fubm90IGNvbmZpZ3VyZSBqb2InKTtcblxuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcbiAgICBjb25zdCAkZGlzcG9zZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvckZuID0gU2hhcmVkQXN5bmNWYWxpZGF0b3JzLmRlYm91bmNlVGltZSh2YWxpZGF0b3JGbiwgeyAuLi5vcHRzLCBkZWJvdW5jZVRpbWUsIGRpc3Bvc2U6ICRkaXNwb3NlIH0pO1xuICAgIGZvcm0uc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yRm4pO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLy8gV2hlbiB1bnN1YnNjcmliaW5nLCByZW1vdmUgYXN5bmMgdmFsaWRhdG9yXG4gICAgc3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICAvLyBDbGVhciBhZGRlZCB2YWxpZGF0b3IuIE11c3QgYmUgZG9uZSBOT1cgKHdpdGhvdXQgZGVsYXkpIGJlY2F1c2UgZ2VuZXJhbGx5IGEgbmV3IEpvYiBpcyBnaXZlbiBqdXN0IGFmdGVyXG4gICAgICBmb3JtLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XG5cbiAgICAgIC8vIFN0b3AgdGhlIGpvYiwgd2l0aCBhIGRlbGF5IHRvIGxldCB0aGUgbGFzdCBleGVjdXRpb24gZmluaXNoZWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAkZGlzcG9zZS5uZXh0KCk7XG4gICAgICAgICRkaXNwb3NlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBkZWJvdW5jZVRpbWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxufVxuIl19
|