mmhglobal-dynamicform 2.43.0 → 2.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/esm2020/lib/embed-components/input-field-addons/input-field-addons.component.mjs +30 -6
- package/esm2020/lib/mmhglobal-dynamicform.module.mjs +17 -9
- package/esm2020/lib/zinput-container/zinput-container.component.mjs +14 -12
- package/esm2020/lib/zslider/zslider.component.mjs +140 -0
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +22 -3
- package/esm2020/lib/zudf/zudf.component.mjs +2 -1
- package/esm2020/public-api.mjs +2 -1
- package/fesm2015/mmhglobal-dynamicform.mjs +271 -88
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +269 -88
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/embed-components/input-field-addons/input-field-addons.component.d.ts +3 -0
- package/lib/mmhglobal-dynamicform.module.d.ts +42 -41
- package/lib/zinput-container/zinput-container.component.d.ts +1 -0
- package/lib/zslider/zslider.component.d.ts +36 -0
- package/lib/ztreelist/ztreelist.component.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -1012,5 +1012,6 @@ var ComponentType;
|
|
|
1012
1012
|
ComponentType["grouping"] = "kcard";
|
|
1013
1013
|
ComponentType["button"] = "zbuttons";
|
|
1014
1014
|
ComponentType["grid"] = "zgrid";
|
|
1015
|
+
ComponentType["slider"] = "zslider";
|
|
1015
1016
|
})(ComponentType || (ComponentType = {}));
|
|
1016
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVkZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVkZi96dWRmLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRiw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLE9BQU8sRUFBc0MsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQWEsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUdMLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBZ0MsUUFBUSxFQUN0RixzQkFBc0IsRUFBRSxZQUFZLEVBQW1CLFlBQVksRUFDcEUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7OztBQVFsRCxNQUFNLE9BQU8sYUFBYyxTQUFRLGtCQUFrQjtJQW1CbkQsWUFDUyxnQkFBbUMsRUFDbEMsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsNEJBQTBELEVBQzFELGtCQUFzQyxFQUN0QyxHQUFzQjtRQUU5QixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQVJoQixxQkFBZ0IsR0FBaEIs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QUFTOytCQUNFLFVBQVU7O0FBNG9DdEIsSUFBSyxhQW9CSjtBQXBCRCxXQUFLLGFBQWE7SUFDaEIsOEJBQWEsQ0FBQTtJQUNiLHNDQUFxQixDQUFBO0lBQ3JCLHNDQUFxQixDQUFBO0lBQ3JCLGlDQUFnQixDQUFBO0lBQ2hCLDhCQUFhLENBQUE7SUFDYix3Q0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBMkIsQ0FBQTtJQUMzQixrQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBZSxDQUFBO0lBQ2YsOEJBQWEsQ0FBQTtJQUNiLGdDQUFlLENBQUE7SUFDZixvQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBcUIsQ0FBQTtJQUNyQix3REFBdUMsQ0FBQTtJQUN2QyxvREFBbUMsQ0FBQTtJQUNuQyxtQ0FBa0IsQ0FBQTtJQUNsQixvQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFwQkksYUFBYSxLQUFiLGFBQWEsUUFvQmpCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgQXN5bmNTdWJqZWN0LCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IGNvbmNhdE1hcCwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIFpDb21wb25lbnQsIFpGaWVsZCxcclxuICBBbGVydFNlcnZpY2UsIEF1dGhTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsIFRvYXN0U2VydmljZSxcclxuICBaR3JvdXAsIFpDb21wb25lbnRQcm9wZXJ0aWVzLCBaQ29tcG9uZW50SGVscGVyLCBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLCBGb3JtVHlwZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gIEFzc2V0c0FsbG93ZWRFeHRlbnNpb24sIEFzc2V0c0ZvbGRlciwgQXNzZXRzTm9kZVBhcmFtLCBBc3NldHNSb3V0ZXMsIFdlYkFwaVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5pbXBvcnQgeyBaR3JpZCB9IGZyb20gXCIuLi96Z3JpZC96Z3JpZC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29udGFpbmVyRmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvY29udGFpbmVyZmllbGRiYXNlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gXCIuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXp1ZGYnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96dWRmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96dWRmLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBadWRmQ29tcG9uZW50IGV4dGVuZHMgQ29udGFpbmVyRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuXHJcbiAgLy8gZm9ybUZpZWxkczogYW55W107IC8vIHBvcHVsYXRlIHVzaW5nIGZpZWxkIGVsZW1lbnQuXHJcbiAgY29tcG9uZW50UHJvcGVydGllcyA9IG5ldyBaQ29tcG9uZW50UHJvcGVydGllcygpO1xyXG4gIGluaXRpYWxEYXRhVmFsdWU6IGFueTtcclxuICBjb21wb25lbnRQcmVmaXg6IHN0cmluZztcclxuICBjb21wb25lbnRTY29wZU5hbWU6IHN0cmluZztcclxuICBkaXNwbGF5RWxlbWVudE1vZGVsOiBhbnk7XHJcbiAgbXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlOiBzdHJpbmdbXTtcclxuICBsb2FkZWRGaWVsZHNTZXF1ZW5jZTogYW55O1xyXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXhWYWx1ZU9wdGlvbiA9ICdfenVkZm12Z09wdGlvbnMnO1xyXG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXhEYXRhU291cmNlTmFtZSA9ICdfenVkZm12Z0RhdGFTb3VyY2UnO1xyXG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXhDb2x1bW5GaWVsZHNOYW1lID0gJ196dWRmbXZnQ29sdW1uRmllbGRzJztcclxuICBwdWJsaWMgcmVhZG9ubHkgcHJlZml4Q3VzdG9tQWRkQnV0dG9uT25DbGljayA9ICdfQ3VzdG9tQWRkQnV0dG9uT25DbGljayc7XHJcbiAgcHVibGljIHJlYWRvbmx5IHByZWZpeEN1c3RvbVJlc2V0QnV0dG9uT25DbGljayA9ICdfQ3VzdG9tUmVzZXRCdXR0b25PbkNsaWNrJztcclxuICBwdWJsaWMgcmVhZG9ubHkgcHJlZml4Q3VzdG9tUmVtb3ZlQnV0dG9uT25DbGljayA9ICdfQ3VzdG9tUmVtb3ZlQnV0dG9uT25DbGljayc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2U6IENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBsZXQgb2JzOiBPYnNlcnZhYmxlPGFueT4gPSBvZih0aGlzLmRhdGEuVmFsdWUpO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUgPT0gdW5kZWZpbmVkICYmIHRoaXMuZGF0YS5GaWVsZEVsZW1lbnRDb2RlKSB7XHJcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuRmllbGRFbGVtZW50Q29kZSwgdGhpcy5ncm91cCk7XHJcbiAgICAgIGNvbnN0IGZpZWxkRm9ybVR5cGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkZpZWxkRWxlbWVudEZvcm1UeXBlLCB0aGlzLmdyb3VwKTtcclxuICAgICAgY29uc3QgZm9ybVJlc291cmNlID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0Q3VzdG9tUmVzb3VyY2UodGhpcy5kYXRhLkN1c3RvbVJlc291cmNlKTtcclxuICAgICAgbGV0IGlzTG9hZFZpYUFzc2V0ID0gZmFsc2U7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEubG9hZFZpYUFzc2V0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5kYXRhLmxvYWRWaWFBc3NldCA9PSAnc3RyaW5nJyAmJiB0aGlzLmRhdGEubG9hZFZpYUFzc2V0LnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgICAgICBpc0xvYWRWaWFBc3NldCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEubG9hZFZpYUFzc2V0LCB0aGlzLmdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpc0xvYWRWaWFBc3NldCA9IHRoaXMuZGF0YS5sb2FkVmlhQXNzZXQgYXMgYm9vbGVhbjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmaWVsZE5hbWUpIHtcclxuICAgICAgICBpZiAoaXNMb2FkVmlhQXNzZXQpIHtcclxuICAgICAgICAgIG9icyA9IHRoaXMuZ2V0RmllbGRFbGVtZW50X0Zvcm1QYWdlKGZpZWxkTmFtZSwgZmllbGRGb3JtVHlwZSkucGlwZShcclxuICAgICAgICAgICAgbWFwKGZpZWxkRWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGZpZWxkRWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkRWxlbWVudC5Db2RlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmIChmaWVsZEZvcm1UeXBlICYmIGZpZWxkRm9ybVR5cGUgPT0gRm9ybVR5cGUubGlzdEZpZWxkKSB7XHJcbiAgICAgICAgICAgIG9icyA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldExpc3RGaWVsZEJ5RmllbGRFbGVtZW50TmFtZShmaWVsZE5hbWUsIGZvcm1SZXNvdXJjZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgb2JzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShmaWVsZE5hbWUsICdGb3JtRmllbGQnLCB0aGlzLCAnZmllbGRzJywgbnVsbCwgZm9ybVJlc291cmNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IG9icyksXHJcbiAgICAgIHN3aXRjaE1hcCgoZmllbGQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5kYXRhLkZpZWxkRWxlbWVudENvZGUpIHtcclxuICAgICAgICAgIC8vIHVzZSBvYnMgdmFsdWUgb25seSBpZiBGaWVsZEVsZW1lbnRDb2RlIGlzIHNldC4gaWYgbm90IGRlZmF1bHQgYXMgbnVsbC5cclxuICAgICAgICAgIHRoaXMuZGF0YS5WYWx1ZSA9IGZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGF0YS5WYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTdG9yZSBpbml0aWFsIGRhdGEgdmFsdWUgYW5kIHNldCBjb21wb25lbnQgc2NvcGUgYW5kIHByZWZpeFxyXG4gICAgICAgIHRoaXMuaW5pdGlhbERhdGFWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFNjb3BlTmFtZSA9ICd6dWRmXycgKyB0aGlzLmRhdGEuTmFtZTtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudFByZWZpeCA9ICd6dWRmXycgKyB0aGlzLmRhdGEuTmFtZTtcclxuXHJcbiAgICAgICAgdGhpcy5ncm91cFt0aGlzLmRhdGEuTmFtZSArICdNb2RlbCddID0gW107XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEZvcm0oKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVuZGVycyB0aGUgZmllbGQgZWxlbWVudCBhbmQgc2V0cyB1cCB0aGUgZm9ybS5cclxuICAgKi9cclxuICBwcml2YXRlIGxvYWRGb3JtKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gb2YodHJ1ZSkucGlwZShcclxuICAgICAgLy8gU2V0IHRoZSBTdWJUeXBlIHRvICd6dWRmJy5cclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEuU3ViVHlwZSA9ICd6dWRmJztcclxuICAgICAgfSksXHJcbiAgICAgIC8vIENyZWF0ZSBhIG5ldyBncm91cCBmb3IgdGhlIGZpZWxkIGFuZCBzZXQgdXAgdGhlIGZvcm0uXHJcbiAgICAgIHRhcCgoKSA9PiB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IFpHcm91cCBmb3IgdGhlIGZpZWxkIGlmIG9uZSBkb2Vzbid0IGFscmVhZHkgZXhpc3QuXHJcbiAgICAgICAgaWYgKCF0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXSkge1xyXG4gICAgICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0gPSBuZXcgWkdyb3VwKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZWNsYXJlIGEgbmV3IHpNb2RlbCBvYmplY3QgZm9yIHRoZSBaR3JvdXAuXHJcbiAgICAgICAgY29uc3QgenVkZlNjb3BlR3JvdXAgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXTtcclxuICAgICAgICB6dWRmU2NvcGVHcm91cC56TW9kZWwgPSB7fTtcclxuXHJcbiAgICAgICAgLy8gUmVuZGVyIHRoZSBmaWVsZCBlbGVtZW50LlxyXG4gICAgICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KHRoaXMuZGF0YS5WYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIFNldCB0aGUgZm9ybSBmb3IgdGhlIFpHcm91cCBzY29wZS5cclxuICAgICAgICBpZiAodGhpcy5kYXRhLlZhbHVlKSB7XHJcbiAgICAgICAgICAvLyBJZiBWYWx1ZSBpcyBub3QgbnVsbCwgYmluZCB0aGUgZXhpc3RpbmcgZm9ybS5cclxuICAgICAgICAgIHp1ZGZTY29wZUdyb3VwLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIElmIFZhbHVlIGlzIG51bGwsIGNyZWF0ZSBhIG5ldyBmb3JtIHdpdGggYW4gZW1wdHkgZm9ybSBjb250cm9sLlxyXG4gICAgICAgICAgY29uc3QgZm9ybUNvbnRyb2w6IHsgW2tleTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfSA9IHt9O1xyXG4gICAgICAgICAgenVkZlNjb3BlR3JvdXAuZm9ybSA9IG5ldyBGb3JtR3JvdXAoZm9ybUNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIC8vIFNldCB0aGUgZm9ybUZpZWxkcyBwcm9wZXJ0eSBmb3IgZGlzcGxheS5cclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAvLyB0aGlzLmZvcm1GaWVsZHMgPSBPYmplY3QuYXNzaWduKFtdLCB0aGlzLmRhdGEuVmFsdWUpO1xyXG5cclxuICAgICAgICBaQ29tcG9uZW50SGVscGVyLmFwcGVuZENvbnNvbGVXYXRjaExpc3QodGhpcy5ncm91cCwgYGdyb3VwLiR7dGhpcy5jb21wb25lbnRTY29wZU5hbWV9LnpNb2RlbGApO1xyXG5cclxuICAgICAgICAvLyBDYWxsIHRoZSBhZnRlcjxGaWVsZD5Mb2FkZWQgZnVuY3Rpb24gaWYgaXQgZXhpc3RzIGluIHRoZSBncm91cC5cclxuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSAnYWZ0ZXInICsgKHRoaXMuZGF0YS5OYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGhpcy5kYXRhLk5hbWUuc2xpY2UoMSkpICsgJ0xvYWRlZCc7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwW2ZpZWxkTmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy5ncm91cFtmaWVsZE5hbWVdKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gc2V0IEZpZWxkIGRpdiBjbGFzc1xyXG4gICAgICAgIC8vIFJlcGxhY2VkIHdpdGg6IHRoaXMuZmllbGRTZXJ2aWNlLnBhdGNoRmllbGRQcm9wZXJ0eShmaWVsZCk7XHJcbiAgICAgICAgLy8gWkNvbXBvbmVudEhlbHBlci5zZXRGaWVsZHNEaXZDbGFzcyh0aGlzLmdyb3VwLl9wcm9qZWN0TmFtZSwgdGhpcy5ncm91cC5maWVsZE5hbWUsIHRoaXMuZGF0YSwgdGhpcy5hdXRoU2VydmljZSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEZvcm1Db250cm9sVmFsaWRhdGlvbihmb3JtQ29udHJvbE5hbWU6IHN0cmluZywgdmFsaWRhdG9yOiBhbnkpIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVuZGVycyBmaWVsZCBlbGVtZW50cyBiYXNlZCBvbiBhIEpTT04gc3RyaW5nLlxyXG4gICAqIEBwYXJhbSBncm91cCBUaGUgWkdyb3VwIG9iamVjdCB0byB3aGljaCB0aGUgZmllbGQgZWxlbWVudHMgd2lsbCBiZSBhZGRlZC5cclxuICAgKiBAcGFyYW0ganNvblN0cmluZyBUaGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBmaWVsZCBlbGVtZW50cy5cclxuICAgKi9cclxuICBwdWJsaWMgcmVuZGVyRmllbGRFbGVtZW50QnlKc29uU3RyaW5nKGdyb3VwOiBaR3JvdXAsIGpzb25TdHJpbmc6IHN0cmluZywgZmllbGRFbGVtZW50TmFtZTogc3RyaW5nID0gJycpOiB2b2lkIHtcclxuICAgIC8vIFBhcnNlIHRoZSBKU09OIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIGZpZWxkIGVsZW1lbnRzLlxyXG4gICAgY29uc3QgZmllbGRFbGVtZW50TWFzdGVyQ29kZUpzb25BcnJheSA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XHJcblxyXG4gICAgLy8gUmVuZGVyIHRoZSBmaWVsZCBlbGVtZW50cy5cclxuICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KGZpZWxkRWxlbWVudE1hc3RlckNvZGVKc29uQXJyYXksIGZpZWxkRWxlbWVudE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIERpc3BsYXkgbW9kZWxcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBkaXNwbGF5IG1vZGVsIGZvciBhIHp1ZGYgKHplcm8tdXRpbGl0eSBkYXRhIGZpZWxkKSBlbGVtZW50LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHVzZSBmb3IgdGhlIGRpc3BsYXkgbW9kZWwuXHJcbiAgICovXHJcbiAgcHVibGljIHNldERpc3BsYXlNb2RlbCh2YWx1ZTogYW55KSB7XHJcbiAgICAvLyBSZXBsYWNlIHRoZSB3aG9sZSBkaXNwbGF5IG1vZGVsIHdpdGggdGhlIG5ldyB2YWx1ZVxyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIC8vIENsZWFyIHRoZSBmb3JtIGNvbnRyb2xcclxuICAgICAgdGhpcy5jbGVhckZvcm1Db250cm9sKCk7XHJcblxyXG4gICAgICAvLyBNYWtlIGEgZGVlcCBjb3B5IG9mIHRoZSB2YWx1ZSB0byBhdm9pZCBhbnkgdW53YW50ZWQgcmVmZXJlbmNlIGVycm9yc1xyXG4gICAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBaQ29tcG9uZW50SGVscGVyLmRlZXBDbG9uZSh2YWx1ZSk7XHJcblxyXG4gICAgICAvLyBSZW5kZXIgdGhlIGZpZWxkIGVsZW1lbnQgYmFzZWQgb24gdGhlIG5ldyBkaXNwbGF5IG1vZGVsXHJcbiAgICAgIHRoaXMucmVuZGVyRmllbGRFbGVtZW50KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGludmFsaWQsIGxvZyBhIHdhcm5pbmcgbWVzc2FnZVxyXG4gICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgdmFsdWUgdXNlZCBmb3IgcmVuZGVyIHp1ZGYgJyArIHRoaXMuZGF0YS5OYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogVXBkYXRlcyBhIHZhbHVlIGluIHRoZSBkaXNwbGF5IGVsZW1lbnQgbW9kZWwgYXQgdGhlIHNwZWNpZmllZCBmbGF0IGluZGV4LlxyXG4gICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUgdG8gYmUgc2V0LlxyXG4gICogQHBhcmFtIHtzdHJpbmd9IGZsYXRJbmRleCAtIFRoZSBmbGF0IGluZGV4IGluZGljYXRpbmcgdGhlIGxvY2F0aW9uIGluIHRoZSBkaXNwbGF5IGVsZW1lbnQgbW9kZWwgd2hlcmUgdGhlIHZhbHVlIHNob3VsZCBiZSB1cGRhdGVkLlxyXG4gICovXHJcbiAgcHVibGljIHVwZGF0ZURpc3BsYXlNb2RlbCh2YWx1ZTogYW55LCBmbGF0SW5kZXg6IHN0cmluZykge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci51cGRhdGVBcnJheU9iamVjdEJ5RmxhdEluZGV4KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCwgZmxhdEluZGV4LCB2YWx1ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZCgpO1xyXG4gICAgLy90aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEFwcGVuZHMgYSB2YWx1ZSB0byB0aGUgZGlzcGxheSBlbGVtZW50IG1vZGVsIGF0IHRoZSBzcGVjaWZpZWQgZmxhdCBpbmRleC5cclxuICAqIEBwYXJhbSB7Kn0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgYXBwZW5kZWQuXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gZmxhdEluZGV4IC0gVGhlIGZsYXQgaW5kZXggaW5kaWNhdGluZyB0aGUgbG9jYXRpb24gaW4gdGhlIGRpc3BsYXkgZWxlbWVudCBtb2RlbCB3aGVyZSB0aGUgdmFsdWUgc2hvdWxkIGJlIGFwcGVuZGVkLlxyXG4gICovXHJcbiAgcHVibGljIGFwcGVuZFRvRGlzcGxheU1vZGVsKHZhbHVlOiBhbnksIGZsYXRJbmRleDogc3RyaW5nKSB7XHJcbiAgICAvLyBBcHBlbmQgdG8gZGlzcGxheSBtb2RlbCBtZWFucyBpdCB3aWxsIGluc2VydCB0aGUgZm9ybSBjb250cm9sIGJhc2VkIG9uIGZsYXQgaW5kZXguXHJcbiAgICBpZiAoZmxhdEluZGV4Lmxlbmd0aCA+PSAzKSB7XHJcbiAgICAgIGZsYXRJbmRleC5zdWJzdHJpbmcoMCwgZmxhdEluZGV4Lmxlbmd0aCAtIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkID0gWkNvbXBvbmVudEhlbHBlci5nZXRGcm9tQXJyYXlPYmplY3RCeUZsYXRJbmRleCh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwsIGZsYXRJbmRleCk7XHJcbiAgICBzZWxlY3RlZFJlY29yZC5WYWx1ZS5wdXNoKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhlIGRpc3BsYXkgZWxlbWVudCBtb2RlbC5cclxuICAgKiBAcmV0dXJucyB7YW55fSBBIGRlZXAgY29weSBvZiB0aGUgZGlzcGxheSBlbGVtZW50IG1vZGVsLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXREaXNwbGF5TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGZyb20gdGhlIGRpc3BsYXkgZWxlbWVudCBtb2RlbCBhbmQgY2xlYXJzIHRoZSBmb3JtIGNvbnRyb2wuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbW92ZUFsbERpc3BsYXlNb2RlbCgpIHtcclxuICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA9IFtdO1xyXG4gICAgdGhpcy5jbGVhckZvcm1Db250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW1vdmVzIGFuIGVsZW1lbnQgZnJvbSB0aGUgZGlzcGxheSBlbGVtZW50IG1vZGVsIGF0IHRoZSBzcGVjaWZpZWQgZmxhdCBpbmRleCBhbmQgdXBkYXRlcyB0aGUgZm9ybSBmaWVsZC5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhdEluZGV4IC0gVGhlIGZsYXQgaW5kZXggaW5kaWNhdGluZyB0aGUgbG9jYXRpb24gaW4gdGhlIGRpc3BsYXkgZWxlbWVudCBtb2RlbCB3aGVyZSB0aGUgZWxlbWVudCBzaG91bGQgYmUgcmVtb3ZlZC5cclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlRWxlbWVudEZyb21EaXNwbGF5TW9kZWwoZmxhdEluZGV4OiBzdHJpbmcpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVtb3ZlQXJyYXlPYmplY3RCeUZsYXRJbmRleCh0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwsIGZsYXRJbmRleCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZCgpO1xyXG5cclxuICAgIC8vIFRPRE86IHJlbW92ZSBmcm9tIHptb2RlbFxyXG4gICAgLy9kZWxldGUgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsWycnXTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZHMgYSBmb3JtIGNvbnRyb2wgdG8gdGhlIGZvcm0gYW5kIHRoZSBkaXNwbGF5IGVsZW1lbnQgbW9kZWwuXHJcbiAgICogQHBhcmFtIHtaRmllbGR9IGZpZWxkRGF0YSAtIFRoZSBkYXRhIGZvciB0aGUgZm9ybSBjb250cm9sIHRvIGJlIGFwcGVuZGVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBhcHBlbmRGb3JtQ29udHJvbChmaWVsZERhdGEpIHtcclxuICAgIC8vIEFwcGVuZCBmb3JtIGNvbnRyb2wgbWVhbnMgaXQgd2lsbCBqdXN0IGluc2VydCB0aGUgZm9ybSBjb250cm9sIGF0IHRoZSBlbmQuXHJcbiAgICBmaWVsZERhdGEuTmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGREYXRhLk5hbWUsIGZpZWxkRGF0YVsnY29udGFpbmVyTmFtZSddKTtcclxuICAgIGNvbnN0IGZvcm1Db250cm9scyA9IHt9O1xyXG5cclxuICAgIGZvcm1Db250cm9sc1tmaWVsZERhdGEuTmFtZV0gPSBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbFtmaWVsZERhdGEuTmFtZV1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5mb3JtLmFkZENvbnRyb2woZmllbGREYXRhLk5hbWUsIGZvcm1Db250cm9sc1tmaWVsZERhdGEuTmFtZV0pO1xyXG5cclxuICAgIGlmICghdGhpcy5kYXRhLlZhbHVlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdmb3JtRmllbGQgJyArIHRoaXMuZGF0YS5OYW1lICsgJyBpcyB1bmRlZmluZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPz8gW107XHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwucHVzaChmaWVsZERhdGEpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtRmllbGQoKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmRlcnMgZmllbGQgZWxlbWVudHMgYXMgZm9ybSBjb250cm9scyBpbiBhIG5ldyBmb3JtIGdyb3VwLlxyXG4gICAqIEBwYXJhbSB7YW55fSBmaWVsZEVsZW1lbnRzIC0gVGhlIGZpZWxkIGVsZW1lbnRzIHRvIGJlIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnQoZmllbGRFbGVtZW50czogYW55LCBmaWVsZEVsZW1lbnROYW1lOiBzdHJpbmcgPSAnJykge1xyXG4gICAgdGhpcy5jbGVhclpNb2RlbCgpO1xyXG5cclxuICAgIGlmIChmaWVsZEVsZW1lbnRzKSB7XHJcbiAgICAgIHRoaXMubG9hZGVkRmllbGRzU2VxdWVuY2UgPSB7fTtcclxuICAgICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XHJcbiAgICAgIGZpZWxkRWxlbWVudHMgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xzKGZpZWxkRWxlbWVudHMsIGZvcm1Db250cm9scyk7XHJcblxyXG4gICAgICAvLyBVbnN1YnNjcmliZSBmcm9tIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBpZiBleGlzdHNcclxuICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVuZGVyIGZvcm0gY29udHJvbHMgdG8gbmV3IGZvcm0gZ3JvdXBcclxuICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cChmb3JtQ29udHJvbHMpO1xyXG4gICAgICB0aGlzLmRhdGEuVmFsdWUgPSBmaWVsZEVsZW1lbnRzO1xyXG4gICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS5mb3JtID0gdGhpcy5mb3JtO1xyXG4gICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXVsnbG9hZGVkRmllbGRzU2VxdWVuY2UnXSA9IHRoaXMubG9hZGVkRmllbGRzU2VxdWVuY2U7XHJcblxyXG4gICAgICAvLyBTdWJzY3JpYmUgdG8gY29tcG9uZW50TG9hZGVkJCBldmVudFxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldENvbXBvbmVudExvYWRlZCQoJ3p1ZGYnKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIC8vIEFsbCBjb21wb25lbnRzIGhhdmUgZmluaXNoZWQgbG9hZGluZ1xyXG5cclxuICAgICAgICBjb25zdCB6dWRmR3JvdXAgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXTtcclxuICAgICAgICBpZiAoenVkZkdyb3VwWydsaW5rZWRDb21wb25lbnQnXSkge1xyXG4gICAgICAgICAgenVkZkdyb3VwWydsaW5rZWRDb21wb25lbnQnXS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5rZWRDb21wb25lbnRTZWdtZW50cyA9IGl0ZW0udmFsdWUuc3BsaXQoJ18nKTtcclxuICAgICAgICAgICAgY29uc3QgcGFyZW50Q29tcG9uZW50TmFtZSA9IGxpbmtlZENvbXBvbmVudFNlZ21lbnRzLnNsaWNlKDAsIDIpLmpvaW4oJ18nKSArICdfJyArIGl0ZW0ubGlua2VkQ29tcG9uZW50O1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudEJ5VmFsdWUodGhpcy5ncm91cCwgcGFyZW50Q29tcG9uZW50TmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkQ29tcG9uZW50ID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnRCeVZhbHVlKHRoaXMuZ3JvdXAsIGl0ZW0udmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBhcmVudENvbXBvbmVudCAmJiBjaGlsZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2VsZWN0T3B0aW9ucyA9IGNoaWxkQ29tcG9uZW50LmRhdGFbJ29yaWdpbmFsU2VsZWN0T3B0aW9ucyddID8/IE9iamVjdC5hc3NpZ24oW10sIGNoaWxkQ29tcG9uZW50LmRhdGEuU2VsZWN0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRTZWxlY3Rpb25PcHRpb25zID0gb3JpZ2luYWxTZWxlY3RPcHRpb25zLmZpbHRlcihvcHRpb24gPT4gb3B0aW9uLnBhcmVudEV4cHJlc3Npb24gPT0genVkZkdyb3VwLnpNb2RlbFtwYXJlbnRDb21wb25lbnROYW1lXSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIE1hbnVhbGx5IHBhdGNoIHRoZSBjb21wb25lbnQgZm9ybSBjb250cm9sIHZhbHVlXHJcbiAgICAgICAgICAgICAgY29uc3QgenVkZkZvcm0gPSB6dWRmR3JvdXAuZm9ybSBhcyBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29tcG9uZW50Rm9ybUNvbnRyb2wgPSB6dWRmRm9ybS5jb250cm9sc1tpdGVtLnZhbHVlXSBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICAgICAgICBpZiAoY29tcG9uZW50Rm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkQ29tcG9uZW50LnNldFNlbGVjdE9wdGlvbihmaWx0ZXJlZFNlbGVjdGlvbk9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgY29tcG9uZW50Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh6dWRmR3JvdXAuek1vZGVsW2l0ZW0udmFsdWVdKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1VuYWJsZSB0byBnZXQgZm9ybWNvbnRyb2wgZm9yICcgKyBpdGVtLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHp1ZGZGb3JtKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbmVlZCB0byBjYWxsIGJhY2sgZmllbGQgZWxlbWVudCBcIjxmaWVsZCBuYW1lPl9sb2FkZWRcIlxyXG4gICAgICAgIGlmIChmaWVsZEVsZW1lbnROYW1lICE9ICcnKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cFtmaWVsZEVsZW1lbnROYW1lICsgJ19sb2FkZWQnXSkge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwW2ZpZWxkRWxlbWVudE5hbWUgKyAnX2xvYWRlZCddKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVG8gY29uc2lkZXI6IFRyaWdnZXIgdGhlIFwib25jaGFuZ2VcIiBldmVudCBvciBwZXJmb3JtIGFueSBvdGhlciBuZWNlc3NhcnkgYWN0aW9ucyBoZXJlXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZEFycmF5OiBhbnksIGZvcm1Db250cm9sczogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9LCBjb250YWluZXJOYW1lPzogc3RyaW5nLCBpc011bHRpVmFsdWVHcm91cCA9IGZhbHNlLCBmaWVsZFZhbHVlR3JvdXBlZCA9IGZhbHNlLCBpbmRleCA9ICcnKSB7XHJcbiAgICBmaWVsZEFycmF5LmZvckVhY2goKGZpZWxkLCBpKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkSW5kZXggPSBpbmRleCA/IGAke2luZGV4fS4ke2kgKyAxfWAgOiBgJHtpfWA7XHJcblxyXG4gICAgICB0aGlzLmZpZWxkU2VydmljZS5wYXRjaEZpZWxkUHJvcGVydHkoZmllbGQpO1xyXG4gICAgICBpZiAodHlwZW9mIGZpZWxkLlZhbHVlID09PSBcInN0cmluZ1wiICYmIGZpZWxkLlZhbHVlLmluZGV4T2YoXCIuXCIpICE9PSAtMSkge1xyXG4gICAgICAgIGlmIChbJ3pncmlkJywgJ3p0cmVlJywgJ3ppbWcnLCAndGV4dGFyZWFqc29uJywgJ3pnYW50dGNoYXJ0J10uaW5kZXhPZihmaWVsZC5UeXBlKSA9PT0gLTEpIHtcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcIkZvcm1Db250cm9sIC0gaW52YWxpZCBmaWVsZCB2YWx1ZVwiLCBmaWVsZC5WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHp1ZGZHcm91cCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdO1xyXG5cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICAgIC8vIGluc2VydCBtdWx0aXZhbHVlZ3JvdXAgdG8gdGhlIGNhcmQgdmFsdWUgaWYgdHJ1ZVxyXG4gICAgICAgICAgY29uc3QgZmllbGRWYWx1ZUdyb3VwZWQgPSBmaWVsZC5UeXBlID09IENvbXBvbmVudFR5cGUuZ3JvdXBpbmcgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZEZpZWxkc1NlcXVlbmNlW2ZpZWxkSW5kZXhdID0ge1xyXG4gICAgICAgICAgICBuYW1lOiBmaWVsZC5NdWx0aVZhbHVlZEdyb3VwID8gYCR7dGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZC5OYW1lKX0ke3RoaXMucHJlZml4VmFsdWVPcHRpb259YCA6IGAke3RoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGQuTmFtZSl9YCxcclxuICAgICAgICAgICAgbGFiZWw6IGZpZWxkLlRpdGxlLFxyXG4gICAgICAgICAgICB0eXBlOiBmaWVsZC5UeXBlLFxyXG4gICAgICAgICAgICBpc011bHRpVmFsdWVHcm91cDogZmllbGQuTXVsdGlWYWx1ZWRHcm91cCA/PyBmYWxzZSxcclxuICAgICAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgaXNWaXNpYmxlOiBmaWVsZC5WaXNpYmxlID8/IGZhbHNlLFxyXG4gICAgICAgICAgICBpc1JlcXVpcmVkOiBmaWVsZC5Jc1JlcXVpcmVkID8/IGZhbHNlLFxyXG4gICAgICAgICAgICBpc1JlYWRPbmx5OiBmaWVsZC5SZWFkT25seSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YVNvdXJjZVR5cGU6IGZpZWxkLnp1ZGZEYXRhU291cmNlVHlwZSA/PyBudWxsIC8vdmFsdWUgYWthIG1hbnVhbCwgdXNlciwgcmVzb3VyY2UgYWthIHJlc291cmNlXHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIGlmIChmaWVsZC5NdWx0aVZhbHVlZEdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TXVsdGlWYWx1ZUdyb3VwKGZpZWxkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbHMoZmllbGQuVmFsdWUsIGZvcm1Db250cm9scywgZmllbGQuTmFtZSwgZmllbGQuTXVsdGlWYWx1ZWRHcm91cCwgZmllbGRWYWx1ZUdyb3VwZWQsIGZpZWxkSW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIC8vIGJlZm9yZSBnZW5lcmF0ZSBGb3JtQ29udHJvbCwgd2UgbmVlZCB0byBhZGQgMiBhdHRyaWJ1dGUgdG8gdGhlIGZpZWxkIHdoZW4gcmVuZGVyLlxyXG4gICAgICAgICAgLy8gdGhpcyBmb3IgbGF0ZXIgb24sIHdlIGNhbiBlYXNpbHkga25vdyB0aGlzIGZpZWxkIGJlbG9uZyB0byB3aGljaCB6dWRmIGFuZCB1bmRlciB3aGljaCBjb250YWluZXIuXHJcbiAgICAgICAgICBpZiAoY29udGFpbmVyTmFtZSkge1xyXG4gICAgICAgICAgICBmaWVsZFsnY29udGFpbmVyTmFtZSddID0gY29udGFpbmVyTmFtZTtcclxuICAgICAgICAgICAgaWYgKCF6dWRmR3JvdXBbY29udGFpbmVyTmFtZV0pIHtcclxuICAgICAgICAgICAgICB6dWRmR3JvdXBbY29udGFpbmVyTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IGlzRm9ybUNvbnRyb2wgPSBaQ29tcG9uZW50SGVscGVyLmlzRm9ybUNvbnRyb2woZmllbGQpO1xyXG4gICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5pc1Zpc2libGVGb3JtQ29udHJvbCh0aGlzLCBmaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc1JlcXVpcmVkID0gWkNvbXBvbmVudEhlbHBlci5pc1JlcXVpcmVkRm9ybUNvbnRyb2wodGhpcywgZmllbGQpO1xyXG5cclxuICAgICAgICAgIGlmIChpc0Zvcm1Db250cm9sID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWRGaWVsZHNTZXF1ZW5jZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVkRmllbGRzU2VxdWVuY2UgPSB7fTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZpZWxkLlR5cGUgPT09ICd6dWlzZWxlY3RtdWx0aXBsZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpZWxkU2VydmljZS5pbmNyZW1lbnRDb21wb25lbnRDb3VudGVyKCd6dWRmJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZmllbGQuTmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGQuTmFtZSwgY29udGFpbmVyTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC5WYWx1ZSkge1xyXG4gICAgICAgICAgICAgIGZpZWxkLlZhbHVlID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZC5WYWx1ZSwgY29udGFpbmVyTmFtZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVkRmllbGRzU2VxdWVuY2VbZmllbGRJbmRleF0gPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogZmllbGQuTmFtZSxcclxuICAgICAgICAgICAgICBsYWJlbDogZmllbGQuTGFiZWwsXHJcbiAgICAgICAgICAgICAgdHlwZTogZmllbGQuVHlwZSxcclxuICAgICAgICAgICAgICBpc011bHRpVmFsdWVHcm91cDogaXNNdWx0aVZhbHVlR3JvdXAsXHJcbiAgICAgICAgICAgICAgaXNHcm91cGVkOiBmaWVsZFZhbHVlR3JvdXBlZCxcclxuICAgICAgICAgICAgICBpc1Zpc2libGU6IGZpZWxkLlZpc2libGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgaXNSZXF1aXJlZDogZmllbGQuSXNSZXF1aXJlZCA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICBpc1JlYWRPbmx5OiBmaWVsZC5SZWFkT25seSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICBkYXRhU291cmNlVHlwZTogZmllbGQuenVkZkRhdGFTb3VyY2VUeXBlID8/IG51bGwgLy92YWx1ZSBha2EgbWFudWFsLCB1c2VyLCByZXNvdXJjZSBha2EgcmVzb3VyY2VcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb250YWluZXJOYW1lKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF6dWRmR3JvdXBbY29udGFpbmVyTmFtZV0uaW5jbHVkZXMoZmllbGQuVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICB6dWRmR3JvdXBbY29udGFpbmVyTmFtZV0ucHVzaChmaWVsZC5WYWx1ZSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHNldCB0aGUgbGlzdCBvZiBkcm9wZG93biBvcHRpb24gdG8gdGhlIHZhcmlhYmxlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRHJvcGRvd25UeXBlKGZpZWxkLlR5cGUpICYmIGZpZWxkLlpEYXRhT3B0aW9uTmFtZSAmJiBmaWVsZC5Ecm9wZG93bk9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLnpEYXRhW2ZpZWxkLlpEYXRhT3B0aW9uTmFtZV0gPSBPYmplY3QuYXNzaWduKFtdLCBldmFsKCd0aGlzLicgKyBmaWVsZC5Ecm9wZG93bk9wdGlvbnMpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93blR5cGUoZmllbGQuVHlwZSkgJiYgZmllbGQuenVkZkxpbmtlZENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICAgIC8vIGtlZXAgYSBsaXN0IG9mIGxpbmtlZCBDb21wb25lbnQsIGxhdGVyIHdpbGwgYmUgdXNlZCBpbiBvbkNoYW5nZSBhdCBpbnB1dGZpZWxkYmFzZS5cclxuICAgICAgICAgICAgICBpZiAoIXp1ZGZHcm91cFsnbGlua2VkQ29tcG9uZW50J10pIHtcclxuICAgICAgICAgICAgICAgIHp1ZGZHcm91cFsnbGlua2VkQ29tcG9uZW50J10gPSBbXTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHp1ZGZHcm91cFsnbGlua2VkQ29tcG9uZW50J10ucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmllbGQuVmFsdWUsXHJcbiAgICAgICAgICAgICAgICBsaW5rZWRDb21wb25lbnQ6IGZpZWxkLnp1ZGZMaW5rZWRDb21wb25lbnRcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgLy8ga2VlcCBhIGNvcHkgb2YgU2VsZWN0T3B0aW9ucyB0byBvcmlnaW5hbFNlbGVjdE9wdGlvbnMoc2FtZSBhcyBvbmNoYW5nZSlcclxuICAgICAgICAgICAgICAvLyBjbGVhciB0aGUgU2VsZWN0aW9uT3B0aW9uIHNpbmNlIGl0IHdvbnQgYmUgdXNlZCB3aGVuIGZpcnN0IGluaXQsIHVudGlsIHBhcmVudCBkcm9wZG93biBvcHRpb24gYmVlbiBzZWxlY3RlZC5cclxuICAgICAgICAgICAgICBmaWVsZFsnb3JpZ2luYWxTZWxlY3RPcHRpb25zJ10gPSBPYmplY3QuYXNzaWduKFtdLCBmaWVsZC5TZWxlY3RPcHRpb25zKTtcclxuICAgICAgICAgICAgICBmaWVsZC5TZWxlY3RPcHRpb25zID0gW107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGF1dG8gYXBwZW5kIGN1cnJlbnQgdXNlciB0byB0aGUgem1vZGVsIGJhc2Ugb24gZmllbGQgZWxlbWVudCBhdHRyaWJ1dGUgXCJ6dWRmU2V0RGVmYXVsdFVzZXJcIlxyXG4gICAgICAgICAgICBpZiAoZmllbGQuenVkZlNldERlZmF1bHRVc2VyKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF6dWRmR3JvdXBbJ2ZpZWxkUmVxdWlyZWREZWZhdWx0VXNlciddKSB7XHJcbiAgICAgICAgICAgICAgICB6dWRmR3JvdXBbJ2ZpZWxkUmVxdWlyZWREZWZhdWx0VXNlciddID0gW107XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyBrZWVwIGEgbGlzdCBvZiBkZWZhdWx0IHVzZXIgbmVlZCB0byBiZSBmaWxsZWQgaW4gdGhlIHNjb3BlXHJcbiAgICAgICAgICAgICAgenVkZkdyb3VwWydmaWVsZFJlcXVpcmVkRGVmYXVsdFVzZXInXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogZmllbGQuTmFtZSxcclxuICAgICAgICAgICAgICAgIGNoaWxkRmllbGRzOiBmaWVsZC5DaGlsZEZpZWxkc1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyB2YWxpZGF0b3IgZm9yIHRoZSBjb21wb25lbnRcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0VmFsaWRhdG9ycyhmaWVsZCwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkLCB0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLlZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICB6dWRmR3JvdXAuek1vZGVsW2ZpZWxkLlZhbHVlXSxcclxuICAgICAgICAgICAgICB2YWxpZGF0b3JzXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChaQ29tcG9uZW50SGVscGVyLmhhc0NDRmllbGQoZmllbGQuVHlwZSkpIHtcclxuICAgICAgICAgICAgICBjb25zdCBjY1ZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBaQ29tcG9uZW50SGVscGVyLmdldENDVmFsaWRhdG9ycyhmaWVsZCwgaXNWaXNpYmxlLCBpc1JlcXVpcmVkKTtcclxuICAgICAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQuQ0NWYWx1ZV0gPSBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICAgICB6dWRmR3JvdXAuek1vZGVsW2ZpZWxkLkNDVmFsdWVdLFxyXG4gICAgICAgICAgICAgICAgY2NWYWxpZGF0b3JzXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBvbmNoYW5nZSBoYW5kbGluZz9cclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gZmllbGRBcnJheTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgdGhlIGZvcm0gY29udHJvbHMgZnJvbSB0aGUgZm9ybSBncm91cCBhbmQgcmVzZXRzIHRoZSBjb21wb25lbnQncyBkYXRhIGFuZCBkaXNwbGF5IGVsZW1lbnQgbW9kZWwuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICBwdWJsaWMgY2xlYXJGb3JtQ29udHJvbCgpIHtcclxuICAgIC8vIFJlbW92ZSBlYWNoIGZvcm0gY29udHJvbCBmcm9tIHRoZSBmb3JtIGdyb3VwXHJcbiAgICBpZiAodGhpcy5kYXRhLlZhbHVlICYmIHRoaXMuZGF0YS5WYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuZGF0YS5WYWx1ZS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybS5yZW1vdmVDb250cm9sKGRhdGEuVmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNldCB0aGUgY29tcG9uZW50J3MgZGF0YSBhbmQgZGlzcGxheSBlbGVtZW50IG1vZGVsXHJcbiAgICB0aGlzLmRhdGEuVmFsdWUgPSB0aGlzLmluaXRpYWxEYXRhVmFsdWU7XHJcbiAgICB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWwgPSBbXTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGZvcm0gZmllbGRzIGZvciB0aGUgY29tcG9uZW50LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge29iamVjdFtdfSAtIEFuIGFycmF5IG9mIGZvcm0gZmllbGQgb2JqZWN0cy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Rm9ybUNvbnRyb2woKSB7XHJcbiAgICByZXR1cm4gdGhpcy5kYXRhLlZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgek1vZGVsIHZhbHVlcyBvZiBhIGZvcm0gZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG1vZGVsIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge1pHcm91cH0gW2dyb3VwPXRoaXMuZ3JvdXBdIC0gVGhlIGZvcm0gZ3JvdXAgdG8gdXBkYXRlLlxyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBtb2RlbERhdGEgLSBUaGUgbW9kZWwgZGF0YSB0byBhcHBseSB0byB0aGUgZm9ybSBncm91cC5cclxuICAgKiBAcmV0dXJucyB7dm9pZH1cclxuICAgKi9cclxuICBwdWJsaWMgc2V0Rm9ybUZpZWxkek1vZGVsKGdyb3VwID0gdGhpcy5ncm91cCwgbW9kZWxEYXRhKSB7XHJcbiAgICAvLyBBZGQgdGhlIGNvbXBvbmVudCBwcmVmaXggdG8gdGhlIG1vZGVsIGRhdGEgcHJvcGVydHkgbmFtZXNcclxuICAgIGNvbnN0IHBhdGNoZWRNb2RlbERhdGEgPSB0aGlzLmFkZFpNb2RlbFByb3BlcnR5UHJlZml4KG1vZGVsRGF0YSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSB6TW9kZWwgdmFsdWVzIG9mIHRoZSBmb3JtIGdyb3VwXHJcbiAgICBPYmplY3QuYXNzaWduKGdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWwsIHBhdGNoZWRNb2RlbERhdGEpO1xyXG5cclxuICAgIC8vIFVwZGF0ZSBncmlkIHZhbHVlcyBmb3IgYW55IGFycmF5cyBpbiB0aGUgbW9kZWwgZGF0YSBiYXNlIG9uIGtjYXJkIGNvbXBvbmVudC5cclxuICAgIGZvciAoY29uc3QgbW9kZWwgaW4gcGF0Y2hlZE1vZGVsRGF0YSkge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXRjaGVkTW9kZWxEYXRhW21vZGVsXSkpIHtcclxuICAgICAgICBjb25zdCBncmlkVmFsdWUgPSBtb2RlbC5lbmRzV2l0aCh0aGlzLnByZWZpeFZhbHVlT3B0aW9uKSA/IG1vZGVsIDogYCR7bW9kZWx9JHt0aGlzLnByZWZpeFZhbHVlT3B0aW9ufWA7XHJcbiAgICAgICAgbGV0IGdyaWREYXRhU291cmNlID0gbW9kZWw7XHJcblxyXG4gICAgICAgIGlmIChtb2RlbC5lbmRzV2l0aCh0aGlzLnByZWZpeFZhbHVlT3B0aW9uKSkge1xyXG4gICAgICAgICAgZ3JpZERhdGFTb3VyY2UgPSBtb2RlbC5zbGljZSgwLCAtdGhpcy5wcmVmaXhWYWx1ZU9wdGlvbi5sZW5ndGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ3JpZERhdGFTb3VyY2UgKz0gdGhpcy5wcmVmaXhEYXRhU291cmNlTmFtZTtcclxuICAgICAgICAvL2NvbnN0IGNvbXBvbmVudCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50QnlWYWx1ZSh0aGlzLmdyb3VwLCBtb2RlbCk7XHJcbiAgICAgICAgLy9pZiAoY29tcG9uZW50Py5kYXRhPy5UeXBlID09PSAna2NhcmQnIHx8IGNvbXBvbmVudD8uZGF0YT8uVHlwZSA9PT0gJ3pncmlkJykge1xyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZGF0YSBzb3VyY2UgZm9yIHRoZSBncmlkXHJcbiAgICAgICAgZ3JvdXBbZ3JpZERhdGFTb3VyY2VdID0gcGF0Y2hlZE1vZGVsRGF0YVttb2RlbF07XHJcblxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgZ3JpZCB2YWx1ZVxyXG4gICAgICAgIGlmIChncm91cFtncmlkVmFsdWVdKSB7XHJcbiAgICAgICAgICBncm91cFtncmlkVmFsdWVdLnNldERhdGEoZ3JvdXBbZ3JpZERhdGFTb3VyY2VdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgVW5hYmxlIHRvIGZpbmQgenVkZiBncmlkVmFsdWU6ICR7Z3JpZFZhbHVlfWApXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vfVxyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybSBncm91cCBtb2RlbFxyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGZvcm1Hcm91cC5wYXRjaFZhbHVlKGdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWwpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIEFkZCB0aGUgY29tcG9uZW50IHByZWZpeCB0byBwcm9wZXJ0eSBuYW1lcyBpbiBhbiBvYmplY3QuXHJcbiAqXHJcbiAqIEBwYXJhbSB7Kn0gbW9kZWxEYXRhIC0gVGhlIG9iamVjdCB0byB1cGRhdGUuXHJcbiAqIEBwYXJhbSB7Kn0gW2NvbnRhaW5lclByZWZpeF0gLSBPcHRpb25hbCBwYXJhbWV0ZXIgaW5kaWNhdGluZyB0aGUgcHJlZml4IHRvIHVzZSBmb3IgcHJvcGVydGllcyBpbiBuZXN0ZWQgb2JqZWN0cy5cclxuICogQHJldHVybnMgeyp9IFRoZSB1cGRhdGVkIG9iamVjdC5cclxuICovXHJcbiAgcHJpdmF0ZSBhZGRaTW9kZWxQcm9wZXJ0eVByZWZpeChtb2RlbERhdGE6IGFueSwgY29udGFpbmVyUHJlZml4PzogYW55KTogYW55IHtcclxuICAgIC8vIENyZWF0ZSBhIG5ldyBvYmplY3QgdG8gc3RvcmUgdGhlIHVwZGF0ZWQgZGF0YVxyXG4gICAgY29uc3QgdXBkYXRlZE1vZGVsRGF0YSA9IHt9O1xyXG5cclxuICAgIGlmICh0eXBlb2YgbW9kZWxEYXRhID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbW9kZWxEYXRhID09PSAnbnVtYmVyJyB8fCBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KG1vZGVsRGF0YSkpIHtcclxuICAgICAgcmV0dXJuIG1vZGVsRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBwcm9wZXJ0eSBpbiB0aGUgaW5wdXQgb2JqZWN0XHJcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBpbiBtb2RlbERhdGEpIHtcclxuICAgICAgY29uc3QgZGF0YVZhbHVlID0gbW9kZWxEYXRhW3Byb3BlcnR5TmFtZV07XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgYW4gYXJyYXlcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVZhbHVlKSkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBhcnJheXMgcmVjdXJzaXZlbHlcclxuICAgICAgICBjb25zdCB1cGRhdGVkQXJyYXkgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXlcclxuICAgICAgICBmb3IgKGNvbnN0IGFycmF5RWxlbWVudCBvZiBkYXRhVmFsdWUpIHtcclxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgdGhpcyBtZXRob2QgdG8gdXBkYXRlIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgYXJyYXlcclxuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRFbGVtZW50ID0gdGhpcy5hZGRaTW9kZWxQcm9wZXJ0eVByZWZpeChhcnJheUVsZW1lbnQsIHByb3BlcnR5TmFtZSk7XHJcblxyXG4gICAgICAgICAgLy8gQWRkIHRoZSB1cGRhdGVkIGVsZW1lbnQgdG8gdGhlIGFycmF5XHJcbiAgICAgICAgICB1cGRhdGVkQXJyYXkucHVzaCh1cGRhdGVkRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIHVwZGF0ZWQgYXJyYXkgdG8gdGhlIG91dHB1dCBvYmplY3RcclxuICAgICAgICBsZXQgcHJlZml4ZWRQcm9wZXJ0eU5hbWU7XHJcblxyXG4gICAgICAgIGlmIChjb250YWluZXJQcmVmaXgpIHtcclxuICAgICAgICAgIHByZWZpeGVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgodGhpcy5jb21wb25lbnRQcmVmaXgpID8gcHJvcGVydHlOYW1lIDogYCR7dGhpcy5jb21wb25lbnRQcmVmaXh9XyR7Y29udGFpbmVyUHJlZml4fV8ke3Byb3BlcnR5TmFtZX1gO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwcmVmaXhlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKHRoaXMuY29tcG9uZW50UHJlZml4KSA/IHByb3BlcnR5TmFtZSA6IGAke3RoaXMuY29tcG9uZW50UHJlZml4fV8ke3Byb3BlcnR5TmFtZX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXBkYXRlZE1vZGVsRGF0YVtwcmVmaXhlZFByb3BlcnR5TmFtZV0gPSB1cGRhdGVkQXJyYXk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGFWYWx1ZSA9PT0gJ29iamVjdCcgJiYgIWRhdGFWYWx1ZSkge1xyXG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgb2JqZWN0cyByZWN1cnNpdmVseVxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWROZXN0ZWRPYmplY3QgPSB0aGlzLmFkZFpNb2RlbFByb3BlcnR5UHJlZml4KGRhdGFWYWx1ZSwgcHJvcGVydHlOYW1lKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIHRoZSB1cGRhdGVkIG5lc3RlZCBvYmplY3QgdG8gdGhlIG91dHB1dCBvYmplY3RcclxuICAgICAgICBjb25zdCBwcmVmaXhlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKHRoaXMuY29tcG9uZW50UHJlZml4KSA/IHByb3BlcnR5TmFtZSA6IGAke3RoaXMuY29tcG9uZW50UHJlZml4fV8ke3Byb3BlcnR5TmFtZX1gO1xyXG4gICAgICAgIHVwZGF0ZWRNb2RlbERhdGFbcHJlZml4ZWRQcm9wZXJ0eU5hbWVdID0gdXBkYXRlZE5lc3RlZE9iamVjdDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICAvLyBBZGQgdGhlIHByb3BlcnR5IHRvIHRoZSBvdXRwdXQgb2JqZWN0IHdpdGggdGhlIGNvbXBvbmVudCBwcmVmaXhcclxuICAgICAgICBsZXQgcHJlZml4ZWRQcm9wZXJ0eU5hbWU7XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lclByZWZpeCkge1xyXG4gICAgICAgICAgcHJlZml4ZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aCh0aGlzLmNvbXBvbmVudFByZWZpeCkgPyBwcm9wZXJ0eU5hbWUgOiBgJHt0aGlzLmNvbXBvbmVudFByZWZpeH1fJHtjb250YWluZXJQcmVmaXh9XyR7cHJvcGVydHlOYW1lfWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHByZWZpeGVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgodGhpcy5jb21wb25lbnRQcmVmaXgpID8gcHJvcGVydHlOYW1lIDogYCR7dGhpcy5jb21wb25lbnRQcmVmaXh9XyR7cHJvcGVydHlOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVwZGF0ZWRNb2RlbERhdGFbcHJlZml4ZWRQcm9wZXJ0eU5hbWVdID0gZGF0YVZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSB1cGRhdGVkIG9iamVjdFxyXG4gICAgcmV0dXJuIHVwZGF0ZWRNb2RlbERhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Wk1vZGVsQXNTdHJpbmcoKSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRaTW9kZWwoKSk7XHJcbiAgfVxyXG5cclxuICBDb21wb25lbnRJc1Zpc2libGUoZmllbGQ6IFpGaWVsZCk6IGFueSB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5Db21wb25lbnRJc1Zpc2libGUoZmllbGQsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEVuYWJsZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5ID0gIXN0YXR1cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRWaXNpYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSA9IHN0YXR1cztcclxuICAgIHRoaXMuZGF0YS5WaXNpYmxlID0gc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFJlcXVpcmUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCA9IHN0YXR1cztcclxuICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuVHlwZSA9PT0gJ3p0ZXh0ZWRpdG9yJykge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX0V4Y2x1ZGVXaGl0ZVNwYWNlc0FuZEhUTUxUYWdzKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLmNoYW5nZVZhbGlkYXRvcihzdGF0dXMsIHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5WYWx1ZSwgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLCBaQ29tcG9uZW50SGVscGVyLnJlcXVpcmVkVmFsaWRhdG9yX0V4Y2x1ZGVXaGl0ZVNwYWNlcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybSgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZXMgdGhlIG5hbWUgb2YgYSBmb3JtIGNvbnRyb2wgYmFzZWQgb24gaXRzIHR5cGUsIG5hbWUsIGFuZCBjb250YWluZXIgbmFtZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udHJvbE5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgZm9ybSBjb250cm9sLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250YWluZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0aGF0IHRoZSBmb3JtIGNvbnRyb2wgaXMgaW4uXHJcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGdlbmVyYXRlZCBuYW1lIG9mIHRoZSBmb3JtIGNvbnRyb2wuXHJcbiAgICovXHJcbiAgcHVibGljIGdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGNvbnRyb2xOYW1lOiBzdHJpbmcsIGNvbnRhaW5lck5hbWU/OiBzdHJpbmcpIHtcclxuICAgIGxldCBtYWluUHJlZml4ID0gW3RoaXMuZGF0YS5UeXBlLCB0aGlzLmRhdGEuTmFtZSwgY29udGFpbmVyTmFtZSA/PyBudWxsXS5maWx0ZXIoQm9vbGVhbikuam9pbignXycpO1xyXG4gICAgaWYgKHRoaXMuZGF0YS5Jc0dlbmVyYXRlRm9ybUNvbnRyb2xOYW1lQnlDb250YWluZXJOYW1lICE9IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGEuSXNHZW5lcmF0ZUZvcm1Db250cm9sTmFtZUJ5Q29udGFpbmVyTmFtZSA9PSBmYWxzZSkge1xyXG4gICAgICBtYWluUHJlZml4ID0gW3RoaXMuZGF0YS5UeXBlLCB0aGlzLmRhdGEuTmFtZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ18nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBpZiBuYW1lIGhhcyBiZWVuIHByZWZpeGVkLlxyXG4gICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKG1haW5QcmVmaXgpKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sTmFtZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBXZSB0cnkgdG8gc3BsaXQgdGhlIG5hbWUgYW5kIHVzZSB0aGUgbGFzdCBzZWdtZW50LlxyXG4gICAgICAvLyBTb21ldGltZXMgdGhlIGNvbnRyb2wgbmFtZSBjYW4gYmUgd2l0aG91dCB0aGUgY29udGFpbmVyIG5hbWUsIHNvIHdlIHNwbGl0IGFuZCB1c2UgdGhlIG5ldyBtYWluIHByZWZpeC5cclxuICAgICAgY29uc3QgY29udHJvbE5hbWVTZWdtZW50ID0gY29udHJvbE5hbWUuc3BsaXQoJ18nKTtcclxuICAgICAgY29udHJvbE5hbWUgPSBjb250cm9sTmFtZVNlZ21lbnRbY29udHJvbE5hbWVTZWdtZW50Lmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBbbWFpblByZWZpeCwgY29udHJvbE5hbWVdLmpvaW4oJ18nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFwcGVuZHMgYSBwcmVmaXggdG8gdGhlIG5hbWVzIGFuZCB2YWx1ZXMgb2YgZmllbGRzIHJlY3Vyc2l2ZWx5LlxyXG4gICAqIEBwYXJhbSB7WkZpZWxkW119IGZpZWxkcyAtIFRoZSBmaWVsZHMgdG8gYmUgcHJlZml4ZWQuXHJcbiAgICogQHBhcmFtIHthbnl9IHByZWZpeCAtIFRoZSBwcmVmaXggdG8gYmUgYWRkZWQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhcHBlbmRQcmVmaXgoZmllbGRzOiBaRmllbGRbXSwgcHJlZml4OiBhbnkpIHtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQuVmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5hcHBlbmRQcmVmaXgoZmllbGQuVmFsdWUsIHByZWZpeCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgZmllbGQuTmFtZSA9IFtwcmVmaXgsIGZpZWxkLk5hbWVdLmpvaW4oJ18nKTtcclxuICAgICAgICBpZiAoZmllbGQuVHlwZSAhPSAnemJ1dHRvbnMnKSB7XHJcbiAgICAgICAgICBmaWVsZC5WYWx1ZSA9IFtwcmVmaXgsIGZpZWxkLlZhbHVlXS5qb2luKCdfJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpZWxkLlN1YlR5cGUgPSBwcmVmaXg7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgZm9ybSBmaWVsZHMgd2l0aCB0aGUgZGlzcGxheSBlbGVtZW50IG1vZGVsLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgdXBkYXRlRm9ybUZpZWxkKCkge1xyXG4gICAgdGhpcy5kYXRhLlZhbHVlID0gdGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiBhIGNvbnRhaW5lciBtb2RlbCBpbiB0aGUgZm9ybS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29udGFpbmVyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZyb20uXHJcbiAgICogQHJldHVybnMge09iamVjdH0gLSBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgY29udGFpbmVyIG1vZGVsIHZhbHVlcy5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q29udGFpbmVyTW9kZWxWYWx1ZShjb250YWluZXJOYW1lOiBzdHJpbmcpOiBPYmplY3Qge1xyXG4gICAgLy8gR2V0IHRoZSBjb250YWluZXIgZWxlbWVudCBhbmQgY3JlYXRlIGFuIGVtcHR5IG9iamVjdCBmb3IgdGhlIG1vZGVsIHZhbHVlcy5cclxuICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXVtjb250YWluZXJOYW1lXTtcclxuICAgIGNvbnN0IG1vZGVsVmFsdWUgPSB7fTtcclxuXHJcbiAgICAvLyBGbGFnIHRvIGtlZXAgdHJhY2sgaWYgYWxsIHJlcXVpcmVkIGZpZWxkcyBpbiB0aGUgZ3JvdXAgYXJlIHZhbGlkLlxyXG4gICAgbGV0IHZhbGlkR3JvdXBGaWVsZHMgPSB0cnVlO1xyXG5cclxuICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIGVsZW1lbnQgaW4gdGhlIGNvbnRhaW5lciBhbmQgcmV0cmlldmUgaXRzIHZhbHVlIGZyb20gdGhlIHpNb2RlbC5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udGFpbmVyRWxlbWVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtZW50ID0gY29udGFpbmVyRWxlbWVudFtpXTtcclxuICAgICAgY29uc3QgZWxlbWVudENvbXBvbmVudCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50QnlWYWx1ZSh0aGlzLmdyb3VwLCBlbGVtZW50KTtcclxuICAgICAgbGV0IHpNb2RlbFZhbHVlID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsW2VsZW1lbnRdO1xyXG5cclxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgcmVxdWlyZWQgYW5kIGhhcyBhIHZhbHVlLCBpZiBub3Qgc2hvdyBhbiBlcnJvciBtZXNzYWdlLlxyXG4gICAgICBpZiAoZWxlbWVudENvbXBvbmVudC5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVxdWlyZWQgJiYgWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eSh6TW9kZWxWYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5zaG93KGVsZW1lbnRDb21wb25lbnQuZGF0YS5MYWJlbCArICcgaXMgcmVxdWlyZWQgZmllbGQuIFBsZWFzZSBmaWxsIGluIGFsbCB0aGUgcmVxdWlyZWQgZmllbGRzIGJlZm9yZSBhZGRpbmcuJywgJ3RvcCcsIHRydWUsIDMwMDAsICdkYW5nZXInKTtcclxuICAgICAgICB2YWxpZEdyb3VwRmllbGRzID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiBEcm9wZG93biBUeXBlLCBjaGFuZ2Ugek1vZGVsVmFsdWUgdG8gZGlzcGxheSB0ZXh0LlxyXG4gICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVHlwZShlbGVtZW50Q29tcG9uZW50LmRhdGEuVHlwZSkpIHtcclxuICAgICAgICBjb25zdCBkcm9wZG93bk9wdGlvbnMgPSBlbGVtZW50Q29tcG9uZW50LmdldEl0ZW1zRGF0YSgpO1xyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XHJcbiAgICAgICAgICBpZiAob3B0aW9uW2VsZW1lbnRDb21wb25lbnQuaXRlbVZhbHVlRmllbGRdID09PSB6TW9kZWxWYWx1ZSkge1xyXG4gICAgICAgICAgICB6TW9kZWxWYWx1ZSA9IG9wdGlvbltlbGVtZW50Q29tcG9uZW50Lml0ZW1UZXh0RmllbGRdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIG1vZGVsIG9iamVjdC5QbGVhc2UgZmlsbCBpbiBhbGwgdGhlIHJlcXVpcmVkIGZpZWxkcyBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG1vZGVsVmFsdWVbZWxlbWVudF0gPSB6TW9kZWxWYWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gSWYgdGhlcmUgYXJlIGludmFsaWQgZmllbGRzIGluIHRoZSBncm91cCwgcmV0dXJuIGFuIGVtcHR5IG1vZGVsIG9iamVjdC5cclxuICAgIGlmICghdmFsaWRHcm91cEZpZWxkcykge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBtb2RlbCBvYmplY3Qgd2l0aCB0aGUgY29udGFpbmVyIHZhbHVlcy5cclxuICAgIHJldHVybiBtb2RlbFZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBDbGVhcnMgdGhlIHZhbHVlIG9mIGFsbCBmaWVsZCBlbGVtZW50cyBpbnNpZGUgYSBjb250YWluZXIuXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gY29udGFpbmVyTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgd2hvc2UgZmllbGRzIHdpbGwgYmUgY2xlYXJlZC5cclxuICAqL1xyXG4gIHB1YmxpYyBjbGVhckNvbnRhaW5lckZpZWxkRWxlbWVudFZhbHVlKGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgLy8gR2V0IHRoZSBjb250YWluZXIgZWxlbWVudCBmcm9tIHRoZSBjb21wb25lbnQncyBncm91cFxyXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdO1xyXG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggZmllbGQgZWxlbWVudCBpbiB0aGUgY29udGFpbmVyXHJcbiAgICBjb250YWluZXJFbGVtZW50LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIC8vIFNldCB0aGUgbW9kZWwgdmFsdWUgb2YgdGhlIGZpZWxkIGVsZW1lbnQgdG8gbnVsbCwgYW5kIGZvcmNlIHVwZGF0ZSB0aGUgdmlld1xyXG4gICAgICB0aGlzLnNldE1vZGVsVmFsdWUoZWxlbWVudCwgbnVsbCwgdHJ1ZSk7XHJcblxyXG4gICAgICBjb25zdCBmb3JtID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybTtcclxuICAgICAgT2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGZvcm0uY29udHJvbHNba2V5XTtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgY29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiAtLS0tLS0tLS0tPT09PT09PT09PT09PT09PT09PT0gTXVsdGkgVmFsdWUgR3JvdXAgPT09PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tKi9cclxuICAvKipcclxuICAgKiBTZXRzIHVwIGEgbXVsdGktdmFsdWUgZ3JvdXAsIHdoaWNoIGlzIGEgZ3JpZCBvZiBmaWVsZHMgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZSByb3dzLlxyXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGNvbmZpZ3VyYXRpb24gZGF0YSBmb3IgdGhlIG11bHRpLXZhbHVlIGdyb3VwLlxyXG4gICAqIEBwYXJhbSBkYXRhSW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGRhdGEgaW4gdGhlIGRpc3BsYXlNb2RlbC4gT3B0aW9uYWwsIHVzZWQgd2hlbiB1cGRhdGluZyBleGlzdGluZyBkYXRhLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRNdWx0aVZhbHVlR3JvdXAoZGF0YTogYW55LCBkYXRhSW5kZXg/OiBhbnkpIHtcclxuICAgIC8vIE5lZWQgdG8gZGVjbGFyZSBuYW1lLCB2YWx1ZSwgZGF0YXNvdXJjZSwgY29sdW1uZmllbGRzIGF0dHJpYnV0ZSBmb3IgZ3JpZC5cclxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGRhdGEuTmFtZSk7XHJcbiAgICBjb25zdCBncmlkVmFsdWVOYW1lID0gYCR7bmFtZX0ke3RoaXMucHJlZml4VmFsdWVPcHRpb259YDtcclxuICAgIGNvbnN0IGdyaWREYXRhU291cmNlTmFtZSA9IGAke25hbWV9JHt0aGlzLnByZWZpeERhdGFTb3VyY2VOYW1lfWA7XHJcbiAgICBjb25zdCBncmlkQ29sdW1uRmllbGRzTmFtZSA9IGAke25hbWV9JHt0aGlzLnByZWZpeENvbHVtbkZpZWxkc05hbWV9YDtcclxuXHJcbiAgICAvLyBHZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgbXVsdGktdmFsdWUgZ3JvdXAgc2NvcGUuXHJcbiAgICBjb25zdCBtdWx0aVZhbHVlR3JvdXBTY29wZU5hbWUgPSBgbXZnXyR7ZGF0YS5OYW1lfWA7XHJcblxyXG4gICAgaWYgKCF0aGlzLmdyb3VwWydtdmdsaXN0J10pIHtcclxuICAgICAgdGhpcy5ncm91cFsnbXZnbGlzdCddID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmdyb3VwWydtdmdsaXN0J10uaW5jbHVkZXMobmFtZSkpIHtcclxuICAgICAgdGhpcy5ncm91cFsnbXZnbGlzdCddLnB1c2gobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgcHJvcGVydHkgaW4gdGhlIGdyb3VwIG9iamVjdCBmb3IgdGhlIG11bHRpLXZhbHVlIGdyb3VwLlxyXG4gICAgdGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdID0gW107XHJcblxyXG4gICAgLy8gU3RvcmUgdGhlIGdyaWQgdmFsdWUgbmFtZSB0byBiZSB1c2VkIGluIGdldFpNb2RlbCB0byBnZXQgdGhlIGdyaWQgZGF0YS5cclxuICAgIHRoaXMubXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlID0gdGhpcy5tdWx0aVZhbHVlR3JvdXBHcmlkVmFsdWUgPz8gW107XHJcbiAgICB0aGlzLm11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZS5wdXNoKGdyaWRWYWx1ZU5hbWUpO1xyXG5cclxuICAgIC8vIE1hbnVhbGx5IGFkZCBhdHRyaWJ1dGVzIHRvIHRoZSBncmlkIGVsZW1lbnQgdG8gc3BlZWQgdXAgbG9hZGluZy5cclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIFwiQWRkQ29tbWFuZEJ1dHRvbk5hbWVcIjogXCJBZGRcIixcclxuICAgICAgXCJBbGxvd0V4cG9ydFwiOiBmYWxzZSxcclxuICAgICAgXCJBbGxvd0dyaWREYXRhRXhwb3J0XCI6IGZhbHNlLFxyXG4gICAgICBcIkFsbG93TXVsdGlTZWxlY3RcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dSb3dTZWxlY3RcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dTYXZlU3RhdGVcIjogZmFsc2UsXHJcbiAgICAgIFwiQ29sdW1uRmllbGRzXCI6ICdncm91cC4nICsgZ3JpZENvbHVtbkZpZWxkc05hbWUsXHJcbiAgICAgIFwiRGF0YVNvdXJjZVwiOiAnZ3JvdXAuJyArIGdyaWREYXRhU291cmNlTmFtZSxcclxuICAgICAgXCJEaXNhYmxlQ2VsbENsaWNrSGFuZGxlclwiOiB0cnVlLFxyXG4gICAgICBcIkRpc2FibGVHZW5lcmF0ZUNvbHVtbkJ5Rm9ybVwiOiB0cnVlLFxyXG4gICAgICBcIkRpdkNsYXNzXCI6ICdjb2wteHMtMTIgY29sLXNtLTEyIGNvbC1tZC0xMiBjb2wtbGctMTInLFxyXG4gICAgICBcIkVuYWJsZUN1c3RvbUFkZENvbW1hbmRcIjogdHJ1ZSxcclxuICAgICAgXCJFbmFibGVDdXN0b21SZW1vdmVDb21tYW5kXCI6IHRydWUsXHJcbiAgICAgIFwiRW5hYmxlQ3VzdG9tUmVzZXRDb21tYW5kXCI6IHRydWUsXHJcbiAgICAgIFwiRW5hYmxlU2F2ZUdyaWRTdGF0ZVwiOiBmYWxzZSxcclxuICAgICAgXCJFeHRlcm5hbFBhZ2luYXRpb25cIjogZmFsc2UsXHJcbiAgICAgIFwiSGVpZ2h0UmVkdWNlXCI6IDI1MCxcclxuICAgICAgXCJMaW1pdEZpZWxkc1wiOiBmYWxzZSxcclxuICAgICAgXCJOYW1lXCI6IG5hbWUsXHJcbiAgICAgIFwiUGFnZVNpemVcIjogMjAsXHJcbiAgICAgIFwiUGFnZVNpemVzXCI6IGZhbHNlLFxyXG4gICAgICBcIlJlc291cmNlVVJMXCI6IHRydWUsXHJcbiAgICAgIFwiU2VsZWN0T3B0aW9uc1wiOiBmYWxzZSxcclxuICAgICAgXCJTaG93R3JpZEVkaXRCdXR0b25cIjogZmFsc2UsXHJcbiAgICAgIFwiU3ViVHlwZVwiOiBcInp1ZGZcIixcclxuICAgICAgXCJUeXBlXCI6IFwiemdyaWRcIixcclxuICAgICAgXCJWYWx1ZVwiOiAnZ3JvdXAuJyArIGdyaWRWYWx1ZU5hbWUsXHJcbiAgICAgIFwiVmlzaWJsZVwiOiB0cnVlLFxyXG4gICAgICBcIldpZHRoUmVkdWNlXCI6IDUwMCxcclxuICAgICAgXCJEaXNhYmxlQXV0b0FwcGVuZEdyaWREYXRlRmlsdGVyQ29sXCI6IHRydWVcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgYSBwcm9wZXJ0eSBpbiB0aGUgZ3JvdXAgb2JqZWN0IGJhc2VkIG9uIHRoZSBhYm92ZSBkZWNsYXJhdGlvbiwgZXhjZXB0IE5hbWUsIGFuZCBhbHNvIGluc2VydCBjb2x1bW4gZmllbGRzLlxyXG4gICAgLy8gVXNlIHRoZSBncm91cGluZyB2YWx1ZSBhcyB0aGUgY29sdW1uIGFuZCBza2lwIGluc2VydGluZyBhbnkgY29udGFpbmVyIHR5cGUuXHJcbiAgICBjb25zdCBjb250YWluZXJOYW1lID0gZGF0YS5OYW1lO1xyXG4gICAgY29uc3QgZ3JvdXBGaWVsZEVsZW1lbnRzID0gW107XHJcblxyXG4gICAgZGF0YS5WYWx1ZS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgZmllbGRNb2RlbCA9IE9iamVjdC5hc3NpZ24oe30sIGZpZWxkKTtcclxuICAgICAgZmllbGRNb2RlbFsnRGlzcGxheU5hbWUnXSA9IGZpZWxkTW9kZWwuTGFiZWw7XHJcbiAgICAgIGZpZWxkTW9kZWwuTmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGRNb2RlbFsnTmFtZSddLCBjb250YWluZXJOYW1lKTtcclxuICAgICAgZmllbGRNb2RlbC5WYWx1ZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZmllbGRNb2RlbFsnVmFsdWUnXSwgY29udGFpbmVyTmFtZSk7XHJcblxyXG4gICAgICBncm91cEZpZWxkRWxlbWVudHMucHVzaChmaWVsZE1vZGVsKTtcclxuXHJcbiAgICAgIC8vIFRoaXMgaXMgZm9yIHRhbGx5IGFuZCByZW1vdmUgem1vZGVsIHdoZW4gZ2V0bW9kZWwoKS5cclxuICAgICAgLy8gV2UncmUgbm90IHN1cHBvc2VkIHRvIHNhdmUgem1vZGVsIGZpZWxkIHZhbHVlIHNpbmNlIGl0cyB2YWx1ZSBpcyBzdXBwb3NlZCB0byBiZSBhZGRlZCB0byB0aGUgZ3JpZC5cclxuICAgICAgdGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdLnB1c2goZmllbGRNb2RlbC5WYWx1ZSk7XHJcblxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlTmFtZV0gPSBbXTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZENvbHVtbkZpZWxkc05hbWVdID0gZ3JvdXBGaWVsZEVsZW1lbnRzO1xyXG5cclxuICAgIC8vIENyZWF0ZSBncmlkIGNvbHVtbiBiYXNlZCBvbiBmaWVsZCBlbGVtZW50cyBhbmQgaW5zZXJ0IHRoZW0gaW50byB0aGUgZ3JpZC5cclxuICAgIHRoaXMuZ3JvdXBbYCR7bmFtZX0ke3RoaXMucHJlZml4Q3VzdG9tQWRkQnV0dG9uT25DbGlja31gXSA9IHRoaXMuY2FwdHVyZUNvbnRhaW5lckZpZWxkVmFsdWVUb01vZGVsLmJpbmQodGhpcywgdGhpcy5ncm91cCwgZ3JpZFZhbHVlTmFtZSwgZ3JpZERhdGFTb3VyY2VOYW1lLCBjb250YWluZXJOYW1lKTtcclxuICAgIHRoaXMuZ3JvdXBbYCR7bmFtZX0ke3RoaXMucHJlZml4Q3VzdG9tUmVzZXRCdXR0b25PbkNsaWNrfWBdID0gdGhpcy5jbGVhckNvbnRhaW5lclJlbGF0ZWRGaWVsZFZhbHVlLmJpbmQodGhpcywgdGhpcy5ncm91cCwgY29udGFpbmVyTmFtZSk7XHJcbiAgICB0aGlzLmdyb3VwW2Ake25hbWV9JHt0aGlzLnByZWZpeEN1c3RvbVJlbW92ZUJ1dHRvbk9uQ2xpY2t9YF0gPSB0aGlzLnJlbW92ZUdyaWRSb3cuYmluZCh0aGlzLCBncmlkVmFsdWVOYW1lLCBncmlkRGF0YVNvdXJjZU5hbWUpO1xyXG5cclxuICAgIGlmIChkYXRhSW5kZXgpIHtcclxuICAgICAgdGhpcy5hcHBlbmRUb0Rpc3BsYXlNb2RlbChlbGVtZW50LCBkYXRhSW5kZXgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGRhdGEuVmFsdWUucHVzaChlbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2FwdHVyZUNvbnRhaW5lckZpZWxkVmFsdWVUb01vZGVsKGdyb3VwOiBaR3JvdXAsIGdyaWRWYWx1ZTogYW55LCBncmlkRGF0YVNvdXJjZTogYW55LCBjb250YWluZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lckZpZWxkVmFsdWUgPSB0aGlzLmdldENvbnRhaW5lck1vZGVsVmFsdWUoY29udGFpbmVyTmFtZSk7XHJcbiAgICBsZXQgYWxsb3dUb1NldERhdGEgPSBmYWxzZTtcclxuXHJcbiAgICBmb3IgKGxldCBrZXkgaW4gY29udGFpbmVyRmllbGRWYWx1ZSkge1xyXG4gICAgICBpZiAoIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoY29udGFpbmVyRmllbGRWYWx1ZVtrZXldKSkge1xyXG4gICAgICAgIGFsbG93VG9TZXREYXRhID0gdHJ1ZTtcclxuICAgICAgICBicmVhazsgLy8gZXhpdCB0aGUgbG9vcCBlYXJseSBzaW5jZSB0aGUgZmxhZyBpcyBhbHJlYWR5IHRydWVcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChhbGxvd1RvU2V0RGF0YSAmJiAoT2JqZWN0LmtleXMoY29udGFpbmVyRmllbGRWYWx1ZSkubGVuZ3RoICE9PSAwIHx8IGNvbnRhaW5lckZpZWxkVmFsdWUuY29uc3RydWN0b3IgIT09IE9iamVjdCkpIHtcclxuICAgICAgLy8gZ2V0IGNvbnRhaW5lciBtb2RlbCB2YWx1ZSwgc2V0IHRvIGdyb3VwIGdyaWQgZGF0YXNvdXJjZVxyXG4gICAgICBncm91cFtncmlkRGF0YVNvdXJjZV0ucHVzaChjb250YWluZXJGaWVsZFZhbHVlKTtcclxuXHJcbiAgICAgIC8vIHNldCBkYXRhc291cmNlIHRvIGdyaWRcclxuICAgICAgZ3JvdXBbZ3JpZFZhbHVlXS5zZXREYXRhKHRoaXMuZ3JvdXBbZ3JpZERhdGFTb3VyY2VdKTtcclxuXHJcbiAgICAgIC8vIGNsZWFyIGNvbnRhaW5lciBmaWVsZCB2YWx1ZVxyXG4gICAgICB0aGlzLmNsZWFyQ29udGFpbmVyUmVsYXRlZEZpZWxkVmFsdWUoZ3JvdXAsIGNvbnRhaW5lck5hbWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coJ1RvIGFkZCB0aGUgcmVjb3JkLCBwbGVhc2UgZW50ZXIvc2VsZWN0IGF0IGxlYXN0IG9uZSBmaWVsZCBpbiB0aGlzIHNlY3Rpb24uJywgJ3RvcCcsIHRydWUsIDMwMDAsICd3YXJuaW5nJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyQ29udGFpbmVyUmVsYXRlZEZpZWxkVmFsdWUoZ3JvdXA6IFpHcm91cCwgY29udGFpbmVyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAvLyBhZnRlciBzZXQgdG8gZ3JpZCwgY2xlYXIgdGhlIHptb2RlbC5cclxuICAgIHRoaXMuY2xlYXJDb250YWluZXJGaWVsZEVsZW1lbnRWYWx1ZShjb250YWluZXJOYW1lKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlR3JpZFJvdyhncmlkVmFsdWU6IGFueSwgZ3JpZERhdGFTb3VyY2U6IGFueSwgZGF0YUl0ZW06IGFueSwgaW5kZXg6IGFueSkge1xyXG4gICAgdGhpcy5ncm91cFtncmlkRGF0YVNvdXJjZV0uc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAvLyBzZXQgZGF0YXNvdXJjZSB0byBncmlkXHJcbiAgICB0aGlzLmdyb3VwW2dyaWRWYWx1ZV0uc2V0RGF0YSh0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXSk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBwcml2YXRlIGlzRHJvcGRvd25UeXBlKGRhdGE6IGFueSkge1xyXG4gICAgY29uc3QgY29tcG9uZW50RGF0YVR5cGUgPSB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgPyBkYXRhIDogZGF0YS5UeXBlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgaWYgKGNvbXBvbmVudERhdGFUeXBlID09IENvbXBvbmVudFR5cGUuZHJvcGRvd24gfHwgY29tcG9uZW50RGF0YVR5cGUgPT0gQ29tcG9uZW50VHlwZS56dWlzZWxlY3RtdWx0aXBsZSB8fCBjb21wb25lbnREYXRhVHlwZSA9PSBDb21wb25lbnRUeXBlLnpzZWxlY3RtdWx0aXBsZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0ZXMgdGhlIGZvcm0gYW5kIHNob3dzIGFuIGVycm9yIG1lc3NhZ2UgaWYgaXQgaXMgaW52YWxpZC5cclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGZvcm0gaXMgdmFsaWQsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKi9cclxuICBwdWJsaWMgdmFsaWRhdGVBbmRTaG93RXJyb3JNZXNzYWdlKCkge1xyXG4gICAgY29uc3QgZmcgPSB0aGlzLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG5cclxuICAgIC8vIElmIHRoZSBmb3JtIGlzIGludmFsaWQsIGNsZWFyIGFueSBlcnJvcnMgaW4gY29udGFpbmVyIGZpZWxkcyBhbmQgc2hvdyB0aGUgZXJyb3IgbWVzc2FnZS5cclxuICAgIGlmICghZmcudmFsaWQpIHtcclxuICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgZm9ybSBjb250cm9scyBhbmQgcmVzZXQgYW55IGVycm9ycyB0aGF0IGJlbG9uZyB0byBhIGNvbnRhaW5lciBmaWVsZFxyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhmZy5jb250cm9scykpIHtcclxuICAgICAgICB0aGlzLnNldENvbnRhaW5lckZpZWxkRXJyb3JBc051bGwoZmcsIGtleSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGlzIHRoZSBmb3JtZ3JvdXAgdmFsdWUgYWdhaW4uXHJcbiAgICAgIGlmIChmZy52YWxpZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBTaG93IHRoZSBlcnJvciBtZXNzYWdlIGZvciB0aGUgZm9ybVxyXG4gICAgICB0aGlzLmNvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2Uuc2hvd0Zvcm1Hcm91cEVycm9yTWVzc2FnZSh0aGlzLmdyb3VwLCBmZyk7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gZmFsc2UgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZm9ybSBpcyBub3QgdmFsaWRcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybiB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlIGZvcm0gaXMgdmFsaWRcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXRzIHRoZSBlcnJvcnMgb2YgYSBjb250YWluZXIgZmllbGQgaW4gYSBGb3JtR3JvdXAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZmcgVGhlIEZvcm1Hcm91cCBvYmplY3QgY29udGFpbmluZyB0aGUgZmllbGQuXHJcbiAgICogQHBhcmFtIGtleSBUaGUgbmFtZSBvZiB0aGUgZmllbGQgaW4gdGhlIEZvcm1Hcm91cC5cclxuICAgKi9cclxuICBwcml2YXRlIHNldENvbnRhaW5lckZpZWxkRXJyb3JBc051bGwoZmc6IEZvcm1Hcm91cCwga2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNvbnRyb2xOYW1lU2VnbWVudHMgPSBrZXkuc3BsaXQoJ18nKTtcclxuXHJcbiAgICBpZiAoY29udHJvbE5hbWVTZWdtZW50cy5sZW5ndGggPD0gMykge1xyXG4gICAgICAvLyBGaWVsZCBpcyBub3QgaW5zaWRlIGEgY29udGFpbmVyLCBzbyB3ZSBza2lwIGl0XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBubyBtdmdsaXN0LCBkaXJlY3QgcmV0dXJuLiBkb250IG5lZWQgZG8gYW55dGhpbmcuXHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbJ212Z2xpc3QnXSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgY29udGFpbmVyIGJ1dCBub3QgbXVsdGkgdmFsdWUgZ3JvdXAgPSB0cnVlLCB3ZSBza2lwIGl0LlxyXG4gICAgY29uc3QgY29udGFpbmVyID0gW2NvbnRyb2xOYW1lU2VnbWVudHNbMF0sIGNvbnRyb2xOYW1lU2VnbWVudHNbMV0sIGNvbnRyb2xOYW1lU2VnbWVudHNbMl1dLmpvaW4oJ18nKTtcclxuICAgIGlmICghdGhpcy5ncm91cFsnbXZnbGlzdCddLmluY2x1ZGVzKGNvbnRhaW5lcikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBmZy5nZXQoa2V5KTtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgLy8gSWYgdGhlIGNvbnRyb2wgaXMgbm90IGluc2lkZSBhIGNvbnRhaW5lciwgc2tpcCBpdC5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHJldHVybiBpZiBmb3JtY29udHJvbCBpcyB2YWxpZC5cclxuICAgIGlmIChjb250cm9sLnN0YXR1cyA9PT0gJ1ZBTElEJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udHJvbEVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xyXG5cclxuICAgIGlmIChjb250cm9sRXJyb3JzKSB7XHJcbiAgICAgIC8vIFNldCB0aGUgY29udHJvbCdzIGVycm9ycyB0byBudWxsLlxyXG4gICAgICBjb250cm9sLnNldEVycm9ycyhudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyBhIGZvcm0gYW5kIHJldHVybnMgaXRzIFpNb2RlbCBpZiBpdCBpcyB2YWxpZC5cclxuICAgKiBAcGFyYW0gc2tpcFJlbW92ZU12Z0ZpZWxkVmFsdWUgV2hldGhlciB0byBza2lwIHJlbW92aW5nIHRoZSB2YWx1ZXMgb2YgbXZnIGZpZWxkcyBmcm9tIHRoZSB6TW9kZWwgb2JqZWN0LlxyXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtJ3MgWk1vZGVsIGlmIGl0IGlzIHZhbGlkLCBvciB1bmRlZmluZWQgb3RoZXJ3aXNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRWYWxpZGF0ZWRGb3JtWk1vZGVsKHNraXBSZW1vdmVQcmVmaXg/OiBib29sZWFuLCBza2lwUmVtb3ZlTXZnRmllbGRWYWx1ZT86IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGlzVmFsaWRGb3JtID0gdGhpcy52YWxpZGF0ZUFuZFNob3dFcnJvck1lc3NhZ2UoKTtcclxuXHJcbiAgICBpZiAoaXNWYWxpZEZvcm0pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Wk1vZGVsKHNraXBSZW1vdmVQcmVmaXgsIHNraXBSZW1vdmVNdmdGaWVsZFZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0cmlldmVzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgek1vZGVsIG9iamVjdCwgd2l0aCBtdmcgKG11bHRpIHZhbHVlIGdyb3VwKSBmaWVsZHMgcmVtb3ZlZCBhbmQgcHJvcGVydHkgcHJlZml4ZXMgcmVtb3ZlZC5cclxuICAgKiBAcGFyYW0gc2tpcFJlbW92ZVByZWZpeCBXaGV0aGVyIHRvIHNraXAgcmVtb3ZpbmcgdGhlIGRlZmF1bHQgcHJvcGVydHkgcHJlZml4LlxyXG4gICAqIEBwYXJhbSBza2lwUmVtb3ZlTXZnRmllbGRWYWx1ZSBXaGV0aGVyIHRvIHNraXAgcmVtb3ZpbmcgdGhlIHZhbHVlcyBvZiBtdmcgZmllbGRzIGZyb20gdGhlIHpNb2RlbCBvYmplY3QuXHJcbiAgICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHpNb2RlbCBvYmplY3QuXHJcbiAgICovXHJcbiAgcHVibGljIGdldFpNb2RlbChza2lwUmVtb3ZlUHJlZml4PzogYm9vbGVhbiwgc2tpcFJlbW92ZU12Z0ZpZWxkVmFsdWU/OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCB6TW9kZWwgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWw7XHJcblxyXG4gICAgLy8gTG9vcCB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGluIHRoZSB6TW9kZWwgb2JqZWN0LlxyXG4gICAgZm9yIChjb25zdCB6TW9kZWxQcm9wZXJ0eSBpbiB6TW9kZWwpIHtcclxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6TW9kZWwsIHpNb2RlbFByb3BlcnR5KSkge1xyXG4gICAgICAgIGNvbnN0IHpNb2RlbFByb3BlcnR5U2VnbWVudHMgPSB6TW9kZWxQcm9wZXJ0eS5zcGxpdCgnXycpO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgcHJvcGVydHkgaXMgcGFydCBvZiBhIG11bHRpIHZhbHVlIGdyb3VwLlxyXG4gICAgICAgIGlmICh6TW9kZWxQcm9wZXJ0eVNlZ21lbnRzLmxlbmd0aCA+IDMpIHtcclxuICAgICAgICAgIC8vIFRoZSB0aGlyZCBzZWdtZW50IG9mIHRoZSBwcm9wZXJ0eSBuYW1lIGlzIHRoZSBjb250YWluZXIgbmFtZS5cclxuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSB6TW9kZWxQcm9wZXJ0eVNlZ21lbnRzWzJdO1xyXG4gICAgICAgICAgLy8gQ29uc3RydWN0IHRoZSBuYW1lIG9mIHRoZSBtdWx0aSB2YWx1ZSBncm91cC5cclxuICAgICAgICAgIGNvbnN0IG11bHRpVmFsdWVHcm91cFNjb3BlTmFtZSA9IGBtdmdfJHtjb250YWluZXJOYW1lfWA7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIG11bHRpIHZhbHVlIGdyb3VwIGV4aXN0cyBhbmQgY29udGFpbnMgdGhlIHByb3BlcnR5LCByZW1vdmUgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBmcm9tIHRoZSB6TW9kZWwgb2JqZWN0LlxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBbbXVsdGlWYWx1ZUdyb3VwU2NvcGVOYW1lXSkge1xyXG4gICAgICAgICAgICBjb25zdCBtdmdGaWVsZCA9IHRoaXMuZ3JvdXBbbXVsdGlWYWx1ZUdyb3VwU2NvcGVOYW1lXS5maW5kKChyZWNvcmQpID0+IHJlY29yZCA9PT0gek1vZGVsUHJvcGVydHkpO1xyXG4gICAgICAgICAgICBpZiAobXZnRmllbGQpIHtcclxuICAgICAgICAgICAgICB6TW9kZWxbek1vZGVsUHJvcGVydHldID0gc2tpcFJlbW92ZU12Z0ZpZWxkVmFsdWUgPyB6TW9kZWxbek1vZGVsUHJvcGVydHldIDogbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh6TW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaW1wb3J0YW50OiBSZW1vdmUgcHJvcGVydHkgcHJlZml4ZXMgZnJvbSB0aGUgek1vZGVsIG9iamVjdCBpZiBza2lwUmVtb3ZlUHJlZml4IGlzIG5vdCB0cnVlIChieSBkZWZhdWx0IHJlbW92ZSBwcmVmaXgpXHJcbiAgICBjb25zdCBwYXRjaGVkTW9kZWxEYXRhID0gc2tpcFJlbW92ZVByZWZpeCA/IHpNb2RlbCA6IHRoaXMucmVtb3ZlWk1vZGVsUHJvcGVydHlQcmVmaXgoek1vZGVsKTtcclxuXHJcbiAgICAvLyBJZiB0aGVyZSBhcmUgbXVsdGkgdmFsdWUgZ3JvdXAgZ3JpZCB2YWx1ZXMsIGV4dHJhY3QgdGhlIGdyaWQgZGF0YSBhbmQgYWRkIGl0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRhaW5lciBpbiB0aGUgbW9kaWZpZWQgek1vZGVsIG9iamVjdC5cclxuICAgIGlmICh0aGlzLm11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZSkge1xyXG4gICAgICB0aGlzLm11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZS5mb3JFYWNoKChtdWx0aVZhbHVlR3JvdXBHcmlkTmFtZSkgPT4ge1xyXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIGNvbnRhaW5lciBuYW1lIGZyb20gdGhlIGdyaWQgbmFtZS5cclxuICAgICAgICBjb25zdCBjb250YWluZXJOYW1lID0gc2tpcFJlbW92ZVByZWZpeCA/IG11bHRpVmFsdWVHcm91cEdyaWROYW1lLnNwbGl0KCdfJykuam9pbignXycpIDogbXVsdGlWYWx1ZUdyb3VwR3JpZE5hbWUuc3BsaXQoJ18nKVsyXTtcclxuXHJcbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgZ3JpZCBkYXRhIGFuZCByZW1vdmUgcHJvcGVydHkgcHJlZml4ZXMgaWYgc2tpcFJlbW92ZVByZWZpeCBpcyBub3QgdHJ1ZS5cclxuICAgICAgICBjb25zdCBtdWx0aVZhbHVlR3JvdXBHcmlkID0gdGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBHcmlkTmFtZV0gYXMgWkdyaWQ7XHJcbiAgICAgICAgY29uc3QgZ3JpZERhdGEgPSBtdWx0aVZhbHVlR3JvdXBHcmlkLmdldEdyaWREYXRhKCkubWFwKChkYXRhKSA9PiBza2lwUmVtb3ZlUHJlZml4ID8gZGF0YSA6IHRoaXMucmVtb3ZlWk1vZGVsUHJvcGVydHlQcmVmaXgoZGF0YSwgdHJ1ZSkpO1xyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIGdyaWQgZGF0YSB0byB0aGUgY29ycmVzcG9uZGluZyBjb250YWluZXIgaW4gdGhlIG1vZGlmaWVkIHpNb2RlbCBvYmplY3QuXHJcbiAgICAgICAgaWYgKGdyaWREYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHBhdGNoZWRNb2RlbERhdGFbY29udGFpbmVyTmFtZV0gPSBncmlkRGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBwYXRjaGVkTW9kZWxEYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHRoZSB2YWx1ZSBvZiBhIG1vZGVsIGluIHRoZSBmb3JtIGdyb3VwLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1vZGVsTmFtZSBUaGUgbmFtZSBvZiB0aGUgbW9kZWwgdG8gc2V0LlxyXG4gICAqIEBwYXJhbSB7Kn0gbW9kZWxWYWx1ZSBUaGUgdmFsdWUgdG8gc2V0IGZvciB0aGUgbW9kZWwuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFByZWZpeF0gT3B0aW9uYWwgcGFyYW1ldGVyIGluZGljYXRpbmcgd2hldGhlciB0byBza2lwIHRoZSBjb21wb25lbnQgcHJlZml4LlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRNb2RlbFZhbHVlKG1vZGVsTmFtZTogc3RyaW5nLCBtb2RlbFZhbHVlOiBhbnksIHNraXBQcmVmaXg/OiBib29sZWFuKSB7XHJcbiAgICAvLyBHZXQgdGhlIHpNb2RlbCBvYmplY3QgZnJvbSB0aGUgZm9ybSBncm91cFxyXG4gICAgY29uc3Qgek1vZGVscyA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbDtcclxuICAgIC8vIElmIHNraXBQcmVmaXggaXMgZmFsc2Ugb3IgdW5kZWZpbmVkLCBwcmVwZW5kIHRoZSBjb21wb25lbnQgcHJlZml4IHRvIHRoZSBtb2RlbCBuYW1lXHJcbiAgICBjb25zdCB6TW9kZWxOYW1lID0gc2tpcFByZWZpeCA/IG1vZGVsTmFtZSA6IHRoaXMuY29tcG9uZW50UHJlZml4ICsgJ18nICsgbW9kZWxOYW1lO1xyXG4gICAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgaW4gdGhlIHpNb2RlbCBvYmplY3RcclxuICAgIHpNb2RlbHNbek1vZGVsTmFtZV0gPSBtb2RlbFZhbHVlO1xyXG5cclxuICAgIC8vIEdldCB0aGUgZm9ybSBncm91cCBhcyBhIEZvcm1Hcm91cCBvYmplY3RcclxuICAgIGxldCBmZzogRm9ybUdyb3VwID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uZm9ybSBhcyBGb3JtR3JvdXA7XHJcblxyXG4gICAgLy8gUGF0Y2ggdGhlIGZvcm0gZ3JvdXAgd2l0aCB0aGUgdXBkYXRlZCB6TW9kZWwgb2JqZWN0XHJcbiAgICBmZy5wYXRjaFZhbHVlKHpNb2RlbHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBSZW1vdmUgdGhlIGNvbXBvbmVudCBwcmVmaXggZnJvbSBwcm9wZXJ0eSBuYW1lcyBpbiB0aGUgek1vZGVsIG9iamVjdC5cclxuICAqXHJcbiAgKiBAcGFyYW0geyp9IHpNb2RlbCBUaGUgek1vZGVsIG9iamVjdC5cclxuICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2dldE9ubHlGaWVsZE5hbWVdIE9wdGlvbmFsIHBhcmFtZXRlciBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gb25seSByZXR1cm4gdGhlIGZpZWxkIG5hbWUgd2l0aG91dCB0aGUgcHJlZml4LlxyXG4gICogQHJldHVybnMgeyp9IFRoZSB1cGRhdGVkIHpNb2RlbCBvYmplY3QuXHJcbiAgKi9cclxuICBwcml2YXRlIHJlbW92ZVpNb2RlbFByb3BlcnR5UHJlZml4KHpNb2RlbDogYW55LCBnZXRPbmx5RmllbGROYW1lPzogYm9vbGVhbikge1xyXG4gICAgLy8gQ3JlYXRlIGFuIGVtcHR5IG9iamVjdCB0byBzdG9yZSB0aGUgdXBkYXRlZCB6TW9kZWwgZGF0YVxyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHt9O1xyXG5cclxuICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGluIHRoZSB6TW9kZWwgb2JqZWN0XHJcbiAgICBmb3IgKGxldCBwcm9wIGluIHpNb2RlbCkge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHpNb2RlbCwgcHJvcCkpIHtcclxuICAgICAgICAvLyBTcGxpdCB0aGUgcHJvcGVydHkgbmFtZSBieSB1bmRlcnNjb3Jlc1xyXG4gICAgICAgIGNvbnN0IHByb3BTZWdtZW50ID0gcHJvcC5zcGxpdCgnXycpO1xyXG4gICAgICAgIC8vIEdldCB0aGUgcHJvcGVydHkgbmFtZSB3aXRob3V0IHRoZSBjb21wb25lbnQgcHJlZml4XHJcbiAgICAgICAgY29uc3QgcHJvcGVydHlOYW1lID0gZ2V0T25seUZpZWxkTmFtZSA/IHByb3BTZWdtZW50W3Byb3BTZWdtZW50Lmxlbmd0aCAtIDFdIDogcHJvcC5yZXBsYWNlKHRoaXMuY29tcG9uZW50UHJlZml4ICsgJ18nLCAnJyk7XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgcHJvcGVydHkgdG8gdGhlIHVwZGF0ZWQgek1vZGVsIG9iamVjdFxyXG4gICAgICAgIHBhdGNoZWRNb2RlbERhdGFbcHJvcGVydHlOYW1lXSA9IHpNb2RlbFtwcm9wXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFJldHVybiB0aGUgdXBkYXRlZCB6TW9kZWwgb2JqZWN0XHJcbiAgICByZXR1cm4gcGF0Y2hlZE1vZGVsRGF0YTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFycyB0aGUgek1vZGVsIHByb3BlcnR5IG9mIHRoZSBncm91cCBpbiB0aGUgY29tcG9uZW50IHNjb3BlIGFuZCByZXNldHMgdGhlIG11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZSBhcnJheS5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbGVhclpNb2RlbCgpIHtcclxuICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbCA9IHt9O1xyXG4gICAgdGhpcy5tdWx0aVZhbHVlR3JvdXBHcmlkVmFsdWUgPSBbXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRNdWx0aVZhbHVlR3JvdXBCdXR0b25zRW5hYmxlZChjb250YWluZXJOYW1lOiBzdHJpbmcsIGlzRW5hYmxlZDogYm9vbGVhbikge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnQodGhpcy5ncm91cCwgYHpncmlkXyR7dGhpcy5jb21wb25lbnRQcmVmaXh9XyR7Y29udGFpbmVyTmFtZX1gKTtcclxuICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgY29uc3QgcHJvcGVydGllcyA9IFsnRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZCcsICdFbmFibGVDdXN0b21SZXNldENvbW1hbmQnLCAnRW5hYmxlQ3VzdG9tUmVtb3ZlQ29tbWFuZCddO1xyXG4gICAgICBmb3IgKGNvbnN0IHByb3Agb2YgcHJvcGVydGllcykge1xyXG4gICAgICAgIHJlc3VsdFsnZGF0YSddW3Byb3BdID0gaXNFbmFibGVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gTG9hZCBmcm9tIGxvY2FsIGZpbGVcclxuICBwcml2YXRlIGdldEZpZWxkRWxlbWVudF9Gb3JtUGFnZShmaWVsZEVsZW1lbnRGb3JtTmFtZTogc3RyaW5nLCBmb3JtVHlwZSA9IEZvcm1UeXBlLmZvcm1GaWVsZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBwYXJhbTogQXNzZXRzTm9kZVBhcmFtID0ge1xyXG4gICAgICBhc3NldHNSb3V0ZTogQXNzZXRzUm91dGVzLmZpZWxkcyxcclxuICAgICAgYXNzZXRzRm9sZGVyOiBBc3NldHNGb2xkZXIuZmllbGRlbGVtZW50LFxyXG4gICAgICBleHRlbnNpb246IEFzc2V0c0FsbG93ZWRFeHRlbnNpb24uanNvbixcclxuICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpXHJcbiAgICAgICAgLnNldCgnbmFtZScsIGZpZWxkRWxlbWVudEZvcm1OYW1lKVxyXG4gICAgICAgIC5zZXQoJ3R5cGUnLCBmb3JtVHlwZSlcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmFzc2V0c0h0dHBOb2RlR2V0KHBhcmFtKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuXHJcbmVudW0gQ29tcG9uZW50VHlwZSB7XHJcbiAgdGV4dCA9ICd0ZXh0JyxcclxuICB0ZXh0YXJlYSA9ICd0ZXh0YXJlYScsXHJcbiAgY2hlY2tib3ggPSAnY2hlY2tib3gnLFxyXG4gIGxhYmVsID0gJ3psYWJlbCcsXHJcbiAgZGF0ZSA9ICdkYXRlJyxcclxuICB6ZGF0ZXRpbWUgPSAnemRhdGV0aW1lJyxcclxuICB6dWlkYXRldGltZSA9ICd6dWlkYXRldGltZScsXHJcbiAgbnVtYmVyID0gJ251bWJlcicsXHJcbiAgem51bWVyaWMgPSAnem51bWVyaWMnLFxyXG4gIGVtYWlsID0gJ2VtYWlsJyxcclxuICBmaWxlID0gJ2ZpbGUnLFxyXG4gIHByaWNlID0gJ3ByaWNlJyxcclxuICB3ZWJzaXRlID0gJ3dlYnNpdGUnLFxyXG4gIGRyb3Bkb3duID0gJ2Ryb3Bkb3duJyxcclxuICB6dWlzZWxlY3RtdWx0aXBsZSA9ICd6dWlzZWxlY3RtdWx0aXBsZScsXHJcbiAgenNlbGVjdG11bHRpcGxlID0gJ3pzZWxlY3RtdWx0aXBsZScsXHJcbiAgZ3JvdXBpbmcgPSAna2NhcmQnLFxyXG4gIGJ1dHRvbiA9ICd6YnV0dG9ucycsXHJcbiAgZ3JpZCA9ICd6Z3JpZCdcclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwicGFkZGluZzogMTVweFwiICpuZ0lmPVwiZGF0YS5UaXRsZSAmJiAoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIiBjbGFzcz1cInp1ZGYtY29udGFpbmVyXCI+XHJcbiAgPGtlbmRvLWNhcmQgKm5nSWY9XCJkYXRhLlRpdGxlXCI+XHJcbiAgICA8a2VuZG8tY2FyZC1oZWFkZXI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImNhcmQtaGVhZGVyLXRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2lvbi1sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2tlbmRvLWNhcmQtaGVhZGVyPlxyXG4gICAgPGtlbmRvLWNhcmQtYm9keT5cclxuICAgICAgPCEtLSA8YXBwLXpmb3JtY29udHJvbCBbbmdDbGFzc109XCJncm91cFtmaWVsZC5pc1Zpc2libGVGaWVsZF0gPyBmaWVsZC5EaXZDbGFzcyA6ICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUZpZWxkcyB8IGRpdnpsYXlvdXQ6IGRhdGEuemxheW91dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7ZmllbGQuTmFtZX19XCI+XHJcbiAgICAgIDwvYXBwLXpmb3JtY29udHJvbD4gLS0+XHJcbiAgICAgIDxhcHAtemRpdiBbZGF0YV09XCJkYXRhXCIgW2Zvcm1dPVwiZm9ybVwiIFtncm91cF09XCJncm91cFwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiPjwvYXBwLXpkaXY+XHJcbiAgICA8L2tlbmRvLWNhcmQtYm9keT5cclxuICA8L2tlbmRvLWNhcmQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIiFkYXRhLlRpdGxlICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiIFtzdHlsZV09XCJkYXRhLlN0eWxlXCIgY2xhc3M9XCJ6dWRmLWNvbnRhaW5lclwiPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gICAgPCEtLSA8YXBwLXpmb3JtY29udHJvbCBbbmdDbGFzc109XCJncm91cFtmaWVsZC5pc1Zpc2libGVGaWVsZF0gPyBmaWVsZC5EaXZDbGFzcyA6ICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmb3JtRmllbGRzIHwgZGl2emxheW91dDogZGF0YS56bGF5b3V0XCJcclxuICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgaWQ9XCJ7e2ZpZWxkLk5hbWV9fVwiPlxyXG4gICAgPC9hcHAtemZvcm1jb250cm9sPiAtLT5cclxuICAgIDxhcHAtemRpdiBbZGF0YV09XCJkYXRhXCIgW2Zvcm1dPVwiZm9ybVwiIFtncm91cF09XCJncm91cFwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiPjwvYXBwLXpkaXY+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj5cclxuIl19
|
|
1017
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienVkZi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenVkZi96dWRmLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqRiw2QkFBNkI7QUFFN0IsOEJBQThCO0FBQzlCLE9BQU8sRUFBc0MsRUFBRSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQWEsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUdMLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBZ0MsUUFBUSxFQUN0RixzQkFBc0IsRUFBRSxZQUFZLEVBQW1CLFlBQVksRUFDcEUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7OztBQVFsRCxNQUFNLE9BQU8sYUFBYyxTQUFRLGtCQUFrQjtJQW1CbkQsWUFDUyxnQkFBbUMsRUFDbEMsWUFBMEIsRUFDMUIsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsNEJBQTBELEVBQzFELGtCQUFzQyxFQUN0QyxHQUFzQjtRQUU5QixLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQVJoQixxQkFBZ0IsR0FBaEIs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QUFTOytCQUNFLFVBQVU7O0FBNG9DdEIsSUFBSyxhQXFCSjtBQXJCRCxXQUFLLGFBQWE7SUFDaEIsOEJBQWEsQ0FBQTtJQUNiLHNDQUFxQixDQUFBO0lBQ3JCLHNDQUFxQixDQUFBO0lBQ3JCLGlDQUFnQixDQUFBO0lBQ2hCLDhCQUFhLENBQUE7SUFDYix3Q0FBdUIsQ0FBQTtJQUN2Qiw0Q0FBMkIsQ0FBQTtJQUMzQixrQ0FBaUIsQ0FBQTtJQUNqQixzQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBZSxDQUFBO0lBQ2YsOEJBQWEsQ0FBQTtJQUNiLGdDQUFlLENBQUE7SUFDZixvQ0FBbUIsQ0FBQTtJQUNuQixzQ0FBcUIsQ0FBQTtJQUNyQix3REFBdUMsQ0FBQTtJQUN2QyxvREFBbUMsQ0FBQTtJQUNuQyxtQ0FBa0IsQ0FBQTtJQUNsQixvQ0FBbUIsQ0FBQTtJQUNuQiwrQkFBYyxDQUFBO0lBQ2QsbUNBQWtCLENBQUE7QUFDcEIsQ0FBQyxFQXJCSSxhQUFhLEtBQWIsYUFBYSxRQXFCakIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBBc3luY1N1YmplY3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7XHJcbiAgWkNvbXBvbmVudCwgWkZpZWxkLFxyXG4gIEFsZXJ0U2VydmljZSwgQXV0aFNlcnZpY2UsIEZpZWxkU2VydmljZSwgVG9hc3RTZXJ2aWNlLFxyXG4gIFpHcm91cCwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpDb21wb25lbnRIZWxwZXIsIENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UsIEZvcm1UeXBlLCBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgQXNzZXRzQWxsb3dlZEV4dGVuc2lvbiwgQXNzZXRzRm9sZGVyLCBBc3NldHNOb2RlUGFyYW0sIEFzc2V0c1JvdXRlcywgV2ViQXBpU2VydmljZVxyXG59IGZyb20gJ21taGdsb2JhbC16Y29yZSc7XHJcbmltcG9ydCB7IFpHcmlkIH0gZnJvbSBcIi4uL3pncmlkL3pncmlkLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBDb250YWluZXJGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9jb250YWluZXJmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBIdHRwUGFyYW1zIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtenVkZicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3p1ZGYuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3p1ZGYuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFp1ZGZDb21wb25lbnQgZXh0ZW5kcyBDb250YWluZXJGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQge1xyXG5cclxuICAvLyBmb3JtRmllbGRzOiBhbnlbXTsgLy8gcG9wdWxhdGUgdXNpbmcgZmllbGQgZWxlbWVudC5cclxuICBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcbiAgaW5pdGlhbERhdGFWYWx1ZTogYW55O1xyXG4gIGNvbXBvbmVudFByZWZpeDogc3RyaW5nO1xyXG4gIGNvbXBvbmVudFNjb3BlTmFtZTogc3RyaW5nO1xyXG4gIGRpc3BsYXlFbGVtZW50TW9kZWw6IGFueTtcclxuICBtdWx0aVZhbHVlR3JvdXBHcmlkVmFsdWU6IHN0cmluZ1tdO1xyXG4gIGxvYWRlZEZpZWxkc1NlcXVlbmNlOiBhbnk7XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgcHVibGljIHJlYWRvbmx5IHByZWZpeFZhbHVlT3B0aW9uID0gJ196dWRmbXZnT3B0aW9ucyc7XHJcbiAgcHVibGljIHJlYWRvbmx5IHByZWZpeERhdGFTb3VyY2VOYW1lID0gJ196dWRmbXZnRGF0YVNvdXJjZSc7XHJcbiAgcHVibGljIHJlYWRvbmx5IHByZWZpeENvbHVtbkZpZWxkc05hbWUgPSAnX3p1ZGZtdmdDb2x1bW5GaWVsZHMnO1xyXG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXhDdXN0b21BZGRCdXR0b25PbkNsaWNrID0gJ19DdXN0b21BZGRCdXR0b25PbkNsaWNrJztcclxuICBwdWJsaWMgcmVhZG9ubHkgcHJlZml4Q3VzdG9tUmVzZXRCdXR0b25PbkNsaWNrID0gJ19DdXN0b21SZXNldEJ1dHRvbk9uQ2xpY2snO1xyXG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXhDdXN0b21SZW1vdmVCdXR0b25PbkNsaWNrID0gJ19DdXN0b21SZW1vdmVCdXR0b25PbkNsaWNrJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZTogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGxldCBvYnM6IE9ic2VydmFibGU8YW55PiA9IG9mKHRoaXMuZGF0YS5WYWx1ZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5WYWx1ZSA9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhLkZpZWxkRWxlbWVudENvZGUpIHtcclxuICAgICAgY29uc3QgZmllbGROYW1lID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5GaWVsZEVsZW1lbnRDb2RlLCB0aGlzLmdyb3VwKTtcclxuICAgICAgY29uc3QgZmllbGRGb3JtVHlwZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuRmllbGRFbGVtZW50Rm9ybVR5cGUsIHRoaXMuZ3JvdXApO1xyXG4gICAgICBjb25zdCBmb3JtUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRDdXN0b21SZXNvdXJjZSh0aGlzLmRhdGEuQ3VzdG9tUmVzb3VyY2UpO1xyXG4gICAgICBsZXQgaXNMb2FkVmlhQXNzZXQgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5sb2FkVmlhQXNzZXQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEubG9hZFZpYUFzc2V0ID09ICdzdHJpbmcnICYmIHRoaXMuZGF0YS5sb2FkVmlhQXNzZXQuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgICAgIGlzTG9hZFZpYUFzc2V0ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5sb2FkVmlhQXNzZXQsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlzTG9hZFZpYUFzc2V0ID0gdGhpcy5kYXRhLmxvYWRWaWFBc3NldCBhcyBib29sZWFuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGZpZWxkTmFtZSkge1xyXG4gICAgICAgIGlmIChpc0xvYWRWaWFBc3NldCkge1xyXG4gICAgICAgICAgb2JzID0gdGhpcy5nZXRGaWVsZEVsZW1lbnRfRm9ybVBhZ2UoZmllbGROYW1lLCBmaWVsZEZvcm1UeXBlKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoZmllbGRFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZmllbGRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmllbGRFbGVtZW50LkNvZGU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkRm9ybVR5cGUgJiYgZmllbGRGb3JtVHlwZSA9PSBGb3JtVHlwZS5saXN0RmllbGQpIHtcclxuICAgICAgICAgICAgb2JzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0TGlzdEZpZWxkQnlGaWVsZEVsZW1lbnROYW1lKGZpZWxkTmFtZSwgZm9ybVJlc291cmNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBvYnMgPSB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKGZpZWxkTmFtZSwgJ0Zvcm1GaWVsZCcsIHRoaXMsICdmaWVsZHMnLCBudWxsLCBmb3JtUmVzb3VyY2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN1cGVyLmluaXRDb21wb25lbnQoKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gb2JzKSxcclxuICAgICAgc3dpdGNoTWFwKChmaWVsZCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuRmllbGRFbGVtZW50Q29kZSkge1xyXG4gICAgICAgICAgLy8gdXNlIG9icyB2YWx1ZSBvbmx5IGlmIEZpZWxkRWxlbWVudENvZGUgaXMgc2V0LiBpZiBub3QgZGVmYXVsdCBhcyBudWxsLlxyXG4gICAgICAgICAgdGhpcy5kYXRhLlZhbHVlID0gZmllbGQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kYXRhLlZhbHVlID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFN0b3JlIGluaXRpYWwgZGF0YSB2YWx1ZSBhbmQgc2V0IGNvbXBvbmVudCBzY29wZSBhbmQgcHJlZml4XHJcbiAgICAgICAgdGhpcy5pbml0aWFsRGF0YVZhbHVlID0gdGhpcy5kYXRhLlZhbHVlO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50U2NvcGVOYW1lID0gJ3p1ZGZfJyArIHRoaXMuZGF0YS5OYW1lO1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50UHJlZml4ID0gJ3p1ZGZfJyArIHRoaXMuZGF0YS5OYW1lO1xyXG5cclxuICAgICAgICB0aGlzLmdyb3VwW3RoaXMuZGF0YS5OYW1lICsgJ01vZGVsJ10gPSBbXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkRm9ybSgpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW5kZXJzIHRoZSBmaWVsZCBlbGVtZW50IGFuZCBzZXRzIHVwIHRoZSBmb3JtLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgbG9hZEZvcm0oKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBvZih0cnVlKS5waXBlKFxyXG4gICAgICAvLyBTZXQgdGhlIFN1YlR5cGUgdG8gJ3p1ZGYnLlxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YS5TdWJUeXBlID0gJ3p1ZGYnO1xyXG4gICAgICB9KSxcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IGdyb3VwIGZvciB0aGUgZmllbGQgYW5kIHNldCB1cCB0aGUgZm9ybS5cclxuICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgWkdyb3VwIGZvciB0aGUgZmllbGQgaWYgb25lIGRvZXNuJ3QgYWxyZWFkeSBleGlzdC5cclxuICAgICAgICBpZiAoIXRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXSA9IG5ldyBaR3JvdXAoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIERlY2xhcmUgYSBuZXcgek1vZGVsIG9iamVjdCBmb3IgdGhlIFpHcm91cC5cclxuICAgICAgICBjb25zdCB6dWRmU2NvcGVHcm91cCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdO1xyXG4gICAgICAgIHp1ZGZTY29wZUdyb3VwLnpNb2RlbCA9IHt9O1xyXG5cclxuICAgICAgICAvLyBSZW5kZXIgdGhlIGZpZWxkIGVsZW1lbnQuXHJcbiAgICAgICAgdGhpcy5yZW5kZXJGaWVsZEVsZW1lbnQodGhpcy5kYXRhLlZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gU2V0IHRoZSBmb3JtIGZvciB0aGUgWkdyb3VwIHNjb3BlLlxyXG4gICAgICAgIGlmICh0aGlzLmRhdGEuVmFsdWUpIHtcclxuICAgICAgICAgIC8vIElmIFZhbHVlIGlzIG5vdCBudWxsLCBiaW5kIHRoZSBleGlzdGluZyBmb3JtLlxyXG4gICAgICAgICAgenVkZlNjb3BlR3JvdXAuZm9ybSA9IHRoaXMuZm9ybTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gSWYgVmFsdWUgaXMgbnVsbCwgY3JlYXRlIGEgbmV3IGZvcm0gd2l0aCBhbiBlbXB0eSBmb3JtIGNvbnRyb2wuXHJcbiAgICAgICAgICBjb25zdCBmb3JtQ29udHJvbDogeyBba2V5OiBzdHJpbmddOiBGb3JtQ29udHJvbCB9ID0ge307XHJcbiAgICAgICAgICB6dWRmU2NvcGVHcm91cC5mb3JtID0gbmV3IEZvcm1Hcm91cChmb3JtQ29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgLy8gU2V0IHRoZSBmb3JtRmllbGRzIHByb3BlcnR5IGZvciBkaXNwbGF5LlxyXG4gICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgIC8vIHRoaXMuZm9ybUZpZWxkcyA9IE9iamVjdC5hc3NpZ24oW10sIHRoaXMuZGF0YS5WYWx1ZSk7XHJcblxyXG4gICAgICAgIFpDb21wb25lbnRIZWxwZXIuYXBwZW5kQ29uc29sZVdhdGNoTGlzdCh0aGlzLmdyb3VwLCBgZ3JvdXAuJHt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZX0uek1vZGVsYCk7XHJcblxyXG4gICAgICAgIC8vIENhbGwgdGhlIGFmdGVyPEZpZWxkPkxvYWRlZCBmdW5jdGlvbiBpZiBpdCBleGlzdHMgaW4gdGhlIGdyb3VwLlxyXG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9ICdhZnRlcicgKyAodGhpcy5kYXRhLk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0aGlzLmRhdGEuTmFtZS5zbGljZSgxKSkgKyAnTG9hZGVkJztcclxuICAgICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXBbZmllbGROYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLmdyb3VwW2ZpZWxkTmFtZV0odGhpcy5ncm91cCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgRmllbGQgZGl2IGNsYXNzXHJcbiAgICAgICAgLy8gUmVwbGFjZWQgd2l0aDogdGhpcy5maWVsZFNlcnZpY2UucGF0Y2hGaWVsZFByb3BlcnR5KGZpZWxkKTtcclxuICAgICAgICAvLyBaQ29tcG9uZW50SGVscGVyLnNldEZpZWxkc0RpdkNsYXNzKHRoaXMuZ3JvdXAuX3Byb2plY3ROYW1lLCB0aGlzLmdyb3VwLmZpZWxkTmFtZSwgdGhpcy5kYXRhLCB0aGlzLmF1dGhTZXJ2aWNlKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0Rm9ybUNvbnRyb2xWYWxpZGF0aW9uKGZvcm1Db250cm9sTmFtZTogc3RyaW5nLCB2YWxpZGF0b3I6IGFueSkge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZW5kZXJzIGZpZWxkIGVsZW1lbnRzIGJhc2VkIG9uIGEgSlNPTiBzdHJpbmcuXHJcbiAgICogQHBhcmFtIGdyb3VwIFRoZSBaR3JvdXAgb2JqZWN0IHRvIHdoaWNoIHRoZSBmaWVsZCBlbGVtZW50cyB3aWxsIGJlIGFkZGVkLlxyXG4gICAqIEBwYXJhbSBqc29uU3RyaW5nIFRoZSBKU09OIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZpZWxkIGVsZW1lbnRzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW5kZXJGaWVsZEVsZW1lbnRCeUpzb25TdHJpbmcoZ3JvdXA6IFpHcm91cCwganNvblN0cmluZzogc3RyaW5nLCBmaWVsZEVsZW1lbnROYW1lOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xyXG4gICAgLy8gUGFyc2UgdGhlIEpTT04gc3RyaW5nIGludG8gYW4gYXJyYXkgb2YgZmllbGQgZWxlbWVudHMuXHJcbiAgICBjb25zdCBmaWVsZEVsZW1lbnRNYXN0ZXJDb2RlSnNvbkFycmF5ID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuXHJcbiAgICAvLyBSZW5kZXIgdGhlIGZpZWxkIGVsZW1lbnRzLlxyXG4gICAgdGhpcy5yZW5kZXJGaWVsZEVsZW1lbnQoZmllbGRFbGVtZW50TWFzdGVyQ29kZUpzb25BcnJheSwgZmllbGRFbGVtZW50TmFtZSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gRGlzcGxheSBtb2RlbFxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIGRpc3BsYXkgbW9kZWwgZm9yIGEgenVkZiAoemVyby11dGlsaXR5IGRhdGEgZmllbGQpIGVsZW1lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gdXNlIGZvciB0aGUgZGlzcGxheSBtb2RlbC5cclxuICAgKi9cclxuICBwdWJsaWMgc2V0RGlzcGxheU1vZGVsKHZhbHVlOiBhbnkpIHtcclxuICAgIC8vIFJlcGxhY2UgdGhlIHdob2xlIGRpc3BsYXkgbW9kZWwgd2l0aCB0aGUgbmV3IHZhbHVlXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgLy8gQ2xlYXIgdGhlIGZvcm0gY29udHJvbFxyXG4gICAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2woKTtcclxuXHJcbiAgICAgIC8vIE1ha2UgYSBkZWVwIGNvcHkgb2YgdGhlIHZhbHVlIHRvIGF2b2lkIGFueSB1bndhbnRlZCByZWZlcmVuY2UgZXJyb3JzXHJcbiAgICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA9IFpDb21wb25lbnRIZWxwZXIuZGVlcENsb25lKHZhbHVlKTtcclxuXHJcbiAgICAgIC8vIFJlbmRlciB0aGUgZmllbGQgZWxlbWVudCBiYXNlZCBvbiB0aGUgbmV3IGRpc3BsYXkgbW9kZWxcclxuICAgICAgdGhpcy5yZW5kZXJGaWVsZEVsZW1lbnQodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgbG9nIGEgd2FybmluZyBtZXNzYWdlXHJcbiAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCB2YWx1ZSB1c2VkIGZvciByZW5kZXIgenVkZiAnICsgdGhpcy5kYXRhLk5hbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBVcGRhdGVzIGEgdmFsdWUgaW4gdGhlIGRpc3BsYXkgZWxlbWVudCBtb2RlbCBhdCB0aGUgc3BlY2lmaWVkIGZsYXQgaW5kZXguXHJcbiAgKiBAcGFyYW0geyp9IHZhbHVlIC0gVGhlIG5ldyB2YWx1ZSB0byBiZSBzZXQuXHJcbiAgKiBAcGFyYW0ge3N0cmluZ30gZmxhdEluZGV4IC0gVGhlIGZsYXQgaW5kZXggaW5kaWNhdGluZyB0aGUgbG9jYXRpb24gaW4gdGhlIGRpc3BsYXkgZWxlbWVudCBtb2RlbCB3aGVyZSB0aGUgdmFsdWUgc2hvdWxkIGJlIHVwZGF0ZWQuXHJcbiAgKi9cclxuICBwdWJsaWMgdXBkYXRlRGlzcGxheU1vZGVsKHZhbHVlOiBhbnksIGZsYXRJbmRleDogc3RyaW5nKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnVwZGF0ZUFycmF5T2JqZWN0QnlGbGF0SW5kZXgodGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsLCBmbGF0SW5kZXgsIHZhbHVlKTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUZpZWxkKCk7XHJcbiAgICAvL3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogQXBwZW5kcyBhIHZhbHVlIHRvIHRoZSBkaXNwbGF5IGVsZW1lbnQgbW9kZWwgYXQgdGhlIHNwZWNpZmllZCBmbGF0IGluZGV4LlxyXG4gICogQHBhcmFtIHsqfSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBhcHBlbmRlZC5cclxuICAqIEBwYXJhbSB7c3RyaW5nfSBmbGF0SW5kZXggLSBUaGUgZmxhdCBpbmRleCBpbmRpY2F0aW5nIHRoZSBsb2NhdGlvbiBpbiB0aGUgZGlzcGxheSBlbGVtZW50IG1vZGVsIHdoZXJlIHRoZSB2YWx1ZSBzaG91bGQgYmUgYXBwZW5kZWQuXHJcbiAgKi9cclxuICBwdWJsaWMgYXBwZW5kVG9EaXNwbGF5TW9kZWwodmFsdWU6IGFueSwgZmxhdEluZGV4OiBzdHJpbmcpIHtcclxuICAgIC8vIEFwcGVuZCB0byBkaXNwbGF5IG1vZGVsIG1lYW5zIGl0IHdpbGwgaW5zZXJ0IHRoZSBmb3JtIGNvbnRyb2wgYmFzZWQgb24gZmxhdCBpbmRleC5cclxuICAgIGlmIChmbGF0SW5kZXgubGVuZ3RoID49IDMpIHtcclxuICAgICAgZmxhdEluZGV4LnN1YnN0cmluZygwLCBmbGF0SW5kZXgubGVuZ3RoIC0gMik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmQgPSBaQ29tcG9uZW50SGVscGVyLmdldEZyb21BcnJheU9iamVjdEJ5RmxhdEluZGV4KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCwgZmxhdEluZGV4KTtcclxuICAgIHNlbGVjdGVkUmVjb3JkLlZhbHVlLnB1c2godmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBhIGRlZXAgY29weSBvZiB0aGUgZGlzcGxheSBlbGVtZW50IG1vZGVsLlxyXG4gICAqIEByZXR1cm5zIHthbnl9IEEgZGVlcCBjb3B5IG9mIHRoZSBkaXNwbGF5IGVsZW1lbnQgbW9kZWwuXHJcbiAgICovXHJcbiAgcHVibGljIGdldERpc3BsYXlNb2RlbCgpIHtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSB0aGUgZGlzcGxheSBlbGVtZW50IG1vZGVsIGFuZCBjbGVhcnMgdGhlIGZvcm0gY29udHJvbC5cclxuICAgKi9cclxuICBwdWJsaWMgcmVtb3ZlQWxsRGlzcGxheU1vZGVsKCkge1xyXG4gICAgdGhpcy5kaXNwbGF5RWxlbWVudE1vZGVsID0gW107XHJcbiAgICB0aGlzLmNsZWFyRm9ybUNvbnRyb2woKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgYW4gZWxlbWVudCBmcm9tIHRoZSBkaXNwbGF5IGVsZW1lbnQgbW9kZWwgYXQgdGhlIHNwZWNpZmllZCBmbGF0IGluZGV4IGFuZCB1cGRhdGVzIHRoZSBmb3JtIGZpZWxkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGF0SW5kZXggLSBUaGUgZmxhdCBpbmRleCBpbmRpY2F0aW5nIHRoZSBsb2NhdGlvbiBpbiB0aGUgZGlzcGxheSBlbGVtZW50IG1vZGVsIHdoZXJlIHRoZSBlbGVtZW50IHNob3VsZCBiZSByZW1vdmVkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVFbGVtZW50RnJvbURpc3BsYXlNb2RlbChmbGF0SW5kZXg6IHN0cmluZykge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5yZW1vdmVBcnJheU9iamVjdEJ5RmxhdEluZGV4KHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCwgZmxhdEluZGV4KTtcclxuICAgIHRoaXMudXBkYXRlRm9ybUZpZWxkKCk7XHJcblxyXG4gICAgLy8gVE9ETzogcmVtb3ZlIGZyb20gem1vZGVsXHJcbiAgICAvL2RlbGV0ZSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbJyddO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwZW5kcyBhIGZvcm0gY29udHJvbCB0byB0aGUgZm9ybSBhbmQgdGhlIGRpc3BsYXkgZWxlbWVudCBtb2RlbC5cclxuICAgKiBAcGFyYW0ge1pGaWVsZH0gZmllbGREYXRhIC0gVGhlIGRhdGEgZm9yIHRoZSBmb3JtIGNvbnRyb2wgdG8gYmUgYXBwZW5kZWQuXHJcbiAgICovXHJcbiAgcHVibGljIGFwcGVuZEZvcm1Db250cm9sKGZpZWxkRGF0YSkge1xyXG4gICAgLy8gQXBwZW5kIGZvcm0gY29udHJvbCBtZWFucyBpdCB3aWxsIGp1c3QgaW5zZXJ0IHRoZSBmb3JtIGNvbnRyb2wgYXQgdGhlIGVuZC5cclxuICAgIGZpZWxkRGF0YS5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZERhdGEuTmFtZSwgZmllbGREYXRhWydjb250YWluZXJOYW1lJ10pO1xyXG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XHJcblxyXG4gICAgZm9ybUNvbnRyb2xzW2ZpZWxkRGF0YS5OYW1lXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsW2ZpZWxkRGF0YS5OYW1lXVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmZvcm0uYWRkQ29udHJvbChmaWVsZERhdGEuTmFtZSwgZm9ybUNvbnRyb2xzW2ZpZWxkRGF0YS5OYW1lXSk7XHJcblxyXG4gICAgaWYgKCF0aGlzLmRhdGEuVmFsdWUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Zvcm1GaWVsZCAnICsgdGhpcy5kYXRhLk5hbWUgKyAnIGlzIHVuZGVmaW5lZCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA9IHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA/PyBbXTtcclxuICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbC5wdXNoKGZpZWxkRGF0YSk7XHJcbiAgICB0aGlzLnVwZGF0ZUZvcm1GaWVsZCgpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVuZGVycyBmaWVsZCBlbGVtZW50cyBhcyBmb3JtIGNvbnRyb2xzIGluIGEgbmV3IGZvcm0gZ3JvdXAuXHJcbiAgICogQHBhcmFtIHthbnl9IGZpZWxkRWxlbWVudHMgLSBUaGUgZmllbGQgZWxlbWVudHMgdG8gYmUgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgcHVibGljIHJlbmRlckZpZWxkRWxlbWVudChmaWVsZEVsZW1lbnRzOiBhbnksIGZpZWxkRWxlbWVudE5hbWU6IHN0cmluZyA9ICcnKSB7XHJcbiAgICB0aGlzLmNsZWFyWk1vZGVsKCk7XHJcblxyXG4gICAgaWYgKGZpZWxkRWxlbWVudHMpIHtcclxuICAgICAgdGhpcy5sb2FkZWRGaWVsZHNTZXF1ZW5jZSA9IHt9O1xyXG4gICAgICBjb25zdCBmb3JtQ29udHJvbHMgPSB7fTtcclxuICAgICAgZmllbGRFbGVtZW50cyA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbHMoZmllbGRFbGVtZW50cywgZm9ybUNvbnRyb2xzKTtcclxuXHJcbiAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gcHJldmlvdXMgc3Vic2NyaXB0aW9uIGlmIGV4aXN0c1xyXG4gICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW5kZXIgZm9ybSBjb250cm9scyB0byBuZXcgZm9ybSBncm91cFxyXG4gICAgICB0aGlzLmZvcm0gPSBuZXcgRm9ybUdyb3VwKGZvcm1Db250cm9scyk7XHJcbiAgICAgIHRoaXMuZGF0YS5WYWx1ZSA9IGZpZWxkRWxlbWVudHM7XHJcbiAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLmZvcm0gPSB0aGlzLmZvcm07XHJcbiAgICAgIHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdWydsb2FkZWRGaWVsZHNTZXF1ZW5jZSddID0gdGhpcy5sb2FkZWRGaWVsZHNTZXF1ZW5jZTtcclxuXHJcbiAgICAgIC8vIFN1YnNjcmliZSB0byBjb21wb25lbnRMb2FkZWQkIGV2ZW50XHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Q29tcG9uZW50TG9hZGVkJCgnenVkZicpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgLy8gQWxsIGNvbXBvbmVudHMgaGF2ZSBmaW5pc2hlZCBsb2FkaW5nXHJcblxyXG4gICAgICAgIGNvbnN0IHp1ZGZHcm91cCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdO1xyXG4gICAgICAgIGlmICh6dWRmR3JvdXBbJ2xpbmtlZENvbXBvbmVudCddKSB7XHJcbiAgICAgICAgICB6dWRmR3JvdXBbJ2xpbmtlZENvbXBvbmVudCddLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmtlZENvbXBvbmVudFNlZ21lbnRzID0gaXRlbS52YWx1ZS5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnROYW1lID0gbGlua2VkQ29tcG9uZW50U2VnbWVudHMuc2xpY2UoMCwgMikuam9pbignXycpICsgJ18nICsgaXRlbS5saW5rZWRDb21wb25lbnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q29tcG9uZW50QnlWYWx1ZSh0aGlzLmdyb3VwLCBwYXJlbnRDb21wb25lbnROYW1lKTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRDb21wb25lbnQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudEJ5VmFsdWUodGhpcy5ncm91cCwgaXRlbS52YWx1ZSk7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFyZW50Q29tcG9uZW50ICYmIGNoaWxkQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxTZWxlY3RPcHRpb25zID0gY2hpbGRDb21wb25lbnQuZGF0YVsnb3JpZ2luYWxTZWxlY3RPcHRpb25zJ10gPz8gT2JqZWN0LmFzc2lnbihbXSwgY2hpbGRDb21wb25lbnQuZGF0YS5TZWxlY3RPcHRpb25zKTtcclxuICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZFNlbGVjdGlvbk9wdGlvbnMgPSBvcmlnaW5hbFNlbGVjdE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiBvcHRpb24ucGFyZW50RXhwcmVzc2lvbiA9PSB6dWRmR3JvdXAuek1vZGVsW3BhcmVudENvbXBvbmVudE5hbWVdKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gTWFudWFsbHkgcGF0Y2ggdGhlIGNvbXBvbmVudCBmb3JtIGNvbnRyb2wgdmFsdWVcclxuICAgICAgICAgICAgICBjb25zdCB6dWRmRm9ybSA9IHp1ZGZHcm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnRGb3JtQ29udHJvbCA9IHp1ZGZGb3JtLmNvbnRyb2xzW2l0ZW0udmFsdWVdIGFzIEZvcm1Db250cm9sO1xyXG4gICAgICAgICAgICAgIGlmIChjb21wb25lbnRGb3JtQ29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRDb21wb25lbnQuc2V0U2VsZWN0T3B0aW9uKGZpbHRlcmVkU2VsZWN0aW9uT3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb21wb25lbnRGb3JtQ29udHJvbC5wYXRjaFZhbHVlKHp1ZGZHcm91cC56TW9kZWxbaXRlbS52YWx1ZV0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIGdldCBmb3JtY29udHJvbCBmb3IgJyArIGl0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coenVkZkZvcm0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBuZWVkIHRvIGNhbGwgYmFjayBmaWVsZCBlbGVtZW50IFwiPGZpZWxkIG5hbWU+X2xvYWRlZFwiXHJcbiAgICAgICAgaWYgKGZpZWxkRWxlbWVudE5hbWUgIT0gJycpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwW2ZpZWxkRWxlbWVudE5hbWUgKyAnX2xvYWRlZCddKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBbZmllbGRFbGVtZW50TmFtZSArICdfbG9hZGVkJ10odGhpcy5ncm91cCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUbyBjb25zaWRlcjogVHJpZ2dlciB0aGUgXCJvbmNoYW5nZVwiIGV2ZW50IG9yIHBlcmZvcm0gYW55IG90aGVyIG5lY2Vzc2FyeSBhY3Rpb25zIGhlcmVcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlRm9ybUNvbnRyb2xzKGZpZWxkQXJyYXk6IGFueSwgZm9ybUNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1Db250cm9sIH0sIGNvbnRhaW5lck5hbWU/OiBzdHJpbmcsIGlzTXVsdGlWYWx1ZUdyb3VwID0gZmFsc2UsIGZpZWxkVmFsdWVHcm91cGVkID0gZmFsc2UsIGluZGV4ID0gJycpIHtcclxuICAgIGZpZWxkQXJyYXkuZm9yRWFjaCgoZmllbGQsIGkpID0+IHtcclxuICAgICAgY29uc3QgZmllbGRJbmRleCA9IGluZGV4ID8gYCR7aW5kZXh9LiR7aSArIDF9YCA6IGAke2l9YDtcclxuXHJcbiAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLnBhdGNoRmllbGRQcm9wZXJ0eShmaWVsZCk7XHJcbiAgICAgIGlmICh0eXBlb2YgZmllbGQuVmFsdWUgPT09IFwic3RyaW5nXCIgJiYgZmllbGQuVmFsdWUuaW5kZXhPZihcIi5cIikgIT09IC0xKSB7XHJcbiAgICAgICAgaWYgKFsnemdyaWQnLCAnenRyZWUnLCAnemltZycsICd0ZXh0YXJlYWpzb24nLCAnemdhbnR0Y2hhcnQnXS5pbmRleE9mKGZpZWxkLlR5cGUpID09PSAtMSkge1xyXG4gICAgICAgICAgY29uc29sZS53YXJuKFwiRm9ybUNvbnRyb2wgLSBpbnZhbGlkIGZpZWxkIHZhbHVlXCIsIGZpZWxkLlZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgenVkZkdyb3VwID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV07XHJcblxyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLlZhbHVlKSkge1xyXG4gICAgICAgICAgLy8gaW5zZXJ0IG11bHRpdmFsdWVncm91cCB0byB0aGUgY2FyZCB2YWx1ZSBpZiB0cnVlXHJcbiAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlR3JvdXBlZCA9IGZpZWxkLlR5cGUgPT0gQ29tcG9uZW50VHlwZS5ncm91cGluZyA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgIHRoaXMubG9hZGVkRmllbGRzU2VxdWVuY2VbZmllbGRJbmRleF0gPSB7XHJcbiAgICAgICAgICAgIG5hbWU6IGZpZWxkLk11bHRpVmFsdWVkR3JvdXAgPyBgJHt0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkLk5hbWUpfSR7dGhpcy5wcmVmaXhWYWx1ZU9wdGlvbn1gIDogYCR7dGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZC5OYW1lKX1gLFxyXG4gICAgICAgICAgICBsYWJlbDogZmllbGQuVGl0bGUsXHJcbiAgICAgICAgICAgIHR5cGU6IGZpZWxkLlR5cGUsXHJcbiAgICAgICAgICAgIGlzTXVsdGlWYWx1ZUdyb3VwOiBmaWVsZC5NdWx0aVZhbHVlZEdyb3VwID8/IGZhbHNlLFxyXG4gICAgICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpc1Zpc2libGU6IGZpZWxkLlZpc2libGUgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIGlzUmVxdWlyZWQ6IGZpZWxkLklzUmVxdWlyZWQgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgIGlzUmVhZE9ubHk6IGZpZWxkLlJlYWRPbmx5ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlVHlwZTogZmllbGQuenVkZkRhdGFTb3VyY2VUeXBlID8/IG51bGwgLy92YWx1ZSBha2EgbWFudWFsLCB1c2VyLCByZXNvdXJjZSBha2EgcmVzb3VyY2VcclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgaWYgKGZpZWxkLk11bHRpVmFsdWVkR3JvdXApIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRNdWx0aVZhbHVlR3JvdXAoZmllbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9scyhmaWVsZC5WYWx1ZSwgZm9ybUNvbnRyb2xzLCBmaWVsZC5OYW1lLCBmaWVsZC5NdWx0aVZhbHVlZEdyb3VwLCBmaWVsZFZhbHVlR3JvdXBlZCwgZmllbGRJbmRleCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgLy8gYmVmb3JlIGdlbmVyYXRlIEZvcm1Db250cm9sLCB3ZSBuZWVkIHRvIGFkZCAyIGF0dHJpYnV0ZSB0byB0aGUgZmllbGQgd2hlbiByZW5kZXIuXHJcbiAgICAgICAgICAvLyB0aGlzIGZvciBsYXRlciBvbiwgd2UgY2FuIGVhc2lseSBrbm93IHRoaXMgZmllbGQgYmVsb25nIHRvIHdoaWNoIHp1ZGYgYW5kIHVuZGVyIHdoaWNoIGNvbnRhaW5lci5cclxuICAgICAgICAgIGlmIChjb250YWluZXJOYW1lKSB7XHJcbiAgICAgICAgICAgIGZpZWxkWydjb250YWluZXJOYW1lJ10gPSBjb250YWluZXJOYW1lO1xyXG4gICAgICAgICAgICBpZiAoIXp1ZGZHcm91cFtjb250YWluZXJOYW1lXSkge1xyXG4gICAgICAgICAgICAgIHp1ZGZHcm91cFtjb250YWluZXJOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgaXNGb3JtQ29udHJvbCA9IFpDb21wb25lbnRIZWxwZXIuaXNGb3JtQ29udHJvbChmaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmlzVmlzaWJsZUZvcm1Db250cm9sKHRoaXMsIGZpZWxkKTtcclxuICAgICAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBaQ29tcG9uZW50SGVscGVyLmlzUmVxdWlyZWRGb3JtQ29udHJvbCh0aGlzLCBmaWVsZCk7XHJcblxyXG4gICAgICAgICAgaWYgKGlzRm9ybUNvbnRyb2wgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZEZpZWxkc1NlcXVlbmNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkZWRGaWVsZHNTZXF1ZW5jZSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmllbGQuVHlwZSA9PT0gJ3p1aXNlbGVjdG11bHRpcGxlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmluY3JlbWVudENvbXBvbmVudENvdW50ZXIoJ3p1ZGYnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaWVsZC5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZC5OYW1lLCBjb250YWluZXJOYW1lKTtcclxuICAgICAgICAgICAgaWYgKGZpZWxkLlZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgZmllbGQuVmFsdWUgPSB0aGlzLmdlbmVyYXRlRm9ybUNvbnRyb2xOYW1lKGZpZWxkLlZhbHVlLCBjb250YWluZXJOYW1lKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkZWRGaWVsZHNTZXF1ZW5jZVtmaWVsZEluZGV4XSA9IHtcclxuICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiBmaWVsZC5MYWJlbCxcclxuICAgICAgICAgICAgICB0eXBlOiBmaWVsZC5UeXBlLFxyXG4gICAgICAgICAgICAgIGlzTXVsdGlWYWx1ZUdyb3VwOiBpc011bHRpVmFsdWVHcm91cCxcclxuICAgICAgICAgICAgICBpc0dyb3VwZWQ6IGZpZWxkVmFsdWVHcm91cGVkLFxyXG4gICAgICAgICAgICAgIGlzVmlzaWJsZTogZmllbGQuVmlzaWJsZSA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICBpc1JlcXVpcmVkOiBmaWVsZC5Jc1JlcXVpcmVkID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGlzUmVhZE9ubHk6IGZpZWxkLlJlYWRPbmx5ID8/IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGRhdGFTb3VyY2VUeXBlOiBmaWVsZC56dWRmRGF0YVNvdXJjZVR5cGUgPz8gbnVsbCAvL3ZhbHVlIGFrYSBtYW51YWwsIHVzZXIsIHJlc291cmNlIGFrYSByZXNvdXJjZVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lck5hbWUpIHtcclxuICAgICAgICAgICAgICBpZiAoIXp1ZGZHcm91cFtjb250YWluZXJOYW1lXS5pbmNsdWRlcyhmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHp1ZGZHcm91cFtjb250YWluZXJOYW1lXS5wdXNoKGZpZWxkLlZhbHVlKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gc2V0IHRoZSBsaXN0IG9mIGRyb3Bkb3duIG9wdGlvbiB0byB0aGUgdmFyaWFibGVcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93blR5cGUoZmllbGQuVHlwZSkgJiYgZmllbGQuWkRhdGFPcHRpb25OYW1lICYmIGZpZWxkLkRyb3Bkb3duT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAuekRhdGFbZmllbGQuWkRhdGFPcHRpb25OYW1lXSA9IE9iamVjdC5hc3NpZ24oW10sIGV2YWwoJ3RoaXMuJyArIGZpZWxkLkRyb3Bkb3duT3B0aW9ucykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0Ryb3Bkb3duVHlwZShmaWVsZC5UeXBlKSAmJiBmaWVsZC56dWRmTGlua2VkQ29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgLy8ga2VlcCBhIGxpc3Qgb2YgbGlua2VkIENvbXBvbmVudCwgbGF0ZXIgd2lsbCBiZSB1c2VkIGluIG9uQ2hhbmdlIGF0IGlucHV0ZmllbGRiYXNlLlxyXG4gICAgICAgICAgICAgIGlmICghenVkZkdyb3VwWydsaW5rZWRDb21wb25lbnQnXSkge1xyXG4gICAgICAgICAgICAgICAgenVkZkdyb3VwWydsaW5rZWRDb21wb25lbnQnXSA9IFtdO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgenVkZkdyb3VwWydsaW5rZWRDb21wb25lbnQnXS5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmaWVsZC5WYWx1ZSxcclxuICAgICAgICAgICAgICAgIGxpbmtlZENvbXBvbmVudDogZmllbGQuenVkZkxpbmtlZENvbXBvbmVudFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAvLyBrZWVwIGEgY29weSBvZiBTZWxlY3RPcHRpb25zIHRvIG9yaWdpbmFsU2VsZWN0T3B0aW9ucyhzYW1lIGFzIG9uY2hhbmdlKVxyXG4gICAgICAgICAgICAgIC8vIGNsZWFyIHRoZSBTZWxlY3Rpb25PcHRpb24gc2luY2UgaXQgd29udCBiZSB1c2VkIHdoZW4gZmlyc3QgaW5pdCwgdW50aWwgcGFyZW50IGRyb3Bkb3duIG9wdGlvbiBiZWVuIHNlbGVjdGVkLlxyXG4gICAgICAgICAgICAgIGZpZWxkWydvcmlnaW5hbFNlbGVjdE9wdGlvbnMnXSA9IE9iamVjdC5hc3NpZ24oW10sIGZpZWxkLlNlbGVjdE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgIGZpZWxkLlNlbGVjdE9wdGlvbnMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYXV0byBhcHBlbmQgY3VycmVudCB1c2VyIHRvIHRoZSB6bW9kZWwgYmFzZSBvbiBmaWVsZCBlbGVtZW50IGF0dHJpYnV0ZSBcInp1ZGZTZXREZWZhdWx0VXNlclwiXHJcbiAgICAgICAgICAgIGlmIChmaWVsZC56dWRmU2V0RGVmYXVsdFVzZXIpIHtcclxuICAgICAgICAgICAgICBpZiAoIXp1ZGZHcm91cFsnZmllbGRSZXF1aXJlZERlZmF1bHRVc2VyJ10pIHtcclxuICAgICAgICAgICAgICAgIHp1ZGZHcm91cFsnZmllbGRSZXF1aXJlZERlZmF1bHRVc2VyJ10gPSBbXTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIGtlZXAgYSBsaXN0IG9mIGRlZmF1bHQgdXNlciBuZWVkIHRvIGJlIGZpbGxlZCBpbiB0aGUgc2NvcGVcclxuICAgICAgICAgICAgICB6dWRmR3JvdXBbJ2ZpZWxkUmVxdWlyZWREZWZhdWx0VXNlciddLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmllbGROYW1lOiBmaWVsZC5OYW1lLFxyXG4gICAgICAgICAgICAgICAgY2hpbGRGaWVsZHM6IGZpZWxkLkNoaWxkRmllbGRzXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHZhbGlkYXRvciBmb3IgdGhlIGNvbXBvbmVudFxyXG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gWkNvbXBvbmVudEhlbHBlci5nZXRWYWxpZGF0b3JzKGZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQuVmFsdWVdID0gbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgIHp1ZGZHcm91cC56TW9kZWxbZmllbGQuVmFsdWVdLFxyXG4gICAgICAgICAgICAgIHZhbGlkYXRvcnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKFpDb21wb25lbnRIZWxwZXIuaGFzQ0NGaWVsZChmaWVsZC5UeXBlKSkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNjVmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0Q0NWYWxpZGF0b3JzKGZpZWxkLCBpc1Zpc2libGUsIGlzUmVxdWlyZWQpO1xyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5DQ1ZhbHVlXSA9IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAgIHp1ZGZHcm91cC56TW9kZWxbZmllbGQuQ0NWYWx1ZV0sXHJcbiAgICAgICAgICAgICAgICBjY1ZhbGlkYXRvcnNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIG9uY2hhbmdlIGhhbmRsaW5nP1xyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBmaWVsZEFycmF5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVtb3ZlcyB0aGUgZm9ybSBjb250cm9scyBmcm9tIHRoZSBmb3JtIGdyb3VwIGFuZCByZXNldHMgdGhlIGNvbXBvbmVudCdzIGRhdGEgYW5kIGRpc3BsYXkgZWxlbWVudCBtb2RlbC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBjbGVhckZvcm1Db250cm9sKCkge1xyXG4gICAgLy8gUmVtb3ZlIGVhY2ggZm9ybSBjb250cm9sIGZyb20gdGhlIGZvcm0gZ3JvdXBcclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUgJiYgdGhpcy5kYXRhLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5kYXRhLlZhbHVlLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnJlbW92ZUNvbnRyb2woZGF0YS5WYWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlc2V0IHRoZSBjb21wb25lbnQncyBkYXRhIGFuZCBkaXNwbGF5IGVsZW1lbnQgbW9kZWxcclxuICAgIHRoaXMuZGF0YS5WYWx1ZSA9IHRoaXMuaW5pdGlhbERhdGFWYWx1ZTtcclxuICAgIHRoaXMuZGlzcGxheUVsZW1lbnRNb2RlbCA9IFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZm9ybSBmaWVsZHMgZm9yIHRoZSBjb21wb25lbnQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7b2JqZWN0W119IC0gQW4gYXJyYXkgb2YgZm9ybSBmaWVsZCBvYmplY3RzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbCgpIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGEuVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB6TW9kZWwgdmFsdWVzIG9mIGEgZm9ybSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgbW9kZWwgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7Wkdyb3VwfSBbZ3JvdXA9dGhpcy5ncm91cF0gLSBUaGUgZm9ybSBncm91cCB0byB1cGRhdGUuXHJcbiAgICogQHBhcmFtIHtvYmplY3R9IG1vZGVsRGF0YSAtIFRoZSBtb2RlbCBkYXRhIHRvIGFwcGx5IHRvIHRoZSBmb3JtIGdyb3VwLlxyXG4gICAqIEByZXR1cm5zIHt2b2lkfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRGb3JtRmllbGR6TW9kZWwoZ3JvdXAgPSB0aGlzLmdyb3VwLCBtb2RlbERhdGEpIHtcclxuICAgIC8vIEFkZCB0aGUgY29tcG9uZW50IHByZWZpeCB0byB0aGUgbW9kZWwgZGF0YSBwcm9wZXJ0eSBuYW1lc1xyXG4gICAgY29uc3QgcGF0Y2hlZE1vZGVsRGF0YSA9IHRoaXMuYWRkWk1vZGVsUHJvcGVydHlQcmVmaXgobW9kZWxEYXRhKTtcclxuXHJcbiAgICAvLyBVcGRhdGUgdGhlIHpNb2RlbCB2YWx1ZXMgb2YgdGhlIGZvcm0gZ3JvdXBcclxuICAgIE9iamVjdC5hc3NpZ24oZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbCwgcGF0Y2hlZE1vZGVsRGF0YSk7XHJcblxyXG4gICAgLy8gVXBkYXRlIGdyaWQgdmFsdWVzIGZvciBhbnkgYXJyYXlzIGluIHRoZSBtb2RlbCBkYXRhIGJhc2Ugb24ga2NhcmQgY29tcG9uZW50LlxyXG4gICAgZm9yIChjb25zdCBtb2RlbCBpbiBwYXRjaGVkTW9kZWxEYXRhKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhdGNoZWRNb2RlbERhdGFbbW9kZWxdKSkge1xyXG4gICAgICAgIGNvbnN0IGdyaWRWYWx1ZSA9IG1vZGVsLmVuZHNXaXRoKHRoaXMucHJlZml4VmFsdWVPcHRpb24pID8gbW9kZWwgOiBgJHttb2RlbH0ke3RoaXMucHJlZml4VmFsdWVPcHRpb259YDtcclxuICAgICAgICBsZXQgZ3JpZERhdGFTb3VyY2UgPSBtb2RlbDtcclxuXHJcbiAgICAgICAgaWYgKG1vZGVsLmVuZHNXaXRoKHRoaXMucHJlZml4VmFsdWVPcHRpb24pKSB7XHJcbiAgICAgICAgICBncmlkRGF0YVNvdXJjZSA9IG1vZGVsLnNsaWNlKDAsIC10aGlzLnByZWZpeFZhbHVlT3B0aW9uLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBncmlkRGF0YVNvdXJjZSArPSB0aGlzLnByZWZpeERhdGFTb3VyY2VOYW1lO1xyXG4gICAgICAgIC8vY29uc3QgY29tcG9uZW50ID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnRCeVZhbHVlKHRoaXMuZ3JvdXAsIG1vZGVsKTtcclxuICAgICAgICAvL2lmIChjb21wb25lbnQ/LmRhdGE/LlR5cGUgPT09ICdrY2FyZCcgfHwgY29tcG9uZW50Py5kYXRhPy5UeXBlID09PSAnemdyaWQnKSB7XHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBkYXRhIHNvdXJjZSBmb3IgdGhlIGdyaWRcclxuICAgICAgICBncm91cFtncmlkRGF0YVNvdXJjZV0gPSBwYXRjaGVkTW9kZWxEYXRhW21vZGVsXTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBncmlkIHZhbHVlXHJcbiAgICAgICAgaWYgKGdyb3VwW2dyaWRWYWx1ZV0pIHtcclxuICAgICAgICAgIGdyb3VwW2dyaWRWYWx1ZV0uc2V0RGF0YShncm91cFtncmlkRGF0YVNvdXJjZV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGBVbmFibGUgdG8gZmluZCB6dWRmIGdyaWRWYWx1ZTogJHtncmlkVmFsdWV9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgLy99XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIHRoZSBmb3JtIGdyb3VwIG1vZGVsXHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgZm9ybUdyb3VwLnBhdGNoVmFsdWUoZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQWRkIHRoZSBjb21wb25lbnQgcHJlZml4IHRvIHByb3BlcnR5IG5hbWVzIGluIGFuIG9iamVjdC5cclxuICpcclxuICogQHBhcmFtIHsqfSBtb2RlbERhdGEgLSBUaGUgb2JqZWN0IHRvIHVwZGF0ZS5cclxuICogQHBhcmFtIHsqfSBbY29udGFpbmVyUHJlZml4XSAtIE9wdGlvbmFsIHBhcmFtZXRlciBpbmRpY2F0aW5nIHRoZSBwcmVmaXggdG8gdXNlIGZvciBwcm9wZXJ0aWVzIGluIG5lc3RlZCBvYmplY3RzLlxyXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHVwZGF0ZWQgb2JqZWN0LlxyXG4gKi9cclxuICBwcml2YXRlIGFkZFpNb2RlbFByb3BlcnR5UHJlZml4KG1vZGVsRGF0YTogYW55LCBjb250YWluZXJQcmVmaXg/OiBhbnkpOiBhbnkge1xyXG4gICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCB0byBzdG9yZSB0aGUgdXBkYXRlZCBkYXRhXHJcbiAgICBjb25zdCB1cGRhdGVkTW9kZWxEYXRhID0ge307XHJcblxyXG4gICAgaWYgKHR5cGVvZiBtb2RlbERhdGEgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBtb2RlbERhdGEgPT09ICdudW1iZXInIHx8IFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkobW9kZWxEYXRhKSkge1xyXG4gICAgICByZXR1cm4gbW9kZWxEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExvb3AgdGhyb3VnaCBlYWNoIHByb3BlcnR5IGluIHRoZSBpbnB1dCBvYmplY3RcclxuICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIGluIG1vZGVsRGF0YSkge1xyXG4gICAgICBjb25zdCBkYXRhVmFsdWUgPSBtb2RlbERhdGFbcHJvcGVydHlOYW1lXTtcclxuXHJcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm9wZXJ0eSB2YWx1ZSBpcyBhbiBhcnJheVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVmFsdWUpKSB7XHJcbiAgICAgICAgLy8gSGFuZGxlIGFycmF5cyByZWN1cnNpdmVseVxyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRBcnJheSA9IFtdO1xyXG5cclxuICAgICAgICAvLyBMb29wIHRocm91Z2ggZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheVxyXG4gICAgICAgIGZvciAoY29uc3QgYXJyYXlFbGVtZW50IG9mIGRhdGFWYWx1ZSkge1xyXG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2FsbCB0aGlzIG1ldGhvZCB0byB1cGRhdGUgdGhlIHByb3BlcnRpZXMgb2YgZWFjaCBlbGVtZW50IGluIHRoZSBhcnJheVxyXG4gICAgICAgICAgY29uc3QgdXBkYXRlZEVsZW1lbnQgPSB0aGlzLmFkZFpNb2RlbFByb3BlcnR5UHJlZml4KGFycmF5RWxlbWVudCwgcHJvcGVydHlOYW1lKTtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgdGhlIHVwZGF0ZWQgZWxlbWVudCB0byB0aGUgYXJyYXlcclxuICAgICAgICAgIHVwZGF0ZWRBcnJheS5wdXNoKHVwZGF0ZWRFbGVtZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgdXBkYXRlZCBhcnJheSB0byB0aGUgb3V0cHV0IG9iamVjdFxyXG4gICAgICAgIGxldCBwcmVmaXhlZFByb3BlcnR5TmFtZTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lclByZWZpeCkge1xyXG4gICAgICAgICAgcHJlZml4ZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aCh0aGlzLmNvbXBvbmVudFByZWZpeCkgPyBwcm9wZXJ0eU5hbWUgOiBgJHt0aGlzLmNvbXBvbmVudFByZWZpeH1fJHtjb250YWluZXJQcmVmaXh9XyR7cHJvcGVydHlOYW1lfWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHByZWZpeGVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgodGhpcy5jb21wb25lbnRQcmVmaXgpID8gcHJvcGVydHlOYW1lIDogYCR7dGhpcy5jb21wb25lbnRQcmVmaXh9XyR7cHJvcGVydHlOYW1lfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB1cGRhdGVkTW9kZWxEYXRhW3ByZWZpeGVkUHJvcGVydHlOYW1lXSA9IHVwZGF0ZWRBcnJheTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0eXBlb2YgZGF0YVZhbHVlID09PSAnb2JqZWN0JyAmJiAhZGF0YVZhbHVlKSB7XHJcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBvYmplY3RzIHJlY3Vyc2l2ZWx5XHJcbiAgICAgICAgY29uc3QgdXBkYXRlZE5lc3RlZE9iamVjdCA9IHRoaXMuYWRkWk1vZGVsUHJvcGVydHlQcmVmaXgoZGF0YVZhbHVlLCBwcm9wZXJ0eU5hbWUpO1xyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIHVwZGF0ZWQgbmVzdGVkIG9iamVjdCB0byB0aGUgb3V0cHV0IG9iamVjdFxyXG4gICAgICAgIGNvbnN0IHByZWZpeGVkUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgodGhpcy5jb21wb25lbnRQcmVmaXgpID8gcHJvcGVydHlOYW1lIDogYCR7dGhpcy5jb21wb25lbnRQcmVmaXh9XyR7cHJvcGVydHlOYW1lfWA7XHJcbiAgICAgICAgdXBkYXRlZE1vZGVsRGF0YVtwcmVmaXhlZFByb3BlcnR5TmFtZV0gPSB1cGRhdGVkTmVzdGVkT2JqZWN0O1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIC8vIEFkZCB0aGUgcHJvcGVydHkgdG8gdGhlIG91dHB1dCBvYmplY3Qgd2l0aCB0aGUgY29tcG9uZW50IHByZWZpeFxyXG4gICAgICAgIGxldCBwcmVmaXhlZFByb3BlcnR5TmFtZTtcclxuICAgICAgICBpZiAoY29udGFpbmVyUHJlZml4KSB7XHJcbiAgICAgICAgICBwcmVmaXhlZFByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS5zdGFydHNXaXRoKHRoaXMuY29tcG9uZW50UHJlZml4KSA/IHByb3BlcnR5TmFtZSA6IGAke3RoaXMuY29tcG9uZW50UHJlZml4fV8ke2NvbnRhaW5lclByZWZpeH1fJHtwcm9wZXJ0eU5hbWV9YDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcHJlZml4ZWRQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUuc3RhcnRzV2l0aCh0aGlzLmNvbXBvbmVudFByZWZpeCkgPyBwcm9wZXJ0eU5hbWUgOiBgJHt0aGlzLmNvbXBvbmVudFByZWZpeH1fJHtwcm9wZXJ0eU5hbWV9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdXBkYXRlZE1vZGVsRGF0YVtwcmVmaXhlZFByb3BlcnR5TmFtZV0gPSBkYXRhVmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm4gdGhlIHVwZGF0ZWQgb2JqZWN0XHJcbiAgICByZXR1cm4gdXBkYXRlZE1vZGVsRGF0YTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRaTW9kZWxBc1N0cmluZygpIHtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmdldFpNb2RlbCgpKTtcclxuICB9XHJcblxyXG4gIENvbXBvbmVudElzVmlzaWJsZShmaWVsZDogWkZpZWxkKTogYW55IHtcclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLkNvbXBvbmVudElzVmlzaWJsZShmaWVsZCwgdGhpcy5ncm91cCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RW5hYmxlID0gKHN0YXR1czogYm9vbGVhbikgPT4ge1xyXG4gICAgdGhpcy5jb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkgPSAhc3RhdHVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFZpc2libGUgPSAoc3RhdHVzOiBib29sZWFuKSA9PiB7XHJcbiAgICB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlID0gc3RhdHVzO1xyXG4gICAgdGhpcy5kYXRhLlZpc2libGUgPSBzdGF0dXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0UmVxdWlyZSA9IChzdGF0dXM6IGJvb2xlYW4pID0+IHtcclxuICAgIHRoaXMuY29tcG9uZW50UHJvcGVydGllcy5pc1JlcXVpcmVkID0gc3RhdHVzO1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5jaGFuZ2VWYWxpZGF0b3Ioc3RhdHVzLCB0aGlzLmdyb3VwLCB0aGlzLmRhdGEuVmFsdWUsIHRoaXMuY29tcG9uZW50UHJvcGVydGllcywgVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YS5UeXBlID09PSAnenRleHRlZGl0b3InKSB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfRXhjbHVkZVdoaXRlU3BhY2VzQW5kSFRNTFRhZ3MpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIFpDb21wb25lbnRIZWxwZXIuY2hhbmdlVmFsaWRhdG9yKHN0YXR1cywgdGhpcy5ncm91cCwgdGhpcy5kYXRhLlZhbHVlLCB0aGlzLmNvbXBvbmVudFByb3BlcnRpZXMsIFpDb21wb25lbnRIZWxwZXIucmVxdWlyZWRWYWxpZGF0b3JfRXhjbHVkZVdoaXRlU3BhY2VzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdlbmVyYXRlcyB0aGUgbmFtZSBvZiBhIGZvcm0gY29udHJvbCBiYXNlZCBvbiBpdHMgdHlwZSwgbmFtZSwgYW5kIGNvbnRhaW5lciBuYW1lLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250cm9sTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBmb3JtIGNvbnRyb2wuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRhaW5lck5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHRoYXQgdGhlIGZvcm0gY29udHJvbCBpcyBpbi5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZ2VuZXJhdGVkIG5hbWUgb2YgdGhlIGZvcm0gY29udHJvbC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoY29udHJvbE5hbWU6IHN0cmluZywgY29udGFpbmVyTmFtZT86IHN0cmluZykge1xyXG4gICAgbGV0IG1haW5QcmVmaXggPSBbdGhpcy5kYXRhLlR5cGUsIHRoaXMuZGF0YS5OYW1lLCBjb250YWluZXJOYW1lID8/IG51bGxdLmZpbHRlcihCb29sZWFuKS5qb2luKCdfJyk7XHJcbiAgICBpZiAodGhpcy5kYXRhLklzR2VuZXJhdGVGb3JtQ29udHJvbE5hbWVCeUNvbnRhaW5lck5hbWUgIT0gdW5kZWZpbmVkICYmIHRoaXMuZGF0YS5Jc0dlbmVyYXRlRm9ybUNvbnRyb2xOYW1lQnlDb250YWluZXJOYW1lID09IGZhbHNlKSB7XHJcbiAgICAgIG1haW5QcmVmaXggPSBbdGhpcy5kYXRhLlR5cGUsIHRoaXMuZGF0YS5OYW1lXS5maWx0ZXIoQm9vbGVhbikuam9pbignXycpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIG5hbWUgaGFzIGJlZW4gcHJlZml4ZWQuXHJcbiAgICBpZiAoY29udHJvbE5hbWUuaW5jbHVkZXMobWFpblByZWZpeCkpIHtcclxuICAgICAgcmV0dXJuIGNvbnRyb2xOYW1lO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFdlIHRyeSB0byBzcGxpdCB0aGUgbmFtZSBhbmQgdXNlIHRoZSBsYXN0IHNlZ21lbnQuXHJcbiAgICAgIC8vIFNvbWV0aW1lcyB0aGUgY29udHJvbCBuYW1lIGNhbiBiZSB3aXRob3V0IHRoZSBjb250YWluZXIgbmFtZSwgc28gd2Ugc3BsaXQgYW5kIHVzZSB0aGUgbmV3IG1haW4gcHJlZml4LlxyXG4gICAgICBjb25zdCBjb250cm9sTmFtZVNlZ21lbnQgPSBjb250cm9sTmFtZS5zcGxpdCgnXycpO1xyXG4gICAgICBjb250cm9sTmFtZSA9IGNvbnRyb2xOYW1lU2VnbWVudFtjb250cm9sTmFtZVNlZ21lbnQubGVuZ3RoIC0gMV07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFttYWluUHJlZml4LCBjb250cm9sTmFtZV0uam9pbignXycpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXBwZW5kcyBhIHByZWZpeCB0byB0aGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBmaWVsZHMgcmVjdXJzaXZlbHkuXHJcbiAgICogQHBhcmFtIHtaRmllbGRbXX0gZmllbGRzIC0gVGhlIGZpZWxkcyB0byBiZSBwcmVmaXhlZC5cclxuICAgKiBAcGFyYW0ge2FueX0gcHJlZml4IC0gVGhlIHByZWZpeCB0byBiZSBhZGRlZC5cclxuICAgKi9cclxuICBwcml2YXRlIGFwcGVuZFByZWZpeChmaWVsZHM6IFpGaWVsZFtdLCBwcmVmaXg6IGFueSkge1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmFwcGVuZFByZWZpeChmaWVsZC5WYWx1ZSwgcHJlZml4KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBmaWVsZC5OYW1lID0gW3ByZWZpeCwgZmllbGQuTmFtZV0uam9pbignXycpO1xyXG4gICAgICAgIGlmIChmaWVsZC5UeXBlICE9ICd6YnV0dG9ucycpIHtcclxuICAgICAgICAgIGZpZWxkLlZhbHVlID0gW3ByZWZpeCwgZmllbGQuVmFsdWVdLmpvaW4oJ18nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmllbGQuU3ViVHlwZSA9IHByZWZpeDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBmb3JtIGZpZWxkcyB3aXRoIHRoZSBkaXNwbGF5IGVsZW1lbnQgbW9kZWwuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSB1cGRhdGVGb3JtRmllbGQoKSB7XHJcbiAgICB0aGlzLmRhdGEuVmFsdWUgPSB0aGlzLmRpc3BsYXlFbGVtZW50TW9kZWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHZhbHVlIG9mIGEgY29udGFpbmVyIG1vZGVsIGluIHRoZSBmb3JtLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250YWluZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB0byByZXRyaWV2ZSB0aGUgdmFsdWUgZnJvbS5cclxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSAtIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjb250YWluZXIgbW9kZWwgdmFsdWVzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRDb250YWluZXJNb2RlbFZhbHVlKGNvbnRhaW5lck5hbWU6IHN0cmluZyk6IE9iamVjdCB7XHJcbiAgICAvLyBHZXQgdGhlIGNvbnRhaW5lciBlbGVtZW50IGFuZCBjcmVhdGUgYW4gZW1wdHkgb2JqZWN0IGZvciB0aGUgbW9kZWwgdmFsdWVzLlxyXG4gICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdW2NvbnRhaW5lck5hbWVdO1xyXG4gICAgY29uc3QgbW9kZWxWYWx1ZSA9IHt9O1xyXG5cclxuICAgIC8vIEZsYWcgdG8ga2VlcCB0cmFjayBpZiBhbGwgcmVxdWlyZWQgZmllbGRzIGluIHRoZSBncm91cCBhcmUgdmFsaWQuXHJcbiAgICBsZXQgdmFsaWRHcm91cEZpZWxkcyA9IHRydWU7XHJcblxyXG4gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggZWxlbWVudCBpbiB0aGUgY29udGFpbmVyIGFuZCByZXRyaWV2ZSBpdHMgdmFsdWUgZnJvbSB0aGUgek1vZGVsLlxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb250YWluZXJFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250YWluZXJFbGVtZW50W2ldO1xyXG4gICAgICBjb25zdCBlbGVtZW50Q29tcG9uZW50ID0gWkNvbXBvbmVudEhlbHBlci5nZXRDb21wb25lbnRCeVZhbHVlKHRoaXMuZ3JvdXAsIGVsZW1lbnQpO1xyXG4gICAgICBsZXQgek1vZGVsVmFsdWUgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS56TW9kZWxbZWxlbWVudF07XHJcblxyXG4gICAgICAvLyBDaGVjayBpZiB0aGUgZWxlbWVudCBpcyByZXF1aXJlZCBhbmQgaGFzIGEgdmFsdWUsIGlmIG5vdCBzaG93IGFuIGVycm9yIG1lc3NhZ2UuXHJcbiAgICAgIGlmIChlbGVtZW50Q29tcG9uZW50LmNvbXBvbmVudFByb3BlcnRpZXMuaXNSZXF1aXJlZCAmJiBaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KHpNb2RlbFZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLnNob3coZWxlbWVudENvbXBvbmVudC5kYXRhLkxhYmVsICsgJyBpcyByZXF1aXJlZCBmaWVsZC4gUGxlYXNlIGZpbGwgaW4gYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMgYmVmb3JlIGFkZGluZy4nLCAndG9wJywgdHJ1ZSwgMzAwMCwgJ2RhbmdlcicpO1xyXG4gICAgICAgIHZhbGlkR3JvdXBGaWVsZHMgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENoZWNrIGlmIERyb3Bkb3duIFR5cGUsIGNoYW5nZSB6TW9kZWxWYWx1ZSB0byBkaXNwbGF5IHRleHQuXHJcbiAgICAgIGlmICh0aGlzLmlzRHJvcGRvd25UeXBlKGVsZW1lbnRDb21wb25lbnQuZGF0YS5UeXBlKSkge1xyXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duT3B0aW9ucyA9IGVsZW1lbnRDb21wb25lbnQuZ2V0SXRlbXNEYXRhKCk7XHJcbiAgICAgICAgZHJvcGRvd25PcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgIGlmIChvcHRpb25bZWxlbWVudENvbXBvbmVudC5pdGVtVmFsdWVGaWVsZF0gPT09IHpNb2RlbFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHpNb2RlbFZhbHVlID0gb3B0aW9uW2VsZW1lbnRDb21wb25lbnQuaXRlbVRleHRGaWVsZF1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQWRkIHRoZSB2YWx1ZSB0byB0aGUgbW9kZWwgb2JqZWN0LlBsZWFzZSBmaWxsIGluIGFsbCB0aGUgcmVxdWlyZWQgZmllbGRzIGJlZm9yZSBhZGRpbmdcclxuICAgICAgbW9kZWxWYWx1ZVtlbGVtZW50XSA9IHpNb2RlbFZhbHVlO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBJZiB0aGVyZSBhcmUgaW52YWxpZCBmaWVsZHMgaW4gdGhlIGdyb3VwLCByZXR1cm4gYW4gZW1wdHkgbW9kZWwgb2JqZWN0LlxyXG4gICAgaWYgKCF2YWxpZEdyb3VwRmllbGRzKSB7XHJcbiAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXR1cm4gdGhlIG1vZGVsIG9iamVjdCB3aXRoIHRoZSBjb250YWluZXIgdmFsdWVzLlxyXG4gICAgcmV0dXJuIG1vZGVsVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIENsZWFycyB0aGUgdmFsdWUgb2YgYWxsIGZpZWxkIGVsZW1lbnRzIGluc2lkZSBhIGNvbnRhaW5lci5cclxuICAqIEBwYXJhbSB7c3RyaW5nfSBjb250YWluZXJOYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciB3aG9zZSBmaWVsZHMgd2lsbCBiZSBjbGVhcmVkLlxyXG4gICovXHJcbiAgcHVibGljIGNsZWFyQ29udGFpbmVyRmllbGRFbGVtZW50VmFsdWUoY29udGFpbmVyTmFtZTogc3RyaW5nKSB7XHJcbiAgICAvLyBHZXQgdGhlIGNvbnRhaW5lciBlbGVtZW50IGZyb20gdGhlIGNvbXBvbmVudCdzIGdyb3VwXHJcbiAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV1bY29udGFpbmVyTmFtZV07XHJcbiAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBmaWVsZCBlbGVtZW50IGluIHRoZSBjb250YWluZXJcclxuICAgIGNvbnRhaW5lckVsZW1lbnQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgLy8gU2V0IHRoZSBtb2RlbCB2YWx1ZSBvZiB0aGUgZmllbGQgZWxlbWVudCB0byBudWxsLCBhbmQgZm9yY2UgdXBkYXRlIHRoZSB2aWV3XHJcbiAgICAgIHRoaXMuc2V0TW9kZWxWYWx1ZShlbGVtZW50LCBudWxsLCB0cnVlKTtcclxuXHJcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS5mb3JtO1xyXG4gICAgICBPYmplY3Qua2V5cyhmb3JtLmNvbnRyb2xzKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybS5jb250cm9sc1trZXldO1xyXG4gICAgICAgIGNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICBjb250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIC0tLS0tLS0tLS09PT09PT09PT09PT09PT09PT09PSBNdWx0aSBWYWx1ZSBHcm91cCA9PT09PT09PT09PT09PT09PT09PS0tLS0tLS0tLS0qL1xyXG4gIC8qKlxyXG4gICAqIFNldHMgdXAgYSBtdWx0aS12YWx1ZSBncm91cCwgd2hpY2ggaXMgYSBncmlkIG9mIGZpZWxkcyB0aGF0IGNhbiBoYXZlIG11bHRpcGxlIHJvd3MuXHJcbiAgICogQHBhcmFtIGRhdGEgLSBUaGUgY29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgbXVsdGktdmFsdWUgZ3JvdXAuXHJcbiAgICogQHBhcmFtIGRhdGFJbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgZGF0YSBpbiB0aGUgZGlzcGxheU1vZGVsLiBPcHRpb25hbCwgdXNlZCB3aGVuIHVwZGF0aW5nIGV4aXN0aW5nIGRhdGEuXHJcbiAgICovXHJcbiAgcHVibGljIHNldE11bHRpVmFsdWVHcm91cChkYXRhOiBhbnksIGRhdGFJbmRleD86IGFueSkge1xyXG4gICAgLy8gTmVlZCB0byBkZWNsYXJlIG5hbWUsIHZhbHVlLCBkYXRhc291cmNlLCBjb2x1bW5maWVsZHMgYXR0cmlidXRlIGZvciBncmlkLlxyXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuZ2VuZXJhdGVGb3JtQ29udHJvbE5hbWUoZGF0YS5OYW1lKTtcclxuICAgIGNvbnN0IGdyaWRWYWx1ZU5hbWUgPSBgJHtuYW1lfSR7dGhpcy5wcmVmaXhWYWx1ZU9wdGlvbn1gO1xyXG4gICAgY29uc3QgZ3JpZERhdGFTb3VyY2VOYW1lID0gYCR7bmFtZX0ke3RoaXMucHJlZml4RGF0YVNvdXJjZU5hbWV9YDtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5GaWVsZHNOYW1lID0gYCR7bmFtZX0ke3RoaXMucHJlZml4Q29sdW1uRmllbGRzTmFtZX1gO1xyXG5cclxuICAgIC8vIEdlbmVyYXRlIGEgdW5pcXVlIG5hbWUgZm9yIHRoZSBtdWx0aS12YWx1ZSBncm91cCBzY29wZS5cclxuICAgIGNvbnN0IG11bHRpVmFsdWVHcm91cFNjb3BlTmFtZSA9IGBtdmdfJHtkYXRhLk5hbWV9YDtcclxuXHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbJ212Z2xpc3QnXSkge1xyXG4gICAgICB0aGlzLmdyb3VwWydtdmdsaXN0J10gPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBbJ212Z2xpc3QnXS5pbmNsdWRlcyhuYW1lKSkge1xyXG4gICAgICB0aGlzLmdyb3VwWydtdmdsaXN0J10ucHVzaChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDcmVhdGUgYSBwcm9wZXJ0eSBpbiB0aGUgZ3JvdXAgb2JqZWN0IGZvciB0aGUgbXVsdGktdmFsdWUgZ3JvdXAuXHJcbiAgICB0aGlzLmdyb3VwW211bHRpVmFsdWVHcm91cFNjb3BlTmFtZV0gPSBbXTtcclxuXHJcbiAgICAvLyBTdG9yZSB0aGUgZ3JpZCB2YWx1ZSBuYW1lIHRvIGJlIHVzZWQgaW4gZ2V0Wk1vZGVsIHRvIGdldCB0aGUgZ3JpZCBkYXRhLlxyXG4gICAgdGhpcy5tdWx0aVZhbHVlR3JvdXBHcmlkVmFsdWUgPSB0aGlzLm11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZSA/PyBbXTtcclxuICAgIHRoaXMubXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlLnB1c2goZ3JpZFZhbHVlTmFtZSk7XHJcblxyXG4gICAgLy8gTWFudWFsbHkgYWRkIGF0dHJpYnV0ZXMgdG8gdGhlIGdyaWQgZWxlbWVudCB0byBzcGVlZCB1cCBsb2FkaW5nLlxyXG4gICAgY29uc3QgZWxlbWVudCA9IHtcclxuICAgICAgXCJBZGRDb21tYW5kQnV0dG9uTmFtZVwiOiBcIkFkZFwiLFxyXG4gICAgICBcIkFsbG93RXhwb3J0XCI6IGZhbHNlLFxyXG4gICAgICBcIkFsbG93R3JpZERhdGFFeHBvcnRcIjogZmFsc2UsXHJcbiAgICAgIFwiQWxsb3dNdWx0aVNlbGVjdFwiOiBmYWxzZSxcclxuICAgICAgXCJBbGxvd1Jvd1NlbGVjdFwiOiBmYWxzZSxcclxuICAgICAgXCJBbGxvd1NhdmVTdGF0ZVwiOiBmYWxzZSxcclxuICAgICAgXCJDb2x1bW5GaWVsZHNcIjogJ2dyb3VwLicgKyBncmlkQ29sdW1uRmllbGRzTmFtZSxcclxuICAgICAgXCJEYXRhU291cmNlXCI6ICdncm91cC4nICsgZ3JpZERhdGFTb3VyY2VOYW1lLFxyXG4gICAgICBcIkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyXCI6IHRydWUsXHJcbiAgICAgIFwiRGlzYWJsZUdlbmVyYXRlQ29sdW1uQnlGb3JtXCI6IHRydWUsXHJcbiAgICAgIFwiRGl2Q2xhc3NcIjogJ2NvbC14cy0xMiBjb2wtc20tMTIgY29sLW1kLTEyIGNvbC1sZy0xMicsXHJcbiAgICAgIFwiRW5hYmxlQ3VzdG9tQWRkQ29tbWFuZFwiOiB0cnVlLFxyXG4gICAgICBcIkVuYWJsZUN1c3RvbVJlbW92ZUNvbW1hbmRcIjogdHJ1ZSxcclxuICAgICAgXCJFbmFibGVDdXN0b21SZXNldENvbW1hbmRcIjogdHJ1ZSxcclxuICAgICAgXCJFbmFibGVTYXZlR3JpZFN0YXRlXCI6IGZhbHNlLFxyXG4gICAgICBcIkV4dGVybmFsUGFnaW5hdGlvblwiOiBmYWxzZSxcclxuICAgICAgXCJIZWlnaHRSZWR1Y2VcIjogMjUwLFxyXG4gICAgICBcIkxpbWl0RmllbGRzXCI6IGZhbHNlLFxyXG4gICAgICBcIk5hbWVcIjogbmFtZSxcclxuICAgICAgXCJQYWdlU2l6ZVwiOiAyMCxcclxuICAgICAgXCJQYWdlU2l6ZXNcIjogZmFsc2UsXHJcbiAgICAgIFwiUmVzb3VyY2VVUkxcIjogdHJ1ZSxcclxuICAgICAgXCJTZWxlY3RPcHRpb25zXCI6IGZhbHNlLFxyXG4gICAgICBcIlNob3dHcmlkRWRpdEJ1dHRvblwiOiBmYWxzZSxcclxuICAgICAgXCJTdWJUeXBlXCI6IFwienVkZlwiLFxyXG4gICAgICBcIlR5cGVcIjogXCJ6Z3JpZFwiLFxyXG4gICAgICBcIlZhbHVlXCI6ICdncm91cC4nICsgZ3JpZFZhbHVlTmFtZSxcclxuICAgICAgXCJWaXNpYmxlXCI6IHRydWUsXHJcbiAgICAgIFwiV2lkdGhSZWR1Y2VcIjogNTAwLFxyXG4gICAgICBcIkRpc2FibGVBdXRvQXBwZW5kR3JpZERhdGVGaWx0ZXJDb2xcIjogdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBhIHByb3BlcnR5IGluIHRoZSBncm91cCBvYmplY3QgYmFzZWQgb24gdGhlIGFib3ZlIGRlY2xhcmF0aW9uLCBleGNlcHQgTmFtZSwgYW5kIGFsc28gaW5zZXJ0IGNvbHVtbiBmaWVsZHMuXHJcbiAgICAvLyBVc2UgdGhlIGdyb3VwaW5nIHZhbHVlIGFzIHRoZSBjb2x1bW4gYW5kIHNraXAgaW5zZXJ0aW5nIGFueSBjb250YWluZXIgdHlwZS5cclxuICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBkYXRhLk5hbWU7XHJcbiAgICBjb25zdCBncm91cEZpZWxkRWxlbWVudHMgPSBbXTtcclxuXHJcbiAgICBkYXRhLlZhbHVlLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZE1vZGVsID0gT2JqZWN0LmFzc2lnbih7fSwgZmllbGQpO1xyXG4gICAgICBmaWVsZE1vZGVsWydEaXNwbGF5TmFtZSddID0gZmllbGRNb2RlbC5MYWJlbDtcclxuICAgICAgZmllbGRNb2RlbC5OYW1lID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZE1vZGVsWydOYW1lJ10sIGNvbnRhaW5lck5hbWUpO1xyXG4gICAgICBmaWVsZE1vZGVsLlZhbHVlID0gdGhpcy5nZW5lcmF0ZUZvcm1Db250cm9sTmFtZShmaWVsZE1vZGVsWydWYWx1ZSddLCBjb250YWluZXJOYW1lKTtcclxuXHJcbiAgICAgIGdyb3VwRmllbGRFbGVtZW50cy5wdXNoKGZpZWxkTW9kZWwpO1xyXG5cclxuICAgICAgLy8gVGhpcyBpcyBmb3IgdGFsbHkgYW5kIHJlbW92ZSB6bW9kZWwgd2hlbiBnZXRtb2RlbCgpLlxyXG4gICAgICAvLyBXZSdyZSBub3Qgc3VwcG9zZWQgdG8gc2F2ZSB6bW9kZWwgZmllbGQgdmFsdWUgc2luY2UgaXRzIHZhbHVlIGlzIHN1cHBvc2VkIHRvIGJlIGFkZGVkIHRvIHRoZSBncmlkLlxyXG4gICAgICB0aGlzLmdyb3VwW211bHRpVmFsdWVHcm91cFNjb3BlTmFtZV0ucHVzaChmaWVsZE1vZGVsLlZhbHVlKTtcclxuXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZERhdGFTb3VyY2VOYW1lXSA9IFtdO1xyXG4gICAgdGhpcy5ncm91cFtncmlkQ29sdW1uRmllbGRzTmFtZV0gPSBncm91cEZpZWxkRWxlbWVudHM7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGdyaWQgY29sdW1uIGJhc2VkIG9uIGZpZWxkIGVsZW1lbnRzIGFuZCBpbnNlcnQgdGhlbSBpbnRvIHRoZSBncmlkLlxyXG4gICAgdGhpcy5ncm91cFtgJHtuYW1lfSR7dGhpcy5wcmVmaXhDdXN0b21BZGRCdXR0b25PbkNsaWNrfWBdID0gdGhpcy5jYXB0dXJlQ29udGFpbmVyRmllbGRWYWx1ZVRvTW9kZWwuYmluZCh0aGlzLCB0aGlzLmdyb3VwLCBncmlkVmFsdWVOYW1lLCBncmlkRGF0YVNvdXJjZU5hbWUsIGNvbnRhaW5lck5hbWUpO1xyXG4gICAgdGhpcy5ncm91cFtgJHtuYW1lfSR7dGhpcy5wcmVmaXhDdXN0b21SZXNldEJ1dHRvbk9uQ2xpY2t9YF0gPSB0aGlzLmNsZWFyQ29udGFpbmVyUmVsYXRlZEZpZWxkVmFsdWUuYmluZCh0aGlzLCB0aGlzLmdyb3VwLCBjb250YWluZXJOYW1lKTtcclxuICAgIHRoaXMuZ3JvdXBbYCR7bmFtZX0ke3RoaXMucHJlZml4Q3VzdG9tUmVtb3ZlQnV0dG9uT25DbGlja31gXSA9IHRoaXMucmVtb3ZlR3JpZFJvdy5iaW5kKHRoaXMsIGdyaWRWYWx1ZU5hbWUsIGdyaWREYXRhU291cmNlTmFtZSk7XHJcblxyXG4gICAgaWYgKGRhdGFJbmRleCkge1xyXG4gICAgICB0aGlzLmFwcGVuZFRvRGlzcGxheU1vZGVsKGVsZW1lbnQsIGRhdGFJbmRleCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgZGF0YS5WYWx1ZS5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYXB0dXJlQ29udGFpbmVyRmllbGRWYWx1ZVRvTW9kZWwoZ3JvdXA6IFpHcm91cCwgZ3JpZFZhbHVlOiBhbnksIGdyaWREYXRhU291cmNlOiBhbnksIGNvbnRhaW5lck5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgY29udGFpbmVyRmllbGRWYWx1ZSA9IHRoaXMuZ2V0Q29udGFpbmVyTW9kZWxWYWx1ZShjb250YWluZXJOYW1lKTtcclxuICAgIGxldCBhbGxvd1RvU2V0RGF0YSA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAobGV0IGtleSBpbiBjb250YWluZXJGaWVsZFZhbHVlKSB7XHJcbiAgICAgIGlmICghWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShjb250YWluZXJGaWVsZFZhbHVlW2tleV0pKSB7XHJcbiAgICAgICAgYWxsb3dUb1NldERhdGEgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrOyAvLyBleGl0IHRoZSBsb29wIGVhcmx5IHNpbmNlIHRoZSBmbGFnIGlzIGFscmVhZHkgdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGFsbG93VG9TZXREYXRhICYmIChPYmplY3Qua2V5cyhjb250YWluZXJGaWVsZFZhbHVlKS5sZW5ndGggIT09IDAgfHwgY29udGFpbmVyRmllbGRWYWx1ZS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSkge1xyXG4gICAgICAvLyBnZXQgY29udGFpbmVyIG1vZGVsIHZhbHVlLCBzZXQgdG8gZ3JvdXAgZ3JpZCBkYXRhc291cmNlXHJcbiAgICAgIGdyb3VwW2dyaWREYXRhU291cmNlXS5wdXNoKGNvbnRhaW5lckZpZWxkVmFsdWUpO1xyXG5cclxuICAgICAgLy8gc2V0IGRhdGFzb3VyY2UgdG8gZ3JpZFxyXG4gICAgICBncm91cFtncmlkVmFsdWVdLnNldERhdGEodGhpcy5ncm91cFtncmlkRGF0YVNvdXJjZV0pO1xyXG5cclxuICAgICAgLy8gY2xlYXIgY29udGFpbmVyIGZpZWxkIHZhbHVlXHJcbiAgICAgIHRoaXMuY2xlYXJDb250YWluZXJSZWxhdGVkRmllbGRWYWx1ZShncm91cCwgY29udGFpbmVyTmFtZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdygnVG8gYWRkIHRoZSByZWNvcmQsIHBsZWFzZSBlbnRlci9zZWxlY3QgYXQgbGVhc3Qgb25lIGZpZWxkIGluIHRoaXMgc2VjdGlvbi4nLCAndG9wJywgdHJ1ZSwgMzAwMCwgJ3dhcm5pbmcnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJDb250YWluZXJSZWxhdGVkRmllbGRWYWx1ZShncm91cDogWkdyb3VwLCBjb250YWluZXJOYW1lOiBzdHJpbmcpIHtcclxuICAgIC8vIGFmdGVyIHNldCB0byBncmlkLCBjbGVhciB0aGUgem1vZGVsLlxyXG4gICAgdGhpcy5jbGVhckNvbnRhaW5lckZpZWxkRWxlbWVudFZhbHVlKGNvbnRhaW5lck5hbWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVHcmlkUm93KGdyaWRWYWx1ZTogYW55LCBncmlkRGF0YVNvdXJjZTogYW55LCBkYXRhSXRlbTogYW55LCBpbmRleDogYW55KSB7XHJcbiAgICB0aGlzLmdyb3VwW2dyaWREYXRhU291cmNlXS5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cclxuICAgIC8vIHNldCBkYXRhc291cmNlIHRvIGdyaWRcclxuICAgIHRoaXMuZ3JvdXBbZ3JpZFZhbHVlXS5zZXREYXRhKHRoaXMuZ3JvdXBbZ3JpZERhdGFTb3VyY2VdKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgaXNEcm9wZG93blR5cGUoZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBjb21wb25lbnREYXRhVHlwZSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGRhdGEgOiBkYXRhLlR5cGUudG9Mb3dlckNhc2UoKTtcclxuXHJcbiAgICBpZiAoY29tcG9uZW50RGF0YVR5cGUgPT0gQ29tcG9uZW50VHlwZS5kcm9wZG93biB8fCBjb21wb25lbnREYXRhVHlwZSA9PSBDb21wb25lbnRUeXBlLnp1aXNlbGVjdG11bHRpcGxlIHx8IGNvbXBvbmVudERhdGFUeXBlID09IENvbXBvbmVudFR5cGUuenNlbGVjdG11bHRpcGxlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRlcyB0aGUgZm9ybSBhbmQgc2hvd3MgYW4gZXJyb3IgbWVzc2FnZSBpZiBpdCBpcyBpbnZhbGlkLlxyXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9ybSBpcyB2YWxpZCwgb3RoZXJ3aXNlIGZhbHNlLlxyXG4gICAqL1xyXG4gIHB1YmxpYyB2YWxpZGF0ZUFuZFNob3dFcnJvck1lc3NhZ2UoKSB7XHJcbiAgICBjb25zdCBmZyA9IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA7XHJcblxyXG4gICAgLy8gSWYgdGhlIGZvcm0gaXMgaW52YWxpZCwgY2xlYXIgYW55IGVycm9ycyBpbiBjb250YWluZXIgZmllbGRzIGFuZCBzaG93IHRoZSBlcnJvciBtZXNzYWdlLlxyXG4gICAgaWYgKCFmZy52YWxpZCkge1xyXG4gICAgICAvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBmb3JtIGNvbnRyb2xzIGFuZCByZXNldCBhbnkgZXJyb3JzIHRoYXQgYmVsb25nIHRvIGEgY29udGFpbmVyIGZpZWxkXHJcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGZnLmNvbnRyb2xzKSkge1xyXG4gICAgICAgIHRoaXMuc2V0Q29udGFpbmVyRmllbGRFcnJvckFzTnVsbChmZywga2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQ2hlY2sgaXMgdGhlIGZvcm1ncm91cCB2YWx1ZSBhZ2Fpbi5cclxuICAgICAgaWYgKGZnLnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFNob3cgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoZSBmb3JtXHJcbiAgICAgIHRoaXMuY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZS5zaG93Rm9ybUdyb3VwRXJyb3JNZXNzYWdlKHRoaXMuZ3JvdXAsIGZnKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiBmYWxzZSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmb3JtIGlzIG5vdCB2YWxpZFxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJuIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZm9ybSBpcyB2YWxpZFxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldHMgdGhlIGVycm9ycyBvZiBhIGNvbnRhaW5lciBmaWVsZCBpbiBhIEZvcm1Hcm91cC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBmZyBUaGUgRm9ybUdyb3VwIG9iamVjdCBjb250YWluaW5nIHRoZSBmaWVsZC5cclxuICAgKiBAcGFyYW0ga2V5IFRoZSBuYW1lIG9mIHRoZSBmaWVsZCBpbiB0aGUgRm9ybUdyb3VwLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Q29udGFpbmVyRmllbGRFcnJvckFzTnVsbChmZzogRm9ybUdyb3VwLCBrZXk6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udHJvbE5hbWVTZWdtZW50cyA9IGtleS5zcGxpdCgnXycpO1xyXG5cclxuICAgIGlmIChjb250cm9sTmFtZVNlZ21lbnRzLmxlbmd0aCA8PSAzKSB7XHJcbiAgICAgIC8vIEZpZWxkIGlzIG5vdCBpbnNpZGUgYSBjb250YWluZXIsIHNvIHdlIHNraXAgaXRcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG5vIG12Z2xpc3QsIGRpcmVjdCByZXR1cm4uIGRvbnQgbmVlZCBkbyBhbnl0aGluZy5cclxuICAgIGlmICghdGhpcy5ncm91cFsnbXZnbGlzdCddKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiBjb250YWluZXIgYnV0IG5vdCBtdWx0aSB2YWx1ZSBncm91cCA9IHRydWUsIHdlIHNraXAgaXQuXHJcbiAgICBjb25zdCBjb250YWluZXIgPSBbY29udHJvbE5hbWVTZWdtZW50c1swXSwgY29udHJvbE5hbWVTZWdtZW50c1sxXSwgY29udHJvbE5hbWVTZWdtZW50c1syXV0uam9pbignXycpO1xyXG4gICAgaWYgKCF0aGlzLmdyb3VwWydtdmdsaXN0J10uaW5jbHVkZXMoY29udGFpbmVyKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udHJvbCA9IGZnLmdldChrZXkpO1xyXG5cclxuICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICAvLyBJZiB0aGUgY29udHJvbCBpcyBub3QgaW5zaWRlIGEgY29udGFpbmVyLCBza2lwIGl0LlxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcmV0dXJuIGlmIGZvcm1jb250cm9sIGlzIHZhbGlkLlxyXG4gICAgaWYgKGNvbnRyb2wuc3RhdHVzID09PSAnVkFMSUQnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250cm9sRXJyb3JzID0gY29udHJvbC5lcnJvcnM7XHJcblxyXG4gICAgaWYgKGNvbnRyb2xFcnJvcnMpIHtcclxuICAgICAgLy8gU2V0IHRoZSBjb250cm9sJ3MgZXJyb3JzIHRvIG51bGwuXHJcbiAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIGEgZm9ybSBhbmQgcmV0dXJucyBpdHMgWk1vZGVsIGlmIGl0IGlzIHZhbGlkLlxyXG4gICAqIEBwYXJhbSBza2lwUmVtb3ZlTXZnRmllbGRWYWx1ZSBXaGV0aGVyIHRvIHNraXAgcmVtb3ZpbmcgdGhlIHZhbHVlcyBvZiBtdmcgZmllbGRzIGZyb20gdGhlIHpNb2RlbCBvYmplY3QuXHJcbiAgICogQHJldHVybnMgVGhlIGZvcm0ncyBaTW9kZWwgaWYgaXQgaXMgdmFsaWQsIG9yIHVuZGVmaW5lZCBvdGhlcndpc2UuXHJcbiAgICovXHJcbiAgcHVibGljIGdldFZhbGlkYXRlZEZvcm1aTW9kZWwoc2tpcFJlbW92ZVByZWZpeD86IGJvb2xlYW4sIHNraXBSZW1vdmVNdmdGaWVsZFZhbHVlPzogYm9vbGVhbikge1xyXG4gICAgY29uc3QgaXNWYWxpZEZvcm0gPSB0aGlzLnZhbGlkYXRlQW5kU2hvd0Vycm9yTWVzc2FnZSgpO1xyXG5cclxuICAgIGlmIChpc1ZhbGlkRm9ybSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRaTW9kZWwoc2tpcFJlbW92ZVByZWZpeCwgc2tpcFJlbW92ZU12Z0ZpZWxkVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSB6TW9kZWwgb2JqZWN0LCB3aXRoIG12ZyAobXVsdGkgdmFsdWUgZ3JvdXApIGZpZWxkcyByZW1vdmVkIGFuZCBwcm9wZXJ0eSBwcmVmaXhlcyByZW1vdmVkLlxyXG4gICAqIEBwYXJhbSBza2lwUmVtb3ZlUHJlZml4IFdoZXRoZXIgdG8gc2tpcCByZW1vdmluZyB0aGUgZGVmYXVsdCBwcm9wZXJ0eSBwcmVmaXguXHJcbiAgICogQHBhcmFtIHNraXBSZW1vdmVNdmdGaWVsZFZhbHVlIFdoZXRoZXIgdG8gc2tpcCByZW1vdmluZyB0aGUgdmFsdWVzIG9mIG12ZyBmaWVsZHMgZnJvbSB0aGUgek1vZGVsIG9iamVjdC5cclxuICAgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgek1vZGVsIG9iamVjdC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Wk1vZGVsKHNraXBSZW1vdmVQcmVmaXg/OiBib29sZWFuLCBza2lwUmVtb3ZlTXZnRmllbGRWYWx1ZT86IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHpNb2RlbCA9IHRoaXMuZ3JvdXBbdGhpcy5jb21wb25lbnRTY29wZU5hbWVdLnpNb2RlbDtcclxuXHJcbiAgICAvLyBMb29wIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgaW4gdGhlIHpNb2RlbCBvYmplY3QuXHJcbiAgICBmb3IgKGNvbnN0IHpNb2RlbFByb3BlcnR5IGluIHpNb2RlbCkge1xyXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHpNb2RlbCwgek1vZGVsUHJvcGVydHkpKSB7XHJcbiAgICAgICAgY29uc3Qgek1vZGVsUHJvcGVydHlTZWdtZW50cyA9IHpNb2RlbFByb3BlcnR5LnNwbGl0KCdfJyk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBwcm9wZXJ0eSBpcyBwYXJ0IG9mIGEgbXVsdGkgdmFsdWUgZ3JvdXAuXHJcbiAgICAgICAgaWYgKHpNb2RlbFByb3BlcnR5U2VnbWVudHMubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgLy8gVGhlIHRoaXJkIHNlZ21lbnQgb2YgdGhlIHByb3BlcnR5IG5hbWUgaXMgdGhlIGNvbnRhaW5lciBuYW1lLlxyXG4gICAgICAgICAgY29uc3QgY29udGFpbmVyTmFtZSA9IHpNb2RlbFByb3BlcnR5U2VnbWVudHNbMl07XHJcbiAgICAgICAgICAvLyBDb25zdHJ1Y3QgdGhlIG5hbWUgb2YgdGhlIG11bHRpIHZhbHVlIGdyb3VwLlxyXG4gICAgICAgICAgY29uc3QgbXVsdGlWYWx1ZUdyb3VwU2NvcGVOYW1lID0gYG12Z18ke2NvbnRhaW5lck5hbWV9YDtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgbXVsdGkgdmFsdWUgZ3JvdXAgZXhpc3RzIGFuZCBjb250YWlucyB0aGUgcHJvcGVydHksIHJlbW92ZSB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGZyb20gdGhlIHpNb2RlbCBvYmplY3QuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG12Z0ZpZWxkID0gdGhpcy5ncm91cFttdWx0aVZhbHVlR3JvdXBTY29wZU5hbWVdLmZpbmQoKHJlY29yZCkgPT4gcmVjb3JkID09PSB6TW9kZWxQcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgIGlmIChtdmdGaWVsZCkge1xyXG4gICAgICAgICAgICAgIHpNb2RlbFt6TW9kZWxQcm9wZXJ0eV0gPSBza2lwUmVtb3ZlTXZnRmllbGRWYWx1ZSA/IHpNb2RlbFt6TW9kZWxQcm9wZXJ0eV0gOiBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHpNb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBpbXBvcnRhbnQ6IFJlbW92ZSBwcm9wZXJ0eSBwcmVmaXhlcyBmcm9tIHRoZSB6TW9kZWwgb2JqZWN0IGlmIHNraXBSZW1vdmVQcmVmaXggaXMgbm90IHRydWUgKGJ5IGRlZmF1bHQgcmVtb3ZlIHByZWZpeClcclxuICAgIGNvbnN0IHBhdGNoZWRNb2RlbERhdGEgPSBza2lwUmVtb3ZlUHJlZml4ID8gek1vZGVsIDogdGhpcy5yZW1vdmVaTW9kZWxQcm9wZXJ0eVByZWZpeCh6TW9kZWwpO1xyXG5cclxuICAgIC8vIElmIHRoZXJlIGFyZSBtdWx0aSB2YWx1ZSBncm91cCBncmlkIHZhbHVlcywgZXh0cmFjdCB0aGUgZ3JpZCBkYXRhIGFuZCBhZGQgaXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY29udGFpbmVyIGluIHRoZSBtb2RpZmllZCB6TW9kZWwgb2JqZWN0LlxyXG4gICAgaWYgKHRoaXMubXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlKSB7XHJcbiAgICAgIHRoaXMubXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlLmZvckVhY2goKG11bHRpVmFsdWVHcm91cEdyaWROYW1lKSA9PiB7XHJcbiAgICAgICAgLy8gRXh0cmFjdCB0aGUgY29udGFpbmVyIG5hbWUgZnJvbSB0aGUgZ3JpZCBuYW1lLlxyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lck5hbWUgPSBza2lwUmVtb3ZlUHJlZml4ID8gbXVsdGlWYWx1ZUdyb3VwR3JpZE5hbWUuc3BsaXQoJ18nKS5qb2luKCdfJykgOiBtdWx0aVZhbHVlR3JvdXBHcmlkTmFtZS5zcGxpdCgnXycpWzJdO1xyXG5cclxuICAgICAgICAvLyBFeHRyYWN0IHRoZSBncmlkIGRhdGEgYW5kIHJlbW92ZSBwcm9wZXJ0eSBwcmVmaXhlcyBpZiBza2lwUmVtb3ZlUHJlZml4IGlzIG5vdCB0cnVlLlxyXG4gICAgICAgIGNvbnN0IG11bHRpVmFsdWVHcm91cEdyaWQgPSB0aGlzLmdyb3VwW211bHRpVmFsdWVHcm91cEdyaWROYW1lXSBhcyBaR3JpZDtcclxuICAgICAgICBjb25zdCBncmlkRGF0YSA9IG11bHRpVmFsdWVHcm91cEdyaWQuZ2V0R3JpZERhdGEoKS5tYXAoKGRhdGEpID0+IHNraXBSZW1vdmVQcmVmaXggPyBkYXRhIDogdGhpcy5yZW1vdmVaTW9kZWxQcm9wZXJ0eVByZWZpeChkYXRhLCB0cnVlKSk7XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgZ3JpZCBkYXRhIHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnRhaW5lciBpbiB0aGUgbW9kaWZpZWQgek1vZGVsIG9iamVjdC5cclxuICAgICAgICBpZiAoZ3JpZERhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgcGF0Y2hlZE1vZGVsRGF0YVtjb250YWluZXJOYW1lXSA9IGdyaWREYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhdGNoZWRNb2RlbERhdGE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIHZhbHVlIG9mIGEgbW9kZWwgaW4gdGhlIGZvcm0gZ3JvdXAuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbW9kZWxOYW1lIFRoZSBuYW1lIG9mIHRoZSBtb2RlbCB0byBzZXQuXHJcbiAgICogQHBhcmFtIHsqfSBtb2RlbFZhbHVlIFRoZSB2YWx1ZSB0byBzZXQgZm9yIHRoZSBtb2RlbC5cclxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwUHJlZml4XSBPcHRpb25hbCBwYXJhbWV0ZXIgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHNraXAgdGhlIGNvbXBvbmVudCBwcmVmaXguXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHVibGljIHNldE1vZGVsVmFsdWUobW9kZWxOYW1lOiBzdHJpbmcsIG1vZGVsVmFsdWU6IGFueSwgc2tpcFByZWZpeD86IGJvb2xlYW4pIHtcclxuICAgIC8vIEdldCB0aGUgek1vZGVsIG9iamVjdCBmcm9tIHRoZSBmb3JtIGdyb3VwXHJcbiAgICBjb25zdCB6TW9kZWxzID0gdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsO1xyXG4gICAgLy8gSWYgc2tpcFByZWZpeCBpcyBmYWxzZSBvciB1bmRlZmluZWQsIHByZXBlbmQgdGhlIGNvbXBvbmVudCBwcmVmaXggdG8gdGhlIG1vZGVsIG5hbWVcclxuICAgIGNvbnN0IHpNb2RlbE5hbWUgPSBza2lwUHJlZml4ID8gbW9kZWxOYW1lIDogdGhpcy5jb21wb25lbnRQcmVmaXggKyAnXycgKyBtb2RlbE5hbWU7XHJcbiAgICAvLyBTZXQgdGhlIHZhbHVlIG9mIHRoZSBtb2RlbCBpbiB0aGUgek1vZGVsIG9iamVjdFxyXG4gICAgek1vZGVsc1t6TW9kZWxOYW1lXSA9IG1vZGVsVmFsdWU7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBmb3JtIGdyb3VwIGFzIGEgRm9ybUdyb3VwIG9iamVjdFxyXG4gICAgbGV0IGZnOiBGb3JtR3JvdXAgPSB0aGlzLmdyb3VwW3RoaXMuY29tcG9uZW50U2NvcGVOYW1lXS5mb3JtIGFzIEZvcm1Hcm91cDtcclxuXHJcbiAgICAvLyBQYXRjaCB0aGUgZm9ybSBncm91cCB3aXRoIHRoZSB1cGRhdGVkIHpNb2RlbCBvYmplY3RcclxuICAgIGZnLnBhdGNoVmFsdWUoek1vZGVscyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIFJlbW92ZSB0aGUgY29tcG9uZW50IHByZWZpeCBmcm9tIHByb3BlcnR5IG5hbWVzIGluIHRoZSB6TW9kZWwgb2JqZWN0LlxyXG4gICpcclxuICAqIEBwYXJhbSB7Kn0gek1vZGVsIFRoZSB6TW9kZWwgb2JqZWN0LlxyXG4gICogQHBhcmFtIHtib29sZWFufSBbZ2V0T25seUZpZWxkTmFtZV0gT3B0aW9uYWwgcGFyYW1ldGVyIGluZGljYXRpbmcgd2hldGhlciB0byBvbmx5IHJldHVybiB0aGUgZmllbGQgbmFtZSB3aXRob3V0IHRoZSBwcmVmaXguXHJcbiAgKiBAcmV0dXJucyB7Kn0gVGhlIHVwZGF0ZWQgek1vZGVsIG9iamVjdC5cclxuICAqL1xyXG4gIHByaXZhdGUgcmVtb3ZlWk1vZGVsUHJvcGVydHlQcmVmaXgoek1vZGVsOiBhbnksIGdldE9ubHlGaWVsZE5hbWU/OiBib29sZWFuKSB7XHJcbiAgICAvLyBDcmVhdGUgYW4gZW1wdHkgb2JqZWN0IHRvIHN0b3JlIHRoZSB1cGRhdGVkIHpNb2RlbCBkYXRhXHJcbiAgICBjb25zdCBwYXRjaGVkTW9kZWxEYXRhID0ge307XHJcblxyXG4gICAgLy8gTG9vcCB0aHJvdWdoIGVhY2ggcHJvcGVydHkgaW4gdGhlIHpNb2RlbCBvYmplY3RcclxuICAgIGZvciAobGV0IHByb3AgaW4gek1vZGVsKSB7XHJcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoek1vZGVsLCBwcm9wKSkge1xyXG4gICAgICAgIC8vIFNwbGl0IHRoZSBwcm9wZXJ0eSBuYW1lIGJ5IHVuZGVyc2NvcmVzXHJcbiAgICAgICAgY29uc3QgcHJvcFNlZ21lbnQgPSBwcm9wLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgLy8gR2V0IHRoZSBwcm9wZXJ0eSBuYW1lIHdpdGhvdXQgdGhlIGNvbXBvbmVudCBwcmVmaXhcclxuICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBnZXRPbmx5RmllbGROYW1lID8gcHJvcFNlZ21lbnRbcHJvcFNlZ21lbnQubGVuZ3RoIC0gMV0gOiBwcm9wLnJlcGxhY2UodGhpcy5jb21wb25lbnRQcmVmaXggKyAnXycsICcnKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIHRoZSBwcm9wZXJ0eSB0byB0aGUgdXBkYXRlZCB6TW9kZWwgb2JqZWN0XHJcbiAgICAgICAgcGF0Y2hlZE1vZGVsRGF0YVtwcm9wZXJ0eU5hbWVdID0gek1vZGVsW3Byb3BdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSB1cGRhdGVkIHpNb2RlbCBvYmplY3RcclxuICAgIHJldHVybiBwYXRjaGVkTW9kZWxEYXRhO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXJzIHRoZSB6TW9kZWwgcHJvcGVydHkgb2YgdGhlIGdyb3VwIGluIHRoZSBjb21wb25lbnQgc2NvcGUgYW5kIHJlc2V0cyB0aGUgbXVsdGlWYWx1ZUdyb3VwR3JpZFZhbHVlIGFycmF5LlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge3ZvaWR9XHJcbiAgICovXHJcbiAgcHVibGljIGNsZWFyWk1vZGVsKCkge1xyXG4gICAgdGhpcy5ncm91cFt0aGlzLmNvbXBvbmVudFNjb3BlTmFtZV0uek1vZGVsID0ge307XHJcbiAgICB0aGlzLm11bHRpVmFsdWVHcm91cEdyaWRWYWx1ZSA9IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldE11bHRpVmFsdWVHcm91cEJ1dHRvbnNFbmFibGVkKGNvbnRhaW5lck5hbWU6IHN0cmluZywgaXNFbmFibGVkOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBaQ29tcG9uZW50SGVscGVyLmdldENvbXBvbmVudCh0aGlzLmdyb3VwLCBgemdyaWRfJHt0aGlzLmNvbXBvbmVudFByZWZpeH1fJHtjb250YWluZXJOYW1lfWApO1xyXG4gICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gWydFbmFibGVDdXN0b21BZGRDb21tYW5kJywgJ0VuYWJsZUN1c3RvbVJlc2V0Q29tbWFuZCcsICdFbmFibGVDdXN0b21SZW1vdmVDb21tYW5kJ107XHJcbiAgICAgIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgcmVzdWx0WydkYXRhJ11bcHJvcF0gPSBpc0VuYWJsZWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBMb2FkIGZyb20gbG9jYWwgZmlsZVxyXG4gIHByaXZhdGUgZ2V0RmllbGRFbGVtZW50X0Zvcm1QYWdlKGZpZWxkRWxlbWVudEZvcm1OYW1lOiBzdHJpbmcsIGZvcm1UeXBlID0gRm9ybVR5cGUuZm9ybUZpZWxkKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IHBhcmFtOiBBc3NldHNOb2RlUGFyYW0gPSB7XHJcbiAgICAgIGFzc2V0c1JvdXRlOiBBc3NldHNSb3V0ZXMuZmllbGRzLFxyXG4gICAgICBhc3NldHNGb2xkZXI6IEFzc2V0c0ZvbGRlci5maWVsZGVsZW1lbnQsXHJcbiAgICAgIGV4dGVuc2lvbjogQXNzZXRzQWxsb3dlZEV4dGVuc2lvbi5qc29uLFxyXG4gICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKClcclxuICAgICAgICAuc2V0KCduYW1lJywgZmllbGRFbGVtZW50Rm9ybU5hbWUpXHJcbiAgICAgICAgLnNldCgndHlwZScsIGZvcm1UeXBlKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLndlYkFwaVNlcnZpY2UuYXNzZXRzSHR0cE5vZGVHZXQocGFyYW0pO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG5cclxuZW51bSBDb21wb25lbnRUeXBlIHtcclxuICB0ZXh0ID0gJ3RleHQnLFxyXG4gIHRleHRhcmVhID0gJ3RleHRhcmVhJyxcclxuICBjaGVja2JveCA9ICdjaGVja2JveCcsXHJcbiAgbGFiZWwgPSAnemxhYmVsJyxcclxuICBkYXRlID0gJ2RhdGUnLFxyXG4gIHpkYXRldGltZSA9ICd6ZGF0ZXRpbWUnLFxyXG4gIHp1aWRhdGV0aW1lID0gJ3p1aWRhdGV0aW1lJyxcclxuICBudW1iZXIgPSAnbnVtYmVyJyxcclxuICB6bnVtZXJpYyA9ICd6bnVtZXJpYycsXHJcbiAgZW1haWwgPSAnZW1haWwnLFxyXG4gIGZpbGUgPSAnZmlsZScsXHJcbiAgcHJpY2UgPSAncHJpY2UnLFxyXG4gIHdlYnNpdGUgPSAnd2Vic2l0ZScsXHJcbiAgZHJvcGRvd24gPSAnZHJvcGRvd24nLFxyXG4gIHp1aXNlbGVjdG11bHRpcGxlID0gJ3p1aXNlbGVjdG11bHRpcGxlJyxcclxuICB6c2VsZWN0bXVsdGlwbGUgPSAnenNlbGVjdG11bHRpcGxlJyxcclxuICBncm91cGluZyA9ICdrY2FyZCcsXHJcbiAgYnV0dG9uID0gJ3pidXR0b25zJyxcclxuICBncmlkID0gJ3pncmlkJyxcclxuICBzbGlkZXIgPSAnenNsaWRlcidcclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwicGFkZGluZzogMTVweFwiICpuZ0lmPVwiZGF0YS5UaXRsZSAmJiAoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIiBjbGFzcz1cInp1ZGYtY29udGFpbmVyXCI+XHJcbiAgPGtlbmRvLWNhcmQgKm5nSWY9XCJkYXRhLlRpdGxlXCI+XHJcbiAgICA8a2VuZG8tY2FyZC1oZWFkZXI+XHJcbiAgICAgIDxkaXY+XHJcbiAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImNhcmQtaGVhZGVyLXRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2lvbi1sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2tlbmRvLWNhcmQtaGVhZGVyPlxyXG4gICAgPGtlbmRvLWNhcmQtYm9keT5cclxuICAgICAgPCEtLSA8YXBwLXpmb3JtY29udHJvbCBbbmdDbGFzc109XCJncm91cFtmaWVsZC5pc1Zpc2libGVGaWVsZF0gPyBmaWVsZC5EaXZDbGFzcyA6ICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmllbGQgb2YgZm9ybUZpZWxkcyB8IGRpdnpsYXlvdXQ6IGRhdGEuemxheW91dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWVsZF09XCJmaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cInt7ZmllbGQuTmFtZX19XCI+XHJcbiAgICAgIDwvYXBwLXpmb3JtY29udHJvbD4gLS0+XHJcbiAgICAgIDxhcHAtemRpdiBbZGF0YV09XCJkYXRhXCIgW2Zvcm1dPVwiZm9ybVwiIFtncm91cF09XCJncm91cFwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiPjwvYXBwLXpkaXY+XHJcbiAgICA8L2tlbmRvLWNhcmQtYm9keT5cclxuICA8L2tlbmRvLWNhcmQ+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIiFkYXRhLlRpdGxlICYmICghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiIFtzdHlsZV09XCJkYXRhLlN0eWxlXCIgY2xhc3M9XCJ6dWRmLWNvbnRhaW5lclwiPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxyXG4gICAgPCEtLSA8YXBwLXpmb3JtY29udHJvbCBbbmdDbGFzc109XCJncm91cFtmaWVsZC5pc1Zpc2libGVGaWVsZF0gPyBmaWVsZC5EaXZDbGFzcyA6ICgoZmllbGQuVmlzaWJsZSA9PT0gdHJ1ZSkgPyAgZmllbGQuRGl2Q2xhc3MgOiAnZmxleC1oaWRlJylcIlxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBmaWVsZCBvZiBmb3JtRmllbGRzIHwgZGl2emxheW91dDogZGF0YS56bGF5b3V0XCJcclxuICAgICAgICBbZmllbGRdPVwiZmllbGRcIlxyXG4gICAgICAgIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgW2Zvcm1dPVwiZm9ybVwiXHJcbiAgICAgICAgaWQ9XCJ7e2ZpZWxkLk5hbWV9fVwiPlxyXG4gICAgPC9hcHAtemZvcm1jb250cm9sPiAtLT5cclxuICAgIDxhcHAtemRpdiBbZGF0YV09XCJkYXRhXCIgW2Zvcm1dPVwiZm9ybVwiIFtncm91cF09XCJncm91cFwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiPjwvYXBwLXpkaXY+XHJcbiAgPC9mb3JtPlxyXG48L2Rpdj5cclxuIl19
|
package/esm2020/public-api.mjs
CHANGED
|
@@ -105,4 +105,5 @@ export * from './lib/sfdatetimepicker/sfdatetimepicker.component';
|
|
|
105
105
|
export * from './lib/zganttchart/zganttchart.component';
|
|
106
106
|
export * from './lib/dropdown_buttons/dropdown_buttons.component';
|
|
107
107
|
export * from './lib/zbreadcrumb/zbreadcrumb.component';
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILCtCQUErQjtBQUMvQixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsOENBQThDO0FBQzlDLDJEQUEyRDtBQUczRCxpQ0FBaUM7QUFDakMsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDZDQUE2QyxDQUFDO0FBRTVELDhCQUE4QjtBQUM5QixjQUFjLG9DQUFvQyxDQUFDO0FBR25ELDZCQUE2QjtBQUM3QixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMENBQTBDLENBQUM7QUFFekQsK0NBQStDO0FBQy9DLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYywrQ0FBK0MsQ0FBQztBQUc5RCxrQ0FBa0M7QUFDbEMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLGlEQUFpRCxDQUFBO0FBQy9ELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyx3RUFBd0UsQ0FBQTtBQUN0RixjQUFjLDBEQUEwRCxDQUFBO0FBQ3hFLGNBQWMsa0RBQWtELENBQUE7QUFDaEUsY0FBYyxvRkFBb0YsQ0FBQTtBQUNsRyxjQUFjLDRDQUE0QyxDQUFBO0FBQzFELGNBQWMsK0NBQStDLENBQUE7QUFDN0QsY0FBYyw2QkFBNkIsQ0FBQTtBQUMzQyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMseUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgZHluYW1pYy1mb3JtXHJcbiAqL1xyXG5cclxuLyoqKioqKioqKiogU2VydmljZSAqKioqKioqKioqL1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9tYWluLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2UnO1xyXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi96bW9kYWwvbW9kYWwuc2VydmljZSc7XHJcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3pjb21wb25lbnQuZGVidWcuc2VydmljZSc7XHJcblxyXG5cclxuLyoqKioqKioqKiogRGlyZWN0aXZlICoqKioqKioqKiovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvc2Nyb2xsYmFyLnRoZW1lLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvZmllbGRlbGVtZW50LmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pncmlkL3pncmlkLmJpbmRpbmcuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenNlbGVjdG11bHRpcGxlL3pzZWxlY3RtdWx0aXBsZS5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2VsZW1lbnRjb250YWluZXIuZGlyZWN0aXZlJztcclxuXHJcbi8qKioqKioqKioqIE1vZHVsZSAqKioqKioqKioqL1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tbWhnbG9iYWwtZHluYW1pY2Zvcm0ubW9kdWxlJztcclxuXHJcblxyXG4vKioqKioqKioqKiBBZGRvbiAqKioqKioqKioqL1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96ZGF0ZXRpbWUvZGF0ZVBhcnNlci5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemNvZGVlZGl0b3IvemNvZGVlZGl0b3IucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pkaXYvemRpdi5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenRhYi96dGFiLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlL3BhbmVsLWFyZWEucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ppbnB1dC1jb250YWluZXIvemlucHV0LWNvbnRhaW5lci5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvcGlwZS9odG1sU2FuaXRpemUucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pudW1lcmljL3pudW1lcmljLmNvbXBvbmVudC5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemRhdGV0aW1lL2RhdGVJb25pY0Zvcm1hdFBhcnNlci5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemRhdGV0aW1lL2RhdGVLZW5kb0Zvcm1hdFBhcnNlci5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemRhdGV0aW1lL2RhdGVJb25pY01pbk1heERhdGUucGlwZSc7XHJcblxyXG4vLyBleHBvcnQgKiBmcm9tICAnLi9saWIvem1vZGFsL3ptb2RhbC5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Z3JpZC9kYXRlLXJhbmdlLWNlbGwtZmlsdGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pzY2hlZHVsZXIvenNjaGVkdWxlci50b29sYmFyLmNvbXBvbmVudCc7XHJcblxyXG5cclxuLyoqKioqKioqKiogekNvbXBvbmVudCAqKioqKioqKioqL1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aWNvbnRhaW5lci91aWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aWNvbnRlbnQvdWljb250ZW50LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpaGVhZGVyL3VpaGVhZGVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpcGFnZS91aXBhZ2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdWltZW51Y29udGVudC91aW1lbnVjb250ZW50LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpbWVudWJ1dHRvbi91aW1lbnVidXR0b24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdWlhcHBtZW51Y29udGVudC91aWFwcG1lbnVjb250ZW50LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpYnVsbGV0aW4vdWlidWxsZXRpbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aWFjdGlvbmJ1dHRvbi91aWFjdGlvbmJ1dHRvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aXZhbGlkYXRpb25tZXNzYWdlL3VpdmFsaWRhdGlvbm1lc3NhZ2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemJ1bGxldC96YnVsbGV0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pidXR0b25zL3pidXR0b25zLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pjYXJkL3pjYXJkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pjaGFydC96Y2hhcnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemNoZWNrYm94L3pjaGVja2JveC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Y2hpcC96Y2hpcC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Y29kZWVkaXRvci96Y29kZWVkaXRvci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96ZGF0ZXJhbmdlL3pkYXRlcmFuZ2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemRhdGV0aW1lL3pkYXRldGltZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96ZGl2L3pkaXYuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemZvcm0vemZvcm0uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemZvcm1jb250cm9sL3pmb3JtY29udHJvbC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Z2F1Z2UvemdhdWdlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pncmlkL3pncmlkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pncmlkL2NvbnRhaW5lci96Z3JpZC1jb250YWluZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemdyaWQvemdyaWQucG9wdXAuYW5jaG9yLXRhcmdldC5kaXJlY3RpdmUnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ppbWcvemltZy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96bGFiZWwvemxhYmVsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ptZmIvem1mYi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96bW9kYWwvem1vZGFsLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ptb2RhbC96bW9kYWwtbW9iaWxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pudW1lcmljL3pudW1lcmljLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pwb3N0c2VsZWN0aW5wdXQvenBvc3RzZWxlY3RpbnB1dC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96cmFkaW9idXR0b24venJhZGlvYnV0dG9uLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pyZXBvcnQvenJlcG9ydC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96c2NoZWR1bGVyL3pzY2hlZHVsZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenNlbGVjdG11bHRpcGxlL3pzZWxlY3RtdWx0aXBsZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dGFiL3p0YWIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenRleHQvenRleHQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenRleHRhcmVhL3p0ZXh0YXJlYS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dGV4dGVkaXRvci96dGV4dGVkaXRvci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dHJlZS96dHJlZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dHJlZWxpc3QvenRyZWVsaXN0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3p0cmVuZGNhcmQvenRyZW5kY2FyZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dWRmL3p1ZGYuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenVua25vd24venVua25vd24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenVwbG9hZC96dXBsb2FkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3p3b3JrZmxvd2J1dHRvbnMvendvcmtmbG93YnV0dG9ucy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9rY2FyZC9rY2FyZC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96aW5wdXQtY29udGFpbmVyL3ppbnB1dC1jb250YWluZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenByb2dyZXNzYmFyL3pwcm9ncmVzc2Jhci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2J1dHRvbmZpZWxkYmFzZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NvbnRhaW5lcmZpZWxkYmFzZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGFsaXN0aW5nZmllbGRiYXNlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZmllbGRiYXNlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvaW5wdXQtZXJyb3ItbWVzc2FnZS9pbnB1dC1lcnJvci1tZXNzYWdlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VtYmVkLWNvbXBvbmVudHMvaW5wdXQtZmllbGQtYWRkb25zL2lucHV0LWZpZWxkLWFkZG9ucy5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VtYmVkLWNvbXBvbmVudHMvcGFnZS1sb2FkZXIvcGFnZS1sb2FkZXIuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbWJlZC1jb21wb25lbnRzL3NwaW5uZXIvc3Bpbm5lci5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VtYmVkLWNvbXBvbmVudHMvcHJvY2Vzc2luZy1yZWNvcmQtbG9hZGVyL3Byb2Nlc3NpbmctcmVjb3JkLWxvYWRlci5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pzZWxlY3RtdWx0aXBsZS96c2VsZWN0bXVsdGlwbGUucGlwZSdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50J1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96bG9vcC96bG9vcC5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2tzcGxpdHRlci9rc3BsaXR0ZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemNvbG9ycGlja2VyL3pjb2xvcnBpY2tlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9rbWVudS9rbWVudS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9rc2Nyb2xsdmlldy9rc2Nyb2xsdmlldy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9lbWJlZC1jb21wb25lbnRzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZmljb24vZmljb24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvc2ZkYXRldGltZXBpY2tlci9zZmRhdGV0aW1lcGlja2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pnYW50dGNoYXJ0L3pnYW50dGNoYXJ0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Ryb3Bkb3duX2J1dHRvbnMvZHJvcGRvd25fYnV0dG9ucy5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96YnJlYWRjcnVtYi96YnJlYWRjcnVtYi5jb21wb25lbnQnO1xyXG4iXX0=
|
|
108
|
+
export * from './lib/zslider/zslider.component';
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILCtCQUErQjtBQUMvQixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsOENBQThDO0FBQzlDLDJEQUEyRDtBQUczRCxpQ0FBaUM7QUFDakMsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDZDQUE2QyxDQUFDO0FBRTVELDhCQUE4QjtBQUM5QixjQUFjLG9DQUFvQyxDQUFDO0FBR25ELDZCQUE2QjtBQUM3QixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsMENBQTBDLENBQUM7QUFFekQsK0NBQStDO0FBQy9DLGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYywrQ0FBK0MsQ0FBQztBQUc5RCxrQ0FBa0M7QUFDbEMsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyx5REFBeUQsQ0FBQztBQUN4RSxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLGlEQUFpRCxDQUFBO0FBQy9ELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyxpREFBaUQsQ0FBQztBQUNoRSxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsaURBQWlELENBQUM7QUFDaEUsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDJDQUEyQyxDQUFDO0FBQzFELGNBQWMseURBQXlELENBQUM7QUFDeEUsY0FBYyx3RUFBd0UsQ0FBQTtBQUN0RixjQUFjLDBEQUEwRCxDQUFBO0FBQ3hFLGNBQWMsa0RBQWtELENBQUE7QUFDaEUsY0FBYyxvRkFBb0YsQ0FBQTtBQUNsRyxjQUFjLDRDQUE0QyxDQUFBO0FBQzFELGNBQWMsK0NBQStDLENBQUE7QUFDN0QsY0FBYyw2QkFBNkIsQ0FBQTtBQUMzQyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyw0REFBNEQsQ0FBQztBQUMzRSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbURBQW1ELENBQUM7QUFDbEUsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxpQ0FBaUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBkeW5hbWljLWZvcm1cclxuICovXHJcblxyXG4vKioqKioqKioqKiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL21haW4uc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZSc7XHJcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ptb2RhbC9tb2RhbC5zZXJ2aWNlJztcclxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvemNvbXBvbmVudC5kZWJ1Zy5zZXJ2aWNlJztcclxuXHJcblxyXG4vKioqKioqKioqKiBEaXJlY3RpdmUgKioqKioqKioqKi9cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9zY3JvbGxiYXIudGhlbWUuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9maWVsZGVsZW1lbnQuZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemdyaWQvemdyaWQuYmluZGluZy5kaXJlY3RpdmUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96c2VsZWN0bXVsdGlwbGUvenNlbGVjdG11bHRpcGxlLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvZWxlbWVudGNvbnRhaW5lci5kaXJlY3RpdmUnO1xyXG5cclxuLyoqKioqKioqKiogTW9kdWxlICoqKioqKioqKiovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL21taGdsb2JhbC1keW5hbWljZm9ybS5tb2R1bGUnO1xyXG5cclxuXHJcbi8qKioqKioqKioqIEFkZG9uICoqKioqKioqKiovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pkYXRldGltZS9kYXRlUGFyc2VyLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Y29kZWVkaXRvci96Y29kZWVkaXRvci5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemRpdi96ZGl2LnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dGFiL3p0YWIucGlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGUvcGFuZWwtYXJlYS5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemlucHV0LWNvbnRhaW5lci96aW5wdXQtY29udGFpbmVyLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9waXBlL2h0bWxTYW5pdGl6ZS5waXBlJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50LnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96ZGF0ZXRpbWUvZGF0ZUlvbmljRm9ybWF0UGFyc2VyLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96ZGF0ZXRpbWUvZGF0ZUtlbmRvRm9ybWF0UGFyc2VyLnBpcGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96ZGF0ZXRpbWUvZGF0ZUlvbmljTWluTWF4RGF0ZS5waXBlJztcclxuXHJcbi8vIGV4cG9ydCAqIGZyb20gICcuL2xpYi96bW9kYWwvem1vZGFsLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pncmlkL2RhdGUtcmFuZ2UtY2VsbC1maWx0ZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenNjaGVkdWxlci96c2NoZWR1bGVyLnRvb2xiYXIuY29tcG9uZW50JztcclxuXHJcblxyXG4vKioqKioqKioqKiB6Q29tcG9uZW50ICoqKioqKioqKiovXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpY29udGFpbmVyL3VpY29udGFpbmVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpY29udGVudC91aWNvbnRlbnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdWloZWFkZXIvdWloZWFkZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdWlwYWdlL3VpcGFnZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aW1lbnVjb250ZW50L3VpbWVudWNvbnRlbnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdWltZW51YnV0dG9uL3VpbWVudWJ1dHRvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi91aWFwcG1lbnVjb250ZW50L3VpYXBwbWVudWNvbnRlbnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdWlidWxsZXRpbi91aWJ1bGxldGluLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpYWN0aW9uYnV0dG9uL3VpYWN0aW9uYnV0dG9uLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3VpdmFsaWRhdGlvbm1lc3NhZ2UvdWl2YWxpZGF0aW9ubWVzc2FnZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96YnVsbGV0L3pidWxsZXQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemJ1dHRvbnMvemJ1dHRvbnMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemNhcmQvemNhcmQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemNoYXJ0L3pjaGFydC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Y2hlY2tib3gvemNoZWNrYm94LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pjaGlwL3pjaGlwLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pjb2RlZWRpdG9yL3pjb2RlZWRpdG9yLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pkYXRlcmFuZ2UvemRhdGVyYW5nZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96ZGF0ZXRpbWUvemRhdGV0aW1lLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pkaXYvemRpdi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Zm9ybS96Zm9ybS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Zm9ybWNvbnRyb2wvemZvcm1jb250cm9sLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pnYXVnZS96Z2F1Z2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemdyaWQvemdyaWQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemdyaWQvY29udGFpbmVyL3pncmlkLWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Z3JpZC96Z3JpZC5wb3B1cC5hbmNob3ItdGFyZ2V0LmRpcmVjdGl2ZSdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemltZy96aW1nLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3psYWJlbC96bGFiZWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvem1mYi96bWZiLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ptb2RhbC96bW9kYWwuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvem1vZGFsL3ptb2RhbC1tb2JpbGUuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvem51bWVyaWMvem51bWVyaWMuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenBvc3RzZWxlY3RpbnB1dC96cG9zdHNlbGVjdGlucHV0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pyYWRpb2J1dHRvbi96cmFkaW9idXR0b24uY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenJlcG9ydC96cmVwb3J0LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pzY2hlZHVsZXIvenNjaGVkdWxlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96c2VsZWN0bXVsdGlwbGUvenNlbGVjdG11bHRpcGxlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3p0YWIvenRhYi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dGV4dC96dGV4dC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dGV4dGFyZWEvenRleHRhcmVhLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3p0ZXh0ZWRpdG9yL3p0ZXh0ZWRpdG9yLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3p0cmVlL3p0cmVlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3p0cmVlbGlzdC96dHJlZWxpc3QuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenRyZW5kY2FyZC96dHJlbmRjYXJkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3p1ZGYvenVkZi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dW5rbm93bi96dW5rbm93bi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96dXBsb2FkL3p1cGxvYWQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvendvcmtmbG93YnV0dG9ucy96d29ya2Zsb3didXR0b25zLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2tjYXJkL2tjYXJkLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3ppbnB1dC1jb250YWluZXIvemlucHV0LWNvbnRhaW5lci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96cHJvZ3Jlc3NiYXIvenByb2dyZXNzYmFyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYnV0dG9uZmllbGRiYXNlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY29udGFpbmVyZmllbGRiYXNlLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9maWVsZGJhc2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9pbnB1dC1lcnJvci1tZXNzYWdlL2lucHV0LWVycm9yLW1lc3NhZ2UuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZW1iZWQtY29tcG9uZW50cy9pbnB1dC1maWVsZC1hZGRvbnMvaW5wdXQtZmllbGQtYWRkb25zLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZW1iZWQtY29tcG9uZW50cy9wYWdlLWxvYWRlci9wYWdlLWxvYWRlci5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VtYmVkLWNvbXBvbmVudHMvc3Bpbm5lci9zcGlubmVyLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZW1iZWQtY29tcG9uZW50cy9wcm9jZXNzaW5nLXJlY29yZC1sb2FkZXIvcHJvY2Vzc2luZy1yZWNvcmQtbG9hZGVyLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvenNlbGVjdG11bHRpcGxlL3pzZWxlY3RtdWx0aXBsZS5waXBlJ1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZnF1ZXJ5YnVpbGRlci9zZnF1ZXJ5YnVpbGRlci5jb21wb25lbnQnXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3psb29wL3psb29wLmNvbXBvbmVudCdcclxuZXhwb3J0ICogZnJvbSAnLi9saWIva3NwbGl0dGVyL2tzcGxpdHRlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi92aXJ0dWFsLXNjcm9sbC92aXJ0dWFsLXNjcm9sbC5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi96Y29sb3JwaWNrZXIvemNvbG9ycGlja2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2ttZW51L2ttZW51LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2tzY3JvbGx2aWV3L2tzY3JvbGx2aWV3LmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2VtYmVkLWNvbXBvbmVudHMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9maWNvbi9maWNvbi5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZmRhdGV0aW1lcGlja2VyL3NmZGF0ZXRpbWVwaWNrZXIuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvemdhbnR0Y2hhcnQvemdhbnR0Y2hhcnQuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZHJvcGRvd25fYnV0dG9ucy9kcm9wZG93bl9idXR0b25zLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3picmVhZGNydW1iL3picmVhZGNydW1iLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3pzbGlkZXIvenNsaWRlci5jb21wb25lbnQnOyJdfQ==
|