@esfaenza/es-table 11.2.76 → 11.2.79
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/bundles/esfaenza-es-table.umd.js +31 -1
- package/bundles/esfaenza-es-table.umd.js.map +1 -1
- package/bundles/esfaenza-es-table.umd.min.js +1 -1
- package/bundles/esfaenza-es-table.umd.min.js.map +1 -1
- package/esfaenza-es-table.metadata.json +1 -1
- package/esm2015/lib/components/es-table/es_table.component.js +13 -1
- package/esm2015/lib/core/handlers/SelectionHandler.js +3 -2
- package/esm2015/lib/domain/externals/appsearch/AppSearch.js +18 -1
- package/fesm2015/esfaenza-es-table.js +31 -1
- package/fesm2015/esfaenza-es-table.js.map +1 -1
- package/lib/components/es-table/es_table.component.d.ts +2 -0
- package/lib/domain/externals/appsearch/AppSearch.d.ts +12 -0
- package/package.json +1 -1
|
@@ -738,9 +738,10 @@ export class SelectionHandler {
|
|
|
738
738
|
case 'boolean':
|
|
739
739
|
case 'enum':
|
|
740
740
|
case 'autocomplete':
|
|
741
|
+
return valType.value;
|
|
741
742
|
case 'float':
|
|
742
743
|
case 'currency':
|
|
743
|
-
return valType.value;
|
|
744
|
+
return parseFloat(valType.value).toLocaleString(this.est.locale);
|
|
744
745
|
case 'date':
|
|
745
746
|
return dayjs(valType.value).format(this.est.lc.token("getSmallDateDisplayFormat"));
|
|
746
747
|
case 'datetime':
|
|
@@ -750,4 +751,4 @@ export class SelectionHandler {
|
|
|
750
751
|
}
|
|
751
752
|
}
|
|
752
753
|
}
|
|
753
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0aW9uSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9TZWxlY3Rpb25IYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQW9CbkUscURBQXFEO0FBQ3JELE1BQU0sT0FBTyxnQkFBZ0I7SUF1QnpCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTZCO1FBQTVELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUF0QmhGLCtIQUErSDtRQUN2SCxlQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsaUlBQWlJO1FBQ3pILGdCQUFXLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQscUlBQXFJO1FBQzdILG9CQUFlLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsMklBQTJJO1FBQ25JLDBCQUFxQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTVELGlJQUFpSTtRQUN6SCxpQkFBWSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RELG1JQUFtSTtRQUMzSCxrQkFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELHVJQUF1STtRQUMvSCxzQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzRCw2SUFBNkk7UUFDckksNEJBQXVCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFNbUIsQ0FBQztJQUVyRixzQ0FBc0M7SUFDL0Isb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxD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QUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7WUFDdkYsS0FBSyxVQUFVO2dCQUNYLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztZQUN0RixLQUFLLE1BQU07Z0JBQ1AsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN0RDtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8vIE1vZGVsbGlcclxuaW1wb3J0IHsgQXBwU2VhcmNoIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0FwcFNlYXJjaFwiO1xyXG5pbXBvcnQgeyBJdGVtc1NlbGVjdGlvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9JdGVtc1NlbGVjdGlvblwiO1xyXG5pbXBvcnQgeyBDYWNoZVRyaXB0aWMgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9DYWNoZVRyaXB0aWNcIjtcclxuaW1wb3J0IHsgSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZSB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL0l0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2VcIjtcclxuaW1wb3J0IHsgRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uXCI7XHJcbmltcG9ydCB7IElucHV0VHlwZSB9IGZyb20gJy4uLy4uL2RvbWFpbi90eXBlcyc7XHJcblxyXG4vLyBDb21wb25lbnRpXHJcbmltcG9ydCB7IEVzVGFibGVDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnRcIlxyXG5cclxuLy8gRGlyZXR0aXZlIFxyXG5pbXBvcnQgeyBFc1RoRGlyZWN0aXZlIH0gZnJvbSBcIi4uLy4uL2RpcmVjdGl2ZXMvZXNfdGguZGlyZWN0aXZlXCI7XHJcblxyXG4vLyBIYW5kbGVyc1xyXG5pbXBvcnQgeyBSb3dHcm91cGluZ0hhbmRsZXIgfSBmcm9tIFwiLi9Sb3dHcm91cGluZ0hhbmRsZXJcIjtcclxuXHJcbi8qKlxyXG4gKiBEaWNoaWFyYXppb25lIGRlbGxhIHZhcmlhYmlsZSBnbG9iYWxlIGRheWpzLiBMJ29uZXJlIGRpIFwiY3JlYXJsYVwiIMOoIGFmZmlkYXRvIGFsbCdhcHBsaWNhemlvbmUgY2hlIHV0aWxpenphIHF1ZXN0YSBsaWJyZXJpYSwgXHJcbiAqIGNoZSBkb3Zyw6AgaW1wb3J0YXJlIGxvIHNjcmlwdCBnbG9iYWxlIGRpIGRheWpzIG5lbGxhIENMSVxyXG4gKi9cclxuIGRlY2xhcmUgdmFyIGRheWpzOiBhbnk7XHJcblxyXG4vKiogQ2xhc3NlIGNoZSBnZXN0aXNjZSBsZSBzZWxlemlvbmkgZGVnbGkgb2dnZXR0aSAqL1xyXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uSGFuZGxlciB7XHJcblxyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqaXRlbXMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2gqL1xyXG4gICAgcHJpdmF0ZSBpdGVtc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBzKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGdyb3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaGFzaCAqL1xyXG4gICAgcHJpdmF0ZSBleGNsdXNpb25zQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cF9leGNsdXNpb25zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGdyb3VwX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKippdGVtcyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlKi9cclxuICAgIHByaXZhdGUgaV9pdGVtc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBzKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBpbmRpY2UgKi9cclxuICAgIHByaXZhdGUgaV9ncm91cHNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmV4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmdyb3VwX2V4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAvKiogVWx0aW1hIGNlbGxhIHNlbGV6aW9uYXRhIHNpbmdvbGFybWVudGUgKi9cclxuICAgIHByaXZhdGUgbGFzdFNpbmdsZVNlbGVjdGlvbjogeyByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIgfTtcclxuXHJcbiAgICAvKiogQGlnbm9yZSBDb3N0cnV0dG9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlc3Q6IEVzVGFibGVDb21wb25lbnQsIHByaXZhdGUgcmdIYW5kbGVyOiBSb3dHcm91cGluZ0hhbmRsZXIpIHsgfVxyXG5cclxuICAgIC8qKiBSaXB1bGlzY2UgbGUgY2FjaGUgZGkgc2VsZXppb25lICovXHJcbiAgICBwdWJsaWMgY2xlYXJTZWxlY3Rpb25DYWNoZXMoKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cHNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgdGhpcy5pX2l0ZW1zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZ3JvdXBzQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZS5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIHF1YWxpIGVsZW1lbnRpIGRldm9ubyBlc3NlcmUgbWFyY2F0aSBjb21lIHNlbGV6aW9uYXRpIG5lbGxhIHZpc3RhIGF0dHVhbGUuIFNpIGJhc2Egc3VsbCdvZ2dldHRvICoqc2VsZWN0aW9uKiogaW50ZXJubyBhbGwnQXBwU2VhcmNoXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkaSBjdWkgdmFsdXRhcmUgbGEgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0aSBkaSBzZWxlemlvbmUgZGVyaXZhbnRlIGRhbGxhIHZpZXcgbyBkYWxsJ29nZ2V0dG8gcGVyIEFycmF5XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZVNlbGVjdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbkl0ZW0pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25FdmFsdWF0aW9uKGl0ZW1zLCBzZWxlY3Rpb25JdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByZWNvbXBpbGEgbGUgaW5mb3JtYXppb25pIHN1bGxvIHN0YXRvIGRpIHNlbGV6aW9uZSB0dXR0byBhIGZhbHNlIHBlciBsZSBjZWxsZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgYXR0dWFsbWVudGUgYmluZGF0aSBzdWxsYSB0YWJlbGxhXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgc3UgY3VpIGdsaSBvZ2dldHRpIHNvbm8gYmluZGF0aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZXZhbHVhdGVTaW5nbGVDZWxsU2VsZWN0aW9uKGl0ZW1zOiBhbnlbXSwgdGhzOiBFc1RoRGlyZWN0aXZlW10sIGR5bjogRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uW10pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIGl0ZW1zW2ldLl9vcmRpbmFsIGRvdnJlYmJlIGVzc2VyZSB1Z3VhbGUgYSBcImlcIiBtYSBkYXRvIGNoZSBsYXRvIEhUTUwgaWwgY2ljbG8gw6ggZXN0ZXJubyBlIG5vbiBobyBsJ2luZGljZSBwZXIgY29udmVuemlvbmUgbWkgYmFzbyBzdWxsJ19vcmRpbmFsXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tpdGVtc1tpXS5fb3JkaW5hbF0gPSB7fTtcclxuICAgICAgICAgICAgaWYgKGR5biAmJiBkeW4ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsbFNlbGVjdGlvblN0YXR1c0J5RHluYW1pY0NvbHVtbnMoaXRlbXNbaV0sIGR5bik7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsbFNlbGVjdGlvblN0YXR1c0J5RXNUaHMoaXRlbXNbaV0sIHRocyk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJpdmF0ZSBmaWxsU2VsZWN0aW9uU3RhdHVzQnlEeW5hbWljQ29sdW1ucyhpdGVtOiBhbnksIGR5bjogRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uW10pe1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZHluLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IGR5bltrXTtcclxuICAgICAgICAgICAgbGV0IGlwZXI6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgPSB7IHNlbGVjdGVkOiBmYWxzZSwgdmFsdWU6IHRoLlByb3BlcnR5TmFtZSA/IGl0ZW1bdGguUHJvcGVydHlOYW1lXSA6IFwiVW5kZWZpbmVkIFByb3BlcnR5XCIsIHR5cGU6IHRoLlByb3BlcnR5VHlwZSwgcHJvcGVydHk6IHRoLlByb3BlcnR5TmFtZSwgaGVhZGVyOiB0aC5Qcm9wZXJ0eU5hbWUsIGl0ZW06IGl0ZW0gfTtcclxuICAgICAgICAgICAgdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdW2tdID0gaXBlcjtcclxuXHJcbiAgICAgICAgICAgIC8vIEZ1bnppb25lIGFzc2VnbmF0YSBkb3BvIGluIG1vZG8gZGEgcG90ZXJsZSBmYXJlIGFuY2hlIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCByaWZlcmltZW50byBhbGwnb2dnZXR0byBkaSBzZWxlemlvbmVcclxuICAgICAgICAgICAgaXBlci52YWxfc2V0dGVyID0gKHZhbHVlOiBzdHJpbmcpOiBhbnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aC5Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtW3RoLlByb3BlcnR5TmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpcGVyLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCB2YWxUb0FwcGx5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodGguUHJvcGVydHlUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW50XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvY29tcGxldGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmxvYXRcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY3VycmVuY3lcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHRoaXMuZXN0LmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRpbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG15ZGF0ZSA9IHRoaXMuZXN0LmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IGAke215ZGF0ZS5ob3VyKCl9OiR7bXlkYXRlLm1pbnV0ZSgpfToke215ZGF0ZS5zZWNvbmQoKX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaXRlbVt0aC5Qcm9wZXJ0eU5hbWVdID0gdmFsVG9BcHBseTtcclxuICAgICAgICAgICAgICAgIGlwZXIudmFsdWUgPSB2YWxUb0FwcGx5O1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbFRvQXBwbHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHByaXZhdGUgZmlsbFNlbGVjdGlvblN0YXR1c0J5RXNUaHMoaXRlbTogYW55LCB0aHM6IEVzVGhEaXJlY3RpdmVbXSkge1xyXG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgdGhzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1trXTtcclxuICAgICAgICAgICAgbGV0IGlwZXI6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2UgPSB7IHNlbGVjdGVkOiBmYWxzZSwgdmFsdWU6IHRoLnRoUHJvcGVydHkgPyBpdGVtW3RoLnRoUHJvcGVydHldIDogXCJVbmRlZmluZWQgUHJvcGVydHlcIiwgdHlwZTogdGgudGhUeXBlLCBwcm9wZXJ0eTogdGgudGhQcm9wZXJ0eSwgaGVhZGVyOiB0aC50aCwgaXRlbTogaXRlbSB9O1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbF1ba10gPSBpcGVyO1xyXG5cclxuICAgICAgICAgICAgLy8gRnVuemlvbmUgYXNzZWduYXRhIGRvcG8gaW4gbW9kbyBkYSBwb3RlcmxlIGZhcmUgYW5jaGUgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIHJpZmVyaW1lbnRvIGFsbCdvZ2dldHRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICBpcGVyLnZhbF9zZXR0ZXIgPSAodmFsdWU6IHN0cmluZyk6IGFueSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoLnRoUHJvcGVydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtW3RoLnRoUHJvcGVydHldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaXBlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsVG9BcHBseSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoLnRoVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ1wiJykgJiYgdmFsdWUuZW5kc1dpdGgoJ1wiJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gdmFsdWUuc3Vic3RyaW5nKDEsIHZhbHVlLmxlbmd0aCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImludFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVudW1cIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYXV0b2NvbXBsZXRlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZsb2F0XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImN1cnJlbmN5XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRlXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB0aGlzLmVzdC5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBteWRhdGUgPSB0aGlzLmVzdC5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSBgJHtteWRhdGUuaG91cigpfToke215ZGF0ZS5taW51dGUoKX06JHtteWRhdGUuc2Vjb25kKCl9YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGl0ZW1bdGgudGhQcm9wZXJ0eV0gPSB2YWxUb0FwcGx5O1xyXG4gICAgICAgICAgICAgICAgaXBlci52YWx1ZSA9IHZhbFRvQXBwbHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsVG9BcHBseTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEltcGxlbWVudGF6aW9uZSBhZ25vc3RpY2EgZGVsbGEgdmFsdXRhemlvbmUgZGVsbGUgc2VsZXppb25pIGRlZ2xpIG9nZ2V0dGkuIFJpY2hpZWRlIGdsaSBvZ2dldHRpIGRlbGxhIHZpc3RhIGF0dHVhbGUgZSBsJ2l0ZW1TZWxlY3RvclxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGkgY3VpIGFnZ2lvcm5hcmUgbG8gc3RhdG8gZGkgc2VsZXppb25lXHJcbiAgICAgKiBAcGFyYW0ge0l0ZW1zU2VsZWN0aW9uPGFueT59IHNlbGVjdGlvbkl0ZW0gT2dnZXR0byBjb250ZW5lbnRlIGxvIHN0YXRvIGF0dHVhbGUgZGkgc2VsZXppb25lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaGFuZGxlU2VsZWN0aW9uRXZhbHVhdGlvbihpdGVtczogYW55W10sIHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdG0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgbGV0IGhhc2ggPSBpdG0uX2hhc2g7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBpdG0uX2dyb3VwID8gbnVsbCA6IHRoaXMuZ2V0SXRlbUdyb3VwKGl0bSk7XHJcbiAgICAgICAgICAgIC8vIFJlaWRyYXRvIGxhIGNhY2hlIGRpIHNlbGV6aW9uZSBjb2kgbnVvdmkgb2dnZXR0aSBhbHRyaW1lbnRpIG5vbiByaXVzY2lyZWkgYSBiZWNjYXJlIGdsaSBpbmRpY2kgZ2l1c3RpXHJcbiAgICAgICAgICAgIC8vIERvcG9kaWNow6kgbGEgdXNvIHBlciBjYWxjb2xhcmUgaXN0YW50YW5lYW1lbnRlIHNlIGdsaSBvZ2dldHRpIHNvbm8gc2VsZXppb25hdGkgbyBub1xyXG4gICAgICAgICAgICB0aGlzLnJlaGlkcmF0ZUNhY2hlKGl0bSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXRtLl9pdGVtKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5hbGwpXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKCghdGhpcy5ncm91cHNDYWNoZS5oYXMoaXRlbUdyb3VwPy5faGFzaCkgJiYgdGhpcy5pdGVtc0NhY2hlLmhhcyhoYXNoKSkgfHwgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9ICF0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkgJiYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGl0ZW1Hcm91cD8uX2hhc2gpIHx8IHRoaXMuaXRlbXNDYWNoZS5oYXMoaGFzaCkgfHwgKHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdGVtR3JvdXApID09ICdpbmNsdWRlZCcgJiYgIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGl0bS5fZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmFsbClcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX3NlbGVjdGVkID0gIXRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhoYXNoKSAmJiB0aGlzLnBhcmVudFRyZWVTdGF0dXMoaXRtKSAhPSAnZXhjbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2VsZWN0ZWQgPSB0aGlzLmdyb3Vwc0NhY2hlLmhhcyhoYXNoKSB8fCAodGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0bSkgPT0gJ2luY2x1ZGVkJyAmJiAhdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGhhc2gpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgdHV0dGkgZ2xpIG9nZ2V0dGkgZGkgcXVlc3RhIHBhZ2luYSBzb25vIHNvbGV6aW9uYXRpIGFsbG9yYSBwb3NzbyBtZXR0ZXJlIGlsIGdsb2JhbCBjaGVjayBhIHRydWVcclxuICAgICAgICAvLyBTZSBzb25vIGluIHNpdHVhemlvbmUgZGkgYWxsLXNlbGVjdCBhbmNoZSBtZXR0byBsYSBnbG9iYWwgY2hlY2tib3gsIG5vbm9zdGFudGUgY2kgcG9zc2FubyBlc3NlcmUgZGVsbGUgZXNjbHVzaW9uaVxyXG4gICAgICAgIHRoaXMuZXN0Lmdsb2JhbENoZWNrID0gdGhpcy5lc3QuYm91bmRTb3VyY2UubGVuZ3RoID4gMCAmJiB0aGlzLmVzdC5ib3VuZFNvdXJjZS5maWx0ZXIodCA9PiB0Ll9ncm91cCB8fCB0Ll9pdGVtKS5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKTtcclxuICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBzZWxlY3Rpb25JdGVtLmNvdW50ID4gMCAmJiB0aGlzLmVzdC5TZWxlY3RBbGwgJiYgIXRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgLy8gUG90cmViYmUgY2FtYmlhcmUgcXVhbG9yYSBxdWFsY3VubyBpbnNlcmlzc2UgZGF0aSBhIG1hbmF6emEgaW4gbW9kYWxpdMOgIEFycmF5IGUgZGVzc2UgaWwgcmVmcmVzaCBtYW51YWxlIGFsbGEgdGFiZWxsYVxyXG4gICAgICAgIC8vIENvbXVucXVlIGNvc3RhIDAgcXVpbmRpIG1pIHBlcm1ldHRvIGRpIHJlZnJlc2hhcmVcclxuICAgICAgICBpZiAodGhpcy5lc3QuYXJyYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIGxldCBwcmV2U2VsZWN0ZWQgPSB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHM7XHJcbiAgICAgICAgICAgIHRoaXMuZmluYWxpemVTZWxlY3Rpb25JbmZvcm1hdGlvbnMoc2VsZWN0aW9uSXRlbSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHMgIT0gcHJldlNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5lc3Qub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoc2VsZWN0aW9uSXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biBvZ2dldHRvIHRyb3ZhIGxhIGNlbGxhIGRpIGNhY2hlIGluIGN1aSDDqCByZWdpc3RyYXRvIGUgYWdnaW9ybmEgaWwgY29udGVudXRvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gZGEgYWdnaW9ybmFyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlaGlkcmF0ZUNhY2hlKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGxldCBjdHggPSBpdGVtLl9oYXNoO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhjdHgpKVxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzQ2FjaGUuc2V0KGN0eCwgaXRlbSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4Y2x1c2lvbnNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5leGNsdXNpb25zQ2FjaGUuc2V0KGN0eCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIGdydXBwbyBjb250cm9sbGEgcmljb3JzaXZhbWVudGUgbCdhbGJlcm8gZGkgY3VpIGZhIHBhcnRlIHNlIGMnw6ggc3RhdGEgdW5hIGluY2x1c2lvbmUgbyBlc2NsdXNpb25lIGRpcmV0dGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdycCBHcnVwcG8gZGEgY29udHJvbGxhcmVcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgeydub25lJyB8ICdleGNsdWRlZCcgfCAnaW5jbHVkZWQnfSBcclxuICAgICAqICdub25lJyBzZSBub24gY2kgc29ubyBpbmZvcm1hemlvbmkgc3UgaW5jbHVzaW9uaSBvIGVzY2x1c2lvbmkgXHJcbiAgICAgKiAnaW5jbHVkZWQnIHNlIGlsIGdydXBwbyBjb250cm9sbGF0byDDqCBzdGF0byBpbmNsdXNvIGluIG1hbmllcmEgZXNwbGljaXRhIGRhbGwnYWxiZXJvIGRlaSBncnVwcGkgcGFkcmlcclxuICAgICAqICdleGNsdWRlZCcgc2UgaWwgZ3J1cHBvIGNvbnRyb2xsYXRvIMOoIHN0YXRvIGVzY2x1c28gaW4gbWFuaWVyYSBlc3BsaWNpdGEgZGFsbCdhbGJlcm8gZGVpIGdydXBwaSBwYWRyaVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBhcmVudFRyZWVTdGF0dXMoZ3JwOiBhbnkpOiAnbm9uZScgfCAnZXhjbHVkZWQnIHwgJ2luY2x1ZGVkJyB7XHJcbiAgICAgICAgaWYgKCFncnApXHJcbiAgICAgICAgICAgIHJldHVybiAnbm9uZSc7XHJcblxyXG4gICAgICAgIGxldCBwYXJlbnRHcm91cDogYW55ID0gdGhpcy5yZ0hhbmRsZXIucmdHcm91cENhY2hlLmdldChncnAuX3BhcmVudCk7XHJcblxyXG4gICAgICAgIGlmICghcGFyZW50R3JvdXApXHJcbiAgICAgICAgICAgIHJldHVybiAnbm9uZSc7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5oYXMocGFyZW50R3JvdXAuX2hhc2gpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2V4Y2x1ZGVkJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKHBhcmVudEdyb3VwLl9oYXNoKSlcclxuICAgICAgICAgICAgcmV0dXJuICdpbmNsdWRlZCc7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudFRyZWVTdGF0dXMocGFyZW50R3JvdXApO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgZ2VzdGlyZSBsYSBzZWxlemlvbmUgZGkgTiBlbGVtZW50aSB1dGlsaXp6YW5kbyBsYSBDYWNoZSBkaSBzZWxlemlvbmUgZWQgZXZlbnR1YWxtZW50ZSBhZ2dpb3JuYW5kbyBpbCBjb25jZXR0byBkaSBcImFsbCBzZWxlY3Rpb25cIlxyXG4gICAgICpcclxuICAgICAqIFZ1bnppb25hIHNpYSBpbiBtb2RhbGl0w6AgQXJyYXkgY2hlIGluIG1vZGFsaXTDoCBWaWV3IFNlbXBsaWNlIG8gVmlldyBBdmFuemF0YSAoY29uIGxlIEN1c3RvbSBDZWxscylcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWwgVmFsb3JlIGZvcnphdG8gZGkgY2hlY2sgZGEgYXNzZWduYXJlIGFnbGkgb2dnZXR0aVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBnbG9iYWxDaGVjayBWYWxvcmUgZGVsIGNoZWNrIGdsb2JhbGVcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7SXRlbXNTZWxlY3Rpb248YW55Pn0gT2dnZXR0byBkaSBzZWxlemlvbmUgYWdnaW9ybmF0byBjb24gbGUgaW5mb3JtYXppb25pIHN1bGwndWx0aW1hIG9wZXJhemlvbmUgZWZmZXR0dWF0YVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlSXRlbXNTZWxlY3Rpb24oaXRlbXM6IGFueVtdLCBmb3JjZWRWYWw6IGJvb2xlYW4gPSBudWxsLCBnbG9iYWxDaGVjazogYm9vbGVhbiA9IG51bGwpOiBJdGVtc1NlbGVjdGlvbjxhbnk+IHtcclxuICAgICAgICBsZXQgc2kgPSAodGhpcy5lc3QuVmlldyBhcyBBcHBTZWFyY2g8YW55Pik/LnNlbGVjdGlvbiB8fCB0aGlzLmVzdC5hcnJheW1vZGVTZWxlY3Rpb247XHJcblxyXG4gICAgICAgIC8vIFNlIHNvbm8gaW4gbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBzaW5nb2xhIGUgZGV2byBzZWxlemlvbmFyZSB1bidvZ2dldHRvLCBwZXIgcHJpbWEgY29zYSBkZXZvIGRlc2VsZXppb25hcmUgdHV0dGkgZ2xpIGFsdHJpXHJcbiAgICAgICAgaWYgKHRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbiAmJiBpdGVtc1swXT8uX3NlbGVjdGVkICYmICFpdGVtc1swXT8uX2dyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAxICYmIGZvcmNlZFZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgXCJUZW50YXRpdm8gZGkgc2VsZXppb25hcmUgbyBkZXNlbGV6aW9uYXJlIHBpw7kgZGkgdW4gZWxlbWVudG8gY29uIFNpbmdsZVNlbGVjdGlvbiBhdHRpdm9cIjtcclxuXHJcbiAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT0gMSAmJiBmb3JjZWRWYWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc2kgPSB0aGlzLmhhbmRsZUl0ZW1zU2VsZWN0aW9uKHRoaXMuZXN0LmJvdW5kU291cmNlLmZpbHRlcih0ID0+ICF0Ll9ncm91cCksIGZhbHNlLCBudWxsKTtcclxuICAgICAgICAgICAgICAgIGl0ZW1zWzBdLl9zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGl0ZW0gPSBpdGVtc1tpXTtcclxuICAgICAgICAgICAgbGV0IHRvQ2hhbmdlID0gZm9yY2VkVmFsICE9IG51bGwgPyBpdGVtLl9zZWxlY3RlZCAhPSBmb3JjZWRWYWwgOiBnbG9iYWxDaGVjayAhPSBudWxsID8gaXRlbS5fc2VsZWN0ZWQgIT0gdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgOiBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGRldidlc3NlcmUgb3ZlcnJpZGF0byBpbCB2YWxvcmUgZGkgY2hlY2sgZWZmZXR0dW8gbCdvdmVycmlkZSBvIGNvbCB2YWxvcmUgZm9yemF0byBvIGNvbCB2YWxvcmUgZ2xvYmFsZVxyXG4gICAgICAgICAgICBpZiAodG9DaGFuZ2UgJiYgIWl0ZW0ubG9ja2VkKVxyXG4gICAgICAgICAgICAgICAgaXRlbS5fc2VsZWN0ZWQgPSBmb3JjZWRWYWwgIT0gbnVsbCA/IGZvcmNlZFZhbCA6IHRoaXMuZXN0Lmdsb2JhbENoZWNrO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgaWwgdmFsb3JlIG5vbiBkZXYnZXNzZXJlIHZhcmlhdG8gZSB2ZW5nbyBkYSB1bmEgc2VsZXppb25lIGdsb2JhbGUgc2VtcGxpY2VtZW50ZSBldml0byBkaSBlZmZldHR1YXJlIG9wZXJhaXpvbmkgaW51dGlsaS4gTCdpdGVtL2dydXBwbyDDqCBnacOgIG5lbGxvIHN0YXRvIGdpdXN0b1xyXG4gICAgICAgICAgICBpZiAoIXRvQ2hhbmdlICYmIGdsb2JhbENoZWNrICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBhbGxTZWxlY3Rpb24gPSBzaS5hbGw7XHJcbiAgICAgICAgICAgIGxldCBpc0dyb3VwID0gaXRlbS5fZ3JvdXA7XHJcbiAgICAgICAgICAgIGxldCBpc1NlbGVjdGlvbiA9IGl0ZW0uX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICBsZXQgaXRlbUdyb3VwID0gbnVsbCwgYWxsSXRlbXMgPSBudWxsLCBzZWxlY3RlZEl0ZW1zID0gbnVsbCwgdW5zZWxlY3RlZEl0ZW1zID0gbnVsbCwgYWxsR3JvdXBzID0gbnVsbCwgc2VsZWN0ZWRHcm91cHMgPSBudWxsLCB1bnNlbGVjdGVkR3JvdXBzID0gbnVsbCwgcGFyZW50R3JvdXBTZWxlY3RlZCA9IG51bGwsIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHB0cyA9IHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdGVtKTtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwU2VsZWN0ZWQgPSBwdHMgPT0gJ2luY2x1ZGVkJztcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IHB0cyA9PSAnZXhjbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgYWxsSXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoc2ksIGl0ZW0sIG51bGwsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0R3JvdXBJdGVtcyhzaSwgaXRlbSwgJ3NlbGVjdGVkJywgdHJ1ZSwgYWxsSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgdW5zZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKHNpLCBpdGVtLCAndW5zZWxlY3RlZCcsIHRydWUsIGFsbEl0ZW1zKTtcclxuICAgICAgICAgICAgICAgIGFsbEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgJ3NlbGVjdGVkJywgdHJ1ZSwgYWxsR3JvdXBzKTtcclxuICAgICAgICAgICAgICAgIHVuc2VsZWN0ZWRHcm91cHMgPSB0aGlzLmdldEdyb3VwQ2hpbGRHcm91cHMoc2ksIGl0ZW0sICd1bnNlbGVjdGVkJywgdHJ1ZSwgYWxsR3JvdXBzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1Hcm91cCA9IHRoaXMuZ2V0SXRlbUdyb3VwKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBTZWxlY3RlZCA9IGl0ZW1Hcm91cCA9PSBudWxsID8gbnVsbCA6IGl0ZW1Hcm91cC5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHcm91cFVuc2VsZWN0ZWQgPSBpdGVtR3JvdXAgPT0gbnVsbCA/IG51bGwgOiAhaXRlbUdyb3VwLl9zZWxlY3RlZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmVzdC5BcnJheUdyb3VwaW5nKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2VsZWN0aW9uT3BlcmF0aW9ucyhzaSwgaXRlbSwgYWxsU2VsZWN0aW9uLCBpc0dyb3VwLCBpc1NlbGVjdGlvbiwgc2VsZWN0ZWRJdGVtcywgc2VsZWN0ZWRHcm91cHMsIHVuc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEdyb3VwcywgYWxsSXRlbXMsIGFsbEdyb3VwcywgcGFyZW50R3JvdXBTZWxlY3RlZCwgcGFyZW50R3JvdXBVbnNlbGVjdGVkKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtU2ltcGxlU2VsZWN0aW9uT3BlcmF0aW9ucyhzaSwgaXRlbSwgaXNHcm91cCwgaXNTZWxlY3Rpb24sIGl0ZW1Hcm91cCwgc2VsZWN0ZWRJdGVtcywgdW5zZWxlY3RlZEl0ZW1zLCBhbGxJdGVtcywgYWxsR3JvdXBzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEltcG9zdG8gaWwgY2hlY2sgZ2xvYmFsZSBpbiBiYXNlIGEgc2UgdHV0dGkgZ2xpIGVsZW1lbnRpIHNvbm8gc2VsZXppb25hdGkgbyBtZW5vLlxyXG4gICAgICAgIC8vIEV2aXRvIGRpIGZhcmUgcXVlc3RlIG9wZXJhemlvbmkgc2UgbGEgc2VsZXppb25lIGRlcml2YSBwcm9wcmlvIGRhbCBnbG9iYWwgQ2hlY2tcclxuICAgICAgICBpZiAoZ2xvYmFsQ2hlY2sgPT0gbnVsbClcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgPSAhdGhpcy5lc3QuYm91bmRTb3VyY2Uuc29tZSh0ID0+ICF0Ll9zZWxlY3RlZCAmJiAhdC5fc2VwKTtcclxuXHJcbiAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzaSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzaTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gTCdvZ2dldHRvIGRpIHNlbGV6aW9uZSwgbCdvZ2dldHRvIGRhIHNlbGV6aW9uYXJlL2Rlc2VsZXppb25hcmUgZSB0dXR0aSBpIHBhcmFtZXRyaSBkZWwgY2FzbyBlZmZldHR1YSBsZSBvcGVyYXppb25pIGNoZSBzZXJ2b25vLlxyXG4gICAgICogXHJcbiAgICAgKiBMb2dpY2Egc2VtcGxpZmljYXRhIHJpc3BldHRvIGFsbCdvcmlnaW5hbGUgKipwZXJmb3JtU2VsZWN0aW9uT3BlcmF0aW9ucyoqIHBlciBsYXZvcmFyZSBpbiB1bmEgbW9kYWxpdMOgIGluIGN1aSB0dXR0aSBnbGkgZWxlbWVudGkgc29ubyBjYXJpY2F0aSAoKipBcnJheUdyb3VwaW5nKiogPSB0cnVlKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBlcmZvcm1TaW1wbGVTZWxlY3Rpb25PcGVyYXRpb25zKGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGl0ZW06IGFueSwgZ3JvdXA6IGJvb2xlYW4sIHNlbDogYm9vbGVhbiwgaXRtX2dyb3VwOiBhbnksIHNlbF9pdG06IGFueVtdLCBkZXNlbF9pdG06IGFueVtdLCBhbGxfaXRtczogYW55W10sIGFsbF9ncnBzOiBhbnlbXSkge1xyXG4gICAgICAgIGxldCB0cmlwdGljSXRlbSA9IHRoaXMuZ2V0VHJpcHRpYygnaXRlbScsIGJhc2UpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IHRydWU7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlc2VsX2l0bSlcclxuICAgICAgICAgICAgICAgICAgICBkZXNlbF9pdG0uZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMuYWRkSXRlbShlbCwgdHJpcHRpY0l0ZW0pIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IGZhbHNlOyB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxfaXRtKVxyXG4gICAgICAgICAgICAgICAgICAgIHNlbF9pdG0uZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IGZhbHNlOyB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNJdGVtKSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdG1fZ3JvdXAgJiYgYWxsX2l0bXMgJiYgYWxsX2l0bXMuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCkpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RHcm91cChpdG1fZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmIChpdG1fZ3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtX2dyb3VwLl9zZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBzZWxlemlvbmFyZSB1biBncnVwcG8gZSwgcmljb3JzaXZhbWVudGUsIHNlIHR1dHRpIGkgZ3J1cHBpIHNvdHRvc3RhbnRpIGFsIHBhcmVudCBzb25vIHNlbGV6aW9uYXRpLCBzZWxlemlvbmFyZSBpIGdydXBwaSBwYWRyaVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JvdXAgR3J1cHBvIGRhIHNlbGV6aW9uYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2VsZWN0R3JvdXAoZ3JvdXA6IGFueSkge1xyXG4gICAgICAgIGdyb3VwLl9zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMuZ2V0R3JvdXBQYXJlbnQoZ3JvdXApO1xyXG4gICAgICAgIGlmIChwYXJlbnQgJiYgdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKG51bGwsIHBhcmVudCwgbnVsbCwgdHJ1ZSkuZXZlcnkodCA9PiB0Ll9zZWxlY3RlZCkpXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0R3JvdXAocGFyZW50KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gTCdvZ2dldHRvIGRpIHNlbGV6aW9uZSwgbCdvZ2dldHRvIGRhIHNlbGV6aW9uYXJlL2Rlc2VsZXppb25hcmUgZSB0dXR0aSBpIHBhcmFtZXRyaSBkZWwgY2FzbyBlZmZldHR1YSBsZSBvcGVyYXppb25pIGNoZSBzZXJ2b25vLlxyXG4gICAgICogXHJcbiAgICAgKiBMYSBsb2dpY2EgZGkgcXVlc3RhIGZ1bnppb25lIMOoIG5hdGEgZXNzZW56aWFsbWVudGUgZGEgc3BhbSBkaSB0cmlhbCAmIGVycm9yIGVkIMOoIHN0YXRhIHRlc3RhdGEgc29sbyBmaW5vIGEgZHVlIGxpdmVsbGkgZGkgcmFnZ3J1cHBhbWVudG8sXHJcbiAgICAgKiBxdWFsc2lhc2kgY29zYSB2YWRhIG9sdHJlIG5vbiDDqCAxMDAlIGRldHRvIGNoZSBmdW56aW9uaS4uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGl0ZW06IGFueSwgYWxsOiBib29sZWFuLCBncm91cDogYm9vbGVhbiwgc2VsOiBib29sZWFuLCBzZWxfaXRtOiBhbnlbXSwgc2VsX2dycDogYW55W10sIGRlc2VsX2l0bTogYW55W10sIGRlc2VsX2dycDogYW55W10sIGFsbF9pdG1zOiBhbnlbXSwgYWxsX2dycHM6IGFueVtdLCBwYXJlbnRfaW5jbDogYm9vbGVhbiwgcGFyZW50X2V4Y2w6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgdHJpcHRpY0dyb3VwID0gdGhpcy5nZXRUcmlwdGljKCdncm91cCcsIGJhc2UpO1xyXG4gICAgICAgIGxldCB0cmlwdGljSXRlbSA9IHRoaXMuZ2V0VHJpcHRpYygnaXRlbScsIGJhc2UpO1xyXG4gICAgICAgIGxldCB0cmlwdGljRXhjbCA9IHRoaXMuZ2V0VHJpcHRpYygnZXhjbHVzaW9uJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNncnBFeGNsID0gdGhpcy5nZXRUcmlwdGljKCdncm91cF9leGNsdXNpb24nLCBiYXNlKTtcclxuXHJcbiAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhbGwgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNncnBFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0dyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsX2l0bSkgc2VsX2l0bS5mb3JFYWNoKGVsID0+IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0l0ZW0pKTtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxfZ3JwKSBzZWxfZ3JwLmZvckVhY2goZ3IgPT4gdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljR3JvdXApKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfaXRtcykgYWxsX2l0bXMuZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0V4Y2wpOyB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfZ3JwcykgYWxsX2dycHMuZm9yRWFjaChnciA9PiB7IGdyLl9zZWxlY3RlZCA9IHRydWU7IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY2dycEV4Y2wpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChhbGwgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNncnBFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0dyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfaXRtKSBkZXNlbF9pdG0uZm9yRWFjaChlbCA9PiB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNFeGNsKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfZ3JwKSBkZXNlbF9ncnAuZm9yRWFjaChnciA9PiB0aGlzLnJlbW92ZUl0ZW0oZ3IsIHRyaXB0aWNFeGNsKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsX2l0bXMpIGFsbF9pdG1zLmZvckVhY2goZWwgPT4geyBlbC5fc2VsZWN0ZWQgPSBmYWxzZTsgdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljSXRlbSk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9ncnBzKSBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gZmFsc2U7IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY0dyb3VwKTsgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChzZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmICgocGFyZW50X2V4Y2wgPT0gbnVsbCAmJiBhbGwpIHx8IHBhcmVudF9pbmNsKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljRXhjbCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNJdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRfZXhjbCB8fCAoIWFsbCAmJiBwYXJlbnRfZXhjbCA9PSBudWxsKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbShpdGVtLCB0cmlwdGljRXhjbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhlbHBlciBwZXIgZXZpdGFyZSBkaSByaXNjcml2ZXJlIG9nbmkgc2FudGEgdm9sdGEgYXJyYXkuc3BsaWNlKGFycmF5LmluZGV4b2YoaXRlbSksIDEpOyAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVJdGVtKGl0ZW06IGFueSwgdHJpcHRpYz86IENhY2hlVHJpcHRpYykge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRyaXB0aWMuaW5kZXhfY2FjaGUuZ2V0KGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuY2FjaGUuZGVsZXRlKGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgICAgICB0cmlwdGljLmluZGV4X2NhY2hlLmRlbGV0ZShpdGVtLl9oYXNoKTtcclxuICAgICAgICAgICAgdHJpcHRpYy5hcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICEhaW5kZXg7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEhlbHBlciBwZXIgZXZpdGFyZSBkaSByaXNjcml2ZXJlIG9nbmkgc2FudGEgdm9sdGEgYXJyYXkucHVzaChpdGVtKTsgZSBsYSBnZXN0aW9uZSBkZWxsYSAgKi9cclxuICAgIHByaXZhdGUgYWRkSXRlbShpdGVtOiBhbnksIHRyaXB0aWM/OiBDYWNoZVRyaXB0aWMpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodHJpcHRpYy5pbmRleF9jYWNoZS5nZXQoaXRlbS5faGFzaCkgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgaSA9IHRyaXB0aWMuYXJyYXkucHVzaChpdGVtKSAtIDE7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuY2FjaGUuc2V0KGl0ZW0uX2hhc2gsIGl0ZW0pO1xyXG4gICAgICAgICAgICB0cmlwdGljLmluZGV4X2NhY2hlLnNldChpdGVtLl9oYXNoLCBpKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPdHRpZW5lIGlsIHRyaXR0aWNvIGRpIHNlbGV6aW9uZSwgY2lvw6ggbCdhcnJheSBkZWdsaSBvZ2dldHRpIGNoZSBzaSB2dW9sZSBtYW5pcG9sYXJlIGUgbGUgZHVlIGNhY2hlIGNvbGxlZ2F0ZSBhZCBlc3NvXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7J2dyb3VwJyB8ICdpdGVtJyB8ICdncm91cF9leGNsdXNpb24nIHwgJ2V4Y2x1c2lvbid9IHN1YmplY3QgT2dnZXR0byBsb2dpY28gZGVzaWRlcmF0byBzdSBjdWkgZWZmZXR0dWFyZSBsZSBvcGVyYXppb25pIHN1Y2Nlc3NpdmVcclxuICAgICAqIEBwYXJhbSB7SXRlbXNTZWxlY3Rpb248YW55Pn0gYmFzZSBTZWxldHRvcmUgZGkgYmFzZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Q2FjaGVUcmlwdGljfSBUcml0dGljbyBkaSBzZWxlemlvbmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRUcmlwdGljKHN1YmplY3Q6ICdncm91cCcgfCAnaXRlbScgfCAnZ3JvdXBfZXhjbHVzaW9uJyB8ICdleGNsdXNpb24nLCBiYXNlOiBJdGVtc1NlbGVjdGlvbjxhbnk+KTogQ2FjaGVUcmlwdGljIHtcclxuICAgICAgICBzd2l0Y2ggKHN1YmplY3QpIHtcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXAnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5ncm91cHNDYWNoZSwgdGhpcy5pX2dyb3Vwc0NhY2hlLCBiYXNlLmdyb3Vwcyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2l0ZW0nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5pdGVtc0NhY2hlLCB0aGlzLmlfaXRlbXNDYWNoZSwgYmFzZS5pdGVtcyk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2dyb3VwX2V4Y2x1c2lvbic6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZSwgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZSwgYmFzZS5ncm91cF9leGNsdXNpb25zKTtcclxuICAgICAgICAgICAgY2FzZSAnZXhjbHVzaW9uJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVUcmlwdGljKHRoaXMuZXhjbHVzaW9uc0NhY2hlLCB0aGlzLmlfZXhjbHVzaW9uc0NhY2hlLCBiYXNlLmV4Y2x1c2lvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gdW4gb2dnZXR0byByZXN0aXR1aXNjZSBpbCBncnVwcG8gZGkgY3VpIGZhIHBhcnRlLCBzZSBlc2lzdGVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkaSBjdWkgdHJvdmFyZSBpbCBncnVwcG9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRJdGVtR3JvdXAoaXRlbTogYW55KTogYW55IHtcclxuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5yZ0hhbmRsZXIucmdHcm91cENhY2hlLmdldChpdGVtLl90aGlzS2V5KVxyXG4gICAgICAgIGlmIChwYXJlbnQpXHJcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XHJcblxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0YSBsYSBjaGlhdmUgZGkgdW4gZ3J1cHBvIHJlc3RpdHVpc2NlIHR1dHRpIGdsaSBvZ2dldHRpIGNvbiBxdWVsbGEgY2hpYXZlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBDaGlhdmUgZGEgY2VyY2FyZVxyXG4gICAgICogQHBhcmFtIHsnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnfSBzdGF0dXMgU3RhdG8gZGVnbGkgZWxlbWVudGksIHNlbGV6aW9uYXRpIG8gbm9cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVjdXJzaXZlIEluZGljYSBzZSBjZXJjYXJlIHNvbG8gZ2xpIGVsZW1lbnRpIGRpcmV0dGFtZW50ZSBjb2xsZWdhdGkgbyBzZSBwcmVuZGVyZSBhbmNoZSBxdWVsbGkgZGVpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W119IE9nZ2V0dGkgZGkgdGlwbyAqKl9pdGVtKiogZmFjZW50aSBjYXBvIGFsbGEgY2hpYXZlICoqZ3JvdXBLZXkqKlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEdyb3VwSXRlbXMoc2VsOiBJdGVtc1NlbGVjdGlvbjxhbnk+LCBncm91cDogYW55LCBzdGF0dXM/OiAnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnLCByZWN1cnNpdmU6IGJvb2xlYW4gPSBmYWxzZSwgYWxsYmFzZTogYW55W10gPSBudWxsKTogYW55W10ge1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsYmFzZSlcclxuICAgICAgICAgICAgaXRlbXMgPSBhbGxiYXNlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agcmljb3JzaXZhIHByZW5kbyBnbGkgb2dnZXR0aSBkaSB0dXR0ZSBsZSBjaGlhdmkgc2ltaWxpIGNoZSB0cm92b1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIHRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmtleXMoKSlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKC4uLnRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmdldChrZXkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBpdGVtcyA9IHRoaXMucmdIYW5kbGVyLnJnSXRlbUNhY2hlLmdldChncm91cC5fdGhpc0tleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcih0ID0+ICFzdGF0dXMgfHwgKHQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAnc2VsZWN0ZWQnKSB8fCAoIXQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHRyb3ZvIG5lc3N1biBvZ2dldHRvLCBwZXLDsiBtYWdhcmkgZGkgb2dnZXR0aSBuZSBobyBhbGwnaW50ZXJubyBkZWxsJ29nZ2V0dG8gZGkgc2VsZXppb25lLiBcclxuICAgICAgICAvLyBRdWVzdG8gcHXDsiBlc3NlcmUgdmVybyBzb2xvIHNlIE5PTiBzb25vIGluIG1vZGFsaXTDoCBhcnJheSwgaW4gY2FzbyBjb250cmFyaW8gZ2xpIG9nZ2V0dGkgbGkgZGV2byBwZXIgZm9yemEgYXZlcmUgdHV0dGlcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoICE9IDAgfHwgIXNlbCB8fCB0aGlzLmVzdC5hcnJheU1vZGUpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmV4Y2x1c2lvbnMuZmlsdGVyKHQgPT4gdCAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5ID09IGdyb3VwLl90aGlzS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSk7XHJcbiAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09ICdzZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLml0ZW1zLmZpbHRlcih0ID0+IHQgIT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc0tleSA9PSBncm91cC5fdGhpc0tleSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgZ2xpIG9nZ2V0dGkgY29uIHF1ZWxsYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdyb3VwIEdydXBwbyBkaSBjdWkgY2VyY2FyZSBpbCBwYXJlbnRcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2FueX0gT2dnZXR0byBkaSB0aXBvICoqX2dyb3VwKiogcmFwcHJlc2VudGFudGUgaWwgcGFyZW50IGRlbCAqKmdyb3VwKiogYXR0dWFsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEdyb3VwUGFyZW50KGdyb3VwOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdyb3VwLl9wYXJlbnQpXHJcbiAgICAgICAgaWYgKHBhcmVudClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgaSBncnVwcGkgZmlnbGlcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwIEdydXBwbyBjaGUgcmFwcHJlc2VudGEgaWwgcGFkcmUgZGkgY3VpIGNlcmNhcmUgaSBmaWdsaVxyXG4gICAgICogQHBhcmFtIHsnc2VsZWN0ZWQnIHwgJ3Vuc2VsZWN0ZWQnfSBzdGF0dXMgU3RhdG8gZGVpIGdydXBwaSwgc2VsZXppb25hdGkgbyBub1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZWN1cnNpdmUgSW5kaWNhIHNlIGNlcmNhcmUgc29sbyBpIGdydXBwaSBkaXJldHRhbWVudGUgY29sbGVnYXRpIG8gc2UgcHJlbmRlcmUgYW5jaGUgcXVlbGxpIGRlaSBncnVwcGkgZmlnbGlcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge2FueVtdfSBPZ2dldHRpIGRpIHRpcG8gKipfZ3JvdXAqKiBmYWNlbnRpIGNhcG8gYWxsYSBjaGlhdmUgKipncm91cEtleSoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBDaGlsZEdyb3VwcyhzZWw6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGdyb3VwOiBhbnksIHN0YXR1cz86ICdzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCcsIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlLCBhbGxiYXNlOiBhbnlbXSA9IG51bGwpIHtcclxuICAgICAgICBsZXQgdGhpc0dyb3VwOiBhbnkgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdyb3VwLl90aGlzS2V5KTtcclxuICAgICAgICBsZXQgaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKGFsbGJhc2UpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gYWxsYmFzZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSW4gbW9kYWxpdMOgIHJpY29yc2l2YSBwcmVuZG8gZ2xpIG9nZ2V0dGkgZGkgdHV0dGUgbGUgY2hpYXZpIHNpbWlsaSBjaGUgdHJvdm9cclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGtleSBvZiB0aGlzLnJnSGFuZGxlci5yZ0NoaWxkR3JvdXBzQ2FjaGUua2V5cygpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4udGhpcy5yZ0hhbmRsZXIucmdDaGlsZEdyb3Vwc0NhY2hlLmdldChrZXkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBpdGVtcyA9IHRoaXMucmdIYW5kbGVyLnJnQ2hpbGRHcm91cHNDYWNoZS5nZXQoZ3JvdXAuX3RoaXNLZXkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIodCA9PiAhc3RhdHVzIHx8ICh0Ll9zZWxlY3RlZCAmJiBzdGF0dXMgPT0gJ3NlbGVjdGVkJykgfHwgKCF0Ll9zZWxlY3RlZCAmJiBzdGF0dXMgPT0gJ3Vuc2VsZWN0ZWQnKSk7XHJcblxyXG4gICAgICAgIC8vIE5vbiB0cm92byBuZXNzdW4gb2dnZXR0bywgcGVyw7IgbWFnYXJpIGRpIG9nZ2V0dGkgbmUgaG8gYWxsJ2ludGVybm8gZGVsbCdvZ2dldHRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT0gMCB8fCAhc2VsKVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbXM7XHJcblxyXG4gICAgICAgIGlmIChzdGF0dXMgPT0gJ3Vuc2VsZWN0ZWQnKVxyXG4gICAgICAgICAgICBpdGVtcyA9IHNlbC5ncm91cF9leGNsdXNpb25zLmZpbHRlcigodDogYW55KSA9PiB0ICE9IG51bGwgJiYgKFxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc1JvdXRlLmxlbmd0aCA9PSB0aGlzR3JvdXAuX3RoaXNSb3V0ZS5sZW5ndGggKyAxICYmIHQuX3RoaXNSb3V0ZS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmdyb3Vwcy5maWx0ZXIoKHQ6IGFueSkgPT4gdCAhPSBudWxsICYmIChcclxuICAgICAgICAgICAgICAgICghcmVjdXJzaXZlICYmIHQuX3RoaXNSb3V0ZS5sZW5ndGggPT0gdGhpc0dyb3VwLl90aGlzUm91dGUubGVuZ3RoICsgMSAmJiB0Ll90aGlzUm91dGUuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIHQuX3RoaXNLZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogRmluYWxpenphIGxlIGluZm9ybWF6aW9uaSBkaSBzZWxlemlvbmUgZGVsICoqSXRlbXNTZWxlY3Rpb24qKiBjb3JyZW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBmaW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtOiBJdGVtc1NlbGVjdGlvbjxhbnk+KSB7XHJcbiAgICAgICAgLy8gRGF0byBjaGUgbGUgZGVsZXRlIHNvbm8gbG9naWNoZSBkYXRvIGNoZSB0ZW5nbyBsYSBjYWNoZSBkZWdsaSBpbmRpY2kgZGV2byByZW5kZXJsZSBmaXNpY2hlXHJcbiAgICAgICAgbGV0IHRtcEdycCA9IFtdLCB0bXBJdGVtcyA9IFtdLCB0bXBFeGNsID0gW10sIHRtcEdycEV4Y2wgPSBbXTtcclxuICAgICAgICBsZXQgZ3JwUmVtb3ZlZCA9IGZhbHNlLCBpdGVtc1JlbW92ZWQgPSBmYWxzZSwgZXhjbFJlbW92ZWQgPSBmYWxzZSwgZ3JwRXhjbFJlbW92ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb25JdGVtLml0ZW1zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5pdGVtc1tpXSAhPSBudWxsKSB0bXBJdGVtcy5wdXNoKHNlbGVjdGlvbkl0ZW0uaXRlbXNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIGl0ZW1zUmVtb3ZlZCA9IHRydWU7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zW2ldICE9IG51bGwpIHRtcEV4Y2wucHVzaChzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnNbaV0pO1xyXG4gICAgICAgICAgICBlbHNlIGV4Y2xSZW1vdmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gSW4gdmVjY2hpZSB2ZXJzaW9uaSBkZWxsJ0FwcFNlYXJjaCBwZXIgY3VpIG5vbiB2ZW5nb25vIGRlc2VyaWFsaXp6YXRlIHF1ZXN0ZSBpbmZvcm1haXpvbmkgcG90cmViYmVybyBlc3NlcmNpIGNhc2luaVxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmdyb3Vwcykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkl0ZW0uZ3JvdXBzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBzW2ldICE9IG51bGwpIHRtcEdycC5wdXNoKHNlbGVjdGlvbkl0ZW0uZ3JvdXBzW2ldKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZ3JwUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9uc1tpXSAhPSBudWxsKSB0bXBHcnBFeGNsLnB1c2goc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zW2ldKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgZ3JwRXhjbFJlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5pdGVtcyA9IHRtcEl0ZW1zO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IHRtcEdycEV4Y2w7XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zID0gdG1wRXhjbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwcyA9IHRtcEdycDtcclxuXHJcbiAgICAgICAgLy8gTGUgY2FjaGUgZGVnbGkgaW5kaWNpIHBvdHJlYmJlcm8gYXZlcmUgYnVjaGksIHJpc29sdm9cclxuICAgICAgICBpZiAoZ3JwUmVtb3ZlZClcclxuICAgICAgICAgICAgdGhpcy5pX2dyb3Vwc0NhY2hlID0gdGhpcy5jb21wYWN0SW5kZXhNYXAodGhpcy5pX2dyb3Vwc0NhY2hlKTtcclxuICAgICAgICBpZiAoaXRlbXNSZW1vdmVkKVxyXG4gICAgICAgICAgICB0aGlzLmlfaXRlbXNDYWNoZSA9IHRoaXMuY29tcGFjdEluZGV4TWFwKHRoaXMuaV9pdGVtc0NhY2hlKTtcclxuICAgICAgICBpZiAoZXhjbFJlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9leGNsdXNpb25zQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfZXhjbHVzaW9uc0NhY2hlKTtcclxuICAgICAgICBpZiAoZ3JwRXhjbFJlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9ncm91cF9leGNsdXNpb25zQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlKTtcclxuXHJcbiAgICAgICAgLy8gUG9pIHJpcHJlbmRvIGEgZmFyZSB0dXR0byBpbiBub3JtYWxpdMOgXHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5jb3VudCA9IHRoaXMuZXZhbHVhdGVTZWxlY3RlZCgpO1xyXG5cclxuICAgICAgICAvLyBTZSBobyBmYXR0byBzZWxlemlvbmUgXCJhbGxcIiBtYSBwb2kgbWkgc29ubyBtZXNzbyBhIHRvZ2xpZXJlIHR1dHRpIGdsaSBlbGVtZW50aSBmaW5vIGEgcmltYW5lcm5lIDAgcmVzZXR0byBsJ29nZ2V0dG8gZGkgc2VsZXppb25lXHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uY291bnQgPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5ib3VuZFNvdXJjZS5mb3JFYWNoKHQgPT4gdC5fc2VsZWN0ZWQgPSBmYWxzZSk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uYWxsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25JdGVtLml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBzID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy8gUmlwdWxpc2NvIGxhIGNhY2hlIGFsdHJpbWVudGkgbWkgcmltYW5lIHBpZW5hIGRpIHR1dHRlIGxlIGVzY2x1c2lvbmlcclxuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkNhY2hlcygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgbGEgcG9zc2liaWxpdMOgIGRpIGZhcmUgXCJTZWxlemlvbmEgdHV0dG9cIiDDqCBhYmlsaXRhdGEgYWxsb3JhIGxhIGNvbnNpZGVybyBhcHBlbmEgbWkgdmllbmUgc2VsZXppb25hdG8gcXVhbGNvc2FcclxuICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBzZWxlY3Rpb25JdGVtLmNvdW50ID4gMCAmJiB0aGlzLmVzdC5TZWxlY3RBbGwgJiYgIXRoaXMuZXN0LlNpbmdsZVNlbGVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKiogQ29tcGF0dGEgdW5hIGNhY2hlIGRpIGluZGljaSAqL1xyXG4gICAgcHJpdmF0ZSBjb21wYWN0SW5kZXhNYXAobWFwOiBNYXA8c3RyaW5nLCBudW1iZXI+KTogTWFwPHN0cmluZywgbnVtYmVyPiB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICBsZXQgcmV0ID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBtYXAua2V5cygpKVxyXG4gICAgICAgICAgICByZXQuc2V0KGtleSwgaW5kZXgrKyk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsdXRhIGxhIHF1YW50aXTDoCBkaSBvZ2dldHRpIGNoZSBzb25vIHN0YXRpIHNlbGV6aW9uYXRpIGFsIHRlcm1pbmUgZGkgdW4gZXZlbnRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IE51bWVybyBkaSBvZ2dldHRpIHNlbGV6aW9uYXRpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVTZWxlY3RlZCgpOiBudW1iZXIge1xyXG4gICAgICAgIGxldCBzaSA9ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuZXN0LmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgbGV0IGV4Y0J5R3JvdXAgPSBzaS5ncm91cF9leGNsdXNpb25zLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuY291bnQsIDApO1xyXG4gICAgICAgIGxldCBpbmNCeUdyb3VwID0gc2kuZ3JvdXBzLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIGN1cnIuY291bnQsIDApO1xyXG5cclxuICAgICAgICB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHMgPSAoc2kuYWxsID8gdGhpcy5lc3QuQmFzZUl0ZW1zQ291bnQgOiBpbmNCeUdyb3VwKSAtIGV4Y0J5R3JvdXAgKyBzaS5pdGVtcy5sZW5ndGggLSBzaS5leGNsdXNpb25zLmxlbmd0aDtcclxuICAgICAgICByZXR1cm4gdGhpcy5lc3Quc2VsZWN0ZWRPYmplY3RzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZXN0aXNjZSBpbCBjb21hbmRvIGRpIFwiU2VsZXppb25hIHR1dHRvIGluIHR1dHRlIGxlIHBhZ2luZVwiIG8gaWwgc3VvIGNvbnRyYXJpbywgY2lvw6ggXCJSZWltcG9zdGEgc2VsZXppb25lXCIgKi9cclxuICAgIHB1YmxpYyBzZWxlY3RBbGxPclJlc2V0U2VsZWN0aW9uKCkge1xyXG4gICAgICAgIGxldCBzZWxlY3Rpb25JdGVtID0gdGhpcy5lc3QuVmlldy5zZWxlY3Rpb24gfHwgdGhpcy5lc3QuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25DYWNoZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmFsbCA9ICFzZWxlY3Rpb25JdGVtLmFsbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMgPSBbXTtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmdyb3VwcyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBfZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uaXRlbXMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gUmlwdWxpc2NvIGdsaSBzdGF0aSBVSSBkaSBzZWxlemlvbmUgZ2xvYmFsZSBzZSBsJ2hvIGRpc2F0dGl2YXRhXHJcbiAgICAgICAgaWYgKCFzZWxlY3Rpb25JdGVtLmFsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5jYW5TZWxlY3RBbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmluYWxpemVTZWxlY3Rpb25JbmZvcm1hdGlvbnMoc2VsZWN0aW9uSXRlbSk7XHJcblxyXG4gICAgICAgIHRoaXMuZXN0Lm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHNlbGVjdGlvbkl0ZW0pO1xyXG5cclxuICAgICAgICAvLyBEb3BvIGF2ZXIgcmVzZXR0YXRvIGRpcmV0dGFtZW50ZSBpbCBzb2xvIG9nZ2V0dG8gdGhpcy5WaWV3LnNlbGVjdGlvbiBkZXZvIGFuY2hlIHJpYWxsaW5lYXJlIGEgdHV0dGkgZ2xpIG9nZ2V0dGkgYmluZGF0aVxyXG4gICAgICAgIHRoaXMuZXZhbHVhdGVTZWxlY3Rpb24odGhpcy5lc3QuYm91bmRTb3VyY2UsIHNlbGVjdGlvbkl0ZW0pO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBUT0RPIFNwb3N0YXJlIGluIFNlbGVjdGlvbkhhbmRsZXJcclxuICAgICAqIFxyXG4gICAgICogUmVnaXN0cmEgbGEgc2VsZXppb25lIHNpbmdvbGEgc3UgdW5hIGNlbGxhIHN1bGxhIGNvbWJvIGRpIGNvbWFuZGkgXCJDVFJMICsgQ2xpY2tcIi5cclxuICAgICAqIFNlIHZpZW5lIHByZW11dG8gYW5jaGUgaWwgdGFzdG8gU2hpZnQgdmllbmUgY3JlYXRvIHVuIHJhbmdlIGRpIHNlbGV6aW9uZSBpbCBjdWkgc3RhdHVzIGRpIFwic2VsZXppb25hdG9cIiB2aWVuZSBzYWx2YXRvIG5lbGxhXHJcbiAgICAgKiBtYXRyaWNlIHZpcnR1YWxlICoqc2VsZWN0aW9uU3RhdHVzKipcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBKYXZhc2NyaXB0IGRpIENsaWNrXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcm93IEluZGljZSBkZWxsYSByaWdhLiBOb24gw6ggbCdpbmRpY2UgdmVybyBlIHByb3ByaW8gbWEgw6ggbCdvcmRpbmFsZSAoLm9yZGluYWwpIGRlbGwnb2dnZXR0byBiaW5kYXRvIHN1IHF1ZWxsYSByaWdhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIEluZGljZSBkZWxsYSBjb2xvbm5hIHByZXNvIGJhbmFsbWVudGUgZGFsbCduZ0lmIHN1aSB0aEVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNpbmdsZUNlbGxTZWxlY3Rpb24oZXZlbnQ6IGFueSwgcm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyKSB7XHJcblxyXG4gICAgICAgIHRoaXMuY2xlYXJUZXh0U2VsZWN0aW9uKGV2ZW50KTtcclxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5lc3QuU2hpZnRDbGljayAmJiB0aGlzLmxhc3RTaW5nbGVTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvblN0YXR1cyh7IHJvdywgY29sdW1uIH0pO1xyXG4gICAgICAgICAgICBsZXQgcm93QWRkaXRpb24gPSByb3cgPCB0aGlzLmxhc3RTaW5nbGVTZWxlY3Rpb24ucm93ID8gLTEgOiArMTtcclxuICAgICAgICAgICAgbGV0IGNvbHVtbkFkZGl0aW9uID0gY29sdW1uIDwgdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uLmNvbHVtbiA/IC0xIDogKzE7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpciA9IHRoaXMubGFzdFNpbmdsZVNlbGVjdGlvbi5yb3c7IGlyICE9IHJvdyArIHJvd0FkZGl0aW9uOyBpciArPSByb3dBZGRpdGlvbilcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGljID0gdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uLmNvbHVtbjsgaWMgIT0gY29sdW1uICsgY29sdW1uQWRkaXRpb247IGljICs9IGNvbHVtbkFkZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tpcl1baWNdLnNlbGVjdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubGFzdFNpbmdsZVNlbGVjdGlvbiA9IHsgcm93LCBjb2x1bW4gfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBSaXB1bGlzY28gZXNjbHVkZW5kbyBsJ29nZ2V0dG8gYXR0dWFsZSBjaGUgZXZlbnR1YWxtZW50ZSBjaSBwZW5zbyBpbyBhIGRlc2VlemlvbmFyZVxyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uU3RhdHVzKHsgcm93LCBjb2x1bW4gfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tyb3ddW2NvbHVtbl0uc2VsZWN0ZWQgPSAhdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW3Jvd11bY29sdW1uXS5zZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uID0geyByb3csIGNvbHVtbiB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT3JhIGNoZSBub24gw6ggYXR0YWNjYXRvIGRpcmV0dGFtZW50ZSBhbGwnaHRtbCBkZXZvIGZhcmUgdW4gbWFya2ZvcmNoZWNrIGZpbml0ZSBsZSBvcGVyYXppb25pIHN1aSBncm91cGluZ1xyXG4gICAgICAgIHRoaXMuZXN0LmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgcmlwdWxpcmUgbG8gc3RhdG8gZGkgc2VsZXppb25lIGRlbGxlIHNpbmdvbGUgY2VsbGUgZGVsbGEgdGFiZWxsYSwgYWQgZXNjbHVzaW9uZSBkaSB1bmEgc2luZ29sYSBjb29yZGluYXRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7e3JvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcn19IGV4Y2x1c2lvbiBDb29yZGluYXRhIGRhIGVzY2x1ZGVyZSBuZWxsYSBwdWxpemlhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvblN0YXR1cyhleGNsdXNpb24/OiB7IHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciB9KSB7XHJcbiAgICAgICAgZm9yIChsZXQgcm93IGluIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1cylcclxuICAgICAgICAgICAgZm9yIChsZXQgY29sdW1uIGluIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tyb3ddKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFleGNsdXNpb24gfHwgKGV4Y2x1c2lvbiAmJiAocm93ICE9IGV4Y2x1c2lvbi5yb3cudG9TdHJpbmcoKSB8fCBjb2x1bW4gIT0gZXhjbHVzaW9uLmNvbHVtbi50b1N0cmluZygpKSkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbcm93XVtjb2x1bW5dLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgY2hlIGVzYW1pbmEgbGEgbWF0cmljZSAqKnNlbGVjdGlvblN0YXR1cyoqIGUgbmUgZXN0cmFwcG9sYSBnbGkgZWxlbWVudGkgc2VsZXppb25hdGkgaW4gdW5hIGNvbW9kYSBtYXRyaWNlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHt7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IElucHV0VHlwZSwgdmFsX3NldHRlcjogRnVuY3Rpb24gfVtdW119IE1hdHJpY2UgZGkgZWxlbWVudGkgc2VsZXppb25hdGkgY29uIGxhIGxvcm8gaW5mb3JtYXppb25lIHN1bCB0aXBvXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRTZWxlY3Rpb25TdGF0dXNTZWxlY3Rpb24oKTogSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZVtdW10ge1xyXG4gICAgICAgIGxldCBzZWxlY3Rpb246IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2VbXVtdID0gW11cclxuICAgICAgICBmb3IgKGxldCByb3cgaW4gdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGxldCByb3dWYWx1ZXM6IEl0ZW1Qcm9wRWRpdGFibGVSZWZlcmVuY2VbXSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gaW4gdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW3Jvd10pIHtcclxuICAgICAgICAgICAgICAgIGxldCBzc0l0ZW0gPSB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbcm93XVtjb2x1bW5dO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNzSXRlbS5zZWxlY3RlZClcclxuICAgICAgICAgICAgICAgICAgICByb3dWYWx1ZXMucHVzaChzc0l0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyb3dWYWx1ZXMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKHJvd1ZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIHJpcHVsaXJlIGxhIHNlbGV6aW9uZSBsYXRvIEhUTUxcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBuYXRpdm8gSmF2YXNjcmlwdFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgY2xlYXJUZXh0U2VsZWN0aW9uKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAvLyBTZWxlemlvbm8gZGVsIHRlc3RvIG1hIG5vbiBobyBzaGlmdCBwcmVtdXRvIC0+IGlnbm9ybyBsYSBzZWxlemlvbmVcclxuICAgICAgICBpZiAoKGV2ZW50LnZpZXcuZ2V0U2VsZWN0aW9uKCkudHlwZSA9PSAnUmFuZ2UnIHx8IGV2ZW50LnZpZXcuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKS5sZW5ndGggPiAwKSAmJiAhZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAgICAgLy8gU2VsZXppb25vIGRlbCB0ZXN0byBlIGhvIHNoaWZ0IHByZW11dG8gLT4gYW5udWxsbyBsYSBzZWxlemlvbmUgZGVsIHRlc3RvXHJcbiAgICAgICAgaWYgKChldmVudC52aWV3LmdldFNlbGVjdGlvbigpLnR5cGUgPT0gJ1JhbmdlJyB8fCBldmVudC52aWV3LmdldFNlbGVjdGlvbigpLnRvU3RyaW5nKCkubGVuZ3RoID4gMCkgJiYgZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnV0aUV4dHMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIG1hdHJpY2UgZGkgc2VsZXppb25lIGdlbmVyYXRhIGRhbCBtZXRvZG8gKipnZXRTZWxlY3Rpb25TdGF0dXNTZWxlY3Rpb24qKiBnZW5lcmEgbGEgc3RyaWduYSB2ZXJhIGUgcHJvcHJpYSBkYSBjb3BpYXJlIG5lbGxhIENsaXBib2FyZFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgdmFsdWU6IHN0cmluZywgdHlwZTogSW5wdXRUeXBlIH1bXVtdfSBzZWwgTWF0cmljZSBkaSBzZWxlemlvbmUgY29uIHZhbG9yaSBlIHRpcGkgZGVpIGRhdGkgc2VsZXppb25hdGlcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gU3RyaW5nYSBkYSBjb3BpYXJlIG5lbGxhIGNsaXBib2FyZCwgbGUgc3RyaW5naGUgdmVuZ29ubyB3cmFwcGF0ZSBmcmEgZG9wcGkgYXBpY2kgZSBmcmEgdW4gdmFsb3JlIGUgbCdhbHRybyB2aWVuZSBtZXNzbyB1biB0YWJcclxuICAgICAqIGluIG1vZG8gY2hlIHNpYW5vIGNvbXBhdGliaWxpIGFuY2hlIGNvbiBsYSBjb3BpYSBzdSBFeGNlbFxyXG4gICAgICovXHJcbiAgICBnZXRDbGlwYmFyZFRleHRGcm9tU2VsZWN0aW9uKHNlbDogeyB2YWx1ZTogc3RyaW5nLCB0eXBlOiBJbnB1dFR5cGUgfCBzdHJpbmcgfVtdW10pOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgc2VsLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgICAgIGxldCByb3cgPSBzZWxbcl07XHJcbiAgICAgICAgICAgIGlmIChyID4gMCkgcmV0ICs9IFwiXFxuXCI7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gcm93W2NdO1xyXG4gICAgICAgICAgICAgICAgcmV0ICs9IHRoaXMuZ2V0VmFsdWVCeVR5cGUoY29sKSArIChjIDwgcm93Lmxlbmd0aCAtIDEgPyBcIlxcdFwiIDogXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgbGEgcmFwcHJlc2VudGF6aW9uZSBzdHJpbmdhIGRpIHVuIHZhbG9yZSBkYXRvIHVuIHRpcG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHt7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IElucHV0VHlwZSB9fSB2YWxUeXBlIE9nZ2V0dG8gVmFsb3JlIC0gVGlwbyBkYSBjdWkgZXN0cmFwb2xhcmUgbGEgcmFwcHJlc2VudGF6aW9uZSBkZWwgZGF0byBpbiBzdHJpbmdhXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFZhbG9yZSBjb252ZXJ0aXRvIGluIHN0cmluZ2EgaW4gYmFzZSBhbCB0aXBvXHJcbiAgICAgKi9cclxuICAgIGdldFZhbHVlQnlUeXBlKHZhbFR5cGU6IHsgdmFsdWU6IHN0cmluZywgdHlwZTogSW5wdXRUeXBlIHwgc3RyaW5nIH0pOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodmFsVHlwZS50eXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ1wiJyArIHZhbFR5cGUudmFsdWUgKyAnXCInO1xyXG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxyXG4gICAgICAgICAgICBjYXNlICdpbnQnOlxyXG4gICAgICAgICAgICBjYXNlICdib29sZWFuJzpcclxuICAgICAgICAgICAgY2FzZSAnZW51bSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2F1dG9jb21wbGV0ZSc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2Zsb2F0JzpcclxuICAgICAgICAgICAgY2FzZSAnY3VycmVuY3knOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbFR5cGUudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXlqcyh2YWxUeXBlLnZhbHVlKS5mb3JtYXQodGhpcy5lc3QubGMudG9rZW4oXCJnZXRTbWFsbERhdGVEaXNwbGF5Rm9ybWF0XCIpKTtcclxuICAgICAgICAgICAgY2FzZSAnZGF0ZXRpbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbFR5cGUudmFsdWUpLmZvcm1hdCh0aGlzLmVzdC5sYy50b2tlbihcImdldEZ1bGxEYXRlRGlzcGxheUZvcm1hdFwiKSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ3RpbWUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbFR5cGUudmFsdWUpLmZvcm1hdChcIkhIOm1tOnNzXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSJdfQ==
|
|
754
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VsZWN0aW9uSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29yZS9oYW5kbGVycy9TZWxlY3Rpb25IYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQW9CbkUscURBQXFEO0FBQ3JELE1BQU0sT0FBTyxnQkFBZ0I7SUF1QnpCLDBCQUEwQjtJQUMxQixZQUFvQixHQUFxQixFQUFVLFNBQTZCO1FBQTVELFFBQUcsR0FBSCxHQUFHLENBQWtCO1FBQVUsY0FBUyxHQUFULFNBQVMsQ0FBb0I7UUF0QmhGLCtIQUErSDtRQUN2SCxlQUFVLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDakQsaUlBQWlJO1FBQ3pILGdCQUFXLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbEQscUlBQXFJO1FBQzdILG9CQUFlLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDdEQsMklBQTJJO1FBQ25JLDBCQUFxQixHQUFxQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRTVELGlJQUFpSTtRQUN6SCxpQkFBWSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3RELG1JQUFtSTtRQUMzSCxrQkFBYSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3ZELHVJQUF1STtRQUMvSCxzQkFBaUIsR0FBd0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUMzRCw2SUFBNkk7UUFDckksNEJBQXVCLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFNbUIsQ0FBQztJQUVyRixzQ0FBc0M7SUFDL0Isb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxD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QyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckUsS0FBSyxNQUFNO2dCQUNQLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQztZQUN2RixLQUFLLFVBQVU7Z0JBQ1gsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLEtBQUssTUFBTTtnQkFDUCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3REO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTW9kZWxsaVxyXG5pbXBvcnQgeyBBcHBTZWFyY2ggfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvQXBwU2VhcmNoXCI7XHJcbmltcG9ydCB7IEl0ZW1zU2VsZWN0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvYXBwc2VhcmNoL0l0ZW1zU2VsZWN0aW9uXCI7XHJcbmltcG9ydCB7IENhY2hlVHJpcHRpYyB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL0NhY2hlVHJpcHRpY1wiO1xyXG5pbXBvcnQgeyBJdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZVwiO1xyXG5pbXBvcnQgeyBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb24gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9Fc1RhYmxlQ29sdW1uc0RlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgSW5wdXRUeXBlIH0gZnJvbSAnLi4vLi4vZG9tYWluL3R5cGVzJztcclxuXHJcbi8vIENvbXBvbmVudGlcclxuaW1wb3J0IHsgRXNUYWJsZUNvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudFwiXHJcblxyXG4vLyBEaXJldHRpdmUgXHJcbmltcG9ydCB7IEVzVGhEaXJlY3RpdmUgfSBmcm9tIFwiLi4vLi4vZGlyZWN0aXZlcy9lc190aC5kaXJlY3RpdmVcIjtcclxuXHJcbi8vIEhhbmRsZXJzXHJcbmltcG9ydCB7IFJvd0dyb3VwaW5nSGFuZGxlciB9IGZyb20gXCIuL1Jvd0dyb3VwaW5nSGFuZGxlclwiO1xyXG5cclxuLyoqXHJcbiAqIERpY2hpYXJhemlvbmUgZGVsbGEgdmFyaWFiaWxlIGdsb2JhbGUgZGF5anMuIEwnb25lcmUgZGkgXCJjcmVhcmxhXCIgw6ggYWZmaWRhdG8gYWxsJ2FwcGxpY2F6aW9uZSBjaGUgdXRpbGl6emEgcXVlc3RhIGxpYnJlcmlhLCBcclxuICogY2hlIGRvdnLDoCBpbXBvcnRhcmUgbG8gc2NyaXB0IGdsb2JhbGUgZGkgZGF5anMgbmVsbGEgQ0xJXHJcbiAqL1xyXG4gZGVjbGFyZSB2YXIgZGF5anM6IGFueTtcclxuXHJcbi8qKiBDbGFzc2UgY2hlIGdlc3Rpc2NlIGxlIHNlbGV6aW9uaSBkZWdsaSBvZ2dldHRpICovXHJcbmV4cG9ydCBjbGFzcyBTZWxlY3Rpb25IYW5kbGVyIHtcclxuXHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKippdGVtcyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaGFzaCovXHJcbiAgICBwcml2YXRlIGl0ZW1zQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cHMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2ggKi9cclxuICAgIHByaXZhdGUgZ3JvdXBzQ2FjaGU6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipleGNsdXNpb25zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBoYXNoICovXHJcbiAgICBwcml2YXRlIGV4Y2x1c2lvbnNDYWNoZTogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKmdyb3VwX2V4Y2x1c2lvbnMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGhhc2ggKi9cclxuICAgIHByaXZhdGUgZ3JvdXBfZXhjbHVzaW9uc0NhY2hlOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIC8qKiBDYWNoZSBkaSBzZWxlemlvbmUgSGFzaCAtIE9nZ2V0dG8gcGVyIGxhIHZhcmlhYmlsZSAqKml0ZW1zKiogZGVsbCdpdGVtU2VsZWN0b3IuIEZhY2lsaXRhIGxlIG9wZXJhemlvbmkgZGkgbG9va3VwIHZpYSBpbmRpY2UqL1xyXG4gICAgcHJpdmF0ZSBpX2l0ZW1zQ2FjaGU6IE1hcDxzdHJpbmcsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcbiAgICAvKiogQ2FjaGUgZGkgc2VsZXppb25lIEhhc2ggLSBPZ2dldHRvIHBlciBsYSB2YXJpYWJpbGUgKipncm91cHMqKiBkZWxsJ2l0ZW1TZWxlY3Rvci4gRmFjaWxpdGEgbGUgb3BlcmF6aW9uaSBkaSBsb29rdXAgdmlhIGluZGljZSAqL1xyXG4gICAgcHJpdmF0ZSBpX2dyb3Vwc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlICovXHJcbiAgICBwcml2YXRlIGlfZXhjbHVzaW9uc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgLyoqIENhY2hlIGRpIHNlbGV6aW9uZSBIYXNoIC0gT2dnZXR0byBwZXIgbGEgdmFyaWFiaWxlICoqZ3JvdXBfZXhjbHVzaW9ucyoqIGRlbGwnaXRlbVNlbGVjdG9yLiBGYWNpbGl0YSBsZSBvcGVyYXppb25pIGRpIGxvb2t1cCB2aWEgaW5kaWNlICovXHJcbiAgICBwcml2YXRlIGlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG5cclxuICAgIC8qKiBVbHRpbWEgY2VsbGEgc2VsZXppb25hdGEgc2luZ29sYXJtZW50ZSAqL1xyXG4gICAgcHJpdmF0ZSBsYXN0U2luZ2xlU2VsZWN0aW9uOiB7IHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlciB9O1xyXG5cclxuICAgIC8qKiBAaWdub3JlIENvc3RydXR0b3JlICovXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVzdDogRXNUYWJsZUNvbXBvbmVudCwgcHJpdmF0ZSByZ0hhbmRsZXI6IFJvd0dyb3VwaW5nSGFuZGxlcikgeyB9XHJcblxyXG4gICAgLyoqIFJpcHVsaXNjZSBsZSBjYWNoZSBkaSBzZWxlemlvbmUgKi9cclxuICAgIHB1YmxpYyBjbGVhclNlbGVjdGlvbkNhY2hlcygpIHtcclxuICAgICAgICB0aGlzLml0ZW1zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmdyb3Vwc0NhY2hlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5jbGVhcigpO1xyXG5cclxuICAgICAgICB0aGlzLmlfaXRlbXNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuaV9ncm91cHNDYWNoZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuaV9leGNsdXNpb25zQ2FjaGUuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1dGEgcXVhbGkgZWxlbWVudGkgZGV2b25vIGVzc2VyZSBtYXJjYXRpIGNvbWUgc2VsZXppb25hdGkgbmVsbGEgdmlzdGEgYXR0dWFsZS4gU2kgYmFzYSBzdWxsJ29nZ2V0dG8gKipzZWxlY3Rpb24qKiBpbnRlcm5vIGFsbCdBcHBTZWFyY2hcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRpIGN1aSB2YWx1dGFyZSBsYSBzZWxlemlvbmVcclxuICAgICAqIEBwYXJhbSB7SXRlbXNTZWxlY3Rpb248YW55Pn0gc2VsZWN0aW9uSXRlbSBPZ2dldHRpIGRpIHNlbGV6aW9uZSBkZXJpdmFudGUgZGFsbGEgdmlldyBvIGRhbGwnb2dnZXR0byBwZXIgQXJyYXlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGV2YWx1YXRlU2VsZWN0aW9uKGl0ZW1zOiBhbnlbXSwgc2VsZWN0aW9uSXRlbTogSXRlbXNTZWxlY3Rpb248YW55Pikge1xyXG4gICAgICAgIGlmICghc2VsZWN0aW9uSXRlbSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLmhhbmRsZVNlbGVjdGlvbkV2YWx1YXRpb24oaXRlbXMsIHNlbGVjdGlvbkl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHJlY29tcGlsYSBsZSBpbmZvcm1hemlvbmkgc3VsbG8gc3RhdG8gZGkgc2VsZXppb25lIHR1dHRvIGEgZmFsc2UgcGVyIGxlIGNlbGxlIGRlbGxhIHRhYmVsbGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBhdHR1YWxtZW50ZSBiaW5kYXRpIHN1bGxhIHRhYmVsbGFcclxuICAgICAqIEBwYXJhbSB7RXNUaERpcmVjdGl2ZVtdfSB0aHMgQ29sb25uZSBzdSBjdWkgZ2xpIG9nZ2V0dGkgc29ubyBiaW5kYXRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBldmFsdWF0ZVNpbmdsZUNlbGxTZWxlY3Rpb24oaXRlbXM6IGFueVtdLCB0aHM6IEVzVGhEaXJlY3RpdmVbXSwgZHluOiBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb25bXSkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgLy8gaXRlbXNbaV0uX29yZGluYWwgZG92cmViYmUgZXNzZXJlIHVndWFsZSBhIFwiaVwiIG1hIGRhdG8gY2hlIGxhdG8gSFRNTCBpbCBjaWNsbyDDqCBlc3Rlcm5vIGUgbm9uIGhvIGwnaW5kaWNlIHBlciBjb252ZW56aW9uZSBtaSBiYXNvIHN1bGwnX29yZGluYWxcclxuICAgICAgICAgICAgdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW2l0ZW1zW2ldLl9vcmRpbmFsXSA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoZHluICYmIGR5bi5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxsU2VsZWN0aW9uU3RhdHVzQnlEeW5hbWljQ29sdW1ucyhpdGVtc1tpXSwgZHluKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWxsU2VsZWN0aW9uU3RhdHVzQnlFc1RocyhpdGVtc1tpXSwgdGhzKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBwcml2YXRlIGZpbGxTZWxlY3Rpb25TdGF0dXNCeUR5bmFtaWNDb2x1bW5zKGl0ZW06IGFueSwgZHluOiBFc1RhYmxlQ29sdW1uc0RlZmluaXRpb25bXSl7XHJcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBkeW4ubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gZHluW2tdO1xyXG4gICAgICAgICAgICBsZXQgaXBlcjogSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZSA9IHsgc2VsZWN0ZWQ6IGZhbHNlLCB2YWx1ZTogdGguUHJvcGVydHlOYW1lID8gaXRlbVt0aC5Qcm9wZXJ0eU5hbWVdIDogXCJVbmRlZmluZWQgUHJvcGVydHlcIiwgdHlwZTogdGguUHJvcGVydHlUeXBlLCBwcm9wZXJ0eTogdGguUHJvcGVydHlOYW1lLCBoZWFkZXI6IHRoLlByb3BlcnR5TmFtZSwgaXRlbTogaXRlbSB9O1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbF1ba10gPSBpcGVyO1xyXG5cclxuICAgICAgICAgICAgLy8gRnVuemlvbmUgYXNzZWduYXRhIGRvcG8gaW4gbW9kbyBkYSBwb3RlcmxlIGZhcmUgYW5jaGUgYWdnaW9ybmFyZSBpbCB2YWxvcmUgZGVsIHJpZmVyaW1lbnRvIGFsbCdvZ2dldHRvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICBpcGVyLnZhbF9zZXR0ZXIgPSAodmFsdWU6IHN0cmluZyk6IGFueSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoLlByb3BlcnR5TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1bdGguUHJvcGVydHlOYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlwZXIudmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHZhbFRvQXBwbHkgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aC5Qcm9wZXJ0eVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHZhbHVlLnN1YnN0cmluZygxLCB2YWx1ZS5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJpbnRcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYm9vbGVhblwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbnVtXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImF1dG9jb21wbGV0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmbG9hdFwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJjdXJyZW5jeVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gdGhpcy5lc3QuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24odmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwidGltZVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXlkYXRlID0gdGhpcy5lc3QuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24odmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxUb0FwcGx5ID0gYCR7bXlkYXRlLmhvdXIoKX06JHtteWRhdGUubWludXRlKCl9OiR7bXlkYXRlLnNlY29uZCgpfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpdGVtW3RoLlByb3BlcnR5TmFtZV0gPSB2YWxUb0FwcGx5O1xyXG4gICAgICAgICAgICAgICAgaXBlci52YWx1ZSA9IHZhbFRvQXBwbHk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsVG9BcHBseTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHJpdmF0ZSBmaWxsU2VsZWN0aW9uU3RhdHVzQnlFc1RocyhpdGVtOiBhbnksIHRoczogRXNUaERpcmVjdGl2ZVtdKSB7XHJcbiAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCB0aHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2tdO1xyXG4gICAgICAgICAgICBsZXQgaXBlcjogSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZSA9IHsgc2VsZWN0ZWQ6IGZhbHNlLCB2YWx1ZTogdGgudGhQcm9wZXJ0eSA/IGl0ZW1bdGgudGhQcm9wZXJ0eV0gOiBcIlVuZGVmaW5lZCBQcm9wZXJ0eVwiLCB0eXBlOiB0aC50aFR5cGUsIHByb3BlcnR5OiB0aC50aFByb3BlcnR5LCBoZWFkZXI6IHRoLnRoLCBpdGVtOiBpdGVtIH07XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsXVtrXSA9IGlwZXI7XHJcblxyXG4gICAgICAgICAgICAvLyBGdW56aW9uZSBhc3NlZ25hdGEgZG9wbyBpbiBtb2RvIGRhIHBvdGVybGUgZmFyZSBhbmNoZSBhZ2dpb3JuYXJlIGlsIHZhbG9yZSBkZWwgcmlmZXJpbWVudG8gYWxsJ29nZ2V0dG8gZGkgc2VsZXppb25lXHJcbiAgICAgICAgICAgIGlwZXIudmFsX3NldHRlciA9ICh2YWx1ZTogc3RyaW5nKTogYW55ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghdGgudGhQcm9wZXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1bdGgudGhQcm9wZXJ0eV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpcGVyLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCB2YWxUb0FwcGx5ID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodGgudGhUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXCInKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZS5zdWJzdHJpbmcoMSwgdmFsdWUubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbFRvQXBwbHkgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaW50XCI6XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW51bVwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJhdXRvY29tcGxldGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZmxvYXRcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiY3VycmVuY3lcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRhdGVcIjpcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IHRoaXMuZXN0LmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInRpbWVcIjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG15ZGF0ZSA9IHRoaXMuZXN0LmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsVG9BcHBseSA9IGAke215ZGF0ZS5ob3VyKCl9OiR7bXlkYXRlLm1pbnV0ZSgpfToke215ZGF0ZS5zZWNvbmQoKX1gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaXRlbVt0aC50aFByb3BlcnR5XSA9IHZhbFRvQXBwbHk7XHJcbiAgICAgICAgICAgICAgICBpcGVyLnZhbHVlID0gdmFsVG9BcHBseTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxUb0FwcGx5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW1wbGVtZW50YXppb25lIGFnbm9zdGljYSBkZWxsYSB2YWx1dGF6aW9uZSBkZWxsZSBzZWxlemlvbmkgZGVnbGkgb2dnZXR0aS4gUmljaGllZGUgZ2xpIG9nZ2V0dGkgZGVsbGEgdmlzdGEgYXR0dWFsZSBlIGwnaXRlbVNlbGVjdG9yXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkaSBjdWkgYWdnaW9ybmFyZSBsbyBzdGF0byBkaSBzZWxlemlvbmVcclxuICAgICAqIEBwYXJhbSB7SXRlbXNTZWxlY3Rpb248YW55Pn0gc2VsZWN0aW9uSXRlbSBPZ2dldHRvIGNvbnRlbmVudGUgbG8gc3RhdG8gYXR0dWFsZSBkaSBzZWxlemlvbmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVTZWxlY3Rpb25FdmFsdWF0aW9uKGl0ZW1zOiBhbnlbXSwgc2VsZWN0aW9uSXRlbTogSXRlbXNTZWxlY3Rpb248YW55Pikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGl0bSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBsZXQgaGFzaCA9IGl0bS5faGFzaDtcclxuICAgICAgICAgICAgbGV0IGl0ZW1Hcm91cCA9IGl0bS5fZ3JvdXAgPyBudWxsIDogdGhpcy5nZXRJdGVtR3JvdXAoaXRtKTtcclxuICAgICAgICAgICAgLy8gUmVpZHJhdG8gbGEgY2FjaGUgZGkgc2VsZXppb25lIGNvaSBudW92aSBvZ2dldHRpIGFsdHJpbWVudGkgbm9uIHJpdXNjaXJlaSBhIGJlY2NhcmUgZ2xpIGluZGljaSBnaXVzdGlcclxuICAgICAgICAgICAgLy8gRG9wb2RpY2jDqSBsYSB1c28gcGVyIGNhbGNvbGFyZSBpc3RhbnRhbmVhbWVudGUgc2UgZ2xpIG9nZ2V0dGkgc29ubyBzZWxlemlvbmF0aSBvIG5vXHJcbiAgICAgICAgICAgIHRoaXMucmVoaWRyYXRlQ2FjaGUoaXRtKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpdG0uX2l0ZW0pIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmFsbClcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX3NlbGVjdGVkID0gIXRoaXMuZXhjbHVzaW9uc0NhY2hlLmhhcyhoYXNoKSAmJiAoKCF0aGlzLmdyb3Vwc0NhY2hlLmhhcyhpdGVtR3JvdXA/Ll9oYXNoKSAmJiB0aGlzLml0ZW1zQ2FjaGUuaGFzKGhhc2gpKSB8fCAhdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGl0ZW1Hcm91cD8uX2hhc2gpKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICBpdG0uX3NlbGVjdGVkID0gIXRoaXMuZXhjbHVzaW9uc0NhY2hlLmhhcyhoYXNoKSAmJiAodGhpcy5ncm91cHNDYWNoZS5oYXMoaXRlbUdyb3VwPy5faGFzaCkgfHwgdGhpcy5pdGVtc0NhY2hlLmhhcyhoYXNoKSB8fCAodGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0ZW1Hcm91cCkgPT0gJ2luY2x1ZGVkJyAmJiAhdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGl0ZW1Hcm91cD8uX2hhc2gpKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRtLl9ncm91cCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uYWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIGl0bS5fc2VsZWN0ZWQgPSAhdGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGhhc2gpICYmIHRoaXMucGFyZW50VHJlZVN0YXR1cyhpdG0pICE9ICdleGNsdWRlZCc7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgaXRtLl9zZWxlY3RlZCA9IHRoaXMuZ3JvdXBzQ2FjaGUuaGFzKGhhc2gpIHx8ICh0aGlzLnBhcmVudFRyZWVTdGF0dXMoaXRtKSA9PSAnaW5jbHVkZWQnICYmICF0aGlzLmdyb3VwX2V4Y2x1c2lvbnNDYWNoZS5oYXMoaGFzaCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSB0dXR0aSBnbGkgb2dnZXR0aSBkaSBxdWVzdGEgcGFnaW5hIHNvbm8gc29sZXppb25hdGkgYWxsb3JhIHBvc3NvIG1ldHRlcmUgaWwgZ2xvYmFsIGNoZWNrIGEgdHJ1ZVxyXG4gICAgICAgIC8vIFNlIHNvbm8gaW4gc2l0dWF6aW9uZSBkaSBhbGwtc2VsZWN0IGFuY2hlIG1ldHRvIGxhIGdsb2JhbCBjaGVja2JveCwgbm9ub3N0YW50ZSBjaSBwb3NzYW5vIGVzc2VyZSBkZWxsZSBlc2NsdXNpb25pXHJcbiAgICAgICAgdGhpcy5lc3QuZ2xvYmFsQ2hlY2sgPSB0aGlzLmVzdC5ib3VuZFNvdXJjZS5sZW5ndGggPiAwICYmIHRoaXMuZXN0LmJvdW5kU291cmNlLmZpbHRlcih0ID0+IHQuX2dyb3VwIHx8IHQuX2l0ZW0pLmV2ZXJ5KHQgPT4gdC5fc2VsZWN0ZWQpO1xyXG4gICAgICAgIHRoaXMuZXN0LmNhblNlbGVjdEFsbCA9IHNlbGVjdGlvbkl0ZW0uY291bnQgPiAwICYmIHRoaXMuZXN0LlNlbGVjdEFsbCAmJiAhdGhpcy5lc3QuU2luZ2xlU2VsZWN0aW9uO1xyXG5cclxuICAgICAgICAvLyBQb3RyZWJiZSBjYW1iaWFyZSBxdWFsb3JhIHF1YWxjdW5vIGluc2VyaXNzZSBkYXRpIGEgbWFuYXp6YSBpbiBtb2RhbGl0w6AgQXJyYXkgZSBkZXNzZSBpbCByZWZyZXNoIG1hbnVhbGUgYWxsYSB0YWJlbGxhXHJcbiAgICAgICAgLy8gQ29tdW5xdWUgY29zdGEgMCBxdWluZGkgbWkgcGVybWV0dG8gZGkgcmVmcmVzaGFyZVxyXG4gICAgICAgIGlmICh0aGlzLmVzdC5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgbGV0IHByZXZTZWxlY3RlZCA9IHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cztcclxuICAgICAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cyAhPSBwcmV2U2VsZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVzdC5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChzZWxlY3Rpb25JdGVtKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRvIHVuIG9nZ2V0dG8gdHJvdmEgbGEgY2VsbGEgZGkgY2FjaGUgaW4gY3VpIMOoIHJlZ2lzdHJhdG8gZSBhZ2dpb3JuYSBpbCBjb250ZW51dG9cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBkYSBhZ2dpb3JuYXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVoaWRyYXRlQ2FjaGUoaXRlbTogYW55KSB7XHJcbiAgICAgICAgbGV0IGN0eCA9IGl0ZW0uX2hhc2g7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5pdGVtc0NhY2hlLnNldChjdHgsIGl0ZW0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cF9leGNsdXNpb25zQ2FjaGUuaGFzKGN0eCkpXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLnNldChjdHgsIGl0ZW0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cHNDYWNoZS5oYXMoY3R4KSlcclxuICAgICAgICAgICAgdGhpcy5ncm91cHNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXhjbHVzaW9uc0NhY2hlLmhhcyhjdHgpKVxyXG4gICAgICAgICAgICB0aGlzLmV4Y2x1c2lvbnNDYWNoZS5zZXQoY3R4LCBpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdG8gdW4gZ3J1cHBvIGNvbnRyb2xsYSByaWNvcnNpdmFtZW50ZSBsJ2FsYmVybyBkaSBjdWkgZmEgcGFydGUgc2UgYyfDqCBzdGF0YSB1bmEgaW5jbHVzaW9uZSBvIGVzY2x1c2lvbmUgZGlyZXR0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JwIEdydXBwbyBkYSBjb250cm9sbGFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7J25vbmUnIHwgJ2V4Y2x1ZGVkJyB8ICdpbmNsdWRlZCd9IFxyXG4gICAgICogJ25vbmUnIHNlIG5vbiBjaSBzb25vIGluZm9ybWF6aW9uaSBzdSBpbmNsdXNpb25pIG8gZXNjbHVzaW9uaSBcclxuICAgICAqICdpbmNsdWRlZCcgc2UgaWwgZ3J1cHBvIGNvbnRyb2xsYXRvIMOoIHN0YXRvIGluY2x1c28gaW4gbWFuaWVyYSBlc3BsaWNpdGEgZGFsbCdhbGJlcm8gZGVpIGdydXBwaSBwYWRyaVxyXG4gICAgICogJ2V4Y2x1ZGVkJyBzZSBpbCBncnVwcG8gY29udHJvbGxhdG8gw6ggc3RhdG8gZXNjbHVzbyBpbiBtYW5pZXJhIGVzcGxpY2l0YSBkYWxsJ2FsYmVybyBkZWkgZ3J1cHBpIHBhZHJpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGFyZW50VHJlZVN0YXR1cyhncnA6IGFueSk6ICdub25lJyB8ICdleGNsdWRlZCcgfCAnaW5jbHVkZWQnIHtcclxuICAgICAgICBpZiAoIWdycClcclxuICAgICAgICAgICAgcmV0dXJuICdub25lJztcclxuXHJcbiAgICAgICAgbGV0IHBhcmVudEdyb3VwOiBhbnkgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGdycC5fcGFyZW50KTtcclxuXHJcbiAgICAgICAgaWYgKCFwYXJlbnRHcm91cClcclxuICAgICAgICAgICAgcmV0dXJuICdub25lJztcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLmhhcyhwYXJlbnRHcm91cC5faGFzaCkpXHJcbiAgICAgICAgICAgIHJldHVybiAnZXhjbHVkZWQnO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cHNDYWNoZS5oYXMocGFyZW50R3JvdXAuX2hhc2gpKVxyXG4gICAgICAgICAgICByZXR1cm4gJ2luY2x1ZGVkJztcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50VHJlZVN0YXR1cyhwYXJlbnRHcm91cCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBnZXN0aXJlIGxhIHNlbGV6aW9uZSBkaSBOIGVsZW1lbnRpIHV0aWxpenphbmRvIGxhIENhY2hlIGRpIHNlbGV6aW9uZSBlZCBldmVudHVhbG1lbnRlIGFnZ2lvcm5hbmRvIGlsIGNvbmNldHRvIGRpIFwiYWxsIHNlbGVjdGlvblwiXHJcbiAgICAgKlxyXG4gICAgICogVnVuemlvbmEgc2lhIGluIG1vZGFsaXTDoCBBcnJheSBjaGUgaW4gbW9kYWxpdMOgIFZpZXcgU2VtcGxpY2UgbyBWaWV3IEF2YW56YXRhIChjb24gbGUgQ3VzdG9tIENlbGxzKVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7YW55W119IGl0ZW1zIE9nZ2V0dGkgZGEgc2VsZXppb25hcmUgbyBkZXNlbGV6aW9uYXJlXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlZFZhbCBWYWxvcmUgZm9yemF0byBkaSBjaGVjayBkYSBhc3NlZ25hcmUgYWdsaSBvZ2dldHRpXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGdsb2JhbENoZWNrIFZhbG9yZSBkZWwgY2hlY2sgZ2xvYmFsZVxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBPZ2dldHRvIGRpIHNlbGV6aW9uZSBhZ2dpb3JuYXRvIGNvbiBsZSBpbmZvcm1hemlvbmkgc3VsbCd1bHRpbWEgb3BlcmF6aW9uZSBlZmZldHR1YXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtczogYW55W10sIGZvcmNlZFZhbDogYm9vbGVhbiA9IG51bGwsIGdsb2JhbENoZWNrOiBib29sZWFuID0gbnVsbCk6IEl0ZW1zU2VsZWN0aW9uPGFueT4ge1xyXG4gICAgICAgIGxldCBzaSA9ICh0aGlzLmVzdC5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuZXN0LmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBpbiBtb2RhbGl0w6AgZGkgc2VsZXppb25lIHNpbmdvbGEgZSBkZXZvIHNlbGV6aW9uYXJlIHVuJ29nZ2V0dG8sIHBlciBwcmltYSBjb3NhIGRldm8gZGVzZWxlemlvbmFyZSB0dXR0aSBnbGkgYWx0cmlcclxuICAgICAgICBpZiAodGhpcy5lc3QuU2luZ2xlU2VsZWN0aW9uICYmIGl0ZW1zWzBdPy5fc2VsZWN0ZWQgJiYgIWl0ZW1zWzBdPy5fZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEgJiYgZm9yY2VkVmFsID09IG51bGwpXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBcIlRlbnRhdGl2byBkaSBzZWxlemlvbmFyZSBvIGRlc2VsZXppb25hcmUgcGnDuSBkaSB1biBlbGVtZW50byBjb24gU2luZ2xlU2VsZWN0aW9uIGF0dGl2b1wiO1xyXG5cclxuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAxICYmIGZvcmNlZFZhbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBzaSA9IHRoaXMuaGFuZGxlSXRlbXNTZWxlY3Rpb24odGhpcy5lc3QuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gIXQuX2dyb3VwKSwgZmFsc2UsIG51bGwpO1xyXG4gICAgICAgICAgICAgICAgaXRlbXNbMF0uX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgaXRlbSA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICBsZXQgdG9DaGFuZ2UgPSBmb3JjZWRWYWwgIT0gbnVsbCA/IGl0ZW0uX3NlbGVjdGVkICE9IGZvcmNlZFZhbCA6IGdsb2JhbENoZWNrICE9IG51bGwgPyBpdGVtLl9zZWxlY3RlZCAhPSB0aGlzLmVzdC5nbG9iYWxDaGVjayA6IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgZGV2J2Vzc2VyZSBvdmVycmlkYXRvIGlsIHZhbG9yZSBkaSBjaGVjayBlZmZldHR1byBsJ292ZXJyaWRlIG8gY29sIHZhbG9yZSBmb3J6YXRvIG8gY29sIHZhbG9yZSBnbG9iYWxlXHJcbiAgICAgICAgICAgIGlmICh0b0NoYW5nZSAmJiAhaXRlbS5sb2NrZWQpXHJcbiAgICAgICAgICAgICAgICBpdGVtLl9zZWxlY3RlZCA9IGZvcmNlZFZhbCAhPSBudWxsID8gZm9yY2VkVmFsIDogdGhpcy5lc3QuZ2xvYmFsQ2hlY2s7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBpbCB2YWxvcmUgbm9uIGRldidlc3NlcmUgdmFyaWF0byBlIHZlbmdvIGRhIHVuYSBzZWxlemlvbmUgZ2xvYmFsZSBzZW1wbGljZW1lbnRlIGV2aXRvIGRpIGVmZmV0dHVhcmUgb3BlcmFpem9uaSBpbnV0aWxpLiBMJ2l0ZW0vZ3J1cHBvIMOoIGdpw6AgbmVsbG8gc3RhdG8gZ2l1c3RvXHJcbiAgICAgICAgICAgIGlmICghdG9DaGFuZ2UgJiYgZ2xvYmFsQ2hlY2sgIT0gbnVsbClcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgbGV0IGFsbFNlbGVjdGlvbiA9IHNpLmFsbDtcclxuICAgICAgICAgICAgbGV0IGlzR3JvdXAgPSBpdGVtLl9ncm91cDtcclxuICAgICAgICAgICAgbGV0IGlzU2VsZWN0aW9uID0gaXRlbS5fc2VsZWN0ZWQ7XHJcbiAgICAgICAgICAgIGxldCBpdGVtR3JvdXAgPSBudWxsLCBhbGxJdGVtcyA9IG51bGwsIHNlbGVjdGVkSXRlbXMgPSBudWxsLCB1bnNlbGVjdGVkSXRlbXMgPSBudWxsLCBhbGxHcm91cHMgPSBudWxsLCBzZWxlY3RlZEdyb3VwcyA9IG51bGwsIHVuc2VsZWN0ZWRHcm91cHMgPSBudWxsLCBwYXJlbnRHcm91cFNlbGVjdGVkID0gbnVsbCwgcGFyZW50R3JvdXBVbnNlbGVjdGVkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgIGlmIChpc0dyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHRzID0gdGhpcy5wYXJlbnRUcmVlU3RhdHVzKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBTZWxlY3RlZCA9IHB0cyA9PSAnaW5jbHVkZWQnO1xyXG4gICAgICAgICAgICAgICAgcGFyZW50R3JvdXBVbnNlbGVjdGVkID0gcHRzID09ICdleGNsdWRlZCc7XHJcbiAgICAgICAgICAgICAgICBhbGxJdGVtcyA9IHRoaXMuZ2V0R3JvdXBJdGVtcyhzaSwgaXRlbSwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRHcm91cEl0ZW1zKHNpLCBpdGVtLCAnc2VsZWN0ZWQnLCB0cnVlLCBhbGxJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICB1bnNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldEdyb3VwSXRlbXMoc2ksIGl0ZW0sICd1bnNlbGVjdGVkJywgdHJ1ZSwgYWxsSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgYWxsR3JvdXBzID0gdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKHNpLCBpdGVtLCBudWxsLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGVkR3JvdXBzID0gdGhpcy5nZXRHcm91cENoaWxkR3JvdXBzKHNpLCBpdGVtLCAnc2VsZWN0ZWQnLCB0cnVlLCBhbGxHcm91cHMpO1xyXG4gICAgICAgICAgICAgICAgdW5zZWxlY3RlZEdyb3VwcyA9IHRoaXMuZ2V0R3JvdXBDaGlsZEdyb3VwcyhzaSwgaXRlbSwgJ3Vuc2VsZWN0ZWQnLCB0cnVlLCBhbGxHcm91cHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaXRlbUdyb3VwID0gdGhpcy5nZXRJdGVtR3JvdXAoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRHcm91cFNlbGVjdGVkID0gaXRlbUdyb3VwID09IG51bGwgPyBudWxsIDogaXRlbUdyb3VwLl9zZWxlY3RlZDtcclxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwVW5zZWxlY3RlZCA9IGl0ZW1Hcm91cCA9PSBudWxsID8gbnVsbCA6ICFpdGVtR3JvdXAuX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZXN0LkFycmF5R3JvdXBpbmcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKHNpLCBpdGVtLCBhbGxTZWxlY3Rpb24sIGlzR3JvdXAsIGlzU2VsZWN0aW9uLCBzZWxlY3RlZEl0ZW1zLCBzZWxlY3RlZEdyb3VwcywgdW5zZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkR3JvdXBzLCBhbGxJdGVtcywgYWxsR3JvdXBzLCBwYXJlbnRHcm91cFNlbGVjdGVkLCBwYXJlbnRHcm91cFVuc2VsZWN0ZWQpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1TaW1wbGVTZWxlY3Rpb25PcGVyYXRpb25zKHNpLCBpdGVtLCBpc0dyb3VwLCBpc1NlbGVjdGlvbiwgaXRlbUdyb3VwLCBzZWxlY3RlZEl0ZW1zLCB1bnNlbGVjdGVkSXRlbXMsIGFsbEl0ZW1zLCBhbGxHcm91cHMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gSW1wb3N0byBpbCBjaGVjayBnbG9iYWxlIGluIGJhc2UgYSBzZSB0dXR0aSBnbGkgZWxlbWVudGkgc29ubyBzZWxlemlvbmF0aSBvIG1lbm8uXHJcbiAgICAgICAgLy8gRXZpdG8gZGkgZmFyZSBxdWVzdGUgb3BlcmF6aW9uaSBzZSBsYSBzZWxlemlvbmUgZGVyaXZhIHByb3ByaW8gZGFsIGdsb2JhbCBDaGVja1xyXG4gICAgICAgIGlmIChnbG9iYWxDaGVjayA9PSBudWxsKVxyXG4gICAgICAgICAgICB0aGlzLmVzdC5nbG9iYWxDaGVjayA9ICF0aGlzLmVzdC5ib3VuZFNvdXJjZS5zb21lKHQgPT4gIXQuX3NlbGVjdGVkICYmICF0Ll9zZXApO1xyXG5cclxuICAgICAgICB0aGlzLmZpbmFsaXplU2VsZWN0aW9uSW5mb3JtYXRpb25zKHNpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHNpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byBMJ29nZ2V0dG8gZGkgc2VsZXppb25lLCBsJ29nZ2V0dG8gZGEgc2VsZXppb25hcmUvZGVzZWxlemlvbmFyZSBlIHR1dHRpIGkgcGFyYW1ldHJpIGRlbCBjYXNvIGVmZmV0dHVhIGxlIG9wZXJhemlvbmkgY2hlIHNlcnZvbm8uXHJcbiAgICAgKiBcclxuICAgICAqIExvZ2ljYSBzZW1wbGlmaWNhdGEgcmlzcGV0dG8gYWxsJ29yaWdpbmFsZSAqKnBlcmZvcm1TZWxlY3Rpb25PcGVyYXRpb25zKiogcGVyIGxhdm9yYXJlIGluIHVuYSBtb2RhbGl0w6AgaW4gY3VpIHR1dHRpIGdsaSBlbGVtZW50aSBzb25vIGNhcmljYXRpICgqKkFycmF5R3JvdXBpbmcqKiA9IHRydWUpXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGVyZm9ybVNpbXBsZVNlbGVjdGlvbk9wZXJhdGlvbnMoYmFzZTogSXRlbXNTZWxlY3Rpb248YW55PiwgaXRlbTogYW55LCBncm91cDogYm9vbGVhbiwgc2VsOiBib29sZWFuLCBpdG1fZ3JvdXA6IGFueSwgc2VsX2l0bTogYW55W10sIGRlc2VsX2l0bTogYW55W10sIGFsbF9pdG1zOiBhbnlbXSwgYWxsX2dycHM6IGFueVtdKSB7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNJdGVtID0gdGhpcy5nZXRUcmlwdGljKCdpdGVtJywgYmFzZSk7XHJcblxyXG4gICAgICAgIGlmIChncm91cCkge1xyXG4gICAgICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAgICAgICBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gdHJ1ZTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGVzZWxfaXRtKVxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2VsX2l0bS5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5hZGRJdGVtKGVsLCB0cmlwdGljSXRlbSkgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gZmFsc2U7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbF9pdG0pXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsX2l0bS5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gZmFsc2U7IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0l0ZW0pIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoc2VsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0bV9ncm91cCAmJiBhbGxfaXRtcyAmJiBhbGxfaXRtcy5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEdyb3VwKGl0bV9ncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0bV9ncm91cClcclxuICAgICAgICAgICAgICAgICAgICBpdG1fZ3JvdXAuX3NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIHNlbGV6aW9uYXJlIHVuIGdydXBwbyBlLCByaWNvcnNpdmFtZW50ZSwgc2UgdHV0dGkgaSBncnVwcGkgc290dG9zdGFudGkgYWwgcGFyZW50IHNvbm8gc2VsZXppb25hdGksIHNlbGV6aW9uYXJlIGkgZ3J1cHBpIHBhZHJpXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBncm91cCBHcnVwcG8gZGEgc2VsZXppb25hcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZWxlY3RHcm91cChncm91cDogYW55KSB7XHJcbiAgICAgICAgZ3JvdXAuX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcGFyZW50ID0gdGhpcy5nZXRHcm91cFBhcmVudChncm91cCk7XHJcbiAgICAgICAgaWYgKHBhcmVudCAmJiB0aGlzLmdldEdyb3VwQ2hpbGRHcm91cHMobnVsbCwgcGFyZW50LCBudWxsLCB0cnVlKS5ldmVyeSh0ID0+IHQuX3NlbGVjdGVkKSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RHcm91cChwYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byBMJ29nZ2V0dG8gZGkgc2VsZXppb25lLCBsJ29nZ2V0dG8gZGEgc2VsZXppb25hcmUvZGVzZWxlemlvbmFyZSBlIHR1dHRpIGkgcGFyYW1ldHJpIGRlbCBjYXNvIGVmZmV0dHVhIGxlIG9wZXJhemlvbmkgY2hlIHNlcnZvbm8uXHJcbiAgICAgKiBcclxuICAgICAqIExhIGxvZ2ljYSBkaSBxdWVzdGEgZnVuemlvbmUgw6ggbmF0YSBlc3NlbnppYWxtZW50ZSBkYSBzcGFtIGRpIHRyaWFsICYgZXJyb3IgZWQgw6ggc3RhdGEgdGVzdGF0YSBzb2xvIGZpbm8gYSBkdWUgbGl2ZWxsaSBkaSByYWdncnVwcGFtZW50byxcclxuICAgICAqIHF1YWxzaWFzaSBjb3NhIHZhZGEgb2x0cmUgbm9uIMOoIDEwMCUgZGV0dG8gY2hlIGZ1bnppb25pLi4uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcGVyZm9ybVNlbGVjdGlvbk9wZXJhdGlvbnMoYmFzZTogSXRlbXNTZWxlY3Rpb248YW55PiwgaXRlbTogYW55LCBhbGw6IGJvb2xlYW4sIGdyb3VwOiBib29sZWFuLCBzZWw6IGJvb2xlYW4sIHNlbF9pdG06IGFueVtdLCBzZWxfZ3JwOiBhbnlbXSwgZGVzZWxfaXRtOiBhbnlbXSwgZGVzZWxfZ3JwOiBhbnlbXSwgYWxsX2l0bXM6IGFueVtdLCBhbGxfZ3JwczogYW55W10sIHBhcmVudF9pbmNsOiBib29sZWFuLCBwYXJlbnRfZXhjbDogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCB0cmlwdGljR3JvdXAgPSB0aGlzLmdldFRyaXB0aWMoJ2dyb3VwJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNJdGVtID0gdGhpcy5nZXRUcmlwdGljKCdpdGVtJywgYmFzZSk7XHJcbiAgICAgICAgbGV0IHRyaXB0aWNFeGNsID0gdGhpcy5nZXRUcmlwdGljKCdleGNsdXNpb24nLCBiYXNlKTtcclxuICAgICAgICBsZXQgdHJpcHRpY2dycEV4Y2wgPSB0aGlzLmdldFRyaXB0aWMoJ2dyb3VwX2V4Y2x1c2lvbicsIGJhc2UpO1xyXG5cclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbCB8fCBwYXJlbnRfaW5jbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgdHJpcHRpY2dycEV4Y2wpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSXRlbShpdGVtLCB0cmlwdGljR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChzZWxfaXRtKSBzZWxfaXRtLmZvckVhY2goZWwgPT4gdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljSXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbF9ncnApIHNlbF9ncnAuZm9yRWFjaChnciA9PiB0aGlzLnJlbW92ZUl0ZW0oZ3IsIHRyaXB0aWNHcm91cCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9pdG1zKSBhbGxfaXRtcy5mb3JFYWNoKGVsID0+IHsgZWwuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5yZW1vdmVJdGVtKGVsLCB0cmlwdGljRXhjbCk7IH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbF9ncnBzKSBhbGxfZ3Jwcy5mb3JFYWNoKGdyID0+IHsgZ3IuX3NlbGVjdGVkID0gdHJ1ZTsgdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljZ3JwRXhjbCk7IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFsbCB8fCBwYXJlbnRfaW5jbClcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY2dycEV4Y2wpO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljR3JvdXApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkZXNlbF9pdG0pIGRlc2VsX2l0bS5mb3JFYWNoKGVsID0+IHRoaXMucmVtb3ZlSXRlbShlbCwgdHJpcHRpY0V4Y2wpKTtcclxuICAgICAgICAgICAgICAgIGlmIChkZXNlbF9ncnApIGRlc2VsX2dycC5mb3JFYWNoKGdyID0+IHRoaXMucmVtb3ZlSXRlbShnciwgdHJpcHRpY0V4Y2wpKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbGxfaXRtcykgYWxsX2l0bXMuZm9yRWFjaChlbCA9PiB7IGVsLl9zZWxlY3RlZCA9IGZhbHNlOyB0aGlzLnJlbW92ZUl0ZW0oZWwsIHRyaXB0aWNJdGVtKTsgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsX2dycHMpIGFsbF9ncnBzLmZvckVhY2goZ3IgPT4geyBnci5fc2VsZWN0ZWQgPSBmYWxzZTsgdGhpcy5yZW1vdmVJdGVtKGdyLCB0cmlwdGljR3JvdXApOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHNlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKChwYXJlbnRfZXhjbCA9PSBudWxsICYmIGFsbCkgfHwgcGFyZW50X2luY2wpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIHRyaXB0aWNFeGNsKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0oaXRlbSwgdHJpcHRpY0l0ZW0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudF9leGNsIHx8ICghYWxsICYmIHBhcmVudF9leGNsID09IG51bGwpKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCB0cmlwdGljSXRlbSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKGl0ZW0sIHRyaXB0aWNFeGNsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogSGVscGVyIHBlciBldml0YXJlIGRpIHJpc2NyaXZlcmUgb2duaSBzYW50YSB2b2x0YSBhcnJheS5zcGxpY2UoYXJyYXkuaW5kZXhvZihpdGVtKSwgMSk7ICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUl0ZW0oaXRlbTogYW55LCB0cmlwdGljPzogQ2FjaGVUcmlwdGljKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdHJpcHRpYy5pbmRleF9jYWNoZS5nZXQoaXRlbS5faGFzaCk7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdHJpcHRpYy5jYWNoZS5kZWxldGUoaXRlbS5faGFzaCk7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuaW5kZXhfY2FjaGUuZGVsZXRlKGl0ZW0uX2hhc2gpO1xyXG4gICAgICAgICAgICB0cmlwdGljLmFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gISFpbmRleDtcclxuICAgIH1cclxuXHJcbiAgICAvKiogSGVscGVyIHBlciBldml0YXJlIGRpIHJpc2NyaXZlcmUgb2duaSBzYW50YSB2b2x0YSBhcnJheS5wdXNoKGl0ZW0pOyBlIGxhIGdlc3Rpb25lIGRlbGxhICAqL1xyXG4gICAgcHJpdmF0ZSBhZGRJdGVtKGl0ZW06IGFueSwgdHJpcHRpYz86IENhY2hlVHJpcHRpYyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0cmlwdGljLmluZGV4X2NhY2hlLmdldChpdGVtLl9oYXNoKSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBpID0gdHJpcHRpYy5hcnJheS5wdXNoKGl0ZW0pIC0gMTtcclxuICAgICAgICAgICAgdHJpcHRpYy5jYWNoZS5zZXQoaXRlbS5faGFzaCwgaXRlbSk7XHJcbiAgICAgICAgICAgIHRyaXB0aWMuaW5kZXhfY2FjaGUuc2V0KGl0ZW0uX2hhc2gsIGkpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgaWwgdHJpdHRpY28gZGkgc2VsZXppb25lLCBjaW/DqCBsJ2FycmF5IGRlZ2xpIG9nZ2V0dGkgY2hlIHNpIHZ1b2xlIG1hbmlwb2xhcmUgZSBsZSBkdWUgY2FjaGUgY29sbGVnYXRlIGFkIGVzc29cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsnZ3JvdXAnIHwgJ2l0ZW0nIHwgJ2dyb3VwX2V4Y2x1c2lvbicgfCAnZXhjbHVzaW9uJ30gc3ViamVjdCBPZ2dldHRvIGxvZ2ljbyBkZXNpZGVyYXRvIHN1IGN1aSBlZmZldHR1YXJlIGxlIG9wZXJhemlvbmkgc3VjY2Vzc2l2ZVxyXG4gICAgICogQHBhcmFtIHtJdGVtc1NlbGVjdGlvbjxhbnk+fSBiYXNlIFNlbGV0dG9yZSBkaSBiYXNlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtDYWNoZVRyaXB0aWN9IFRyaXR0aWNvIGRpIHNlbGV6aW9uZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFRyaXB0aWMoc3ViamVjdDogJ2dyb3VwJyB8ICdpdGVtJyB8ICdncm91cF9leGNsdXNpb24nIHwgJ2V4Y2x1c2lvbicsIGJhc2U6IEl0ZW1zU2VsZWN0aW9uPGFueT4pOiBDYWNoZVRyaXB0aWMge1xyXG4gICAgICAgIHN3aXRjaCAoc3ViamVjdCkge1xyXG4gICAgICAgICAgICBjYXNlICdncm91cCc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLmdyb3Vwc0NhY2hlLCB0aGlzLmlfZ3JvdXBzQ2FjaGUsIGJhc2UuZ3JvdXBzKTtcclxuICAgICAgICAgICAgY2FzZSAnaXRlbSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhY2hlVHJpcHRpYyh0aGlzLml0ZW1zQ2FjaGUsIHRoaXMuaV9pdGVtc0NhY2hlLCBiYXNlLml0ZW1zKTtcclxuICAgICAgICAgICAgY2FzZSAnZ3JvdXBfZXhjbHVzaW9uJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FjaGVUcmlwdGljKHRoaXMuZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLCB0aGlzLmlfZ3JvdXBfZXhjbHVzaW9uc0NhY2hlLCBiYXNlLmdyb3VwX2V4Y2x1c2lvbnMpO1xyXG4gICAgICAgICAgICBjYXNlICdleGNsdXNpb24nOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWNoZVRyaXB0aWModGhpcy5leGNsdXNpb25zQ2FjaGUsIHRoaXMuaV9leGNsdXNpb25zQ2FjaGUsIGJhc2UuZXhjbHVzaW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGF0byB1biBvZ2dldHRvIHJlc3RpdHVpc2NlIGlsIGdydXBwbyBkaSBjdWkgZmEgcGFydGUsIHNlIGVzaXN0ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIGRpIGN1aSB0cm92YXJlIGlsIGdydXBwb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldEl0ZW1Hcm91cChpdGVtOiBhbnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBwYXJlbnQgPSB0aGlzLnJnSGFuZGxlci5yZ0dyb3VwQ2FjaGUuZ2V0KGl0ZW0uX3RoaXNLZXkpXHJcbiAgICAgICAgaWYgKHBhcmVudClcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmVudDtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEYXRhIGxhIGNoaWF2ZSBkaSB1biBncnVwcG8gcmVzdGl0dWlzY2UgdHV0dGkgZ2xpIG9nZ2V0dGkgY29uIHF1ZWxsYSBjaGlhdmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IGdyb3VwIENoaWF2ZSBkYSBjZXJjYXJlXHJcbiAgICAgKiBAcGFyYW0geydzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCd9IHN0YXR1cyBTdGF0byBkZWdsaSBlbGVtZW50aSwgc2VsZXppb25hdGkgbyBub1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSByZWN1cnNpdmUgSW5kaWNhIHNlIGNlcmNhcmUgc29sbyBnbGkgZWxlbWVudGkgZGlyZXR0YW1lbnRlIGNvbGxlZ2F0aSBvIHNlIHByZW5kZXJlIGFuY2hlIHF1ZWxsaSBkZWkgZ3J1cHBpIGZpZ2xpXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHthbnlbXX0gT2dnZXR0aSBkaSB0aXBvICoqX2l0ZW0qKiBmYWNlbnRpIGNhcG8gYWxsYSBjaGlhdmUgKipncm91cEtleSoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBJdGVtcyhzZWw6IEl0ZW1zU2VsZWN0aW9uPGFueT4sIGdyb3VwOiBhbnksIHN0YXR1cz86ICdzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCcsIHJlY3Vyc2l2ZTogYm9vbGVhbiA9IGZhbHNlLCBhbGxiYXNlOiBhbnlbXSA9IG51bGwpOiBhbnlbXSB7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gW107XHJcblxyXG4gICAgICAgIGlmIChhbGxiYXNlKVxyXG4gICAgICAgICAgICBpdGVtcyA9IGFsbGJhc2U7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChyZWN1cnNpdmUpIHtcclxuICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCByaWNvcnNpdmEgcHJlbmRvIGdsaSBvZ2dldHRpIGRpIHR1dHRlIGxlIGNoaWF2aSBzaW1pbGkgY2hlIHRyb3ZvXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2YgdGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUua2V5cygpKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnB1c2goLi4udGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUuZ2V0KGtleSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5yZ0hhbmRsZXIucmdJdGVtQ2FjaGUuZ2V0KGdyb3VwLl90aGlzS2V5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKHQgPT4gIXN0YXR1cyB8fCAodC5fc2VsZWN0ZWQgJiYgc3RhdHVzID09ICdzZWxlY3RlZCcpIHx8ICghdC5fc2VsZWN0ZWQgJiYgc3RhdHVzID09ICd1bnNlbGVjdGVkJykpO1xyXG5cclxuICAgICAgICAvLyBOb24gdHJvdm8gbmVzc3VuIG9nZ2V0dG8sIHBlcsOyIG1hZ2FyaSBkaSBvZ2dldHRpIG5lIGhvIGFsbCdpbnRlcm5vIGRlbGwnb2dnZXR0byBkaSBzZWxlemlvbmUuIFxyXG4gICAgICAgIC8vIFF1ZXN0byBwdcOyIGVzc2VyZSB2ZXJvIHNvbG8gc2UgTk9OIHNvbm8gaW4gbW9kYWxpdMOgIGFycmF5LCBpbiBjYXNvIGNvbnRyYXJpbyBnbGkgb2dnZXR0aSBsaSBkZXZvIHBlciBmb3J6YSBhdmVyZSB0dXR0aVxyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggIT0gMCB8fCAhc2VsIHx8IHRoaXMuZXN0LmFycmF5TW9kZSlcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG5cclxuICAgICAgICBpZiAoc3RhdHVzID09ICd1bnNlbGVjdGVkJylcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuZXhjbHVzaW9ucy5maWx0ZXIodCA9PiB0ICE9IG51bGwgJiZcclxuICAgICAgICAgICAgICAgICghcmVjdXJzaXZlICYmIHQuX3RoaXNLZXkgPT0gZ3JvdXAuX3RoaXNLZXkpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVjdXJzaXZlICYmIHQuX3RoaXNLZXkuc3RhcnRzV2l0aChncm91cC5fdGhpc0tleSkpKTtcclxuICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gJ3NlbGVjdGVkJylcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuaXRlbXMuZmlsdGVyKHQgPT4gdCAhPSBudWxsICYmXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5ID09IGdyb3VwLl90aGlzS2V5KSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSk7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgbGEgY2hpYXZlIGRpIHVuIGdydXBwbyByZXN0aXR1aXNjZSB0dXR0aSBnbGkgb2dnZXR0aSBjb24gcXVlbGxhIGNoaWF2ZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JvdXAgR3J1cHBvIGRpIGN1aSBjZXJjYXJlIGlsIHBhcmVudFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55fSBPZ2dldHRvIGRpIHRpcG8gKipfZ3JvdXAqKiByYXBwcmVzZW50YW50ZSBpbCBwYXJlbnQgZGVsICoqZ3JvdXAqKiBhdHR1YWxlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBQYXJlbnQoZ3JvdXA6IGFueSk6IGFueSB7XHJcbiAgICAgICAgbGV0IHBhcmVudCA9IHRoaXMucmdIYW5kbGVyLnJnR3JvdXBDYWNoZS5nZXQoZ3JvdXAuX3BhcmVudClcclxuICAgICAgICBpZiAocGFyZW50KVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgbGEgY2hpYXZlIGRpIHVuIGdydXBwbyByZXN0aXR1aXNjZSB0dXR0aSBpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXAgR3J1cHBvIGNoZSByYXBwcmVzZW50YSBpbCBwYWRyZSBkaSBjdWkgY2VyY2FyZSBpIGZpZ2xpXHJcbiAgICAgKiBAcGFyYW0geydzZWxlY3RlZCcgfCAndW5zZWxlY3RlZCd9IHN0YXR1cyBTdGF0byBkZWkgZ3J1cHBpLCBzZWxlemlvbmF0aSBvIG5vXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlY3Vyc2l2ZSBJbmRpY2Egc2UgY2VyY2FyZSBzb2xvIGkgZ3J1cHBpIGRpcmV0dGFtZW50ZSBjb2xsZWdhdGkgbyBzZSBwcmVuZGVyZSBhbmNoZSBxdWVsbGkgZGVpIGdydXBwaSBmaWdsaVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7YW55W119IE9nZ2V0dGkgZGkgdGlwbyAqKl9ncm91cCoqIGZhY2VudGkgY2FwbyBhbGxhIGNoaWF2ZSAqKmdyb3VwS2V5KipcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRHcm91cENoaWxkR3JvdXBzKHNlbDogSXRlbXNTZWxlY3Rpb248YW55PiwgZ3JvdXA6IGFueSwgc3RhdHVzPzogJ3NlbGVjdGVkJyB8ICd1bnNlbGVjdGVkJywgcmVjdXJzaXZlOiBib29sZWFuID0gZmFsc2UsIGFsbGJhc2U6IGFueVtdID0gbnVsbCkge1xyXG4gICAgICAgIGxldCB0aGlzR3JvdXA6IGFueSA9IHRoaXMucmdIYW5kbGVyLnJnR3JvdXBDYWNoZS5nZXQoZ3JvdXAuX3RoaXNLZXkpO1xyXG4gICAgICAgIGxldCBpdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICBpZiAoYWxsYmFzZSlcclxuICAgICAgICAgICAgaXRlbXMgPSBhbGxiYXNlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAocmVjdXJzaXZlKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agcmljb3JzaXZhIHByZW5kbyBnbGkgb2dnZXR0aSBkaSB0dXR0ZSBsZSBjaGlhdmkgc2ltaWxpIGNoZSB0cm92b1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIHRoaXMucmdIYW5kbGVyLnJnQ2hpbGRHcm91cHNDYWNoZS5rZXlzKCkpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCguLi50aGlzLnJnSGFuZGxlci5yZ0NoaWxkR3JvdXBzQ2FjaGUuZ2V0KGtleSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGl0ZW1zID0gdGhpcy5yZ0hhbmRsZXIucmdDaGlsZEdyb3Vwc0NhY2hlLmdldChncm91cC5fdGhpc0tleSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpdGVtcyA9IGl0ZW1zLmZpbHRlcih0ID0+ICFzdGF0dXMgfHwgKHQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAnc2VsZWN0ZWQnKSB8fCAoIXQuX3NlbGVjdGVkICYmIHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpKTtcclxuXHJcbiAgICAgICAgLy8gTm9uIHRyb3ZvIG5lc3N1biBvZ2dldHRvLCBwZXLDsiBtYWdhcmkgZGkgb2dnZXR0aSBuZSBobyBhbGwnaW50ZXJubyBkZWxsJ29nZ2V0dG8gZGkgc2VsZXppb25lXHJcbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCAhPSAwIHx8ICFzZWwpXHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtcztcclxuXHJcbiAgICAgICAgaWYgKHN0YXR1cyA9PSAndW5zZWxlY3RlZCcpXHJcbiAgICAgICAgICAgIGl0ZW1zID0gc2VsLmdyb3VwX2V4Y2x1c2lvbnMuZmlsdGVyKCh0OiBhbnkpID0+IHQgIT0gbnVsbCAmJiAoXHJcbiAgICAgICAgICAgICAgICAoIXJlY3Vyc2l2ZSAmJiB0Ll90aGlzUm91dGUubGVuZ3RoID09IHRoaXNHcm91cC5fdGhpc1JvdXRlLmxlbmd0aCArIDEgJiYgdC5fdGhpc1JvdXRlLnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSB8fFxyXG4gICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZSAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoZ3JvdXAuX3RoaXNLZXkpKSkpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgaXRlbXMgPSBzZWwuZ3JvdXBzLmZpbHRlcigodDogYW55KSA9PiB0ICE9IG51bGwgJiYgKFxyXG4gICAgICAgICAgICAgICAgKCFyZWN1cnNpdmUgJiYgdC5fdGhpc1JvdXRlLmxlbmd0aCA9PSB0aGlzR3JvdXAuX3RoaXNSb3V0ZS5sZW5ndGggKyAxICYmIHQuX3RoaXNSb3V0ZS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkgfHxcclxuICAgICAgICAgICAgICAgIChyZWN1cnNpdmUgJiYgdC5fdGhpc0tleS5zdGFydHNXaXRoKGdyb3VwLl90aGlzS2V5KSkpKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBGaW5hbGl6emEgbGUgaW5mb3JtYXppb25pIGRpIHNlbGV6aW9uZSBkZWwgKipJdGVtc1NlbGVjdGlvbioqIGNvcnJlbnRlICovXHJcbiAgICBwcml2YXRlIGZpbmFsaXplU2VsZWN0aW9uSW5mb3JtYXRpb25zKHNlbGVjdGlvbkl0ZW06IEl0ZW1zU2VsZWN0aW9uPGFueT4pIHtcclxuICAgICAgICAvLyBEYXRvIGNoZSBsZSBkZWxldGUgc29ubyBsb2dpY2hlIGRhdG8gY2hlIHRlbmdvIGxhIGNhY2hlIGRlZ2xpIGluZGljaSBkZXZvIHJlbmRlcmxlIGZpc2ljaGVcclxuICAgICAgICBsZXQgdG1wR3JwID0gW10sIHRtcEl0ZW1zID0gW10sIHRtcEV4Y2wgPSBbXSwgdG1wR3JwRXhjbCA9IFtdO1xyXG4gICAgICAgIGxldCBncnBSZW1vdmVkID0gZmFsc2UsIGl0ZW1zUmVtb3ZlZCA9IGZhbHNlLCBleGNsUmVtb3ZlZCA9IGZhbHNlLCBncnBFeGNsUmVtb3ZlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGlvbkl0ZW0uaXRlbXMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLml0ZW1zW2ldICE9IG51bGwpIHRtcEl0ZW1zLnB1c2goc2VsZWN0aW9uSXRlbS5pdGVtc1tpXSk7XHJcbiAgICAgICAgICAgIGVsc2UgaXRlbXNSZW1vdmVkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnNbaV0gIT0gbnVsbCkgdG1wRXhjbC5wdXNoKHNlbGVjdGlvbkl0ZW0uZXhjbHVzaW9uc1tpXSk7XHJcbiAgICAgICAgICAgIGVsc2UgZXhjbFJlbW92ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBJbiB2ZWNjaGllIHZlcnNpb25pIGRlbGwnQXBwU2VhcmNoIHBlciBjdWkgbm9uIHZlbmdvbm8gZGVzZXJpYWxpenphdGUgcXVlc3RlIGluZm9ybWFpem9uaSBwb3RyZWJiZXJvIGVzc2VyY2kgY2FzaW5pXHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbkl0ZW0uZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0aW9uSXRlbS5ncm91cHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5ncm91cHNbaV0gIT0gbnVsbCkgdG1wR3JwLnB1c2goc2VsZWN0aW9uSXRlbS5ncm91cHNbaV0pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBncnBSZW1vdmVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3Rpb25JdGVtLmdyb3VwX2V4Y2x1c2lvbnMpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3Rpb25JdGVtLmdyb3VwX2V4Y2x1c2lvbnMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zW2ldICE9IG51bGwpIHRtcEdycEV4Y2wucHVzaChzZWxlY3Rpb25JdGVtLmdyb3VwX2V4Y2x1c2lvbnNbaV0pO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBncnBFeGNsUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZWxlY3Rpb25JdGVtLml0ZW1zID0gdG1wSXRlbXM7XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zID0gdG1wR3JwRXhjbDtcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmV4Y2x1c2lvbnMgPSB0bXBFeGNsO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBzID0gdG1wR3JwO1xyXG5cclxuICAgICAgICAvLyBMZSBjYWNoZSBkZWdsaSBpbmRpY2kgcG90cmViYmVybyBhdmVyZSBidWNoaSwgcmlzb2x2b1xyXG4gICAgICAgIGlmIChncnBSZW1vdmVkKVxyXG4gICAgICAgICAgICB0aGlzLmlfZ3JvdXBzQ2FjaGUgPSB0aGlzLmNvbXBhY3RJbmRleE1hcCh0aGlzLmlfZ3JvdXBzQ2FjaGUpO1xyXG4gICAgICAgIGlmIChpdGVtc1JlbW92ZWQpXHJcbiAgICAgICAgICAgIHRoaXMuaV9pdGVtc0NhY2hlID0gdGhpcy5jb21wYWN0SW5kZXhNYXAodGhpcy5pX2l0ZW1zQ2FjaGUpO1xyXG4gICAgICAgIGlmIChleGNsUmVtb3ZlZClcclxuICAgICAgICAgICAgdGhpcy5pX2V4Y2x1c2lvbnNDYWNoZSA9IHRoaXMuY29tcGFjdEluZGV4TWFwKHRoaXMuaV9leGNsdXNpb25zQ2FjaGUpO1xyXG4gICAgICAgIGlmIChncnBFeGNsUmVtb3ZlZClcclxuICAgICAgICAgICAgdGhpcy5pX2dyb3VwX2V4Y2x1c2lvbnNDYWNoZSA9IHRoaXMuY29tcGFjdEluZGV4TWFwKHRoaXMuaV9ncm91cF9leGNsdXNpb25zQ2FjaGUpO1xyXG5cclxuICAgICAgICAvLyBQb2kgcmlwcmVuZG8gYSBmYXJlIHR1dHRvIGluIG5vcm1hbGl0w6BcclxuICAgICAgICBzZWxlY3Rpb25JdGVtLmNvdW50ID0gdGhpcy5ldmFsdWF0ZVNlbGVjdGVkKCk7XHJcblxyXG4gICAgICAgIC8vIFNlIGhvIGZhdHRvIHNlbGV6aW9uZSBcImFsbFwiIG1hIHBvaSBtaSBzb25vIG1lc3NvIGEgdG9nbGllcmUgdHV0dGkgZ2xpIGVsZW1lbnRpIGZpbm8gYSByaW1hbmVybmUgMCByZXNldHRvIGwnb2dnZXR0byBkaSBzZWxlemlvbmVcclxuICAgICAgICBpZiAoc2VsZWN0aW9uSXRlbS5jb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmJvdW5kU291cmNlLmZvckVhY2godCA9PiB0Ll9zZWxlY3RlZCA9IGZhbHNlKTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5hbGwgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5leGNsdXNpb25zID0gW107XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkl0ZW0uaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cHMgPSBbXTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zID0gW107XHJcblxyXG4gICAgICAgICAgICAvLyBSaXB1bGlzY28gbGEgY2FjaGUgYWx0cmltZW50aSBtaSByaW1hbmUgcGllbmEgZGkgdHV0dGUgbGUgZXNjbHVzaW9uaVxyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQ2FjaGVzKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBsYSBwb3NzaWJpbGl0w6AgZGkgZmFyZSBcIlNlbGV6aW9uYSB0dXR0b1wiIMOoIGFiaWxpdGF0YSBhbGxvcmEgbGEgY29uc2lkZXJvIGFwcGVuYSBtaSB2aWVuZSBzZWxlemlvbmF0byBxdWFsY29zYVxyXG4gICAgICAgIHRoaXMuZXN0LmNhblNlbGVjdEFsbCA9IHNlbGVjdGlvbkl0ZW0uY291bnQgPiAwICYmIHRoaXMuZXN0LlNlbGVjdEFsbCAmJiAhdGhpcy5lc3QuU2luZ2xlU2VsZWN0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDb21wYXR0YSB1bmEgY2FjaGUgZGkgaW5kaWNpICovXHJcbiAgICBwcml2YXRlIGNvbXBhY3RJbmRleE1hcChtYXA6IE1hcDxzdHJpbmcsIG51bWJlcj4pOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcclxuICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgIGxldCByZXQgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIG1hcC5rZXlzKCkpXHJcbiAgICAgICAgICAgIHJldC5zZXQoa2V5LCBpbmRleCsrKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1dGEgbGEgcXVhbnRpdMOgIGRpIG9nZ2V0dGkgY2hlIHNvbm8gc3RhdGkgc2VsZXppb25hdGkgYWwgdGVybWluZSBkaSB1biBldmVudG8gZGkgc2VsZXppb25lXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge251bWJlcn0gTnVtZXJvIGRpIG9nZ2V0dGkgc2VsZXppb25hdGlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZVNlbGVjdGVkKCk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHNpID0gKHRoaXMuZXN0LlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pPy5zZWxlY3Rpb24gfHwgdGhpcy5lc3QuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG5cclxuICAgICAgICBsZXQgZXhjQnlHcm91cCA9IHNpLmdyb3VwX2V4Y2x1c2lvbnMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5jb3VudCwgMCk7XHJcbiAgICAgICAgbGV0IGluY0J5R3JvdXAgPSBzaS5ncm91cHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgY3Vyci5jb3VudCwgMCk7XHJcblxyXG4gICAgICAgIHRoaXMuZXN0LnNlbGVjdGVkT2JqZWN0cyA9IChzaS5hbGwgPyB0aGlzLmVzdC5CYXNlSXRlbXNDb3VudCA6IGluY0J5R3JvdXApIC0gZXhjQnlHcm91cCArIHNpLml0ZW1zLmxlbmd0aCAtIHNpLmV4Y2x1c2lvbnMubGVuZ3RoO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVzdC5zZWxlY3RlZE9iamVjdHM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEdlc3Rpc2NlIGlsIGNvbWFuZG8gZGkgXCJTZWxlemlvbmEgdHV0dG8gaW4gdHV0dGUgbGUgcGFnaW5lXCIgbyBpbCBzdW8gY29udHJhcmlvLCBjaW/DqCBcIlJlaW1wb3N0YSBzZWxlemlvbmVcIiAqL1xyXG4gICAgcHVibGljIHNlbGVjdEFsbE9yUmVzZXRTZWxlY3Rpb24oKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGlvbkl0ZW0gPSB0aGlzLmVzdC5WaWV3LnNlbGVjdGlvbiB8fCB0aGlzLmVzdC5hcnJheW1vZGVTZWxlY3Rpb247XHJcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkNhY2hlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uYWxsID0gIXNlbGVjdGlvbkl0ZW0uYWxsO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZXhjbHVzaW9ucyA9IFtdO1xyXG4gICAgICAgIHNlbGVjdGlvbkl0ZW0uZ3JvdXBzID0gW107XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5ncm91cF9leGNsdXNpb25zID0gW107XHJcbiAgICAgICAgc2VsZWN0aW9uSXRlbS5pdGVtcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBSaXB1bGlzY28gZ2xpIHN0YXRpIFVJIGRpIHNlbGV6aW9uZSBnbG9iYWxlIHNlIGwnaG8gZGlzYXR0aXZhdGFcclxuICAgICAgICBpZiAoIXNlbGVjdGlvbkl0ZW0uYWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXN0LmNhblNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVzdC5nbG9iYWxDaGVjayA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maW5hbGl6ZVNlbGVjdGlvbkluZm9ybWF0aW9ucyhzZWxlY3Rpb25JdGVtKTtcclxuXHJcbiAgICAgICAgdGhpcy5lc3Qub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoc2VsZWN0aW9uSXRlbSk7XHJcblxyXG4gICAgICAgIC8vIERvcG8gYXZlciByZXNldHRhdG8gZGlyZXR0YW1lbnRlIGlsIHNvbG8gb2dnZXR0byB0aGlzLlZpZXcuc2VsZWN0aW9uIGRldm8gYW5jaGUgcmlhbGxpbmVhcmUgYSB0dXR0aSBnbGkgb2dnZXR0aSBiaW5kYXRpXHJcbiAgICAgICAgdGhpcy5ldmFsdWF0ZVNlbGVjdGlvbih0aGlzLmVzdC5ib3VuZFNvdXJjZSwgc2VsZWN0aW9uSXRlbSk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFRPRE8gU3Bvc3RhcmUgaW4gU2VsZWN0aW9uSGFuZGxlclxyXG4gICAgICogXHJcbiAgICAgKiBSZWdpc3RyYSBsYSBzZWxlemlvbmUgc2luZ29sYSBzdSB1bmEgY2VsbGEgc3VsbGEgY29tYm8gZGkgY29tYW5kaSBcIkNUUkwgKyBDbGlja1wiLlxyXG4gICAgICogU2UgdmllbmUgcHJlbXV0byBhbmNoZSBpbCB0YXN0byBTaGlmdCB2aWVuZSBjcmVhdG8gdW4gcmFuZ2UgZGkgc2VsZXppb25lIGlsIGN1aSBzdGF0dXMgZGkgXCJzZWxlemlvbmF0b1wiIHZpZW5lIHNhbHZhdG8gbmVsbGFcclxuICAgICAqIG1hdHJpY2UgdmlydHVhbGUgKipzZWxlY3Rpb25TdGF0dXMqKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgRXZlbnRvIEphdmFzY3JpcHQgZGkgQ2xpY2tcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgSW5kaWNlIGRlbGxhIHJpZ2EuIE5vbiDDqCBsJ2luZGljZSB2ZXJvIGUgcHJvcHJpbyBtYSDDqCBsJ29yZGluYWxlICgub3JkaW5hbCkgZGVsbCdvZ2dldHRvIGJpbmRhdG8gc3UgcXVlbGxhIHJpZ2FcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gSW5kaWNlIGRlbGxhIGNvbG9ubmEgcHJlc28gYmFuYWxtZW50ZSBkYWxsJ25nSWYgc3VpIHRoRWxlbWVudFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2luZ2xlQ2VsbFNlbGVjdGlvbihldmVudDogYW55LCByb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhclRleHRTZWxlY3Rpb24oZXZlbnQpO1xyXG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiB0aGlzLmVzdC5TaGlmdENsaWNrICYmIHRoaXMubGFzdFNpbmdsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uU3RhdHVzKHsgcm93LCBjb2x1bW4gfSk7XHJcbiAgICAgICAgICAgIGxldCByb3dBZGRpdGlvbiA9IHJvdyA8IHRoaXMubGFzdFNpbmdsZVNlbGVjdGlvbi5yb3cgPyAtMSA6ICsxO1xyXG4gICAgICAgICAgICBsZXQgY29sdW1uQWRkaXRpb24gPSBjb2x1bW4gPCB0aGlzLmxhc3RTaW5nbGVTZWxlY3Rpb24uY29sdW1uID8gLTEgOiArMTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGlyID0gdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uLnJvdzsgaXIgIT0gcm93ICsgcm93QWRkaXRpb247IGlyICs9IHJvd0FkZGl0aW9uKVxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWMgPSB0aGlzLmxhc3RTaW5nbGVTZWxlY3Rpb24uY29sdW1uOyBpYyAhPSBjb2x1bW4gKyBjb2x1bW5BZGRpdGlvbjsgaWMgKz0gY29sdW1uQWRkaXRpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW2lyXVtpY10uc2VsZWN0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sYXN0U2luZ2xlU2VsZWN0aW9uID0geyByb3csIGNvbHVtbiB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIFJpcHVsaXNjbyBlc2NsdWRlbmRvIGwnb2dnZXR0byBhdHR1YWxlIGNoZSBldmVudHVhbG1lbnRlIGNpIHBlbnNvIGlvIGEgZGVzZWV6aW9uYXJlXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25TdGF0dXMoeyByb3csIGNvbHVtbiB9KTtcclxuICAgICAgICAgICAgdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW3Jvd11bY29sdW1uXS5zZWxlY3RlZCA9ICF0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbcm93XVtjb2x1bW5dLnNlbGVjdGVkO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RTaW5nbGVTZWxlY3Rpb24gPSB7IHJvdywgY29sdW1uIH07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPcmEgY2hlIG5vbiDDqCBhdHRhY2NhdG8gZGlyZXR0YW1lbnRlIGFsbCdodG1sIGRldm8gZmFyZSB1biBtYXJrZm9yY2hlY2sgZmluaXRlIGxlIG9wZXJhemlvbmkgc3VpIGdyb3VwaW5nXHJcbiAgICAgICAgdGhpcy5lc3QuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciByaXB1bGlyZSBsbyBzdGF0byBkaSBzZWxlemlvbmUgZGVsbGUgc2luZ29sZSBjZWxsZSBkZWxsYSB0YWJlbGxhLCBhZCBlc2NsdXNpb25lIGRpIHVuYSBzaW5nb2xhIGNvb3JkaW5hdGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHt7cm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyfX0gZXhjbHVzaW9uIENvb3JkaW5hdGEgZGEgZXNjbHVkZXJlIG5lbGxhIHB1bGl6aWFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNsZWFyU2VsZWN0aW9uU3RhdHVzKGV4Y2x1c2lvbj86IHsgcm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyIH0pIHtcclxuICAgICAgICBmb3IgKGxldCByb3cgaW4gdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzKVxyXG4gICAgICAgICAgICBmb3IgKGxldCBjb2x1bW4gaW4gdGhpcy5lc3Quc2VsZWN0aW9uU3RhdHVzW3Jvd10pXHJcbiAgICAgICAgICAgICAgICBpZiAoIWV4Y2x1c2lvbiB8fCAoZXhjbHVzaW9uICYmIChyb3cgIT0gZXhjbHVzaW9uLnJvdy50b1N0cmluZygpIHx8IGNvbHVtbiAhPSBleGNsdXNpb24uY29sdW1uLnRvU3RyaW5nKCkpKSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tyb3ddW2NvbHVtbl0uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBjaGUgZXNhbWluYSBsYSBtYXRyaWNlICoqc2VsZWN0aW9uU3RhdHVzKiogZSBuZSBlc3RyYXBwb2xhIGdsaSBlbGVtZW50aSBzZWxlemlvbmF0aSBpbiB1bmEgY29tb2RhIG1hdHJpY2VcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3sgdmFsdWU6IHN0cmluZywgdHlwZTogSW5wdXRUeXBlLCB2YWxfc2V0dGVyOiBGdW5jdGlvbiB9W11bXX0gTWF0cmljZSBkaSBlbGVtZW50aSBzZWxlemlvbmF0aSBjb24gbGEgbG9ybyBpbmZvcm1hemlvbmUgc3VsIHRpcG9cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFNlbGVjdGlvblN0YXR1c1NlbGVjdGlvbigpOiBJdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlW11bXSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGlvbjogSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZVtdW10gPSBbXVxyXG4gICAgICAgIGZvciAobGV0IHJvdyBpbiB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXMpIHtcclxuICAgICAgICAgICAgbGV0IHJvd1ZhbHVlczogSXRlbVByb3BFZGl0YWJsZVJlZmVyZW5jZVtdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNvbHVtbiBpbiB0aGlzLmVzdC5zZWxlY3Rpb25TdGF0dXNbcm93XSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNzSXRlbSA9IHRoaXMuZXN0LnNlbGVjdGlvblN0YXR1c1tyb3ddW2NvbHVtbl07XHJcbiAgICAgICAgICAgICAgICBpZiAoc3NJdGVtLnNlbGVjdGVkKVxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbHVlcy5wdXNoKHNzSXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJvd1ZhbHVlcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2gocm93VmFsdWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEhlbHBlciBwZXIgcmlwdWxpcmUgbGEgc2VsZXppb25lIGxhdG8gSFRNTFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgRXZlbnRvIG5hdGl2byBKYXZhc2NyaXB0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjbGVhclRleHRTZWxlY3Rpb24oZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIC8vIFNlbGV6aW9ubyBkZWwgdGVzdG8gbWEgbm9uIGhvIHNoaWZ0IHByZW11dG8gLT4gaWdub3JvIGxhIHNlbGV6aW9uZVxyXG4gICAgICAgIGlmICgoZXZlbnQudmlldy5nZXRTZWxlY3Rpb24oKS50eXBlID09ICdSYW5nZScgfHwgZXZlbnQudmlldy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpLmxlbmd0aCA+IDApICYmICFldmVudC5zaGlmdEtleSlcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgICAgICAvLyBTZWxlemlvbm8gZGVsIHRlc3RvIGUgaG8gc2hpZnQgcHJlbXV0byAtPiBhbm51bGxvIGxhIHNlbGV6aW9uZSBkZWwgdGVzdG9cclxuICAgICAgICBpZiAoKGV2ZW50LnZpZXcuZ2V0U2VsZWN0aW9uKCkudHlwZSA9PSAnUmFuZ2UnIHx8IGV2ZW50LnZpZXcuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKS5sZW5ndGggPiAwKSAmJiBldmVudC5zaGlmdEtleSlcclxuICAgICAgICAgICAgdGhpcy5lc3QudXRpRXh0cy5jbGVhclRleHRTZWxlY3Rpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERhdGEgbGEgbWF0cmljZSBkaSBzZWxlemlvbmUgZ2VuZXJhdGEgZGFsIG1ldG9kbyAqKmdldFNlbGVjdGlvblN0YXR1c1NlbGVjdGlvbioqIGdlbmVyYSBsYSBzdHJpZ25hIHZlcmEgZSBwcm9wcmlhIGRhIGNvcGlhcmUgbmVsbGEgQ2xpcGJvYXJkXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7eyB2YWx1ZTogc3RyaW5nLCB0eXBlOiBJbnB1dFR5cGUgfVtdW119IHNlbCBNYXRyaWNlIGRpIHNlbGV6aW9uZSBjb24gdmFsb3JpIGUgdGlwaSBkZWkgZGF0aSBzZWxlemlvbmF0aVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTdHJpbmdhIGRhIGNvcGlhcmUgbmVsbGEgY2xpcGJvYXJkLCBsZSBzdHJpbmdoZSB2ZW5nb25vIHdyYXBwYXRlIGZyYSBkb3BwaSBhcGljaSBlIGZyYSB1biB2YWxvcmUgZSBsJ2FsdHJvIHZpZW5lIG1lc3NvIHVuIHRhYlxyXG4gICAgICogaW4gbW9kbyBjaGUgc2lhbm8gY29tcGF0aWJpbGkgYW5jaGUgY29uIGxhIGNvcGlhIHN1IEV4Y2VsXHJcbiAgICAgKi9cclxuICAgIGdldENsaXBiYXJkVGV4dEZyb21TZWxlY3Rpb24oc2VsOiB7IHZhbHVlOiBzdHJpbmcsIHR5cGU6IElucHV0VHlwZSB8IHN0cmluZyB9W11bXSk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHJldCA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCBzZWwubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgbGV0IHJvdyA9IHNlbFtyXTtcclxuICAgICAgICAgICAgaWYgKHIgPiAwKSByZXQgKz0gXCJcXG5cIjtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2wgPSByb3dbY107XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gdGhpcy5nZXRWYWx1ZUJ5VHlwZShjb2wpICsgKGMgPCByb3cubGVuZ3RoIC0gMSA/IFwiXFx0XCIgOiBcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBsYSByYXBwcmVzZW50YXppb25lIHN0cmluZ2EgZGkgdW4gdmFsb3JlIGRhdG8gdW4gdGlwb1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3sgdmFsdWU6IHN0cmluZywgdHlwZTogSW5wdXRUeXBlIH19IHZhbFR5cGUgT2dnZXR0byBWYWxvcmUgLSBUaXBvIGRhIGN1aSBlc3RyYXBvbGFyZSBsYSByYXBwcmVzZW50YXppb25lIGRlbCBkYXRvIGluIHN0cmluZ2FcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVmFsb3JlIGNvbnZlcnRpdG8gaW4gc3RyaW5nYSBpbiBiYXNlIGFsIHRpcG9cclxuICAgICAqL1xyXG4gICAgZ2V0VmFsdWVCeVR5cGUodmFsVHlwZTogeyB2YWx1ZTogc3RyaW5nLCB0eXBlOiBJbnB1dFR5cGUgfCBzdHJpbmcgfSk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoICh2YWxUeXBlLnR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiAnXCInICsgdmFsVHlwZS52YWx1ZSArICdcIic7XHJcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgICAgIGNhc2UgJ2ludCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgICAgICBjYXNlICdlbnVtJzpcclxuICAgICAgICAgICAgY2FzZSAnYXV0b2NvbXBsZXRlJzpcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWxUeXBlLnZhbHVlO1xyXG4gICAgICAgICAgICBjYXNlICdmbG9hdCc6XHJcbiAgICAgICAgICAgIGNhc2UgJ2N1cnJlbmN5JzpcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHZhbFR5cGUudmFsdWUpLnRvTG9jYWxlU3RyaW5nKHRoaXMuZXN0LmxvY2FsZSk7XHJcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRheWpzKHZhbFR5cGUudmFsdWUpLmZvcm1hdCh0aGlzLmVzdC5sYy50b2tlbihcImdldFNtYWxsRGF0ZURpc3BsYXlGb3JtYXRcIikpO1xyXG4gICAgICAgICAgICBjYXNlICdkYXRldGltZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5anModmFsVHlwZS52YWx1ZSkuZm9ybWF0KHRoaXMuZXN0LmxjLnRva2VuKFwiZ2V0RnVsbERhdGVEaXNwbGF5Rm9ybWF0XCIpKTtcclxuICAgICAgICAgICAgY2FzZSAndGltZSc6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF5anModmFsVHlwZS52YWx1ZSkuZm9ybWF0KFwiSEg6bW06c3NcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|
|
@@ -18,6 +18,8 @@ export class AppSearch {
|
|
|
18
18
|
/**
|
|
19
19
|
* Permette di resettare un AppSearch ai valori di default.
|
|
20
20
|
* Reso statico perché fra una deserializzazione e l'altra si potrebbe perdere il prototype del costruttore
|
|
21
|
+
*
|
|
22
|
+
* @param {AppSearch<any>} aps AppSearch da resettare
|
|
21
23
|
*/
|
|
22
24
|
static reset(aps) {
|
|
23
25
|
aps.pages = 1;
|
|
@@ -31,6 +33,21 @@ export class AppSearch {
|
|
|
31
33
|
aps.columns = [];
|
|
32
34
|
aps.column_ordering = [];
|
|
33
35
|
aps.savedstate = false;
|
|
36
|
+
aps.selfsearch = false;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Permette di ottenere un nuovo riferimento all'AppSearch passata come parametro.
|
|
40
|
+
* Internamente utilizza il JSON.parse(JSON.stringify(X)) con la differenza che prima stacca il riferimento agli items per evitare di
|
|
41
|
+
* reserializzare potenzialmente centinaia di elementi. Il riferimento viene poi ricollegato alla nuova appsearch generata
|
|
42
|
+
*
|
|
43
|
+
* @param {AppSearch<any>} aps AppSearch di cui estrarre un nuovo riferimento equivalente
|
|
44
|
+
*/
|
|
45
|
+
static newref(aps) {
|
|
46
|
+
var items = aps.items;
|
|
47
|
+
aps.items = [];
|
|
48
|
+
var newref = JSON.parse(JSON.stringify(aps));
|
|
49
|
+
newref.items = items;
|
|
50
|
+
return newref;
|
|
34
51
|
}
|
|
35
52
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwU2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBTZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUVsQjs7T0FFRztJQUNIO1FBQ0ksSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFvRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFtQjtRQUNuQyxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLEdBQUcsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDN0IsR0FBRyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDeEIsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixHQUFHLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsR0FBRyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsR0FBRyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDekIsR0FBRyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwT3JkZXJpbmcgfSBmcm9tICcuL0FwcE9yZGVyaW5nJztcclxuaW1wb3J0IHsgSXRlbXNTZWxlY3Rpb24gfSBmcm9tICcuL0l0ZW1zU2VsZWN0aW9uJztcclxuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICcuL0dyb3VwJztcclxuaW1wb3J0IHsgR3JvdXBGaWx0ZXIgfSBmcm9tICcuL0dyb3VwRmlsdGVyJztcclxuaW1wb3J0IHsgR3JvdXBPckFnZ3JlZ2F0aW9uIH0gZnJvbSAnLi9Hcm91cE9yQWdncmVnYXRpb24nO1xyXG5pbXBvcnQgeyBSZXBvcnRQYXJhbSB9IGZyb20gJy4uL3JlcG9ydC9SZXBvcnRQYXJhbSc7XHJcbmltcG9ydCB7IFJlcG9ydENvbHVtbiB9IGZyb20gJy4uL3JlcG9ydC9SZXBvcnRDb2x1bW4nO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBjaGUgaWRlbnRpZmljYSB1bmEgcmljZXJjYSBwYWdpbmF0YSBpbiB0dXR0ZSBsZSBzdWUgc2Z1bWF0dXJlIChkaSBncmlnaW8pXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXBwU2VhcmNoPFQ+IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIGNoZSBnZW5lcmEgdW4naXN0YW56YSBjb2kgdmFsb3JpIGRpIGRlZmF1bHQgZSBpbXBvc3RhbmRvICoqZmlyc3RzZWFyY2gqKiBhICoqdHJ1ZSoqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5vcmRlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbl9vcmRlcmluZyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2F2ZWRzdGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlyc3RzZWFyY2ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJRCBkZWxsYSByaWNlcmNhLCBzZW1wcmUgaW51dGlsZSBhIG1lbm8gY2hlIG5vbiBzaWEgbGEgcmljZXJjYSBkZWkgcmlzdWx0YXRpIGRpIHVuIHJlcG9ydCAqL1xyXG4gICAgcHVibGljIHNlYXJjaGlkOiBzdHJpbmc7XHJcbiAgICAvKiogRGVzY3JpemlvbmUgZGVsbGEgcmljZXJjYSwgc2VtcHJlIGludXRpbGUgYSBtZW5vIGNoZSBub24gc2lhIGxhIHJpY2VyY2EgZGVpIHJpc3VsdGF0aSBkaSB1biByZXBvcnQgKi9cclxuICAgIHB1YmxpYyBzZWFyY2hkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgLyoqIEluZGljYSBzZSBsYSBwYWdpbmF6aW9uZSBwZXIgcXVlc3RhIHJpY2VyY2Egw6ggZGlzcG9uaWJpbGUgKi9cclxuICAgIHB1YmxpYyBwYWdpbmdhdmFpbGFibGU6IGJvb2xlYW47XHJcbiAgICAvKiogSW5kaWNhIGlsIGZvcm1hdG8gZGkgZXhwb3J0IGRpc3BvbmliaWxlIHBlciBxdWVzdGEgcmljZXJjYS4gVXRpbGl6emF0byBzb2xvIHBlciBsYSByaWNlcmNhIGRlaSByaXN1bHRhdGkgZGkgdW4gcmVwb3J0ICovXHJcbiAgICBwdWJsaWMgZXhwZm9ybWF0OiBib29sZWFuO1xyXG4gICAgLyoqIFBhcmFtZXRyaSBkaSByaWNlcmNhIHBlciBpIHJpc3VsdGF0aSBpbiBtb2RhbGl0w6AgcmVwb3J0ICovXHJcbiAgICBwdWJsaWMgcGFyczogUmVwb3J0UGFyYW1bXTtcclxuICAgIC8qKiBJbmRpY2F6aW9uZSBkZWxsZSBjb2xvbm5lIHByZXNlbnRpIG5lbCByZXBvcnQgKi9cclxuICAgIHB1YmxpYyByZXBvcnRfY29sdW1uczogUmVwb3J0Q29sdW1uW107XHJcbiAgICAvKiogSW5kaWNhIHNlIGMnw6ggdW5hIHJpY2VyY2EgaW4gY29yc28gKi9cclxuICAgIHB1YmxpYyBzZWFyY2hpbnByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgLyoqIEluZGljYSBpbCBudW1lcm8gdG90YWxlIGRpIHBhZ2luZSB0cm92YXRlIGRhbGxhIHJpY2VyY2EuIE9nbmkgcGFnaW5hIMOoIHVuYSBsaXN0YSBkaSAqKml0ZW1zcGVycGFnZW92ZXJyaWRlKiogb2dnZXR0aSAqL1xyXG4gICAgcHVibGljIHBhZ2VzOiBudW1iZXI7XHJcbiAgICAvKiogQ29udGVnZ2lvIHRvdGFsZSBkZWdsaSBvZ2dldHRpIHRyb3ZhdGkgKGluY2x1c2kgcXVlbGxpIGluIHBhZ2luZSBub24gYXR0dWFsbWVudGUgc2VsZXppb25hdGUpICovXHJcbiAgICBwdWJsaWMgb2JqZWN0Y291bnQ6IG51bWJlcjtcclxuICAgIC8qKiBDb250ZWdnaW8gdG90YWxlIGRlaSBncnVwcGkgdHJvdmF0aSAoaW5jbHVzaSBxdWVsbGkgaW4gcGFnaW5lIG5vbiBhdHR1YWxtZW50ZSBzZWxlemlvbmF0ZSkgKi9cclxuICAgIHB1YmxpYyBncm91cGNvdW50OiBudW1iZXI7XHJcbiAgICAvKiogUGFnaW5hIGF0dHVhbG1lbnRlIGluIHZpc3VhbGl6emF6aW9uZSAqL1xyXG4gICAgcHVibGljIHBhZ2U6IG51bWJlcjtcclxuICAgIC8qKiBOdW1lcm8gZGkgb2dnZXR0aSBkYSBwZXJzZW50YXJlIGluIG9nbmkgcGFnaW5hLiBQZXIgY29udmVuemlvbmUgc2kgY29uc2lkZXJhIHZhbG9yaXp6YXRvIGEgMTUgc2Ugbm9uIGZvcm5pdG8gKi9cclxuICAgIHB1YmxpYyBpdGVtc3BlcnBhZ2VvdmVycmlkZTogbnVtYmVyO1xyXG4gICAgLyoqIExpc3RhIGRlZ2xpIG9nZ2V0dGkgbmVsbGEgcGFnaW5hIGF0dHVhbG1lbnRlIGluIHZpc3VhbGl6emF6aW9uZSAqL1xyXG4gICAgcHVibGljIGl0ZW1zOiBUW107XHJcbiAgICAvKiogRGl6aW9uYXJpbyBjb250ZW5lbnRlIHR1dHRpIGkgZ3J1cHBpIHBhZ2luYXRpICAqL1xyXG4gICAgcHVibGljIGdyb3VwczogR3JvdXBbXTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIHBlciBjdWkgb3JkaW5hcmUgKi9cclxuICAgIHB1YmxpYyBvcmRlcnM6IEFwcE9yZGVyaW5nW107XHJcbiAgICAvKiogTGlzdGEgZGkgY29sb25uZSBkYSB2aXN1YWxpenphcmUgKi9cclxuICAgIHB1YmxpYyBjb2x1bW5zOiBzdHJpbmdbXTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIG5lbGwnb3JkaW5lIGNvcnJldHRvICovXHJcbiAgICBwdWJsaWMgY29sdW1uX29yZGVyaW5nOiBzdHJpbmdbXTtcclxuICAgIC8qKiBJbmRpY2Egc2UgbGEgcmljZXJjYSBlcmEgc2FsdmF0YS4gUXVhbG9yYSBmb3NzZSBxdWVzdG8gaWwgY2FzbywgYWwgY2FyaWNhbWVudG8gbCdlcy10YWJsZSBzaSBvY2N1cGVyw6AgZGkgcmktZWZmZXR0dWFyZSBsYSByaWNlcmNhIGVkIGFnZ2lvcm5hcmUgaWwgbW9kZWxsbyAqL1xyXG4gICAgcHVibGljIHNhdmVkc3RhdGU6IGJvb2xlYW47XHJcbiAgICAvKiogSW5kaWNhIHNlIGJpc29nbmEgYW5jb3JhIGVmZmV0dHVhcmUgbGEgcHJpbWEgcmljZXJjYSAqL1xyXG4gICAgcHVibGljIGZpcnN0c2VhcmNoOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2dnZXR0byBjaGUgaW5kaWNhIGxhIHNlbGV6aW9uZSBjb3JyZW50ZS4gXHJcbiAgICAgKiBcclxuICAgICAqIFNlICoqYWxsKiogw6ggKip0cnVlKiogdnVvbGUgZGlyZSBjaGUgw6ggdHV0dG8gc2VsZXppb25hdG8gZWQgZXZlbnR1YWxtZW50ZSBjaSBzb25vIGRlbGxlIGVzY2x1c2lvbmkgKCoqZXhjbHVzaW9ucyoqKVxyXG4gICAgICogU2UgKiphbGwqKiDDqCAqKmZhbHNlKiogdnVvbCBkaXJlIGNoZSBzb25vIHNlbGV6aW9uYXRpICoqaXRlbSoqIHNwZWNpZmljaVxyXG4gICAgICogXHJcbiAgICAgKiBJbiBiYXNlIGFsbCdJbnB1dCAqKlVzZVNlbGVjdGlvbkNhY2hlKiogbGUgcHJvcHJpZXTDoCAqKmV4Y2x1c2lvbnMqKiBlICoqaXRlbXMqKiBmYW5ubyByaWZlcmltZW50byBvIGFsbGEgcGFnaW5hIGNvcnJlbnRlIChzZSAqKmZhbHNlKiopIFxyXG4gICAgICogbyBhbGwnaW50ZXJhIHJpY2VyY2EgKHNlICoqdHJ1ZSoqKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBJdGVtc1NlbGVjdGlvbjxUPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBjaGUgbGEgcmljZXJjYSDDqCBzdGF0YSByaWNoaWVzdGEgZGFsbCdlc3RhYmxlLiBRdWVzdGEgdmFyaWFiaWxlIE5PTiBkZXZlIGVzc2VyZSB0b2NjYXRhLiDDiCBnZXN0aXRhIGFsIDEwMCUgZGFsbCdlcy10YWJsZS4gXHJcbiAgICAgKiBcclxuICAgICAqIEwndW5pY2EgY29zYSBjaGUgc2VydmUgw6ggY2hlIG5lbCBtb2RlbGxvIGxhdG8gQyMgc2lhIHByZXNlbnRlIGluIG1vZG8gZGEgbm9uIHBlcmRlcmxhIGR1cmFudGUgbGEgc2VyaWFsaXp6YXppb25lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnRlcm5hbHNlYXJjaHJlcXVlc3Q6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqIFJhZ2dydXBwYW1lbnRpIGRhIGZhcmUgcGVyIHF1ZXN0YSBxdWVyeS4gU2UgaW1wb3N0YXRvIGUgbm9uIGNpIHNvbm8gKipmaWx0ZXJncm91cCoqIG1pIGFzcGV0dG8gZGkgcmljZXZlcmUgb2dnZXR0aSBuZWwgY2FtcG8gKipncm91cHMqKiAqL1xyXG4gICAgcHVibGljIGdyb3VwaW5nczogR3JvdXBPckFnZ3JlZ2F0aW9uW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWx0cm8gZGEgYXBwbGljYXJlIGFpIGdydXBwaS4gUXVhbG9yYSBpbCBudW1lcm8gZGkgZmlsdHJpIHF1aSBmb3NzZSB1Z3VhbGUgYWwgbnVtZXJvIGRpIHJhZ2dydXBwYW1lbnRpIG1pIGluaXppbyBhZCBhcGV0dGFyZSBkaSByaWNldmVyZSBvZ2dldHRpXHJcbiAgICAgKiBzdWwgY2FtcG8gKippdGVtcyoqLCBpbiBjYXNvIGNvbnRyYXJpbyBtaSBhc3BldHRvIGRpIHJpY2V2ZXJlIG8gaSBncnVwcGkgbmVsIGNhbXBvICoqZ3JvdXBzKiogbyBsJ04tZXNpbW8gbGl2ZWxsbyBkZWkgZ3J1cHBpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXF1ZXN0ZWRncm91cHM6IEdyb3VwRmlsdGVyW107XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogUGVybWV0dGUgZGkgcmVzZXR0YXJlIHVuIEFwcFNlYXJjaCBhaSB2YWxvcmkgZGkgZGVmYXVsdC4gXHJcbiAgICAgKiBSZXNvIHN0YXRpY28gcGVyY2jDqSBmcmEgdW5hIGRlc2VyaWFsaXp6YXppb25lIGUgbCdhbHRyYSBzaSBwb3RyZWJiZSBwZXJkZXJlIGlsIHByb3RvdHlwZSBkZWwgY29zdHJ1dHRvcmUgXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVzZXQoYXBzOiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGFwcy5wYWdlcyA9IDE7XHJcbiAgICAgICAgYXBzLm9iamVjdGNvdW50ID0gMDtcclxuICAgICAgICBhcHMuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIGFwcy5maXJzdHNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIGFwcy5wYWdlID0gMTtcclxuICAgICAgICBhcHMuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICBhcHMuaXRlbXMgPSBbXTtcclxuICAgICAgICBhcHMub3JkZXJzID0gW107XHJcbiAgICAgICAgYXBzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICBhcHMuY29sdW1uX29yZGVyaW5nID0gW107XHJcbiAgICAgICAgYXBzLnNhdmVkc3RhdGUgPSBmYWxzZTtcclxuICAgIH1cclxufSJdfQ==
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXBwU2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBTZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sU0FBUztJQUVsQjs7T0FFRztJQUNIO1FBQ0ksSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFzRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQW1CO1FBQ25DLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDcEIsR0FBRyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM3QixHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLEdBQUcsQ0FBQyxvQkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixHQUFHLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNqQixHQUFHLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUN6QixHQUFHLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixHQUFHLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFtQjtRQUNwQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3RCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0MsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwT3JkZXJpbmcgfSBmcm9tICcuL0FwcE9yZGVyaW5nJztcclxuaW1wb3J0IHsgSXRlbXNTZWxlY3Rpb24gfSBmcm9tICcuL0l0ZW1zU2VsZWN0aW9uJztcclxuaW1wb3J0IHsgR3JvdXAgfSBmcm9tICcuL0dyb3VwJztcclxuaW1wb3J0IHsgR3JvdXBGaWx0ZXIgfSBmcm9tICcuL0dyb3VwRmlsdGVyJztcclxuaW1wb3J0IHsgR3JvdXBPckFnZ3JlZ2F0aW9uIH0gZnJvbSAnLi9Hcm91cE9yQWdncmVnYXRpb24nO1xyXG5pbXBvcnQgeyBSZXBvcnRQYXJhbSB9IGZyb20gJy4uL3JlcG9ydC9SZXBvcnRQYXJhbSc7XHJcbmltcG9ydCB7IFJlcG9ydENvbHVtbiB9IGZyb20gJy4uL3JlcG9ydC9SZXBvcnRDb2x1bW4nO1xyXG5cclxuLyoqXHJcbiAqIENsYXNzZSBjaGUgaWRlbnRpZmljYSB1bmEgcmljZXJjYSBwYWdpbmF0YSBpbiB0dXR0ZSBsZSBzdWUgc2Z1bWF0dXJlIChkaSBncmlnaW8pXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQXBwU2VhcmNoPFQ+IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlIGNoZSBnZW5lcmEgdW4naXN0YW56YSBjb2kgdmFsb3JpIGRpIGRlZmF1bHQgZSBpbXBvc3RhbmRvICoqZmlyc3RzZWFyY2gqKiBhICoqdHJ1ZSoqXHJcbiAgICAgKi9cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgdGhpcy5vcmRlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmNvbHVtbl9vcmRlcmluZyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2F2ZWRzdGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlyc3RzZWFyY2ggPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBJRCBkZWxsYSByaWNlcmNhLCBzZW1wcmUgaW51dGlsZSBhIG1lbm8gY2hlIG5vbiBzaWEgbGEgcmljZXJjYSBkZWkgcmlzdWx0YXRpIGRpIHVuIHJlcG9ydCAqL1xyXG4gICAgcHVibGljIHNlYXJjaGlkOiBzdHJpbmc7XHJcbiAgICAvKiogRGVzY3JpemlvbmUgZGVsbGEgcmljZXJjYSwgc2VtcHJlIGludXRpbGUgYSBtZW5vIGNoZSBub24gc2lhIGxhIHJpY2VyY2EgZGVpIHJpc3VsdGF0aSBkaSB1biByZXBvcnQgKi9cclxuICAgIHB1YmxpYyBzZWFyY2hkZXNjcmlwdGlvbjogc3RyaW5nO1xyXG4gICAgLyoqIEluZGljYSBzZSBsYSBwYWdpbmF6aW9uZSBwZXIgcXVlc3RhIHJpY2VyY2Egw6ggZGlzcG9uaWJpbGUgKi9cclxuICAgIHB1YmxpYyBwYWdpbmdhdmFpbGFibGU6IGJvb2xlYW47XHJcbiAgICAvKiogSW5kaWNhIGlsIGZvcm1hdG8gZGkgZXhwb3J0IGRpc3BvbmliaWxlIHBlciBxdWVzdGEgcmljZXJjYS4gVXRpbGl6emF0byBzb2xvIHBlciBsYSByaWNlcmNhIGRlaSByaXN1bHRhdGkgZGkgdW4gcmVwb3J0ICovXHJcbiAgICBwdWJsaWMgZXhwZm9ybWF0OiBib29sZWFuO1xyXG4gICAgLyoqIFBhcmFtZXRyaSBkaSByaWNlcmNhIHBlciBpIHJpc3VsdGF0aSBpbiBtb2RhbGl0w6AgcmVwb3J0ICovXHJcbiAgICBwdWJsaWMgcGFyczogUmVwb3J0UGFyYW1bXTtcclxuICAgIC8qKiBJbmRpY2F6aW9uZSBkZWxsZSBjb2xvbm5lIHByZXNlbnRpIG5lbCByZXBvcnQgKi9cclxuICAgIHB1YmxpYyByZXBvcnRfY29sdW1uczogUmVwb3J0Q29sdW1uW107XHJcbiAgICAvKiogSW5kaWNhIHNlIGMnw6ggdW5hIHJpY2VyY2EgaW4gY29yc28gKi9cclxuICAgIHB1YmxpYyBzZWFyY2hpbnByb2dyZXNzOiBib29sZWFuO1xyXG4gICAgLyoqIEluZGljYSBpbCBudW1lcm8gdG90YWxlIGRpIHBhZ2luZSB0cm92YXRlIGRhbGxhIHJpY2VyY2EuIE9nbmkgcGFnaW5hIMOoIHVuYSBsaXN0YSBkaSAqKml0ZW1zcGVycGFnZW92ZXJyaWRlKiogb2dnZXR0aSAqL1xyXG4gICAgcHVibGljIHBhZ2VzOiBudW1iZXI7XHJcbiAgICAvKiogQ29udGVnZ2lvIHRvdGFsZSBkZWdsaSBvZ2dldHRpIHRyb3ZhdGkgKGluY2x1c2kgcXVlbGxpIGluIHBhZ2luZSBub24gYXR0dWFsbWVudGUgc2VsZXppb25hdGUpICovXHJcbiAgICBwdWJsaWMgb2JqZWN0Y291bnQ6IG51bWJlcjtcclxuICAgIC8qKiBDb250ZWdnaW8gdG90YWxlIGRlaSBncnVwcGkgdHJvdmF0aSAoaW5jbHVzaSBxdWVsbGkgaW4gcGFnaW5lIG5vbiBhdHR1YWxtZW50ZSBzZWxlemlvbmF0ZSkgKi9cclxuICAgIHB1YmxpYyBncm91cGNvdW50OiBudW1iZXI7XHJcbiAgICAvKiogUGFnaW5hIGF0dHVhbG1lbnRlIGluIHZpc3VhbGl6emF6aW9uZSAqL1xyXG4gICAgcHVibGljIHBhZ2U6IG51bWJlcjtcclxuICAgIC8qKiBOdW1lcm8gZGkgb2dnZXR0aSBkYSBwZXJzZW50YXJlIGluIG9nbmkgcGFnaW5hLiBQZXIgY29udmVuemlvbmUgc2kgY29uc2lkZXJhIHZhbG9yaXp6YXRvIGEgMTUgc2Ugbm9uIGZvcm5pdG8gKi9cclxuICAgIHB1YmxpYyBpdGVtc3BlcnBhZ2VvdmVycmlkZTogbnVtYmVyO1xyXG4gICAgLyoqIExpc3RhIGRlZ2xpIG9nZ2V0dGkgbmVsbGEgcGFnaW5hIGF0dHVhbG1lbnRlIGluIHZpc3VhbGl6emF6aW9uZSAqL1xyXG4gICAgcHVibGljIGl0ZW1zOiBUW107XHJcbiAgICAvKiogRGl6aW9uYXJpbyBjb250ZW5lbnRlIHR1dHRpIGkgZ3J1cHBpIHBhZ2luYXRpICAqL1xyXG4gICAgcHVibGljIGdyb3VwczogR3JvdXBbXTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIHBlciBjdWkgb3JkaW5hcmUgKi9cclxuICAgIHB1YmxpYyBvcmRlcnM6IEFwcE9yZGVyaW5nW107XHJcbiAgICAvKiogTGlzdGEgZGkgY29sb25uZSBkYSB2aXN1YWxpenphcmUgKi9cclxuICAgIHB1YmxpYyBjb2x1bW5zOiBzdHJpbmdbXTtcclxuICAgIC8qKiBMaXN0YSBkaSBjb2xvbm5lIG5lbGwnb3JkaW5lIGNvcnJldHRvICovXHJcbiAgICBwdWJsaWMgY29sdW1uX29yZGVyaW5nOiBzdHJpbmdbXTtcclxuICAgIC8qKiBJbmRpY2Egc2UgbGEgcmljZXJjYSBlcmEgc2FsdmF0YS4gUXVhbG9yYSBmb3NzZSBxdWVzdG8gaWwgY2FzbywgYWwgY2FyaWNhbWVudG8gbCdlcy10YWJsZSBzaSBvY2N1cGVyw6AgZGkgcmktZWZmZXR0dWFyZSBsYSByaWNlcmNhIGVkIGFnZ2lvcm5hcmUgaWwgbW9kZWxsbyAqL1xyXG4gICAgcHVibGljIHNhdmVkc3RhdGU6IGJvb2xlYW47XHJcbiAgICAvKiogSW5kaWNhIHNlIGJpc29nbmEgYW5jb3JhIGVmZmV0dHVhcmUgbGEgcHJpbWEgcmljZXJjYSAqL1xyXG4gICAgcHVibGljIGZpcnN0c2VhcmNoOiBib29sZWFuO1xyXG4gICAgLyoqIEluZGljYSBzZSBzdG8gZWZmZXR0dWFuZG8gbGEgcmljZXJjYSBwb3N0IGJpbmQgKi9cclxuICAgIHB1YmxpYyBzZWxmc2VhcmNoOiBib29sZWFuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT2dnZXR0byBjaGUgaW5kaWNhIGxhIHNlbGV6aW9uZSBjb3JyZW50ZS4gXHJcbiAgICAgKiBcclxuICAgICAqIFNlICoqYWxsKiogw6ggKip0cnVlKiogdnVvbGUgZGlyZSBjaGUgw6ggdHV0dG8gc2VsZXppb25hdG8gZWQgZXZlbnR1YWxtZW50ZSBjaSBzb25vIGRlbGxlIGVzY2x1c2lvbmkgKCoqZXhjbHVzaW9ucyoqKVxyXG4gICAgICogU2UgKiphbGwqKiDDqCAqKmZhbHNlKiogdnVvbCBkaXJlIGNoZSBzb25vIHNlbGV6aW9uYXRpICoqaXRlbSoqIHNwZWNpZmljaVxyXG4gICAgICogXHJcbiAgICAgKiBJbiBiYXNlIGFsbCdJbnB1dCAqKlVzZVNlbGVjdGlvbkNhY2hlKiogbGUgcHJvcHJpZXTDoCAqKmV4Y2x1c2lvbnMqKiBlICoqaXRlbXMqKiBmYW5ubyByaWZlcmltZW50byBvIGFsbGEgcGFnaW5hIGNvcnJlbnRlIChzZSAqKmZhbHNlKiopIFxyXG4gICAgICogbyBhbGwnaW50ZXJhIHJpY2VyY2EgKHNlICoqdHJ1ZSoqKVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2VsZWN0aW9uOiBJdGVtc1NlbGVjdGlvbjxUPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEluZGljYSBjaGUgbGEgcmljZXJjYSDDqCBzdGF0YSByaWNoaWVzdGEgZGFsbCdlc3RhYmxlLiBRdWVzdGEgdmFyaWFiaWxlIE5PTiBkZXZlIGVzc2VyZSB0b2NjYXRhLiDDiCBnZXN0aXRhIGFsIDEwMCUgZGFsbCdlcy10YWJsZS4gXHJcbiAgICAgKiBcclxuICAgICAqIEwndW5pY2EgY29zYSBjaGUgc2VydmUgw6ggY2hlIG5lbCBtb2RlbGxvIGxhdG8gQyMgc2lhIHByZXNlbnRlIGluIG1vZG8gZGEgbm9uIHBlcmRlcmxhIGR1cmFudGUgbGEgc2VyaWFsaXp6YXppb25lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpbnRlcm5hbHNlYXJjaHJlcXVlc3Q6IGJvb2xlYW47XHJcblxyXG4gICAgLyoqIFJhZ2dydXBwYW1lbnRpIGRhIGZhcmUgcGVyIHF1ZXN0YSBxdWVyeS4gU2UgaW1wb3N0YXRvIGUgbm9uIGNpIHNvbm8gKipmaWx0ZXJncm91cCoqIG1pIGFzcGV0dG8gZGkgcmljZXZlcmUgb2dnZXR0aSBuZWwgY2FtcG8gKipncm91cHMqKiAqL1xyXG4gICAgcHVibGljIGdyb3VwaW5nczogR3JvdXBPckFnZ3JlZ2F0aW9uW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGaWx0cm8gZGEgYXBwbGljYXJlIGFpIGdydXBwaS4gUXVhbG9yYSBpbCBudW1lcm8gZGkgZmlsdHJpIHF1aSBmb3NzZSB1Z3VhbGUgYWwgbnVtZXJvIGRpIHJhZ2dydXBwYW1lbnRpIG1pIGluaXppbyBhZCBhcGV0dGFyZSBkaSByaWNldmVyZSBvZ2dldHRpXHJcbiAgICAgKiBzdWwgY2FtcG8gKippdGVtcyoqLCBpbiBjYXNvIGNvbnRyYXJpbyBtaSBhc3BldHRvIGRpIHJpY2V2ZXJlIG8gaSBncnVwcGkgbmVsIGNhbXBvICoqZ3JvdXBzKiogbyBsJ04tZXNpbW8gbGl2ZWxsbyBkZWkgZ3J1cHBpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXF1ZXN0ZWRncm91cHM6IEdyb3VwRmlsdGVyW107XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogUGVybWV0dGUgZGkgcmVzZXR0YXJlIHVuIEFwcFNlYXJjaCBhaSB2YWxvcmkgZGkgZGVmYXVsdC4gXHJcbiAgICAgKiBSZXNvIHN0YXRpY28gcGVyY2jDqSBmcmEgdW5hIGRlc2VyaWFsaXp6YXppb25lIGUgbCdhbHRyYSBzaSBwb3RyZWJiZSBwZXJkZXJlIGlsIHByb3RvdHlwZSBkZWwgY29zdHJ1dHRvcmUgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IGFwcyBBcHBTZWFyY2ggZGEgcmVzZXR0YXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgcmVzZXQoYXBzOiBBcHBTZWFyY2g8YW55Pikge1xyXG4gICAgICAgIGFwcy5wYWdlcyA9IDE7XHJcbiAgICAgICAgYXBzLm9iamVjdGNvdW50ID0gMDtcclxuICAgICAgICBhcHMuc2VhcmNoaW5wcm9ncmVzcyA9IGZhbHNlO1xyXG4gICAgICAgIGFwcy5maXJzdHNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIGFwcy5wYWdlID0gMTtcclxuICAgICAgICBhcHMuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSAxNTtcclxuICAgICAgICBhcHMuaXRlbXMgPSBbXTtcclxuICAgICAgICBhcHMub3JkZXJzID0gW107XHJcbiAgICAgICAgYXBzLmNvbHVtbnMgPSBbXTtcclxuICAgICAgICBhcHMuY29sdW1uX29yZGVyaW5nID0gW107XHJcbiAgICAgICAgYXBzLnNhdmVkc3RhdGUgPSBmYWxzZTtcclxuICAgICAgICBhcHMuc2VsZnNlYXJjaCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIFBlcm1ldHRlIGRpIG90dGVuZXJlIHVuIG51b3ZvIHJpZmVyaW1lbnRvIGFsbCdBcHBTZWFyY2ggcGFzc2F0YSBjb21lIHBhcmFtZXRyby5cclxuICAgICAqIEludGVybmFtZW50ZSB1dGlsaXp6YSBpbCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFgpKSBjb24gbGEgZGlmZmVyZW56YSBjaGUgcHJpbWEgc3RhY2NhIGlsIHJpZmVyaW1lbnRvIGFnbGkgaXRlbXMgcGVyIGV2aXRhcmUgZGkgXHJcbiAgICAgKiByZXNlcmlhbGl6emFyZSBwb3RlbnppYWxtZW50ZSBjZW50aW5haWEgZGkgZWxlbWVudGkuIElsIHJpZmVyaW1lbnRvIHZpZW5lIHBvaSByaWNvbGxlZ2F0byBhbGxhIG51b3ZhIGFwcHNlYXJjaCBnZW5lcmF0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSBhcHMgQXBwU2VhcmNoIGRpIGN1aSBlc3RyYXJyZSB1biBudW92byByaWZlcmltZW50byBlcXVpdmFsZW50ZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIG5ld3JlZihhcHM6IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgdmFyIGl0ZW1zID0gYXBzLml0ZW1zO1xyXG4gICAgICAgIGFwcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHZhciBuZXdyZWYgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGFwcykpO1xyXG4gICAgICAgIG5ld3JlZi5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIHJldHVybiBuZXdyZWY7XHJcbiAgICB9XHJcbn0iXX0=
|
|
@@ -162,6 +162,8 @@ class AppSearch {
|
|
|
162
162
|
/**
|
|
163
163
|
* Permette di resettare un AppSearch ai valori di default.
|
|
164
164
|
* Reso statico perché fra una deserializzazione e l'altra si potrebbe perdere il prototype del costruttore
|
|
165
|
+
*
|
|
166
|
+
* @param {AppSearch<any>} aps AppSearch da resettare
|
|
165
167
|
*/
|
|
166
168
|
static reset(aps) {
|
|
167
169
|
aps.pages = 1;
|
|
@@ -175,6 +177,21 @@ class AppSearch {
|
|
|
175
177
|
aps.columns = [];
|
|
176
178
|
aps.column_ordering = [];
|
|
177
179
|
aps.savedstate = false;
|
|
180
|
+
aps.selfsearch = false;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Permette di ottenere un nuovo riferimento all'AppSearch passata come parametro.
|
|
184
|
+
* Internamente utilizza il JSON.parse(JSON.stringify(X)) con la differenza che prima stacca il riferimento agli items per evitare di
|
|
185
|
+
* reserializzare potenzialmente centinaia di elementi. Il riferimento viene poi ricollegato alla nuova appsearch generata
|
|
186
|
+
*
|
|
187
|
+
* @param {AppSearch<any>} aps AppSearch di cui estrarre un nuovo riferimento equivalente
|
|
188
|
+
*/
|
|
189
|
+
static newref(aps) {
|
|
190
|
+
var items = aps.items;
|
|
191
|
+
aps.items = [];
|
|
192
|
+
var newref = JSON.parse(JSON.stringify(aps));
|
|
193
|
+
newref.items = items;
|
|
194
|
+
return newref;
|
|
178
195
|
}
|
|
179
196
|
}
|
|
180
197
|
|
|
@@ -3058,9 +3075,10 @@ class SelectionHandler {
|
|
|
3058
3075
|
case 'boolean':
|
|
3059
3076
|
case 'enum':
|
|
3060
3077
|
case 'autocomplete':
|
|
3078
|
+
return valType.value;
|
|
3061
3079
|
case 'float':
|
|
3062
3080
|
case 'currency':
|
|
3063
|
-
return valType.value;
|
|
3081
|
+
return parseFloat(valType.value).toLocaleString(this.est.locale);
|
|
3064
3082
|
case 'date':
|
|
3065
3083
|
return dayjs(valType.value).format(this.est.lc.token("getSmallDateDisplayFormat"));
|
|
3066
3084
|
case 'datetime':
|
|
@@ -3340,6 +3358,8 @@ class EsTableComponent {
|
|
|
3340
3358
|
this.ColumnsPinnable = null;
|
|
3341
3359
|
/** Indica se dev'essere disponibile il sistema di aggiornamento automatico */
|
|
3342
3360
|
this.AutoUpdate = null;
|
|
3361
|
+
/** Indica se dev'essere l'estable a gestire la ricerca, anche la prima */
|
|
3362
|
+
this.EsTableHandledSearch = false;
|
|
3343
3363
|
/**
|
|
3344
3364
|
* Decide se utilizzare o meno le CustomCells. Impostandolo a **true** l'es-table diventa in grado di gestire nativamente:
|
|
3345
3365
|
*
|
|
@@ -3754,6 +3774,15 @@ class EsTableComponent {
|
|
|
3754
3774
|
}
|
|
3755
3775
|
this.finalizeContext();
|
|
3756
3776
|
this.postBoundSourceCalculation();
|
|
3777
|
+
if (this.View && !this.View.selfsearch && this.EsTableHandledSearch) {
|
|
3778
|
+
this.View.selfsearch = true;
|
|
3779
|
+
this.changed();
|
|
3780
|
+
this.onSearchRequest.emit(false);
|
|
3781
|
+
}
|
|
3782
|
+
else if (this.View && this.View.selfsearch && this.EsTableHandledSearch) {
|
|
3783
|
+
this.View.selfsearch = false;
|
|
3784
|
+
this.changed();
|
|
3785
|
+
}
|
|
3757
3786
|
});
|
|
3758
3787
|
}
|
|
3759
3788
|
/**
|
|
@@ -4590,6 +4619,7 @@ EsTableComponent.propDecorators = {
|
|
|
4590
4619
|
ColumnsResizable: [{ type: Input }],
|
|
4591
4620
|
ColumnsPinnable: [{ type: Input }],
|
|
4592
4621
|
AutoUpdate: [{ type: Input }],
|
|
4622
|
+
EsTableHandledSearch: [{ type: Input }],
|
|
4593
4623
|
UseCustomCells: [{ type: Input }],
|
|
4594
4624
|
MaxHeight: [{ type: Input }],
|
|
4595
4625
|
ContainerClass: [{ type: Input }],
|