mmhglobal-dynamicform 2.32.2 → 2.34.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 +16 -0
- package/esm2020/lib/embed-components/input-field-addons/input-field-addons.component.mjs +1 -1
- package/esm2020/lib/kcard/kcard.component.mjs +1 -1
- package/esm2020/lib/services/main.service.mjs +4 -4
- package/esm2020/lib/services/zcomponent.debug.service.mjs +93 -25
- package/esm2020/lib/sfquerybuilder/sfquerybuilder.component.mjs +4 -4
- package/esm2020/lib/uiactionbutton/uiactionbutton.component.mjs +1 -1
- package/esm2020/lib/uibulletin/uibulletin.component.mjs +1 -1
- package/esm2020/lib/virtual-scroll/virtual-scroll.component.mjs +3 -3
- package/esm2020/lib/zbuttons/zbuttons.component.mjs +1 -1
- package/esm2020/lib/zdatetime/zdatetime.component.mjs +1 -1
- package/esm2020/lib/zform/zform.component.mjs +4 -4
- package/esm2020/lib/zgrid/container/zgrid-container.component.mjs +1 -1
- package/esm2020/lib/zgrid/zgrid.binding.directive.mjs +21 -16
- package/esm2020/lib/zgrid/zgrid.component.mjs +2 -2
- package/esm2020/lib/zgrid/zgrid.service.mjs +2 -2
- package/esm2020/lib/zmodal/zmodal-mobile.component.mjs +1 -1
- package/esm2020/lib/zmodal/zmodal.component.mjs +1 -1
- package/esm2020/lib/zreport/zreport.component.mjs +1 -1
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +196 -144
- package/esm2020/lib/ztextarea/ztextarea.component.mjs +17 -2
- package/esm2020/lib/ztree/ztree.component.mjs +1 -1
- package/esm2020/lib/ztreelist/ztreelist.component.mjs +1 -1
- package/esm2020/lib/ztrendcard/ztrendcard.component.mjs +17 -3
- package/esm2020/lib/zudf/zudf.component.mjs +26 -12
- package/esm2020/lib/zworkflowbuttons/zworkflowbuttons.component.mjs +1 -1
- package/fesm2015/mmhglobal-dynamicform.mjs +399 -224
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +391 -223
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/services/zcomponent.debug.service.d.ts +3 -1
- package/lib/zselectmultiple/zselectmultiple.component.d.ts +24 -14
- package/lib/ztextarea/ztextarea.component.d.ts +5 -2
- package/lib/ztrendcard/ztrendcard.component.d.ts +2 -0
- package/package.json +1 -1
|
@@ -149,10 +149,10 @@ export class SfquerybuilderComponent {
|
|
|
149
149
|
return of(false);
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
-
async renderComponentType(field, fieldTitle) {
|
|
152
|
+
async renderComponentType(field, fieldTitle, fieldName) {
|
|
153
153
|
let componentLabel = field.SubType ? field.Label : field.Label ?? field.Name;
|
|
154
154
|
componentLabel = !ZComponentHelper.isNullUndefinedEmpty(fieldTitle) ? "[" + fieldTitle + "] " + field.Label : !ZComponentHelper.isNullUndefinedEmpty(field.Label) ? field.Label : field.Name;
|
|
155
|
-
let componentField = !ZComponentHelper.isNullUndefinedEmpty(
|
|
155
|
+
let componentField = !ZComponentHelper.isNullUndefinedEmpty(fieldName) ? fieldName + "_" + field.Value : field.Value;
|
|
156
156
|
if (field.Type === 'category' || field.Type === 'multiselect' || field.Type === 'zuiselectmultiple') {
|
|
157
157
|
this.sdFilter.push({
|
|
158
158
|
field: componentField,
|
|
@@ -190,7 +190,7 @@ export class SfquerybuilderComponent {
|
|
|
190
190
|
else if (field.Type === 'kcard') {
|
|
191
191
|
if (field.Value.length > 0) {
|
|
192
192
|
field.Value.forEach(async (item) => {
|
|
193
|
-
this.renderComponentType(item, field.Title);
|
|
193
|
+
this.renderComponentType(item, field.Title, field.Name);
|
|
194
194
|
});
|
|
195
195
|
}
|
|
196
196
|
}
|
|
@@ -496,4 +496,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
496
496
|
}], form: [{
|
|
497
497
|
type: Input
|
|
498
498
|
}] } });
|
|
499
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHdEYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBZSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsMkNBQTJDO0FBQzNDLE9BQU8sRUFDUyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFDaEMsd0JBQXdCLEVBQzdDLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQU96QixNQUFNLE9BQU8sdUJBQXVCO0lBNkZsQyxZQUNVLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxhQUE0QjtRQUY1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztR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b3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIGlnbm9yZUVsZW1lbnRzLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSdWxlTW9kZWwsIFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwgQ29sdW1uc01vZGVsLCBUZW1wbGF0ZUNvbHVtbiwgUnVsZUNoYW5nZUV2ZW50QXJncyB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLXF1ZXJ5YnVpbGRlcic7XHJcbmltcG9ydCB7IERyb3BEb3duTGlzdCwgTXVsdGlTZWxlY3QgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZHJvcGRvd25zJztcclxuaW1wb3J0IHsgZ2V0Q29tcG9uZW50LCBjcmVhdGVFbGVtZW50IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWJhc2UnO1xyXG5pbXBvcnQgeyBEYXRhTWFuYWdlciwgUXVlcnkgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItZGF0YSc7XHJcbmltcG9ydCB7IENoZWNrQm94IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWJ1dHRvbnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEZpZWxkU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpGaWVsZCwgWkdyb3VwLFxyXG4gIEZvbnRBd2VTb21lU2VydmljZSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2ZxdWVyeWJ1aWxkZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZnF1ZXJ5YnVpbGRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNmcXVlcnlidWlsZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdxdWVyeWJ1aWxkZXInKSBxcnlCbGRyT2JqOiBRdWVyeUJ1aWxkZXJDb21wb25lbnQ7XHJcbiAgQElucHV0KCkgZGF0YTogWkZpZWxkO1xyXG4gIEBJbnB1dCgpIGdyb3VwOiBaR3JvdXA7XHJcbiAgQElucHV0KCkgZm9ybTogRm9ybUdyb3VwO1xyXG5cclxuICBxYkl0ZW1zID0ge307XHJcblxyXG4gIHB1YmxpYyBjb21wb25lbnRQcm9wZXJ0aWVzID0gbmV3IFpDb21wb25lbnRQcm9wZXJ0aWVzKCk7XHJcbiAgcHVibGljIGlzc2ZMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcXVlcnlDdHJsOiBhbnk7XHJcbiAgcHVibGljIGFsbG93UnVsZXNldDogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGFsbG93Q29sbGFwc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcGVyc2lzdFZhbHVlT25GaWVsZENoYW5nZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHJ1bGU6IGFueTtcclxuICBwdWJsaWMgZmlsdGVyczogYW55O1xyXG4gIHByaXZhdGUgZmllbGRzOiBhbnk7XHJcbiAgcHVibGljIGRpc3BsYXlSdWxlOiBhbnkgPSAnJztcclxuXHJcbiAgcHJpdmF0ZSBsb2FkZWREcm9wZG93bk9wdGlvbnMgPSBbXTtcclxuXHJcbiAgcHVibGljIHNmRGF0YTogT2JqZWN0W107XHJcbiAgcHVibGljIGltcG9ydFJ1bGVzOiBSdWxlTW9kZWw7XHJcbiAgcHVibGljIHNkRmlsdGVyOiBDb2x1bW5zTW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZlFCVGVtcGxhdGU6IFRlbXBsYXRlQ29sdW1uO1xyXG5cclxuICAvLyNyZWdpb24gT3BlcmF0b3JcclxuICBwcml2YXRlIHJlYWRvbmx5IGVxdWFsT3BlcmF0b3IgPSB7IHZhbHVlOiAnZXF1YWwnLCBrZXk6ICdFcXVhbHMnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBub3RlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ25vdGVxdWFsJywga2V5OiAnTm90IEVxdWFscycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0c3dpdGhPcGVyYXRvciA9IHsgdmFsdWU6ICdzdGFydHN3aXRoJywga2V5OiAnU3RhcnQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZHN3aXRoT3BlcmF0b3IgPSB7IHZhbHVlOiAnZW5kc3dpdGgnLCBrZXk6ICdFbmQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5zT3BlcmF0b3IgPSB7IHZhbHVlOiAnY29udGFpbnMnLCBrZXk6ICdDb250YWlucycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzZW1wdHlPcGVyYXRvciA9IHsgdmFsdWU6ICdpc2VtcHR5Jywga2V5OiAnSXMgRW1wdHknIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdGVtcHR5T3BlcmF0b3IgPSB7IHZhbHVlOiAnaXNub3RlbXB0eScsIGtleTogJ0lzIE5vdCBFbXB0eScgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzbnVsbE9wZXJhdG9yID0geyB2YWx1ZTogJ2lzbnVsbCcsIGtleTogJ0lzIE51bGwnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdG51bGxPcGVyYXRvciA9IHsgdmFsdWU6ICdpc25vdG51bGwnLCBrZXk6ICdJcyBOb3QgTnVsbCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnaW4nLCBrZXk6ICdJbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnbm90aW4nLCBrZXk6ICdOb3QgSW4nIH1cclxuICBwcml2YXRlIHJlYWRvbmx5IGdyZWF0ZXJ0aGFuT3BlcmF0b3IgPSB7IHZhbHVlOiAnZ3JlYXRlcnRoYW4nLCBrZXk6ICdHcmVhdGVyIFRoYW4nIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvciA9IHsgdmFsdWU6ICdncmVhdGVydGhhbm9yZXF1YWwnLCBrZXk6ICdHcmVhdGVyIFRoYW4gT3IgRXF1YWxzJyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGVzc3RoYW5PcGVyYXRvciA9IHsgdmFsdWU6ICdsZXNzdGhhbicsIGtleTogJ0xlc3MgVGhhbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxlc3N0aGFub3JlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ2xlc3N0aGFub3JlcXVhbCcsIGtleTogJ0xlc3MgVGhhbiBPciBFcXVhbHMnIH07XHJcblxyXG4gIHB1YmxpYyBpbk9wZXJhdG9yczogc3RyaW5nW10gPSBbJ2luJywgJ25vdGluJ107XHJcbiAgcHVibGljIGRyb3Bkb3duT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmluT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGluT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIHN0cmluZ09wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5zdGFydHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmVuZHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmNvbnRhaW5zT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzZW1wdHlPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RlbXB0eU9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc251bGxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RudWxsT3BlcmF0b3JcclxuICBdO1xyXG4gIHB1YmxpYyBpbnRlZ2VyT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFuT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFub3JlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuICBwdWJsaWMgZGF0ZU9wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5PcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5vcmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIGJvb2xlYW5PcGVyYXRvcnM6IGFueSA9IFtcclxuICAgIHRoaXMuZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubm90ZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuICAvLyNlbmRyZWdpb25cclxuICBwdWJsaWMgc2VsZWN0aW9uQ29tcG9uZW50TGlzdCA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0Q29tcG9uZW50UHJvcGVydGllcyh0aGlzKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIucmVnaXN0ZXJDb21wb25lbnQodGhpcyk7XHJcblxyXG4gICAgb2YodHJ1ZSkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKF8gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUxvYWRGaWVsZCh0aGlzLmRhdGEpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGEgYXMgWkZpZWxkO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKF8gPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRRdWVyeUJ1aWxkZXIoKTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gV2hlcmUgdG8gdXBkYXRlIG9wZXJhdG9yIHN5bnRheFxyXG4gICAgICAvLyAxLiBFMSAtIHF1ZXJ5QnVpbGRlclRlbXBsYXRlMlxyXG4gICAgICAvLyAyLiBzaGFyZWQgZm9sZGVyID4gaGVscGVyID4gcXVlcnlidWlsZGVyLWZpZWxkaW5mby1oZWxwZXIudHNcclxuICAgICAgLy8gMy4gcGF0Y2ggZGIgZGF0YSB3aXRoIHNtYWxsIGNhcGl0YWwgbGV0dGVyXHJcblxyXG4gICAgICAvL3RoaXMuaXNzZkxvYWRlZCA9IHRydWU7ICBcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBiZWZvcmVMb2FkRmllbGQoZmllbGRFbGVtZW50RGF0YTogYW55KSB7XHJcbiAgICBsZXQgYmVmb3JlTG9hZEZpZWxkID0gZmllbGRFbGVtZW50RGF0YVsnQmVmb3JlTG9hZEZpZWxkJ107XHJcbiAgICBpZiAoYmVmb3JlTG9hZEZpZWxkKSB7XHJcbiAgICAgIGJlZm9yZUxvYWRGaWVsZCA9IGJlZm9yZUxvYWRGaWVsZC5yZXBsYWNlKCdtb2RhbEdyb3VwLicsICdncm91cC4nKTtcclxuICAgICAgY29uc3QgY2FsbEZ1bmMgPSBldmFsKCd0aGlzLicgKyBiZWZvcmVMb2FkRmllbGQpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiBjYWxsRnVuYyA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgY29uc3QgbmV3RnVuYyA9IGNhbGxGdW5jLmJpbmQodGhpcyk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0Z1bmMoZXZlbnQsIHRoaXMsIGZpZWxkRWxlbWVudERhdGEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YoZmllbGRFbGVtZW50RGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGxvYWRRdWVyeUJ1aWxkZXIoKTogT2JzZXJ2YWJsZTxhbnk+IHwgT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5kYXRhWydBbGxvd0NvbGxhcHNlJ10gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5hbGxvd0NvbGxhcHNlID0gdGhpcy5kYXRhWydBbGxvd0NvbGxhcHNlJ107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWxsb3dSdWxlc2V0J10gPT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuYWxsb3dSdWxlc2V0ID0gdGhpcy5kYXRhWydBbGxvd1J1bGVzZXQnXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhWydGaWx0ZXJzJ10pIHtcclxuICAgICAgdGhpcy5maWx0ZXJzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgdGhpcy5kYXRhWydGaWx0ZXJzJ10sXHJcbiAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmllbGRzID0gdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZSh0aGlzLmRhdGEuVmFsdWUsIFwiRm9ybUZpZWxkXCIsIG51bGwsIG51bGwpO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5waXBlKFxyXG4gICAgICAgIHRhcCgoZGF0YTogW10pID0+IHtcclxuXHJcbiAgICAgICAgICBkYXRhLmZvckVhY2goYXN5bmMgKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRUeXBlKGZpZWxkKTtcclxuICAgICAgICAgIH0pOy8vZW5kIGZvcmVhY2hcclxuXHJcbiAgICAgICAgICB0aGlzLmlzc2ZMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHJldHVybiBvZih0cnVlKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogXCIsIGVycm9yKTtcclxuICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcmVuZGVyQ29tcG9uZW50VHlwZShmaWVsZDogYW55LCBmaWVsZFRpdGxlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgY29tcG9uZW50TGFiZWwgPSBmaWVsZC5TdWJUeXBlID8gZmllbGQuTGFiZWwgOiBmaWVsZC5MYWJlbCA/PyBmaWVsZC5OYW1lO1xyXG4gICAgY29tcG9uZW50TGFiZWwgPSAhWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShmaWVsZFRpdGxlKSA/IFwiW1wiICsgZmllbGRUaXRsZSArIFwiXSBcIiArIGZpZWxkLkxhYmVsIDogIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoZmllbGQuTGFiZWwpID8gZmllbGQuTGFiZWwgOiBmaWVsZC5OYW1lO1xyXG5cclxuICAgIGxldCBjb21wb25lbnRGaWVsZCA9ICFaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KGZpZWxkVGl0bGUpID8gZmllbGRUaXRsZSArIFwiX1wiICsgZmllbGQuVmFsdWUgOiBmaWVsZC5WYWx1ZTtcclxuXHJcbiAgICBpZiAoZmllbGQuVHlwZSA9PT0gJ2NhdGVnb3J5JyB8fCBmaWVsZC5UeXBlID09PSAnbXVsdGlzZWxlY3QnIHx8IGZpZWxkLlR5cGUgPT09ICd6dWlzZWxlY3RtdWx0aXBsZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kcm9wZG93bk9wZXJhdG9ycyxcclxuICAgICAgICB0ZW1wbGF0ZTogYXdhaXQgdGhpcy5nZW5lcmF0ZUNvbHVtblNlbGVjdGlvbihmaWVsZCksXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5UeXBlID09PSAnZGF0ZScgfHwgZmllbGQuVHlwZSA9PT0gJ3pkYXRlJyB8fCBmaWVsZC5UeXBlID09PSAnemRhdGV0aW1lJyB8fCBmaWVsZC5UeXBlID09PSAnenVpZGF0ZXRpbWUnIHx8IGZpZWxkLlR5cGUgPT09ICd6c2hvcnRkYXRlJykge1xyXG4gICAgICB0aGlzLnNkRmlsdGVyLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBjb21wb25lbnRGaWVsZCxcclxuICAgICAgICBsYWJlbDogY29tcG9uZW50TGFiZWwsXHJcbiAgICAgICAgdHlwZTogJ2RhdGUnLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kYXRlT3BlcmF0b3JzLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSA9PT0gJ251bWJlcicgfHwgZmllbGQuVHlwZSA9PT0gJ3pudW1lcmljJyB8fCBmaWVsZC5UeXBlID09PSAnbnVtZXJpYycpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIHR5cGU6ICdudW1iZXInLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5pbnRlZ2VyT3BlcmF0b3JzLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVmFsdWUgPT09ICdib29sZWFuJyB8fCBmaWVsZC5WYWx1ZSA9PT0gJ3pjaGVja2JveCcpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICBvcGVyYXRvcnM6IHRoaXMuYm9vbGVhbk9wZXJhdG9ycyxcclxuICAgICAgICB0ZW1wbGF0ZTogYXdhaXQgdGhpcy5nZW5lcmF0ZUNvbHVtbkNoZWNrYm94KGZpZWxkLk5hbWUsIGZhbHNlKVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSA9PT0gJ2tjYXJkJykge1xyXG4gICAgICBpZiAoZmllbGQuVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZpZWxkLlZhbHVlLmZvckVhY2goYXN5bmMgKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRUeXBlKGl0ZW0sIGZpZWxkLlRpdGxlKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5UeXBlICE9ICd6bGFiZWwnKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICBvcGVyYXRvcnM6IHRoaXMuc3RyaW5nT3BlcmF0b3JzLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2RGaWx0ZXIuc29ydCgoYSwgYikgPT4gYS5sYWJlbC50b0xvd2VyQ2FzZSgpIDwgYi5sYWJlbC50b0xvd2VyQ2FzZSgpID8gLTEgOiAxKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBHZW5lcmF0ZSBjb21wb25lbnQgXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbHVtbkNoZWNrYm94KGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogVGVtcGxhdGVDb2x1bW4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3JlYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBhdHRyczogeyAndHlwZSc6ICdjaGVja2JveCcgfSB9KTtcclxuICAgICAgfSxcclxuICAgICAgZGVzdHJveTogKGFyZ3M6IHsgZWxlbWVudElkOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJncy5lbGVtZW50SWQpLCAnY2hlY2tib3gnKSBhcyBDaGVja0JveCkuZGVzdHJveSgpO1xyXG4gICAgICB9LFxyXG4gICAgICB3cml0ZTogKGFyZ3M6IHsgZWxlbWVudHM6IEVsZW1lbnQsIHZhbHVlczogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICBjb25zdCBib3hPYmo6IENoZWNrQm94ID0gbmV3IENoZWNrQm94KHtcclxuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgICAgIGNoZWNrZWQ6IHZhbHVlLFxyXG4gICAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXJ5Qmxkck9iai5ub3RpZnlDaGFuZ2UodmFsdWUsIGUuZXZlbnQudGFyZ2V0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBib3hPYmouYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlQ29sdW1uU2VsZWN0aW9uKGZpZWxkRWxlbWVudERhdGE6IGFueSk6IFRlbXBsYXRlQ29sdW1uIHtcclxuICAgIHJldHVybiB7XHJcblxyXG4gICAgICAvLyBDcmVhdGVzIHRoZSBjdXN0b20gY29tcG9uZW50XHJcbiAgICAgIGNyZWF0ZTogKCkgPT4ge1xyXG4gICAgICAgIC8vIEFkZGl0aW9uYWwgZmlsdGVyIHNldCBpbiB0aGUgcGFnZVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIHsgYXR0cnM6IHsgJ3R5cGUnOiAndGV4dCcgfSB9KTsgLy8gJ2Rpc3BsYXk6IG5vbmUnXHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBEZXN0cm95IHRoZSBjdXN0b20gY29tcG9uZW50XHJcbiAgICAgIGRlc3Ryb3k6IChhcmdzOiB7IGVsZW1lbnRJZDogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICBpZiAoYXJnc1snZWxlbWVudHMnXSkge1xyXG4gICAgICAgICAgbGV0IG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdCA9IChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJncy5lbGVtZW50SWQpLCAnbXVsdGlzZWxlY3QnKSBhcyBNdWx0aVNlbGVjdCk7XHJcbiAgICAgICAgICBpZiAobXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgbXVsdGlTZWxlY3QuZGVzdHJveSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRyb3Bkb3duOiBEcm9wRG93bkxpc3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudElkKSwgJ2Ryb3Bkb3dubGlzdCcpIGFzIERyb3BEb3duTGlzdCk7XHJcbiAgICAgICAgICBpZiAoZHJvcGRvd24pIHtcclxuICAgICAgICAgICAgZHJvcGRvd24uZGVzdHJveSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ107XHJcbiAgICAgICAgICBpZiAoc2VsZWN0T3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgPSBzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nID0gc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMICsgJ18nICsgYXJncy5lbGVtZW50SWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMuaW5jbHVkZXMocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucyA9IHRoaXMucmVtb3ZlQXJyYXlJdGVtKHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFdpcmUgZXZlbnRzIGZvciB0aGUgY3VzdG9tIGNvbXBvbmVudC5cclxuICAgICAgd3JpdGU6IChhcmdzOiB7IGVsZW1lbnRzOiBFbGVtZW50LCB2YWx1ZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAvL29yaWdpblxyXG4gICAgICAgIGlmIChmaWVsZEVsZW1lbnREYXRhWydWYWx1ZU9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgLy8gY29udmVydCB0byBwcm9wZXJ0eSBuYW1lIHVzZWQgaW4gdGhlIGNvbXBvbmVudCByZW5kZXJpbmdcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3Q6IHsgW25hbWU6IHN0cmluZ106IE9iamVjdCB9W10gPSBbXTtcclxuICAgICAgICAgIGZpZWxkRWxlbWVudERhdGFbJ1ZhbHVlT3B0aW9ucyddLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgIHRleHQ6IGl0ZW1bJ05hbWUnXSxcclxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbVsnVmFsdWUnXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1hbnVhbCBkcm9wZG93biBvciB6dWRmIG1hbnVhbCBkcm9wZG93blxyXG4gICAgICAgIGVsc2UgaWYgKGZpZWxkRWxlbWVudERhdGFbJ1NlbGVjdE9wdGlvbnMnXSAmJiBBcnJheS5pc0FycmF5KGZpZWxkRWxlbWVudERhdGFbJ1NlbGVjdE9wdGlvbnMnXSkpIHtcclxuICAgICAgICAgIC8vIGNvbnZlcnQgdG8gcHJvcGVydHkgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQgcmVuZGVyaW5nXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25MaXN0OiB7IFtuYW1lOiBzdHJpbmddOiBPYmplY3QgfVtdID0gW107XHJcbiAgICAgICAgICBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgdGV4dDogaXRlbVsndGV4dCddLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtWyd2YWx1ZSddXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgc2VsZWN0aW9uQ29tcG9uZW50LmFwcGVuZFRvKCcjJyArIGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8genVkZiBSZXNvdXJjZVVSTCAvIENvbW1vbiBNYXN0ZXIgZHJvcGRvd25cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ107XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgPSBzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddO1xyXG5cclxuICAgICAgICAgIC8vIFJlc291cmNlVVJMIGRyb3Bkb3duXHJcbiAgICAgICAgICBpZiAoc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcgPSBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgKyAnXycgKyBhcmdzLmVsZW1lbnRzLmlkO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucy5pbmNsdWRlcyhwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLnB1c2gocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXSA9IHRoaXMuZmlsdGVycztcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zKTtcclxuICAgICAgICAgICAgICBwYXJhbS5wYWdlU2l6ZSA9IHNlbGVjdE9wdGlvbnNbJ1BhZ2VTaXplJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uY29sdW1ucyA9IHNlbGVjdE9wdGlvbnNbJ0NvbHVtbnMnXTtcclxuICAgICAgICAgICAgICBwYXJhbS5maWx0ZXJzICs9IHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXTtcclxuICAgICAgICAgICAgICBwYXJhbS5zb3J0Q29sdW1uTmFtZSA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRDb2x1bW5OYW1lJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydE9yZGVyID0gc2VsZWN0T3B0aW9uc1snU29ydE9yZGVyJ107XHJcblxyXG4gICAgICAgICAgICAgIC8vIE5lZWQgZGVsYXkgNDAwbXMgaWYgbm90IDNyZCBzZWdtZW50ICh2YWx1ZSkgd2lsbCBub3QgYmUgcmVuZGVyZWQuXHJcbiAgICAgICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRQYWdlVXJsKHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCksIHBhcmFtKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgZGVsYXkoNDAwKSxcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YVNldC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbVtzZWxlY3RPcHRpb25zWydOYW1lJ11dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bc2VsZWN0T3B0aW9uc1snVmFsdWUnXV1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vI3JlZ2lvbiB1c2VkIGZvciB1cGRhdGVTZWxlY3Rpb25PcHRpb25cclxuICAgICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdJbmRleCA9IHRoaXMuc2VsZWN0aW9uQ29tcG9uZW50TGlzdC5maW5kSW5kZXgoXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uY29tcG9uZW50SWQgPT09IGFyZ3MuZWxlbWVudHMuaWRcclxuICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIGlmIChleGlzdGluZ0luZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9iamVjdCB3aXRoIHRoZSBzYW1lIGNvbXBvbmVudElkIGV4aXN0cywgcmVwbGFjZSByZXNvdXJjZVVybFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29tcG9uZW50TGlzdFtleGlzdGluZ0luZGV4XS5yZXNvdXJjZVVybCA9IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3Qgd2l0aCBjb21wb25lbnRJZCBkb2Vzbid0IGV4aXN0LCBwdXNoIGEgbmV3IG9iamVjdFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ29tcG9uZW50TGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlVXJsOiBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJZDogYXJncy5lbGVtZW50cy5pZFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vI2VuZHJlZ2lvblxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8genVkZiBDb21tb24gTWFzdGVyIGRyb3Bkb3duXHJcbiAgICAgICAgICBlbHNlIGlmIChmaWVsZEVsZW1lbnREYXRhLnp1ZGZEYXRhU291cmNlVHlwZSAmJiBmaWVsZEVsZW1lbnREYXRhLnp1ZGZEYXRhU291cmNlVHlwZSA9PT0gXCJyZXNvdXJjZVwiKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBleHRyYWN0IHp1ZGZfZHJvcGRvd24gZnJvbSBzZXNzaW9uIHN0b3JhZ2VcclxuICAgICAgICAgICAgY29uc3QgenVkZl9kcm9wZG93biA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ6dWRmX2Ryb3Bkb3duXCIpID8gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwienVkZl9kcm9wZG93blwiKSkgOiBudWxsO1xyXG4gICAgICAgICAgICBpZiAoenVkZl9kcm9wZG93bikge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgenVkZl9kcm9wZG93bi5mb3JFYWNoKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gcmVzLnRleHQuc3BsaXQoXCJPcHRpb25zXCIpWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkRWxlbWVudERhdGEuTGFiZWwgPT09IG5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgcmVzLnZhbHVlLmZvckVhY2godmFsID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogdmFsWydOYW1lJ10sXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsWydJZCddXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBVc2VyIExpc3QgZHJvcGRvd25cclxuICAgICAgICAgIGVsc2UgaWYgKGZpZWxkRWxlbWVudERhdGEuenVkZkRhdGFTb3VyY2VUeXBlICYmIGZpZWxkRWxlbWVudERhdGEuenVkZkRhdGFTb3VyY2VUeXBlID09PSBcInVzZXJcIikge1xyXG4gICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJMaXN0ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZT8uZ2V0SXRlbShcInVzZXJMaXN0XCIpID8/ICdudWxsJyk7XHJcblxyXG4gICAgICAgICAgICAvL2NvbnN0IGFycmF5VGVzdCA9IHVzZXJMaXN0Lm1hcCgoeyBTZWxlY3Rpb25OYW1lLCBJZCB9KSA9PiAoeyB0ZXh0OiBTZWxlY3Rpb25OYW1lLCB2YWx1ZTogSWQgfSkpO1xyXG4gICAgICAgICAgICB1c2VyTGlzdC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgdGV4dDogaXRlbVsnU2VsZWN0aW9uTmFtZSddLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bJ0lkJ11cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0vL2VuZCB3cml0ZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVNlbGVjdGlvbk9wdGlvbihyZXNvdXJjZVVybDogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ29tcG9uZW50TGlzdC5mb3JFYWNoKHNlbGVjdGlvbkNvbXBvbmVudCA9PiB7XHJcbiAgICAgIGxldCBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdGlvbkNvbXBvbmVudC5jb21wb25lbnRJZCksICdtdWx0aXNlbGVjdCcpIGFzIE11bHRpU2VsZWN0KTtcclxuICAgICAgaWYgKG11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgbXVsdGlTZWxlY3QudmFsdWUgPSBkYXRhO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBkcm9wZG93bjogRHJvcERvd25MaXN0ID0gKGdldENvbXBvbmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rpb25Db21wb25lbnQuY29tcG9uZW50SWQpLCAnZHJvcGRvd25saXN0JykgYXMgRHJvcERvd25MaXN0KTtcclxuICAgICAgaWYgKGRyb3Bkb3duKSB7XHJcbiAgICAgICAgdGhpcy5maWVsZFNlcnZpY2UuZGF0YUZvcm1GaWVsZHNbdGhpcy5kYXRhLlZhbHVlXS5mb3JFYWNoKGFzeW5jIChmaWVsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmllbGQuU2VsZWN0T3B0aW9ucy5SZXNvdXJjZVVSTCA9PT0gc2VsZWN0aW9uQ29tcG9uZW50LnJlc291cmNlVXJsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZFsnU2VsZWN0T3B0aW9ucyddO1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgPSBzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRQYWdlU2V0dGluZ1BhcmFtcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhWydGaWx0ZXJzJ10pIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhWydGaWx0ZXJzJ10sXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVycykge1xyXG4gICAgICAgICAgICAgIHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXSA9IHRoaXMuZmlsdGVycztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcGFyYW0ucGFnZVNpemUgPSBzZWxlY3RPcHRpb25zWydQYWdlU2l6ZSddO1xyXG4gICAgICAgICAgICBwYXJhbS5jb2x1bW5zID0gc2VsZWN0T3B0aW9uc1snQ29sdW1ucyddO1xyXG4gICAgICAgICAgICBwYXJhbS5maWx0ZXJzICs9IHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXTtcclxuICAgICAgICAgICAgcGFyYW0uc29ydENvbHVtbk5hbWUgPSBzZWxlY3RPcHRpb25zWydTb3J0Q29sdW1uTmFtZSddO1xyXG4gICAgICAgICAgICBwYXJhbS5zb3J0T3JkZXIgPSBzZWxlY3RPcHRpb25zWydTb3J0T3JkZXInXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQodGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0UGFnZVVybChzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwpLCBwYXJhbSkucGlwZShcclxuICAgICAgICAgICAgICBtYXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBbXTtcclxuICAgICAgICAgICAgICAgIHJlc3AuZGF0YVNldC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtW3NlbGVjdE9wdGlvbnNbJ05hbWUnXV0sXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bc2VsZWN0T3B0aW9uc1snVmFsdWUnXV1cclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duLmRhdGFTb3VyY2UgPSBvcHRpb25MaXN0O1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUFycmF5SXRlbTxUPihhcnI6IEFycmF5PFQ+LCB2YWx1ZTogVCk6IEFycmF5PFQ+IHtcclxuICAgIGNvbnN0IGluZGV4ID0gYXJyLmluZGV4T2YodmFsdWUpO1xyXG4gICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgYXJyLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzOiBhbnksIG9wdGlvbkxpc3Q6IGFueSk6IE11bHRpU2VsZWN0IHwgRHJvcERvd25MaXN0IHtcclxuICAgIGlmICh0aGlzLmluT3BlcmF0b3JzLmluZGV4T2YoYXJncy5vcGVyYXRvcikgPiAtMSkge1xyXG4gICAgICByZXR1cm4gbmV3IE11bHRpU2VsZWN0KHtcclxuICAgICAgICBkYXRhU291cmNlOiBvcHRpb25MaXN0LFxyXG4gICAgICAgIGZpZWxkczogeyB0ZXh0OiAndGV4dCcsIHZhbHVlOiAndmFsdWUnIH0sXHJcbiAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWVzIGFzIHN0cmluZ1tdLFxyXG4gICAgICAgIG1vZGU6ICdDaGVja0JveCcsXHJcbiAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnFyeUJsZHJPYmoubm90aWZ5Q2hhbmdlKGUudmFsdWUsIGUuZWxlbWVudCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBzZXQgY29udGFpbnMgc2VhcmNoIGJ5IGRlZmF1bHRcclxuICAgICAgICBmaWx0ZXJpbmc6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMub25GaWx0ZXJpbmcoZSwgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IERyb3BEb3duTGlzdCh7XHJcbiAgICAgICAgYWxsb3dGaWx0ZXJpbmc6IHRydWUsIC8vIHNlYXJjaCBib3ggYXBwZWFyXHJcbiAgICAgICAgZGF0YVNvdXJjZTogb3B0aW9uTGlzdCxcclxuICAgICAgICBmaWVsZHM6IHsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ3ZhbHVlJyB9LFxyXG4gICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlcyBhcyBzdHJpbmcsXHJcbiAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBlLnZhbHVlICE9PSBudWxsID8gdGhpcy5xcnlCbGRyT2JqLm5vdGlmeUNoYW5nZShlLml0ZW1EYXRhLnZhbHVlLCBlLmVsZW1lbnQpIDogaWdub3JlRWxlbWVudHM7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBzZXQgZGVmYXVsdCBzZWFyY2ggYnkgJ2NvbnRhaW5zJ1xyXG4gICAgICAgIGZpbHRlcmluZzogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5vbkZpbHRlcmluZyhlLCBvcHRpb25MaXN0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgcHVibGljIG9uRmlsdGVyaW5nKGU6IGFueSwgb3B0aW9uTGlzdDogYW55KTogdm9pZCB7XHJcbiAgICAvLyBsb2FkIG92ZXJhbGwgZGF0YSB3aGVuIHNlYXJjaCBrZXkgZW1wdHkuXHJcbiAgICBpZiAoZS50ZXh0ID09PSAnJykge1xyXG4gICAgICBlLnVwZGF0ZURhdGEodGhpcy5kYXRhKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBEZWZpbmUgYXJyYXkgZGF0YVxyXG4gICAgICBsZXQgc2VhcmNoRGF0YSA9IG9wdGlvbkxpc3Q7XHJcblxyXG4gICAgICAvL0JpbmQgdGhlIGZpbHRlciBldmVudFxyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUXVlcnkoKTtcclxuXHJcbiAgICAgIC8vZnJhbWUgdGhlIHF1ZXJ5IGJhc2VkIG9uIHNlYXJjaCBzdHJpbmcgd2l0aCBmaWx0ZXIgdHlwZS5cclxuICAgICAgcXVlcnkgPSAoZS50ZXh0ICE9IFwiXCIpID8gcXVlcnkud2hlcmUoXCJ0ZXh0XCIsIFwiY29udGFpbnNcIiwgZS50ZXh0LCB0cnVlKSA6IHF1ZXJ5O1xyXG5cclxuICAgICAgLy9wYXNzIHRoZSBmaWx0ZXIgZGF0YSBzb3VyY2UsIGZpbHRlciBxdWVyeSB0byB1cGRhdGVEYXRhIG1ldGhvZC5cclxuICAgICAgZS51cGRhdGVEYXRhKHNlYXJjaERhdGEsIHF1ZXJ5KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2V0UXVlcnlWYWx1ZShzYXZlZERhdGE6IGFueSk6dm9pZCB7XHJcbiAgICBpZiAoc2F2ZWREYXRhKSB7XHJcbiAgICAgIHRoaXMucXJ5Qmxkck9iai5zZXRSdWxlcyhzYXZlZERhdGEpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVJ1bGUoeyBydWxlOiBzYXZlZERhdGEgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVzdWx0KCk6IFJ1bGVNb2RlbCB7XHJcbiAgICByZXR1cm4gdGhpcy5xcnlCbGRyT2JqLmdldFJ1bGVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlUnVsZShhcmdzOiBSdWxlQ2hhbmdlRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc3BsYXlSdWxlID0gSlNPTi5zdHJpbmdpZnkoYXJncy5ydWxlLCBudWxsLCAxMik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVJ1bGUoeyBydWxlOiB0aGlzLnFyeUJsZHJPYmouZ2V0VmFsaWRSdWxlcyh0aGlzLnFyeUJsZHJPYmoucnVsZSkgfSk7XHJcbiAgfVxyXG59XHJcblxyXG4iLCI8aW9uLWl0ZW0gKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8ZGl2IGNsYXNzPVwicWJjb250YWluZXJcIj5cclxuICAgIDxlanMtcXVlcnlidWlsZGVyICpuZ0lmPVwiaXNzZkxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjcXVlcnlidWlsZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwic2ZEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInNkRmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtydWxlXT1cImltcG9ydFJ1bGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChydWxlQ2hhbmdlKT1cInVwZGF0ZVJ1bGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlZCk9XCJvbkNoYW5nZSgpXCI+XHJcbiAgICA8L2Vqcy1xdWVyeWJ1aWxkZXI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIiFkYXRhLkhpZGVTaG93UmVzdWx0UGFuZWxcIj5cclxuICAgICAgPGJyPlxyXG4gICAgICA8aW9uLWxhYmVsPlJlc3VsdDwvaW9uLWxhYmVsPlxyXG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XCJvdXRwdXRcIlxyXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICBbcm93c109XCIxMFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDM7IHdpZHRoOiAxMDAlO1wiPnt7ZGlzcGxheVJ1bGV9fTwvdGV4dGFyZWE+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9pb24taXRlbT5cclxuIl19
|
|
499
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHdEYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBZSxLQUFLLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbkQsMkNBQTJDO0FBQzNDLE9BQU8sRUFDUyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFDaEMsd0JBQXdCLEVBQzdDLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQU96QixNQUFNLE9BQU8sdUJBQXVCO0lBNkZsQyxZQUNVLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxhQUE0QjtRQUY1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztR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KioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlbGF5LCBpZ25vcmVFbGVtZW50cywgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUnVsZU1vZGVsLCBRdWVyeUJ1aWxkZXJDb21wb25lbnQsIENvbHVtbnNNb2RlbCwgVGVtcGxhdGVDb2x1bW4sIFJ1bGVDaGFuZ2VFdmVudEFyZ3MgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYW5ndWxhci1xdWVyeWJ1aWxkZXInO1xyXG5pbXBvcnQgeyBEcm9wRG93bkxpc3QsIE11bHRpU2VsZWN0IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWRyb3Bkb3ducyc7XHJcbmltcG9ydCB7IGdldENvbXBvbmVudCwgY3JlYXRlRWxlbWVudCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1iYXNlJztcclxuaW1wb3J0IHsgRGF0YU1hbmFnZXIsIFF1ZXJ5IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWRhdGEnO1xyXG5pbXBvcnQgeyBDaGVja0JveCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1idXR0b25zJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHtcclxuICBGaWVsZFNlcnZpY2UsIFpDb21wb25lbnRIZWxwZXIsIFpDb21wb25lbnRQcm9wZXJ0aWVzLCBaRmllbGQsIFpHcm91cCxcclxuICBGb250QXdlU29tZVNlcnZpY2UsIERlZmF1bHRQYWdlU2V0dGluZ1BhcmFtcywgV2ViQXBpU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNmcXVlcnlidWlsZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NmcXVlcnlidWlsZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZnF1ZXJ5YnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgncXVlcnlidWlsZGVyJykgcXJ5Qmxkck9iajogUXVlcnlCdWlsZGVyQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIGRhdGE6IFpGaWVsZDtcclxuICBASW5wdXQoKSBncm91cDogWkdyb3VwO1xyXG4gIEBJbnB1dCgpIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgcWJJdGVtcyA9IHt9O1xyXG5cclxuICBwdWJsaWMgY29tcG9uZW50UHJvcGVydGllcyA9IG5ldyBaQ29tcG9uZW50UHJvcGVydGllcygpO1xyXG4gIHB1YmxpYyBpc3NmTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHF1ZXJ5Q3RybDogYW55O1xyXG4gIHB1YmxpYyBhbGxvd1J1bGVzZXQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBhbGxvd0NvbGxhcHNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHBlcnNpc3RWYWx1ZU9uRmllbGRDaGFuZ2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBydWxlOiBhbnk7XHJcbiAgcHVibGljIGZpbHRlcnM6IGFueTtcclxuICBwcml2YXRlIGZpZWxkczogYW55O1xyXG4gIHB1YmxpYyBkaXNwbGF5UnVsZTogYW55ID0gJyc7XHJcblxyXG4gIHByaXZhdGUgbG9hZGVkRHJvcGRvd25PcHRpb25zID0gW107XHJcblxyXG4gIHB1YmxpYyBzZkRhdGE6IE9iamVjdFtdO1xyXG4gIHB1YmxpYyBpbXBvcnRSdWxlczogUnVsZU1vZGVsO1xyXG4gIHB1YmxpYyBzZEZpbHRlcjogQ29sdW1uc01vZGVsW10gPSBbXTtcclxuICBwdWJsaWMgc2ZRQlRlbXBsYXRlOiBUZW1wbGF0ZUNvbHVtbjtcclxuXHJcbiAgLy8jcmVnaW9uIE9wZXJhdG9yXHJcbiAgcHJpdmF0ZSByZWFkb25seSBlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ2VxdWFsJywga2V5OiAnRXF1YWxzJyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbm90ZXF1YWxPcGVyYXRvciA9IHsgdmFsdWU6ICdub3RlcXVhbCcsIGtleTogJ05vdCBFcXVhbHMnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFydHN3aXRoT3BlcmF0b3IgPSB7IHZhbHVlOiAnc3RhcnRzd2l0aCcsIGtleTogJ1N0YXJ0IFdpdGgnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBlbmRzd2l0aE9wZXJhdG9yID0geyB2YWx1ZTogJ2VuZHN3aXRoJywga2V5OiAnRW5kIFdpdGgnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluc09wZXJhdG9yID0geyB2YWx1ZTogJ2NvbnRhaW5zJywga2V5OiAnQ29udGFpbnMnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc2VtcHR5T3BlcmF0b3IgPSB7IHZhbHVlOiAnaXNlbXB0eScsIGtleTogJ0lzIEVtcHR5JyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNub3RlbXB0eU9wZXJhdG9yID0geyB2YWx1ZTogJ2lzbm90ZW1wdHknLCBrZXk6ICdJcyBOb3QgRW1wdHknIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc251bGxPcGVyYXRvciA9IHsgdmFsdWU6ICdpc251bGwnLCBrZXk6ICdJcyBOdWxsJyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgaXNub3RudWxsT3BlcmF0b3IgPSB7IHZhbHVlOiAnaXNub3RudWxsJywga2V5OiAnSXMgTm90IE51bGwnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpbk9wZXJhdG9yID0geyB2YWx1ZTogJ2luJywga2V5OiAnSW4nIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBub3Rpbk9wZXJhdG9yID0geyB2YWx1ZTogJ25vdGluJywga2V5OiAnTm90IEluJyB9XHJcbiAgcHJpdmF0ZSByZWFkb25seSBncmVhdGVydGhhbk9wZXJhdG9yID0geyB2YWx1ZTogJ2dyZWF0ZXJ0aGFuJywga2V5OiAnR3JlYXRlciBUaGFuJyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JlYXRlcnRoYW5vcmVxdWFsT3BlcmF0b3IgPSB7IHZhbHVlOiAnZ3JlYXRlcnRoYW5vcmVxdWFsJywga2V5OiAnR3JlYXRlciBUaGFuIE9yIEVxdWFscycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxlc3N0aGFuT3BlcmF0b3IgPSB7IHZhbHVlOiAnbGVzc3RoYW4nLCBrZXk6ICdMZXNzIFRoYW4nIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBsZXNzdGhhbm9yZXF1YWxPcGVyYXRvciA9IHsgdmFsdWU6ICdsZXNzdGhhbm9yZXF1YWwnLCBrZXk6ICdMZXNzIFRoYW4gT3IgRXF1YWxzJyB9O1xyXG5cclxuICBwdWJsaWMgaW5PcGVyYXRvcnM6IHN0cmluZ1tdID0gWydpbicsICdub3RpbiddO1xyXG4gIHB1YmxpYyBkcm9wZG93bk9wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3Rpbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc251bGxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RudWxsT3BlcmF0b3JcclxuICBdO1xyXG4gIHB1YmxpYyBzdHJpbmdPcGVyYXRvcnM6IGFueSA9IFtcclxuICAgIHRoaXMuZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubm90ZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuc3RhcnRzd2l0aE9wZXJhdG9yLFxyXG4gICAgdGhpcy5lbmRzd2l0aE9wZXJhdG9yLFxyXG4gICAgdGhpcy5jb250YWluc09wZXJhdG9yLFxyXG4gICAgdGhpcy5pc2VtcHR5T3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90ZW1wdHlPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuICBwdWJsaWMgaW50ZWdlck9wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5PcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5vcmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIGRhdGVPcGVyYXRvcnM6IGFueSA9IFtcclxuICAgIHRoaXMuZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubm90ZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuZ3JlYXRlcnRoYW5PcGVyYXRvcixcclxuICAgIHRoaXMuZ3JlYXRlcnRoYW5vcmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmxlc3N0aGFuT3BlcmF0b3IsXHJcbiAgICB0aGlzLmxlc3N0aGFub3JlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc251bGxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RudWxsT3BlcmF0b3JcclxuICBdO1xyXG4gIHB1YmxpYyBib29sZWFuT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgcHVibGljIHNlbGVjdGlvbkNvbXBvbmVudExpc3QgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIG9mKHRydWUpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVMb2FkRmllbGQodGhpcy5kYXRhKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhIGFzIFpGaWVsZDtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkUXVlcnlCdWlsZGVyKCk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIFdoZXJlIHRvIHVwZGF0ZSBvcGVyYXRvciBzeW50YXhcclxuICAgICAgLy8gMS4gRTEgLSBxdWVyeUJ1aWxkZXJUZW1wbGF0ZTJcclxuICAgICAgLy8gMi4gc2hhcmVkIGZvbGRlciA+IGhlbHBlciA+IHF1ZXJ5YnVpbGRlci1maWVsZGluZm8taGVscGVyLnRzXHJcbiAgICAgIC8vIDMuIHBhdGNoIGRiIGRhdGEgd2l0aCBzbWFsbCBjYXBpdGFsIGxldHRlclxyXG5cclxuICAgICAgLy90aGlzLmlzc2ZMb2FkZWQgPSB0cnVlOyAgXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmVmb3JlTG9hZEZpZWxkKGZpZWxkRWxlbWVudERhdGE6IGFueSkge1xyXG4gICAgbGV0IGJlZm9yZUxvYWRGaWVsZCA9IGZpZWxkRWxlbWVudERhdGFbJ0JlZm9yZUxvYWRGaWVsZCddO1xyXG4gICAgaWYgKGJlZm9yZUxvYWRGaWVsZCkge1xyXG4gICAgICBiZWZvcmVMb2FkRmllbGQgPSBiZWZvcmVMb2FkRmllbGQucmVwbGFjZSgnbW9kYWxHcm91cC4nLCAnZ3JvdXAuJyk7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZXZhbCgndGhpcy4nICsgYmVmb3JlTG9hZEZpZWxkKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBuZXdGdW5jKGV2ZW50LCB0aGlzLCBmaWVsZEVsZW1lbnREYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mKGZpZWxkRWxlbWVudERhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkUXVlcnlCdWlsZGVyKCk6IE9ic2VydmFibGU8YW55PiB8IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMuZGF0YVsnQWxsb3dDb2xsYXBzZSddID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYWxsb3dDb2xsYXBzZSA9IHRoaXMuZGF0YVsnQWxsb3dDb2xsYXBzZSddO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGFbJ0FsbG93UnVsZXNldCddID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmFsbG93UnVsZXNldCA9IHRoaXMuZGF0YVsnQWxsb3dSdWxlc2V0J107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGF0YVsnRmlsdGVycyddKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVycyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHRoaXMuZGF0YVsnRmlsdGVycyddLFxyXG4gICAgICAgIHRoaXMuZ3JvdXBcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpZWxkcyA9IHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUodGhpcy5kYXRhLlZhbHVlLCBcIkZvcm1GaWVsZFwiLCBudWxsLCBudWxsKTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5maWVsZHMucGlwZShcclxuICAgICAgICB0YXAoKGRhdGE6IFtdKSA9PiB7XHJcblxyXG4gICAgICAgICAgZGF0YS5mb3JFYWNoKGFzeW5jIChmaWVsZDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50VHlwZShmaWVsZCk7XHJcbiAgICAgICAgICB9KTsvL2VuZCBmb3JlYWNoXHJcblxyXG4gICAgICAgICAgdGhpcy5pc3NmTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICByZXR1cm4gb2YodHJ1ZSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3I6IFwiLCBlcnJvcik7XHJcbiAgICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHJlbmRlckNvbXBvbmVudFR5cGUoZmllbGQ6IGFueSwgZmllbGRUaXRsZT86IHN0cmluZywgZmllbGROYW1lPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgY29tcG9uZW50TGFiZWwgPSBmaWVsZC5TdWJUeXBlID8gZmllbGQuTGFiZWwgOiBmaWVsZC5MYWJlbCA/PyBmaWVsZC5OYW1lO1xyXG4gICAgY29tcG9uZW50TGFiZWwgPSAhWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShmaWVsZFRpdGxlKSA/IFwiW1wiICsgZmllbGRUaXRsZSArIFwiXSBcIiArIGZpZWxkLkxhYmVsIDogIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoZmllbGQuTGFiZWwpID8gZmllbGQuTGFiZWwgOiBmaWVsZC5OYW1lO1xyXG5cclxuICAgIGxldCBjb21wb25lbnRGaWVsZCA9ICFaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KGZpZWxkTmFtZSkgPyBmaWVsZE5hbWUgKyBcIl9cIiArIGZpZWxkLlZhbHVlIDogZmllbGQuVmFsdWU7XHJcblxyXG4gICAgaWYgKGZpZWxkLlR5cGUgPT09ICdjYXRlZ29yeScgfHwgZmllbGQuVHlwZSA9PT0gJ211bHRpc2VsZWN0JyB8fCBmaWVsZC5UeXBlID09PSAnenVpc2VsZWN0bXVsdGlwbGUnKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcclxuICAgICAgICBvcGVyYXRvcnM6IHRoaXMuZHJvcGRvd25PcGVyYXRvcnMsXHJcbiAgICAgICAgdGVtcGxhdGU6IGF3YWl0IHRoaXMuZ2VuZXJhdGVDb2x1bW5TZWxlY3Rpb24oZmllbGQpLFxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSA9PT0gJ2RhdGUnIHx8IGZpZWxkLlR5cGUgPT09ICd6ZGF0ZScgfHwgZmllbGQuVHlwZSA9PT0gJ3pkYXRldGltZScgfHwgZmllbGQuVHlwZSA9PT0gJ3p1aWRhdGV0aW1lJyB8fCBmaWVsZC5UeXBlID09PSAnenNob3J0ZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIHR5cGU6ICdkYXRlJyxcclxuICAgICAgICBvcGVyYXRvcnM6IHRoaXMuZGF0ZU9wZXJhdG9ycyxcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLlR5cGUgPT09ICdudW1iZXInIHx8IGZpZWxkLlR5cGUgPT09ICd6bnVtZXJpYycgfHwgZmllbGQuVHlwZSA9PT0gJ251bWVyaWMnKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICB0eXBlOiAnbnVtYmVyJyxcclxuICAgICAgICBvcGVyYXRvcnM6IHRoaXMuaW50ZWdlck9wZXJhdG9ycyxcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLlZhbHVlID09PSAnYm9vbGVhbicgfHwgZmllbGQuVmFsdWUgPT09ICd6Y2hlY2tib3gnKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgb3BlcmF0b3JzOiB0aGlzLmJvb2xlYW5PcGVyYXRvcnMsXHJcbiAgICAgICAgdGVtcGxhdGU6IGF3YWl0IHRoaXMuZ2VuZXJhdGVDb2x1bW5DaGVja2JveChmaWVsZC5OYW1lLCBmYWxzZSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLlR5cGUgPT09ICdrY2FyZCcpIHtcclxuICAgICAgaWYgKGZpZWxkLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmaWVsZC5WYWx1ZS5mb3JFYWNoKGFzeW5jIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50VHlwZShpdGVtLCBmaWVsZC5UaXRsZSwgZmllbGQuTmFtZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSAhPSAnemxhYmVsJykge1xyXG4gICAgICB0aGlzLnNkRmlsdGVyLnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBjb21wb25lbnRGaWVsZCxcclxuICAgICAgICBsYWJlbDogY29tcG9uZW50TGFiZWwsXHJcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXHJcbiAgICAgICAgb3BlcmF0b3JzOiB0aGlzLnN0cmluZ09wZXJhdG9ycyxcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNkRmlsdGVyLnNvcnQoKGEsIGIpID0+IGEubGFiZWwudG9Mb3dlckNhc2UoKSA8IGIubGFiZWwudG9Mb3dlckNhc2UoKSA/IC0xIDogMSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gR2VuZXJhdGUgY29tcG9uZW50IFxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDb2x1bW5DaGVja2JveChsYWJlbDogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbik6IFRlbXBsYXRlQ29sdW1uIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGNyZWF0ZTogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KCdpbnB1dCcsIHsgYXR0cnM6IHsgJ3R5cGUnOiAnY2hlY2tib3gnIH0gfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlc3Ryb3k6IChhcmdzOiB7IGVsZW1lbnRJZDogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudElkKSwgJ2NoZWNrYm94JykgYXMgQ2hlY2tCb3gpLmRlc3Ryb3koKTtcclxuICAgICAgfSxcclxuICAgICAgd3JpdGU6IChhcmdzOiB7IGVsZW1lbnRzOiBFbGVtZW50LCB2YWx1ZXM6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYm94T2JqOiBDaGVja0JveCA9IG5ldyBDaGVja0JveCh7XHJcbiAgICAgICAgICBsYWJlbDogbGFiZWwsXHJcbiAgICAgICAgICBjaGVja2VkOiB2YWx1ZSxcclxuICAgICAgICAgIGNoYW5nZTogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnFyeUJsZHJPYmoubm90aWZ5Q2hhbmdlKHZhbHVlLCBlLmV2ZW50LnRhcmdldCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYm94T2JqLmFwcGVuZFRvKCcjJyArIGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbHVtblNlbGVjdGlvbihmaWVsZEVsZW1lbnREYXRhOiBhbnkpOiBUZW1wbGF0ZUNvbHVtbiB7XHJcbiAgICByZXR1cm4ge1xyXG5cclxuICAgICAgLy8gQ3JlYXRlcyB0aGUgY3VzdG9tIGNvbXBvbmVudFxyXG4gICAgICBjcmVhdGU6ICgpID0+IHtcclxuICAgICAgICAvLyBBZGRpdGlvbmFsIGZpbHRlciBzZXQgaW4gdGhlIHBhZ2VcclxuICAgICAgICBpZiAodGhpcy5kYXRhWydGaWx0ZXJzJ10pIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVycyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICAgICAgdGhpcyxcclxuICAgICAgICAgICAgdGhpcy5kYXRhWydGaWx0ZXJzJ10sXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7IGF0dHJzOiB7ICd0eXBlJzogJ3RleHQnIH0gfSk7IC8vICdkaXNwbGF5OiBub25lJ1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gRGVzdHJveSB0aGUgY3VzdG9tIGNvbXBvbmVudFxyXG4gICAgICBkZXN0cm95OiAoYXJnczogeyBlbGVtZW50SWQ6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgaWYgKGFyZ3NbJ2VsZW1lbnRzJ10pIHtcclxuICAgICAgICAgIGxldCBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudElkKSwgJ211bHRpc2VsZWN0JykgYXMgTXVsdGlTZWxlY3QpO1xyXG4gICAgICAgICAgaWYgKG11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIG11bHRpU2VsZWN0LmRlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBkcm9wZG93bjogRHJvcERvd25MaXN0ID0gKGdldENvbXBvbmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhcmdzLmVsZW1lbnRJZCksICdkcm9wZG93bmxpc3QnKSBhcyBEcm9wRG93bkxpc3QpO1xyXG4gICAgICAgICAgaWYgKGRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIGRyb3Bkb3duLmRlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMID0gc2VsZWN0T3B0aW9uc1snUmVzb3VyY2VVUkwnXTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyA9IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCArICdfJyArIGFyZ3MuZWxlbWVudElkO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLmluY2x1ZGVzKHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMgPSB0aGlzLnJlbW92ZUFycmF5SXRlbSh0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucywgcHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBXaXJlIGV2ZW50cyBmb3IgdGhlIGN1c3RvbSBjb21wb25lbnQuXHJcbiAgICAgIHdyaXRlOiAoYXJnczogeyBlbGVtZW50czogRWxlbWVudCwgdmFsdWVzOiBzdHJpbmdbXSB8IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgLy9vcmlnaW5cclxuICAgICAgICBpZiAoZmllbGRFbGVtZW50RGF0YVsnVmFsdWVPcHRpb25zJ10pIHtcclxuICAgICAgICAgIC8vIGNvbnZlcnQgdG8gcHJvcGVydHkgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQgcmVuZGVyaW5nXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25MaXN0OiB7IFtuYW1lOiBzdHJpbmddOiBPYmplY3QgfVtdID0gW107XHJcbiAgICAgICAgICBmaWVsZEVsZW1lbnREYXRhWydWYWx1ZU9wdGlvbnMnXS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICB0ZXh0OiBpdGVtWydOYW1lJ10sXHJcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bJ1ZhbHVlJ11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtYW51YWwgZHJvcGRvd24gb3IgenVkZiBtYW51YWwgZHJvcGRvd25cclxuICAgICAgICBlbHNlIGlmIChmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10gJiYgQXJyYXkuaXNBcnJheShmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10pKSB7XHJcbiAgICAgICAgICAvLyBjb252ZXJ0IHRvIHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgY29tcG9uZW50IHJlbmRlcmluZ1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdDogeyBbbmFtZTogc3RyaW5nXTogT2JqZWN0IH1bXSA9IFtdO1xyXG4gICAgICAgICAgZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgIHRleHQ6IGl0ZW1bJ3RleHQnXSxcclxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbVsndmFsdWUnXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHp1ZGYgUmVzb3VyY2VVUkwgLyBDb21tb24gTWFzdGVyIGRyb3Bkb3duXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddO1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMID0gc2VsZWN0T3B0aW9uc1snUmVzb3VyY2VVUkwnXTtcclxuXHJcbiAgICAgICAgICAvLyBSZXNvdXJjZVVSTCBkcm9wZG93blxyXG4gICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nID0gc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMICsgJ18nICsgYXJncy5lbGVtZW50cy5pZDtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMuaW5jbHVkZXMocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucy5wdXNoKHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ10gPSB0aGlzLmZpbHRlcnM7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBwYXJhbSA9IE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRQYWdlU2V0dGluZ1BhcmFtcyk7XHJcbiAgICAgICAgICAgICAgcGFyYW0ucGFnZVNpemUgPSBzZWxlY3RPcHRpb25zWydQYWdlU2l6ZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLmNvbHVtbnMgPSBzZWxlY3RPcHRpb25zWydDb2x1bW5zJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uZmlsdGVycyArPSBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydENvbHVtbk5hbWUgPSBzZWxlY3RPcHRpb25zWydTb3J0Q29sdW1uTmFtZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLnNvcnRPcmRlciA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRPcmRlciddO1xyXG5cclxuICAgICAgICAgICAgICAvLyBOZWVkIGRlbGF5IDQwMG1zIGlmIG5vdCAzcmQgc2VnbWVudCAodmFsdWUpIHdpbGwgbm90IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAgICAgIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQodGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0UGFnZVVybChzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwpLCBwYXJhbSkucGlwZShcclxuICAgICAgICAgICAgICAgIGRlbGF5KDQwMCksXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICByZXNwLmRhdGFTZXQuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1bc2VsZWN0T3B0aW9uc1snTmFtZSddXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3NlbGVjdE9wdGlvbnNbJ1ZhbHVlJ11dXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyNyZWdpb24gdXNlZCBmb3IgdXBkYXRlU2VsZWN0aW9uT3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLnNlbGVjdGlvbkNvbXBvbmVudExpc3QuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmNvbXBvbmVudElkID09PSBhcmdzLmVsZW1lbnRzLmlkXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3Qgd2l0aCB0aGUgc2FtZSBjb21wb25lbnRJZCBleGlzdHMsIHJlcGxhY2UgcmVzb3VyY2VVcmxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbXBvbmVudExpc3RbZXhpc3RpbmdJbmRleF0ucmVzb3VyY2VVcmwgPSBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkw7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0IHdpdGggY29tcG9uZW50SWQgZG9lc24ndCBleGlzdCwgcHVzaCBhIG5ldyBvYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbXBvbmVudExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVVybDogc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SWQ6IGFyZ3MuZWxlbWVudHMuaWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyNlbmRyZWdpb25cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHp1ZGYgQ29tbW9uIE1hc3RlciBkcm9wZG93blxyXG4gICAgICAgICAgZWxzZSBpZiAoZmllbGRFbGVtZW50RGF0YS56dWRmRGF0YVNvdXJjZVR5cGUgJiYgZmllbGRFbGVtZW50RGF0YS56dWRmRGF0YVNvdXJjZVR5cGUgPT09IFwicmVzb3VyY2VcIikge1xyXG5cclxuICAgICAgICAgICAgLy8gZXh0cmFjdCB6dWRmX2Ryb3Bkb3duIGZyb20gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAgIGNvbnN0IHp1ZGZfZHJvcGRvd24gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwienVkZl9kcm9wZG93blwiKSA/IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInp1ZGZfZHJvcGRvd25cIikpIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKHp1ZGZfZHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcblxyXG4gICAgICAgICAgICAgIHp1ZGZfZHJvcGRvd24uZm9yRWFjaChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHJlcy50ZXh0LnNwbGl0KFwiT3B0aW9uc1wiKVswXTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZEVsZW1lbnREYXRhLkxhYmVsID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJlcy52YWx1ZS5mb3JFYWNoKHZhbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHZhbFsnTmFtZSddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbFsnSWQnXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uQ29tcG9uZW50LmFwcGVuZFRvKCcjJyArIGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVXNlciBMaXN0IGRyb3Bkb3duXHJcbiAgICAgICAgICBlbHNlIGlmIChmaWVsZEVsZW1lbnREYXRhLnp1ZGZEYXRhU291cmNlVHlwZSAmJiBmaWVsZEVsZW1lbnREYXRhLnp1ZGZEYXRhU291cmNlVHlwZSA9PT0gXCJ1c2VyXCIpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyTGlzdCA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2U/LmdldEl0ZW0oXCJ1c2VyTGlzdFwiKSA/PyAnbnVsbCcpO1xyXG5cclxuICAgICAgICAgICAgLy9jb25zdCBhcnJheVRlc3QgPSB1c2VyTGlzdC5tYXAoKHsgU2VsZWN0aW9uTmFtZSwgSWQgfSkgPT4gKHsgdGV4dDogU2VsZWN0aW9uTmFtZSwgdmFsdWU6IElkIH0pKTtcclxuICAgICAgICAgICAgdXNlckxpc3QuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1bJ1NlbGVjdGlvbk5hbWUnXSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtWydJZCddXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9Ly9lbmQgd3JpdGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVTZWxlY3Rpb25PcHRpb24ocmVzb3VyY2VVcmw6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbXBvbmVudExpc3QuZm9yRWFjaChzZWxlY3Rpb25Db21wb25lbnQgPT4ge1xyXG4gICAgICBsZXQgbXVsdGlTZWxlY3Q6IE11bHRpU2VsZWN0ID0gKGdldENvbXBvbmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rpb25Db21wb25lbnQuY29tcG9uZW50SWQpLCAnbXVsdGlzZWxlY3QnKSBhcyBNdWx0aVNlbGVjdCk7XHJcbiAgICAgIGlmIChtdWx0aVNlbGVjdCkge1xyXG4gICAgICAgIG11bHRpU2VsZWN0LnZhbHVlID0gZGF0YTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZHJvcGRvd246IERyb3BEb3duTGlzdCA9IChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZWN0aW9uQ29tcG9uZW50LmNvbXBvbmVudElkKSwgJ2Ryb3Bkb3dubGlzdCcpIGFzIERyb3BEb3duTGlzdCk7XHJcbiAgICAgIGlmIChkcm9wZG93bikge1xyXG4gICAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmRhdGFGb3JtRmllbGRzW3RoaXMuZGF0YS5WYWx1ZV0uZm9yRWFjaChhc3luYyAoZmllbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLlNlbGVjdE9wdGlvbnMuUmVzb3VyY2VVUkwgPT09IHNlbGVjdGlvbkNvbXBvbmVudC5yZXNvdXJjZVVybCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gZmllbGRbJ1NlbGVjdE9wdGlvbnMnXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMID0gc2VsZWN0T3B0aW9uc1snUmVzb3VyY2VVUkwnXTtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0UGFnZVNldHRpbmdQYXJhbXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVsnRmlsdGVycyddKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgICAgICAgICAgdGhpcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVsnRmlsdGVycyddLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ10gPSB0aGlzLmZpbHRlcnM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBhcmFtLnBhZ2VTaXplID0gc2VsZWN0T3B0aW9uc1snUGFnZVNpemUnXTtcclxuICAgICAgICAgICAgcGFyYW0uY29sdW1ucyA9IHNlbGVjdE9wdGlvbnNbJ0NvbHVtbnMnXTtcclxuICAgICAgICAgICAgcGFyYW0uZmlsdGVycyArPSBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ107XHJcbiAgICAgICAgICAgIHBhcmFtLnNvcnRDb2x1bW5OYW1lID0gc2VsZWN0T3B0aW9uc1snU29ydENvbHVtbk5hbWUnXTtcclxuICAgICAgICAgICAgcGFyYW0uc29ydE9yZGVyID0gc2VsZWN0T3B0aW9uc1snU29ydE9yZGVyJ107XHJcblxyXG4gICAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFBhZ2VVcmwoc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMKSwgcGFyYW0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICByZXNwLmRhdGFTZXQuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbVtzZWxlY3RPcHRpb25zWydOYW1lJ11dLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3NlbGVjdE9wdGlvbnNbJ1ZhbHVlJ11dXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICBkcm9wZG93bi5kYXRhU291cmNlID0gb3B0aW9uTGlzdDtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVBcnJheUl0ZW08VD4oYXJyOiBBcnJheTxUPiwgdmFsdWU6IFQpOiBBcnJheTxUPiB7XHJcbiAgICBjb25zdCBpbmRleCA9IGFyci5pbmRleE9mKHZhbHVlKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJnczogYW55LCBvcHRpb25MaXN0OiBhbnkpOiBNdWx0aVNlbGVjdCB8IERyb3BEb3duTGlzdCB7XHJcbiAgICBpZiAodGhpcy5pbk9wZXJhdG9ycy5pbmRleE9mKGFyZ3Mub3BlcmF0b3IpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIG5ldyBNdWx0aVNlbGVjdCh7XHJcbiAgICAgICAgZGF0YVNvdXJjZTogb3B0aW9uTGlzdCxcclxuICAgICAgICBmaWVsZHM6IHsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ3ZhbHVlJyB9LFxyXG4gICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlcyBhcyBzdHJpbmdbXSxcclxuICAgICAgICBtb2RlOiAnQ2hlY2tCb3gnLFxyXG4gICAgICAgIGNoYW5nZTogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5xcnlCbGRyT2JqLm5vdGlmeUNoYW5nZShlLnZhbHVlLCBlLmVsZW1lbnQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gc2V0IGNvbnRhaW5zIHNlYXJjaCBieSBkZWZhdWx0XHJcbiAgICAgICAgZmlsdGVyaW5nOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uRmlsdGVyaW5nKGUsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBEcm9wRG93bkxpc3Qoe1xyXG4gICAgICAgIGFsbG93RmlsdGVyaW5nOiB0cnVlLCAvLyBzZWFyY2ggYm94IGFwcGVhclxyXG4gICAgICAgIGRhdGFTb3VyY2U6IG9wdGlvbkxpc3QsXHJcbiAgICAgICAgZmllbGRzOiB7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICd2YWx1ZScgfSxcclxuICAgICAgICB2YWx1ZTogYXJncy52YWx1ZXMgYXMgc3RyaW5nLFxyXG4gICAgICAgIGNoYW5nZTogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZS52YWx1ZSAhPT0gbnVsbCA/IHRoaXMucXJ5Qmxkck9iai5ub3RpZnlDaGFuZ2UoZS5pdGVtRGF0YS52YWx1ZSwgZS5lbGVtZW50KSA6IGlnbm9yZUVsZW1lbnRzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgc2VhcmNoIGJ5ICdjb250YWlucydcclxuICAgICAgICBmaWx0ZXJpbmc6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMub25GaWx0ZXJpbmcoZSwgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHB1YmxpYyBvbkZpbHRlcmluZyhlOiBhbnksIG9wdGlvbkxpc3Q6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gbG9hZCBvdmVyYWxsIGRhdGEgd2hlbiBzZWFyY2gga2V5IGVtcHR5LlxyXG4gICAgaWYgKGUudGV4dCA9PT0gJycpIHtcclxuICAgICAgZS51cGRhdGVEYXRhKHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gRGVmaW5lIGFycmF5IGRhdGFcclxuICAgICAgbGV0IHNlYXJjaERhdGEgPSBvcHRpb25MaXN0O1xyXG5cclxuICAgICAgLy9CaW5kIHRoZSBmaWx0ZXIgZXZlbnRcclxuICAgICAgbGV0IHF1ZXJ5ID0gbmV3IFF1ZXJ5KCk7XHJcblxyXG4gICAgICAvL2ZyYW1lIHRoZSBxdWVyeSBiYXNlZCBvbiBzZWFyY2ggc3RyaW5nIHdpdGggZmlsdGVyIHR5cGUuXHJcbiAgICAgIHF1ZXJ5ID0gKGUudGV4dCAhPSBcIlwiKSA/IHF1ZXJ5LndoZXJlKFwidGV4dFwiLCBcImNvbnRhaW5zXCIsIGUudGV4dCwgdHJ1ZSkgOiBxdWVyeTtcclxuXHJcbiAgICAgIC8vcGFzcyB0aGUgZmlsdGVyIGRhdGEgc291cmNlLCBmaWx0ZXIgcXVlcnkgdG8gdXBkYXRlRGF0YSBtZXRob2QuXHJcbiAgICAgIGUudXBkYXRlRGF0YShzZWFyY2hEYXRhLCBxdWVyeSk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHNldFF1ZXJ5VmFsdWUoc2F2ZWREYXRhOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmIChzYXZlZERhdGEpIHtcclxuICAgICAgdGhpcy5xcnlCbGRyT2JqLnNldFJ1bGVzKHNhdmVkRGF0YSk7XHJcbiAgICAgIHRoaXMudXBkYXRlUnVsZSh7IHJ1bGU6IHNhdmVkRGF0YSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZXN1bHQoKTogUnVsZU1vZGVsIHtcclxuICAgIHJldHVybiB0aGlzLnFyeUJsZHJPYmouZ2V0UnVsZXMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVSdWxlKGFyZ3M6IFJ1bGVDaGFuZ2VFdmVudEFyZ3MpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlzcGxheVJ1bGUgPSBKU09OLnN0cmluZ2lmeShhcmdzLnJ1bGUsIG51bGwsIDEyKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlUnVsZSh7IHJ1bGU6IHRoaXMucXJ5Qmxkck9iai5nZXRWYWxpZFJ1bGVzKHRoaXMucXJ5Qmxkck9iai5ydWxlKSB9KTtcclxuICB9XHJcbn1cclxuXHJcbiIsIjxpb24taXRlbSAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJxYmNvbnRhaW5lclwiPlxyXG4gICAgPGVqcy1xdWVyeWJ1aWxkZXIgKm5nSWY9XCJpc3NmTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICNxdWVyeWJ1aWxkZXJcclxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJzZkRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwic2RGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3J1bGVdPVwiaW1wb3J0UnVsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKHJ1bGVDaGFuZ2UpPVwidXBkYXRlUnVsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjcmVhdGVkKT1cIm9uQ2hhbmdlKClcIj5cclxuICAgIDwvZWpzLXF1ZXJ5YnVpbGRlcj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWRhdGEuSGlkZVNob3dSZXN1bHRQYW5lbFwiPlxyXG4gICAgICA8YnI+XHJcbiAgICAgIDxpb24tbGFiZWw+UmVzdWx0PC9pb24tbGFiZWw+XHJcbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm91dHB1dFwiXHJcbiAgICAgICAgICAgICAgICByZXNpemFibGU9XCJub25lXCJcclxuICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2QzZDNkMzsgd2lkdGg6IDEwMCU7XCI+e3tkaXNwbGF5UnVsZX19PC90ZXh0YXJlYT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2lvbi1pdGVtPlxyXG4iXX0=
|
|
@@ -221,7 +221,7 @@ export class UiactionbuttonComponent extends ButtonFieldBase {
|
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
223
|
UiactionbuttonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiactionbuttonComponent, deps: [{ token: i1.ZComponentService }, { token: i2.FieldService }, { token: i2.WebApiService }, { token: i2.ResourceApiService }, { token: i2.WorkflowService }, { token: i3.ActionSheetController }], target: i0.ɵɵFactoryTarget.Component });
|
|
224
|
-
UiactionbuttonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UiactionbuttonComponent, selector: "app-uiactionbutton", usesInheritance: true, ngImport: i0, template: "<ion-button (click)=\"onAction()\" [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n *ngIf=\"isMobileScreen() && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"ion-activatable ripple-parent\">\r\n <!-- <ion-icon name=\"more\" slot=\"icon-only\"></ion-icon> -->\r\n <fa-icon [icon]=\"'ellipsis-v'\"></fa-icon>\r\n <ion-ripple-effect type=\"unbounded\"></ion-ripple-effect>\r\n</ion-button>\r\n", styles: [":host ion-button{width:48px;height:48px;justify-content:center;margin-right:4px;cursor:pointer}:host ion-button fa-icon{text-align:center;justify-content:center;text-overflow:ellipsis;text-transform:none;white-space:nowrap;font-kerning:none;text-decoration:none;font-size:21px}:host ion-button:hover{color:#fff;background-color:#0006;border-radius:20px}\n"], components: [{ type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
224
|
+
UiactionbuttonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UiactionbuttonComponent, selector: "app-uiactionbutton", usesInheritance: true, ngImport: i0, template: "<ion-button (click)=\"onAction()\" [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n *ngIf=\"isMobileScreen() && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"ion-activatable ripple-parent\">\r\n <!-- <ion-icon name=\"more\" slot=\"icon-only\"></ion-icon> -->\r\n <fa-icon [icon]=\"'ellipsis-v'\"></fa-icon>\r\n <ion-ripple-effect type=\"unbounded\"></ion-ripple-effect>\r\n</ion-button>\r\n", styles: [":host ion-button{width:48px;height:48px;justify-content:center;margin-right:4px;cursor:pointer}:host ion-button fa-icon{text-align:center;justify-content:center;text-overflow:ellipsis;text-transform:none;white-space:nowrap;font-kerning:none;text-decoration:none;font-size:21px}:host ion-button:hover{color:#fff;background-color:#0006;border-radius:20px}\n"], components: [{ type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i3.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
225
225
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UiactionbuttonComponent, decorators: [{
|
|
226
226
|
type: Component,
|
|
227
227
|
args: [{ selector: 'app-uiactionbutton', template: "<ion-button (click)=\"onAction()\" [disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n *ngIf=\"isMobileScreen() && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"ion-activatable ripple-parent\">\r\n <!-- <ion-icon name=\"more\" slot=\"icon-only\"></ion-icon> -->\r\n <fa-icon [icon]=\"'ellipsis-v'\"></fa-icon>\r\n <ion-ripple-effect type=\"unbounded\"></ion-ripple-effect>\r\n</ion-button>\r\n", styles: [":host ion-button{width:48px;height:48px;justify-content:center;margin-right:4px;cursor:pointer}:host ion-button fa-icon{text-align:center;justify-content:center;text-overflow:ellipsis;text-transform:none;white-space:nowrap;font-kerning:none;text-decoration:none;font-size:21px}:host ion-button:hover{color:#fff;background-color:#0006;border-radius:20px}\n"] }]
|
|
@@ -80,7 +80,7 @@ export class UibulletinComponent {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
UibulletinComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UibulletinComponent, deps: [{ token: i1.ZCoreService }, { token: i1.WebApiService }, { token: i1.ResourceApiService }, { token: i2.MainService }, { token: i1.SignalrService }, { token: i3.NotificationService }], target: i0.ɵɵFactoryTarget.Component });
|
|
83
|
-
UibulletinComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UibulletinComponent, selector: "app-uibulletin", inputs: { group: "group" }, viewQueries: [{ propertyName: "appendTo", first: true, predicate: ["appendTo"], descendants: true, read: ViewContainerRef }, { propertyName: "bulletinTemplate", first: true, predicate: ["bulletinTemplate"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<ion-button (click)=\"showBulletinMessage()\" fill=\"none\" size=\"small\" *ngIf=\"showBulletinIcon\">\r\n\r\n <ion-label [title]=\"title\">\r\n <ion-badge color=\"danger\" class=\"pending-counter\"\r\n *ngIf=\"bulletinMessages.length > 0\">\r\n </ion-badge>\r\n <ion-label><fa-icon [icon]=\"['fas', 'bell']\" size=\"lg\" style=\"margin-right: 5px;\"></fa-icon> Notification</ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </ion-label>\r\n\r\n <!--<fa-icon [icon]=\"['fas', 'bell']\" style=\"margin-right: 5px;\"></fa-icon> Bulletin-->\r\n</ion-button>\r\n<ng-template #bulletinTemplate>\r\n <div *ngIf=\"bulletinMessages.length > 0\">\r\n <!--<h6>Bulletin</h6>-->\r\n <ul>\r\n <li *ngFor=\"let msg of bulletinMessages\">{{ msg }}</li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"bulletinMessages.length <= 0\">\r\n {{ defaultMessage }}\r\n </div>\r\n</ng-template>\r\n", styles: [".ripple-parent{position:relative;overflow:hidden}.pending-counterX{background-color:#ff243a;border-radius:1em;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:2px;text-overflow:ellipsis;top:2px;transform:scale(.25);transform-origin:top left;display:inline-block;position:absolute;text-align:center;font-size:2.2em}.pending-counter{background-color:#ff243a;border-radius:1em;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;text-overflow:ellipsis;left:8px;top:7px;transform:scale(.25);transform-origin:top left;display:inline-block;position:absolute;text-align:center;font-size:1.5em}\n"], components: [{ type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i4.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i4.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
83
|
+
UibulletinComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: UibulletinComponent, selector: "app-uibulletin", inputs: { group: "group" }, viewQueries: [{ propertyName: "appendTo", first: true, predicate: ["appendTo"], descendants: true, read: ViewContainerRef }, { propertyName: "bulletinTemplate", first: true, predicate: ["bulletinTemplate"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<ion-button (click)=\"showBulletinMessage()\" fill=\"none\" size=\"small\" *ngIf=\"showBulletinIcon\">\r\n\r\n <ion-label [title]=\"title\">\r\n <ion-badge color=\"danger\" class=\"pending-counter\"\r\n *ngIf=\"bulletinMessages.length > 0\">\r\n </ion-badge>\r\n <ion-label><fa-icon [icon]=\"['fas', 'bell']\" size=\"lg\" style=\"margin-right: 5px;\"></fa-icon> Notification</ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </ion-label>\r\n\r\n <!--<fa-icon [icon]=\"['fas', 'bell']\" style=\"margin-right: 5px;\"></fa-icon> Bulletin-->\r\n</ion-button>\r\n<ng-template #bulletinTemplate>\r\n <div *ngIf=\"bulletinMessages.length > 0\">\r\n <!--<h6>Bulletin</h6>-->\r\n <ul>\r\n <li *ngFor=\"let msg of bulletinMessages\">{{ msg }}</li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"bulletinMessages.length <= 0\">\r\n {{ defaultMessage }}\r\n </div>\r\n</ng-template>\r\n", styles: [".ripple-parent{position:relative;overflow:hidden}.pending-counterX{background-color:#ff243a;border-radius:1em;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:2px;text-overflow:ellipsis;top:2px;transform:scale(.25);transform-origin:top left;display:inline-block;position:absolute;text-align:center;font-size:2.2em}.pending-counter{background-color:#ff243a;border-radius:1em;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;text-overflow:ellipsis;left:8px;top:7px;transform:scale(.25);transform-origin:top left;display:inline-block;position:absolute;text-align:center;font-size:1.5em}\n"], components: [{ type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i4.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { type: i4.IonBadge, selector: "ion-badge", inputs: ["color", "mode"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i4.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
|
|
84
84
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: UibulletinComponent, decorators: [{
|
|
85
85
|
type: Component,
|
|
86
86
|
args: [{ selector: 'app-uibulletin', template: "<ion-button (click)=\"showBulletinMessage()\" fill=\"none\" size=\"small\" *ngIf=\"showBulletinIcon\">\r\n\r\n <ion-label [title]=\"title\">\r\n <ion-badge color=\"danger\" class=\"pending-counter\"\r\n *ngIf=\"bulletinMessages.length > 0\">\r\n </ion-badge>\r\n <ion-label><fa-icon [icon]=\"['fas', 'bell']\" size=\"lg\" style=\"margin-right: 5px;\"></fa-icon> Notification</ion-label>\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </ion-label>\r\n\r\n <!--<fa-icon [icon]=\"['fas', 'bell']\" style=\"margin-right: 5px;\"></fa-icon> Bulletin-->\r\n</ion-button>\r\n<ng-template #bulletinTemplate>\r\n <div *ngIf=\"bulletinMessages.length > 0\">\r\n <!--<h6>Bulletin</h6>-->\r\n <ul>\r\n <li *ngFor=\"let msg of bulletinMessages\">{{ msg }}</li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"bulletinMessages.length <= 0\">\r\n {{ defaultMessage }}\r\n </div>\r\n</ng-template>\r\n", styles: [".ripple-parent{position:relative;overflow:hidden}.pending-counterX{background-color:#ff243a;border-radius:1em;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:2px;text-overflow:ellipsis;top:2px;transform:scale(.25);transform-origin:top left;display:inline-block;position:absolute;text-align:center;font-size:2.2em}.pending-counter{background-color:#ff243a;border-radius:1em;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;text-overflow:ellipsis;left:8px;top:7px;transform:scale(.25);transform-origin:top left;display:inline-block;position:absolute;text-align:center;font-size:1.5em}\n"] }]
|
|
@@ -215,7 +215,7 @@ export class VirtualScrollComponent extends ContainerFieldBase {
|
|
|
215
215
|
}
|
|
216
216
|
}
|
|
217
217
|
VirtualScrollComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.3", ngImport: i0, type: VirtualScrollComponent, deps: [{ token: i1.ZComponentService }, { token: i2.FontAweSomeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
218
|
-
VirtualScrollComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: VirtualScrollComponent, selector: "app-virtual-scroll", viewQueries: [{ propertyName: "viewPort", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"container e1tag-container-style\" [style]=\"componentProperties.containerStyle.style\"\r\n [ngClass]=\"(data.ComponentStyleType || '') + ' ' + (data.Class || '')\">\r\n <cdk-virtual-scroll-viewport\r\n [itemSize]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style1\"\r\n class=\"virtual-scroll-viewport e1tag-container-style1\"\r\n [minBufferPx]=\"options.minBufferPx\"\r\n [maxBufferPx]=\"options.maxBufferPx\">\r\n <ng-container *cdkVirtualFor=\"let dataItem of dataItems; let i = index\">\r\n <div #virtualscrollcontent>\r\n <div class=\"virtual-scroll-groupby e1tag-container-style4\" [style]=\"componentProperties.containerStyle.style4\"\r\n *ngIf=\"options.isGroupByEnabled && options.groupBy && (!dataItems[i-1] || dataItem[options.groupBy] !== dataItems[i-1][options.groupBy])\"\r\n (click)=\"groupByOnClick(dataItem[options.groupBy])\" [class.groupby-collapsible]=\"options.isGroupByCollapsible\">\r\n <fa-icon class=\"virtual-scroll-groupby-arrow-icon e1tag-container-style5\"\r\n [style]=\"componentProperties.containerStyle.style5\" *ngIf=\"!!options.isGroupByCollapsible\"\r\n [icon]=\"getFontAwesome('caret-down', fontAweSomeService)\"\r\n [@rotateAnimation]=\"{value: collapsedGroupBy.includes(dataItem[options.groupBy]) ? 'rotate' : 'default', params: {degree: -90}}\">\r\n </fa-icon>\r\n <span class=\"virtual-scroll-groupby-label e1tag-container-style6\"\r\n [style]=\"componentProperties.containerStyle.style6\">\r\n {{options.groupByLabelTemplate ? getGroupByLabelTemplate(dataItem, options) : dataItem[options.groupBy]}}\r\n </span>\r\n </div>\r\n <div *ngIf=\"!options.isGroupByEnabled\" [style.height.px]=\"options.itemSize\"\r\n [style.min-height.px]=\"options.itemSize\" [style.max-height.px]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style2\" class=\"e1tag-container-style2 virtual-scroll-dataitem\"\r\n (click)=\"onClick($event, dataItem)\" [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n <div *ngIf=\"options.isGroupByEnabled\" [style.height.px]=\"options.itemSize\"\r\n [style.min-height.px]=\"options.itemSize\" [style.max-height.px]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style2\" class=\"e1tag-container-style2 virtual-scroll-dataitem\"\r\n (click)=\"onClick($event, dataItem)\" [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\"\r\n [@collapseAnimation]=\"{value: !!options.groupBy && collapsedGroupBy.includes(dataItem[options.groupBy]) ? 'collapse' : 'default'}\"\r\n [class.groupby-value-expand]=\"groupByValueToExpand == (dataItem[options.groupBy])\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n </div>\r\n <app-context-menu [data]=\"data\" [group]=\"group\" [form]=\"form\" [target]=\"virtualscrollcontent\" [selectedData]=\"dataItem\"></app-context-menu>\r\n </ng-container>\r\n <app-zformcontrol *ngFor=\"let field of footerFields\" [field]=\"field\" [containerField]=\"data\" [group]=\"group\"\r\n [form]=\"form\" [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\">\r\n </app-zformcontrol>\r\n </cdk-virtual-scroll-viewport>\r\n</div>\r\n", styles: [".virtual-scroll-viewport{height:500px}.virtual-scroll-viewport .virtual-scroll-groupby{background:rgba(var(--ion-color-secondary-rgb),.1);font-weight:500;padding:12px 0 4px 12px;margin:1px}.virtual-scroll-viewport .virtual-scroll-groupby.groupby-collapsible{cursor:pointer;display:grid;grid-template-columns:20px auto}.virtual-scroll-viewport .virtual-scroll-groupby.groupby-collapsible:hover{background:rgba(var(--ion-color-secondary-rgb),.05)}.virtual-scroll-viewport .virtual-scroll-groupby>.virtual-scroll-groupby-arrow-icon{width
|
|
218
|
+
VirtualScrollComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.3", type: VirtualScrollComponent, selector: "app-virtual-scroll", viewQueries: [{ propertyName: "viewPort", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"container e1tag-container-style\" [style]=\"componentProperties.containerStyle.style\"\r\n [ngClass]=\"(data.ComponentStyleType || '') + ' ' + (data.Class || '')\">\r\n <cdk-virtual-scroll-viewport\r\n [itemSize]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style1\"\r\n class=\"virtual-scroll-viewport e1tag-container-style1\"\r\n [minBufferPx]=\"options.minBufferPx\"\r\n [maxBufferPx]=\"options.maxBufferPx\">\r\n <ng-container *cdkVirtualFor=\"let dataItem of dataItems; let i = index\">\r\n <div #virtualscrollcontent>\r\n <div class=\"virtual-scroll-groupby e1tag-container-style4\" [style]=\"componentProperties.containerStyle.style4\"\r\n *ngIf=\"options.isGroupByEnabled && options.groupBy && (!dataItems[i-1] || dataItem[options.groupBy] !== dataItems[i-1][options.groupBy])\"\r\n (click)=\"groupByOnClick(dataItem[options.groupBy])\" [class.groupby-collapsible]=\"options.isGroupByCollapsible\">\r\n <fa-icon class=\"virtual-scroll-groupby-arrow-icon e1tag-container-style5\"\r\n [style]=\"componentProperties.containerStyle.style5\" *ngIf=\"!!options.isGroupByCollapsible\"\r\n [icon]=\"getFontAwesome('caret-down', fontAweSomeService)\"\r\n [@rotateAnimation]=\"{value: collapsedGroupBy.includes(dataItem[options.groupBy]) ? 'rotate' : 'default', params: {degree: -90}}\">\r\n </fa-icon>\r\n <span class=\"virtual-scroll-groupby-label e1tag-container-style6\"\r\n [style]=\"componentProperties.containerStyle.style6\">\r\n {{options.groupByLabelTemplate ? getGroupByLabelTemplate(dataItem, options) : dataItem[options.groupBy]}}\r\n </span>\r\n </div>\r\n <div *ngIf=\"!options.isGroupByEnabled\" [style.height.px]=\"options.itemSize\"\r\n [style.min-height.px]=\"options.itemSize\" [style.max-height.px]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style2\" class=\"e1tag-container-style2 virtual-scroll-dataitem\"\r\n (click)=\"onClick($event, dataItem)\" [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n <div *ngIf=\"options.isGroupByEnabled\" [style.height.px]=\"options.itemSize\"\r\n [style.min-height.px]=\"options.itemSize\" [style.max-height.px]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style2\" class=\"e1tag-container-style2 virtual-scroll-dataitem\"\r\n (click)=\"onClick($event, dataItem)\" [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\"\r\n [@collapseAnimation]=\"{value: !!options.groupBy && collapsedGroupBy.includes(dataItem[options.groupBy]) ? 'collapse' : 'default'}\"\r\n [class.groupby-value-expand]=\"groupByValueToExpand == (dataItem[options.groupBy])\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n </div>\r\n <app-context-menu [data]=\"data\" [group]=\"group\" [form]=\"form\" [target]=\"virtualscrollcontent\" [selectedData]=\"dataItem\"></app-context-menu>\r\n </ng-container>\r\n <app-zformcontrol *ngFor=\"let field of footerFields\" [field]=\"field\" [containerField]=\"data\" [group]=\"group\"\r\n [form]=\"form\" [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\">\r\n </app-zformcontrol>\r\n </cdk-virtual-scroll-viewport>\r\n</div>\r\n", styles: [".virtual-scroll-viewport{height:500px}.virtual-scroll-viewport .virtual-scroll-groupby{background:rgba(var(--ion-color-secondary-rgb),.1);font-weight:500;padding:12px 0 4px 12px;margin:1px}.virtual-scroll-viewport .virtual-scroll-groupby.groupby-collapsible{cursor:pointer;display:grid;grid-template-columns:20px auto}.virtual-scroll-viewport .virtual-scroll-groupby.groupby-collapsible:hover{background:rgba(var(--ion-color-secondary-rgb),.05)}.virtual-scroll-viewport .virtual-scroll-groupby>.virtual-scroll-groupby-arrow-icon{width:fit-content}.virtual-scroll-viewport .virtual-scroll-dataitem.groupby-value-expand{transform:translateY(-10%);opacity:.2}\n"], components: [{ type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i5.ContextMenuComponent, selector: "app-context-menu", inputs: ["target", "selectedData"] }, { type: i6.ZformcontrolComponent, selector: "app-zformcontrol", inputs: ["field", "group", "form", "containerField"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "htmlSanitize": i9.HtmlSanitizePipe }, animations: [
|
|
219
219
|
collapseAnimation,
|
|
220
220
|
rotateAnimation
|
|
221
221
|
] });
|
|
@@ -224,9 +224,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.3", ngImpor
|
|
|
224
224
|
args: [{ selector: "app-virtual-scroll", animations: [
|
|
225
225
|
collapseAnimation,
|
|
226
226
|
rotateAnimation
|
|
227
|
-
], template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"container e1tag-container-style\" [style]=\"componentProperties.containerStyle.style\"\r\n [ngClass]=\"(data.ComponentStyleType || '') + ' ' + (data.Class || '')\">\r\n <cdk-virtual-scroll-viewport\r\n [itemSize]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style1\"\r\n class=\"virtual-scroll-viewport e1tag-container-style1\"\r\n [minBufferPx]=\"options.minBufferPx\"\r\n [maxBufferPx]=\"options.maxBufferPx\">\r\n <ng-container *cdkVirtualFor=\"let dataItem of dataItems; let i = index\">\r\n <div #virtualscrollcontent>\r\n <div class=\"virtual-scroll-groupby e1tag-container-style4\" [style]=\"componentProperties.containerStyle.style4\"\r\n *ngIf=\"options.isGroupByEnabled && options.groupBy && (!dataItems[i-1] || dataItem[options.groupBy] !== dataItems[i-1][options.groupBy])\"\r\n (click)=\"groupByOnClick(dataItem[options.groupBy])\" [class.groupby-collapsible]=\"options.isGroupByCollapsible\">\r\n <fa-icon class=\"virtual-scroll-groupby-arrow-icon e1tag-container-style5\"\r\n [style]=\"componentProperties.containerStyle.style5\" *ngIf=\"!!options.isGroupByCollapsible\"\r\n [icon]=\"getFontAwesome('caret-down', fontAweSomeService)\"\r\n [@rotateAnimation]=\"{value: collapsedGroupBy.includes(dataItem[options.groupBy]) ? 'rotate' : 'default', params: {degree: -90}}\">\r\n </fa-icon>\r\n <span class=\"virtual-scroll-groupby-label e1tag-container-style6\"\r\n [style]=\"componentProperties.containerStyle.style6\">\r\n {{options.groupByLabelTemplate ? getGroupByLabelTemplate(dataItem, options) : dataItem[options.groupBy]}}\r\n </span>\r\n </div>\r\n <div *ngIf=\"!options.isGroupByEnabled\" [style.height.px]=\"options.itemSize\"\r\n [style.min-height.px]=\"options.itemSize\" [style.max-height.px]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style2\" class=\"e1tag-container-style2 virtual-scroll-dataitem\"\r\n (click)=\"onClick($event, dataItem)\" [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n <div *ngIf=\"options.isGroupByEnabled\" [style.height.px]=\"options.itemSize\"\r\n [style.min-height.px]=\"options.itemSize\" [style.max-height.px]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style2\" class=\"e1tag-container-style2 virtual-scroll-dataitem\"\r\n (click)=\"onClick($event, dataItem)\" [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\"\r\n [@collapseAnimation]=\"{value: !!options.groupBy && collapsedGroupBy.includes(dataItem[options.groupBy]) ? 'collapse' : 'default'}\"\r\n [class.groupby-value-expand]=\"groupByValueToExpand == (dataItem[options.groupBy])\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n </div>\r\n <app-context-menu [data]=\"data\" [group]=\"group\" [form]=\"form\" [target]=\"virtualscrollcontent\" [selectedData]=\"dataItem\"></app-context-menu>\r\n </ng-container>\r\n <app-zformcontrol *ngFor=\"let field of footerFields\" [field]=\"field\" [containerField]=\"data\" [group]=\"group\"\r\n [form]=\"form\" [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\">\r\n </app-zformcontrol>\r\n </cdk-virtual-scroll-viewport>\r\n</div>\r\n", styles: [".virtual-scroll-viewport{height:500px}.virtual-scroll-viewport .virtual-scroll-groupby{background:rgba(var(--ion-color-secondary-rgb),.1);font-weight:500;padding:12px 0 4px 12px;margin:1px}.virtual-scroll-viewport .virtual-scroll-groupby.groupby-collapsible{cursor:pointer;display:grid;grid-template-columns:20px auto}.virtual-scroll-viewport .virtual-scroll-groupby.groupby-collapsible:hover{background:rgba(var(--ion-color-secondary-rgb),.05)}.virtual-scroll-viewport .virtual-scroll-groupby>.virtual-scroll-groupby-arrow-icon{width
|
|
227
|
+
], template: "<div\r\n *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\"\r\n class=\"container e1tag-container-style\" [style]=\"componentProperties.containerStyle.style\"\r\n [ngClass]=\"(data.ComponentStyleType || '') + ' ' + (data.Class || '')\">\r\n <cdk-virtual-scroll-viewport\r\n [itemSize]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style1\"\r\n class=\"virtual-scroll-viewport e1tag-container-style1\"\r\n [minBufferPx]=\"options.minBufferPx\"\r\n [maxBufferPx]=\"options.maxBufferPx\">\r\n <ng-container *cdkVirtualFor=\"let dataItem of dataItems; let i = index\">\r\n <div #virtualscrollcontent>\r\n <div class=\"virtual-scroll-groupby e1tag-container-style4\" [style]=\"componentProperties.containerStyle.style4\"\r\n *ngIf=\"options.isGroupByEnabled && options.groupBy && (!dataItems[i-1] || dataItem[options.groupBy] !== dataItems[i-1][options.groupBy])\"\r\n (click)=\"groupByOnClick(dataItem[options.groupBy])\" [class.groupby-collapsible]=\"options.isGroupByCollapsible\">\r\n <fa-icon class=\"virtual-scroll-groupby-arrow-icon e1tag-container-style5\"\r\n [style]=\"componentProperties.containerStyle.style5\" *ngIf=\"!!options.isGroupByCollapsible\"\r\n [icon]=\"getFontAwesome('caret-down', fontAweSomeService)\"\r\n [@rotateAnimation]=\"{value: collapsedGroupBy.includes(dataItem[options.groupBy]) ? 'rotate' : 'default', params: {degree: -90}}\">\r\n </fa-icon>\r\n <span class=\"virtual-scroll-groupby-label e1tag-container-style6\"\r\n [style]=\"componentProperties.containerStyle.style6\">\r\n {{options.groupByLabelTemplate ? getGroupByLabelTemplate(dataItem, options) : dataItem[options.groupBy]}}\r\n </span>\r\n </div>\r\n <div *ngIf=\"!options.isGroupByEnabled\" [style.height.px]=\"options.itemSize\"\r\n [style.min-height.px]=\"options.itemSize\" [style.max-height.px]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style2\" class=\"e1tag-container-style2 virtual-scroll-dataitem\"\r\n (click)=\"onClick($event, dataItem)\" [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n <div *ngIf=\"options.isGroupByEnabled\" [style.height.px]=\"options.itemSize\"\r\n [style.min-height.px]=\"options.itemSize\" [style.max-height.px]=\"options.itemSize\"\r\n [style]=\"componentProperties.containerStyle.style2\" class=\"e1tag-container-style2 virtual-scroll-dataitem\"\r\n (click)=\"onClick($event, dataItem)\" [id]=\"data.Name + '_' + dataItem?.Value?.Id || ''\"\r\n [@collapseAnimation]=\"{value: !!options.groupBy && collapsedGroupBy.includes(dataItem[options.groupBy]) ? 'collapse' : 'default'}\"\r\n [class.groupby-value-expand]=\"groupByValueToExpand == (dataItem[options.groupBy])\">\r\n <div *ngIf=\"!dataItem\" [innerHTML]=\"options.loadingLabel | htmlSanitize\"></div>\r\n <div *ngIf=\"dataItem.Label\" [innerHTML]=\"dataItem.Label | htmlSanitize\"></div>\r\n </div>\r\n </div>\r\n <app-context-menu [data]=\"data\" [group]=\"group\" [form]=\"form\" [target]=\"virtualscrollcontent\" [selectedData]=\"dataItem\"></app-context-menu>\r\n </ng-container>\r\n <app-zformcontrol *ngFor=\"let field of footerFields\" [field]=\"field\" [containerField]=\"data\" [group]=\"group\"\r\n [form]=\"form\" [style]=\"componentProperties.containerStyle.style3\" class=\"e1tag-container-style3\">\r\n </app-zformcontrol>\r\n </cdk-virtual-scroll-viewport>\r\n</div>\r\n", styles: [".virtual-scroll-viewport{height:500px}.virtual-scroll-viewport .virtual-scroll-groupby{background:rgba(var(--ion-color-secondary-rgb),.1);font-weight:500;padding:12px 0 4px 12px;margin:1px}.virtual-scroll-viewport .virtual-scroll-groupby.groupby-collapsible{cursor:pointer;display:grid;grid-template-columns:20px auto}.virtual-scroll-viewport .virtual-scroll-groupby.groupby-collapsible:hover{background:rgba(var(--ion-color-secondary-rgb),.05)}.virtual-scroll-viewport .virtual-scroll-groupby>.virtual-scroll-groupby-arrow-icon{width:fit-content}.virtual-scroll-viewport .virtual-scroll-dataitem.groupby-value-expand{transform:translateY(-10%);opacity:.2}\n"] }]
|
|
228
228
|
}], ctorParameters: function () { return [{ type: i1.ZComponentService }, { type: i2.FontAweSomeService }]; }, propDecorators: { viewPort: [{
|
|
229
229
|
type: ViewChild,
|
|
230
230
|
args: [CdkVirtualScrollViewport]
|
|
231
231
|
}] } });
|
|
232
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1zY3JvbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFFOUIsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRWhGLE9BQU8sRUFBc0UsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2SCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQWMsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7O0FBWXhGLDBHQUEwRztBQUMxRyw0R0FBNEc7QUFFNUcsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQVk1RCxZQUNFLGdCQUFtQyxFQUM1QixrQkFBc0M7UUFFN0MsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFGakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQVp4QyxxQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxrQ0FBa0M7UUFDekQseUJBQW9CLEdBQUcs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LCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb250YWluZXJGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9jb250YWluZXJmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRhU2V0UmVzdWx0LCBGb250QXdlU29tZVNlcnZpY2UsIFZpcnR1YWxTY3JvbGxPcHRpb24sIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gXCJAYW5ndWxhci9jZGsvc2Nyb2xsaW5nXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGF1ZGl0VGltZSwgZGVsYXksIGZvcmtKb2luLCBvZiwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY29sbGFwc2VBbmltYXRpb24sIHJvdGF0ZUFuaW1hdGlvbiB9IGZyb20gXCIuLi9hbmltYXRpb25zL2NvbXBvbmVudC1hbmltYXRpb25zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtdmlydHVhbC1zY3JvbGxcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3ZpcnR1YWwtc2Nyb2xsLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3ZpcnR1YWwtc2Nyb2xsLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIGNvbGxhcHNlQW5pbWF0aW9uLFxyXG4gICAgcm90YXRlQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5cclxuLy8gQXBwcm9hY2ggMTogVG90YWwgQ291bnQgaXMga25vd24sIGdldCBuZXh0IHBhZ2UgdXBvbiBzY3JvbGwuIChXaWxsIG9ubHkgaGF2ZSBtdWx0aXBsZSBwYWdlcyAvIHBhZ2VhYmxlKVxyXG4vLyBBcHByb2FjaCAyOiBUb3RhbCBDb3VudCBpcyBub3Qga25vd24sIGFwcGVuZCBtb3JlIGRhdGEgYXQgcnVudGltZS4gKFdpbGwgb25seSBoYXZlIDEgcGFnZSAvIG5vdCBwYWdlYWJsZSlcclxuXHJcbmV4cG9ydCBjbGFzcyBWaXJ0dWFsU2Nyb2xsQ29tcG9uZW50IGV4dGVuZHMgQ29udGFpbmVyRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgdmlld1BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcclxuICBwdWJsaWMgY29sbGFwc2VkR3JvdXBCeSA9IFtdOyAvLyBVc2VkIHRvIGRlZmluZSBhbmltYXRpb24gc3RhdHVzXHJcbiAgcHVibGljIGdyb3VwQnlWYWx1ZVRvRXhwYW5kID0gJyc7ICAvLyBVc2VkIHRvIGRlZmluZSBhbmltYXRpb24gc3RhdHVzXHJcbiAgcHVibGljIGNvbGxhcHNlZEdyb3VwQnlfRmlyc3ROb2RlSW5kZXhMaXN0ID0gbmV3IEFycmF5PG51bWJlcj4oKTsgLy8gV2hlbiBjb2xsYXBzZSwgbmVlZCB0byByZXRhaW4gdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGxpc3Qgc28gdGhhdCB0aGUgZ3JvdXAgYnkgdGl0bGUgd2lsbCBub3QgYmUgaGlkZGVuXHJcbiAgcHJpdmF0ZSBmdWxsRGF0YUl0ZW1zID0gW107XHJcbiAgcHVibGljIGRhdGFJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHB1YmxpYyBwYWdlU2l6ZSA9IDUwO1xyXG4gIHB1YmxpYyBwYWdlRmV0Y2hlZCA9IFtdO1xyXG4gIHB1YmxpYyBvcHRpb25zOiBWaXJ0dWFsU2Nyb2xsT3B0aW9uO1xyXG4gIHB1YmxpYyBmb290ZXJGaWVsZHMgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHB1YmxpYyBmb250QXdlU29tZVNlcnZpY2U6IEZvbnRBd2VTb21lU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgIHRoaXMuc2V0dXBEYXRhSXRlbXMoKTtcclxuICAgIHRoaXMuc2V0dXBGb290ZXIoKTtcclxuICAgIHN1cGVyLmluaXRDb21wb25lbnQoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICAgIHRoaXMudmlld1BvcnQuc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKFxyXG4gICAgICBhdWRpdFRpbWUodGhpcy5kYXRhLlNjcm9sbEluZGV4Q2hhbmdlVGltZURlbGF5IHx8IDMwMCksXHJcbiAgICAgIHRhcCgoY3VyckluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlTGlzdERhdGEoY3VyckluZGV4KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICBpZiAodGhpcy52aWV3UG9ydCkge1xyXG4gICAgICB0aGlzLnZpZXdQb3J0LnNjcm9sbFRvSW5kZXgoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwQ29tcG9uZW50KCkge1xyXG4gICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5ID0gW107XHJcbiAgICBpZiAodGhpcy5kYXRhLk9wdGlvbnMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuT3B0aW9ucyA9PT0gJ3N0cmluZycgJiYgdGhpcy5kYXRhLk9wdGlvbnMuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLk9wdGlvbnMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGF0YS5PcHRpb25zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5vcHRpb25zLnBhZ2VTaXplID8/IDUwO1xyXG4gICAgICB0aGlzLm9wdGlvbnMubG9hZGluZ0xhYmVsID0gdGhpcy5vcHRpb25zLmxvYWRpbmdMYWJlbCA/PyAnPGRpdj5Mb2FkaW5nPC9kaXY+JztcclxuICAgICAgdGhpcy5vcHRpb25zLml0ZW1TaXplID0gdGhpcy5vcHRpb25zLml0ZW1TaXplID8/IDUwO1xyXG4gICAgICB0aGlzLm9wdGlvbnMubWluQnVmZmVyUHggPSB0aGlzLm9wdGlvbnMubWluQnVmZmVyUHggPz8gKHRoaXMub3B0aW9ucy5wYWdlU2l6ZSAqIHRoaXMub3B0aW9ucy5pdGVtU2l6ZSk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5tYXhCdWZmZXJQeCA9IHRoaXMub3B0aW9ucy5tYXhCdWZmZXJQeCA/PyAodGhpcy5vcHRpb25zLnBhZ2VTaXplICogdGhpcy5vcHRpb25zLml0ZW1TaXplKTtcclxuICAgICAgdGhpcy5vcHRpb25zLmlzR3JvdXBCeUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMuaXNHcm91cEJ5RW5hYmxlZCA/PyAhIXRoaXMub3B0aW9ucy5ncm91cEJ5O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGVuZERhdGEoZGF0YUl0ZW1zOiBBcnJheTxhbnk+KSB7XHJcbiAgICB0aGlzLmZ1bGxEYXRhSXRlbXMgPSB0aGlzLmZ1bGxEYXRhSXRlbXMuY29uY2F0KGRhdGFJdGVtcyk7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5mdWxsRGF0YUl0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuY29tcHV0ZURhdGFJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cERhdGFJdGVtcygpIHtcclxuICAgIHRoaXMucGFnZUZldGNoZWQgPSBbXTtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNldFJlc3VsdCkge1xyXG4gICAgICBsZXQgZGF0YVNldFJlc3VsdCA9IHRoaXMuZGF0YS5EYXRhU2V0UmVzdWx0O1xyXG4gICAgICBpZiAodHlwZW9mIGRhdGFTZXRSZXN1bHQgPT0gJ3N0cmluZycgJiYgZGF0YVNldFJlc3VsdC5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICAgIGRhdGFTZXRSZXN1bHQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZGF0YVNldFJlc3VsdCwgdGhpcy5ncm91cCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXREYXRhKGRhdGFTZXRSZXN1bHQgYXMgRGF0YVNldFJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhSXRlbXMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRhKGRhdGFTZXRSZXN1bHQ6IERhdGFTZXRSZXN1bHQpIHtcclxuICAgIHRoaXMucGFnZUZldGNoZWQgPSBbXTtcclxuICAgIGlmIChkYXRhU2V0UmVzdWx0LmRhdGFTZXQgJiYgQXJyYXkuaXNBcnJheShkYXRhU2V0UmVzdWx0LmRhdGFTZXQpICYmIGRhdGFTZXRSZXN1bHQuZGF0YVNldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNudCA9IGRhdGFTZXRSZXN1bHQudG90YWxDb3VudCAtIGRhdGFTZXRSZXN1bHQuZGF0YVNldC5sZW5ndGg7XHJcbiAgICAgIGlmIChjbnQgPCAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRGF0YUl0ZW1zIGNhbm5vdCBiZSBtb3JlIHRoYW4gdG90YWwgY291bnQuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRhdGFJdGVtcyA9IGRhdGFTZXRSZXN1bHQuZGF0YVNldC5jb25jYXQoQXJyYXkoY250KS5maWxsKGZhbHNlKSk7XHJcbiAgICAgIGNvbnN0IHBhZ2VOb1RvTWFya0FzRmV0Y2ggPSBNYXRoLmNlaWwoZGF0YVNldFJlc3VsdC5kYXRhU2V0Lmxlbmd0aCAvIHRoaXMucGFnZVNpemUpIC0gMTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcGFnZU5vVG9NYXJrQXNGZXRjaDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlRmV0Y2hlZC5wdXNoKGkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChkYXRhU2V0UmVzdWx0LnRvdGFsQ291bnQpIHtcclxuICAgICAgdGhpcy5kYXRhSXRlbXMgPSBBcnJheShkYXRhU2V0UmVzdWx0LnRvdGFsQ291bnQpLmZpbGwoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YUl0ZW1zID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxEYXRhSXRlbXMgPSB0aGlzLmRhdGFJdGVtcztcclxuICAgIHRoaXMuY29tcHV0ZURhdGFJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUxpc3REYXRhKGN1cnJJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCByZW5kZXJSYW5nZSA9IHRoaXMudmlld1BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpO1xyXG4gICAgaWYgKHJlbmRlclJhbmdlLnN0YXJ0ID09IHJlbmRlclJhbmdlLmVuZCAmJiByZW5kZXJSYW5nZS5lbmQgPT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRQYWdlTm8gPSBNYXRoLmZsb29yKHJlbmRlclJhbmdlLnN0YXJ0IC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICBjb25zdCBlbmRQYWdlTm8gPSBNYXRoLmZsb29yKChyZW5kZXJSYW5nZS5lbmQgLSAxKSAvIHRoaXMucGFnZVNpemUpO1xyXG5cclxuICAgIGNvbnN0IG9icyA9IG5ldyBBcnJheTxPYnNlcnZhYmxlPGFueT4+KCk7XHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlTm87IGkgPD0gZW5kUGFnZU5vOyBpKyspIHtcclxuICAgICAgaWYgKCF0aGlzLnBhZ2VGZXRjaGVkLmluY2x1ZGVzKGkpKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlRmV0Y2hlZC5wdXNoKGkpO1xyXG4gICAgICAgIG9icy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5mZXRjaERhdGEoaSkucGlwZSh0YXAoKFtkYXRhLCBwYWdlTm9dKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YUJ5SW5kZXgocGFnZU5vICogdGhpcy5wYWdlU2l6ZSwgZGF0YSk7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9icy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvcmtKb2luKG9icykucGlwZSh0YXAocmVzID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdQb3J0RGF0YSgpO1xyXG4gICAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoRGF0YShwYWdlTm8pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5PblNjcm9sbCAmJiB0eXBlb2YgdGhpcy5kYXRhLk9uU2Nyb2xsID09ICdzdHJpbmcnICYmIHRoaXMuZGF0YS5PblNjcm9sbC5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICBjb25zdCBvblNjcm9sbEV2ZW50ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PblNjcm9sbCk7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25TY3JvbGxFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IGNhbGxGdW5jID0gb25TY3JvbGxFdmVudC5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oW2NhbGxGdW5jKHRoaXMuZ3JvdXAsIHsgcGFnZU5vOiBwYWdlTm8sIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplIH0pLCBvZihwYWdlTm8pXSBhcyBBcnJheTxPYnNlcnZhYmxlPGFueT4+KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGFCeUluZGV4KHN0YXJ0aW5nSW5kZXg6IG51bWJlciwgZGF0YTogQXJyYXk8YW55Pikge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuZGF0YUl0ZW1zW3N0YXJ0aW5nSW5kZXggKyBpXSA9IGRhdGFbaV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZpZXdQb3J0RGF0YSgpIHtcclxuICAgIHRoaXMuZGF0YUl0ZW1zID0gWy4uLnRoaXMuZGF0YUl0ZW1zXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXR1cEZvb3RlcigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuZm9vdGVyRmllbGRzID0gdGhpcy5kYXRhLlZhbHVlLmZpbHRlcih4ID0+IHguU2VjdGlvbiA9PT0gJ2Zvb3RlcicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbXBvbmVudE9wdGlvbnMoKTogVmlydHVhbFNjcm9sbE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdyb3VwIEJ5XHJcbiAgcHVibGljIGdldEdyb3VwQnlMYWJlbFRlbXBsYXRlKGRhdGFJdGVtLCBvcHRpb25zKTogc3RyaW5nIHtcclxuICAgIGlmIChvcHRpb25zLmdyb3VwQnlMYWJlbFRlbXBsYXRlICYmIHR5cGVvZiBvcHRpb25zLmdyb3VwQnlMYWJlbFRlbXBsYXRlID09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLmdyb3VwQnlMYWJlbFRlbXBsYXRlLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgICAgY29uc3QgZ2V0VGVtcGxhdGVGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIG9wdGlvbnMuZ3JvdXBCeUxhYmVsVGVtcGxhdGUpO1xyXG5cclxuICAgICAgICBpZiAoZ2V0VGVtcGxhdGVGdW5jKSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICAgICAgZGF0YUl0ZW0sXHJcbiAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeUxhYmVsVGVtcGxhdGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JvdXBCeU9uQ2xpY2soZ3JvdXBCeVZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLmlzR3JvdXBCeUNvbGxhcHNpYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB1c2UgY29sbGFwc2UgLyBleHBhbmQgdG8gY29udHJvbCBhbmltYXRpb24gc2VxdWVuY2VcclxuICAgIGNvbnN0IGlzVG9Db2xsYXBzZSA9ICF0aGlzLmNvbGxhcHNlZEdyb3VwQnkuaW5jbHVkZXMoZ3JvdXBCeVZhbHVlKTtcclxuXHJcbiAgICBjb25zdCBmaXJzdE5vZGVJbmRleCA9IHRoaXMuZnVsbERhdGFJdGVtcy5tYXAoeCA9PiB4W3RoaXMub3B0aW9ucy5ncm91cEJ5XSkuaW5kZXhPZihncm91cEJ5VmFsdWUpO1xyXG4gICAgaWYgKGlzVG9Db2xsYXBzZSkge1xyXG4gICAgICAvLyB0byBjb2xsYXBzZSAoRm9yIGFuaW1hdGlvbjogQ2hhbmdlIHN0YXR1cywgdGhlbiBhcHBlbmQgZGF0YSlcclxuICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5LnB1c2goZ3JvdXBCeVZhbHVlKTtcclxuICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5X0ZpcnN0Tm9kZUluZGV4TGlzdC5wdXNoKGZpcnN0Tm9kZUluZGV4KTtcclxuICAgICAgb2Yoe30pLnBpcGUoZGVsYXkoNDAwKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb21wdXRlRGF0YUl0ZW1zKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyB0byBleHBhbmQgKEZvciBhbmltYXRpb246IEFwcGVuZCBkYXRhLCB0aGVuIGNoYW5nZSBzdGF0dXMpXHJcbiAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBCeV9GaXJzdE5vZGVJbmRleExpc3QgPSB0aGlzLmNvbGxhcHNlZEdyb3VwQnlfRmlyc3ROb2RlSW5kZXhMaXN0LmZpbHRlcih4ID0+IHggIT0gZmlyc3ROb2RlSW5kZXgpO1xyXG4gICAgICBjb25zdCB0ZW1wQ29sbGFwc2VkR3JvdXBCeSA9IHRoaXMuY29sbGFwc2VkR3JvdXBCeS5maWx0ZXIoeCA9PiB4ICE9PSBncm91cEJ5VmFsdWUpO1xyXG4gICAgICB0aGlzLmRhdGFJdGVtcyA9IHRoaXMuZnVsbERhdGFJdGVtcy5maWx0ZXIoKHgsIGluZGV4KSA9PiAhdGVtcENvbGxhcHNlZEdyb3VwQnkuaW5jbHVkZXMoeFt0aGlzLm9wdGlvbnMuZ3JvdXBCeV0pIHx8IHRoaXMuY29sbGFwc2VkR3JvdXBCeV9GaXJzdE5vZGVJbmRleExpc3QuaW5jbHVkZXMoaW5kZXgpKTtcclxuICAgICAgdGhpcy5ncm91cEJ5VmFsdWVUb0V4cGFuZCA9IGdyb3VwQnlWYWx1ZTtcclxuICAgICAgb2Yoe30pLnBpcGUoZGVsYXkoMCksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBCeSA9IHRlbXBDb2xsYXBzZWRHcm91cEJ5O1xyXG4gICAgICAgICAgdGhpcy5ncm91cEJ5VmFsdWVUb0V4cGFuZCA9IGdyb3VwQnlWYWx1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlRGF0YUl0ZW1zKCkge1xyXG4gICAgdGhpcy5kYXRhSXRlbXMgPSB0aGlzLmZ1bGxEYXRhSXRlbXMuZmlsdGVyKCh4LCBpbmRleCkgPT4gIXRoaXMuY29sbGFwc2VkR3JvdXBCeS5pbmNsdWRlcyh4W3RoaXMub3B0aW9ucy5ncm91cEJ5XSkgfHwgdGhpcy5jb2xsYXBzZWRHcm91cEJ5X0ZpcnN0Tm9kZUluZGV4TGlzdC5pbmNsdWRlcyhpbmRleCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZEFsbCgpIHtcclxuICAgIHRoaXMuZ3JvdXBCeVZhbHVlVG9FeHBhbmQgPSAnJztcclxuICAgIHRoaXMuY29sbGFwc2VkR3JvdXBCeSA9IFtdO1xyXG4gICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5X0ZpcnN0Tm9kZUluZGV4TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5jb21wdXRlRGF0YUl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQnlHcm91cEJ5VmFsdWVzKGdyb3VwQnlWYWx1ZTogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5ID0gdGhpcy5jb2xsYXBzZWRHcm91cEJ5LmZpbHRlcih4ID0+ICFncm91cEJ5VmFsdWUuaW5jbHVkZXMoeCkpO1xyXG4gICAgdGhpcy5jb21wdXRlRGF0YUl0ZW1zKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxkaXZcclxuICAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgY2xhc3M9XCJjb250YWluZXIgZTF0YWctY29udGFpbmVyLXN0eWxlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGVcIlxyXG4gIFtuZ0NsYXNzXT1cIihkYXRhLkNvbXBvbmVudFN0eWxlVHlwZSB8fCAnJykgKyAnICcgKyAoZGF0YS5DbGFzcyB8fCAnJylcIj5cclxuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XHJcbiAgICAgICAgW2l0ZW1TaXplXT1cIm9wdGlvbnMuaXRlbVNpemVcIlxyXG4gICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICAgY2xhc3M9XCJ2aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBlMXRhZy1jb250YWluZXItc3R5bGUxXCJcclxuICAgICAgICBbbWluQnVmZmVyUHhdPVwib3B0aW9ucy5taW5CdWZmZXJQeFwiXHJcbiAgICAgICAgW21heEJ1ZmZlclB4XT1cIm9wdGlvbnMubWF4QnVmZmVyUHhcIj5cclxuICAgIDxuZy1jb250YWluZXIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgZGF0YUl0ZW0gb2YgZGF0YUl0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxkaXYgI3ZpcnR1YWxzY3JvbGxjb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2aXJ0dWFsLXNjcm9sbC1ncm91cGJ5IGUxdGFnLWNvbnRhaW5lci1zdHlsZTRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5jb250YWluZXJTdHlsZS5zdHlsZTRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zLmlzR3JvdXBCeUVuYWJsZWQgJiYgb3B0aW9ucy5ncm91cEJ5ICYmICghZGF0YUl0ZW1zW2ktMV0gfHwgZGF0YUl0ZW1bb3B0aW9ucy5ncm91cEJ5XSAhPT0gZGF0YUl0ZW1zW2ktMV1bb3B0aW9ucy5ncm91cEJ5XSlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImdyb3VwQnlPbkNsaWNrKGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeV0pXCIgW2NsYXNzLmdyb3VwYnktY29sbGFwc2libGVdPVwib3B0aW9ucy5pc0dyb3VwQnlDb2xsYXBzaWJsZVwiPlxyXG4gICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJ2aXJ0dWFsLXNjcm9sbC1ncm91cGJ5LWFycm93LWljb24gZTF0YWctY29udGFpbmVyLXN0eWxlNVwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlNVwiICpuZ0lmPVwiISFvcHRpb25zLmlzR3JvdXBCeUNvbGxhcHNpYmxlXCJcclxuICAgICAgICAgICAgW2ljb25dPVwiZ2V0Rm9udEF3ZXNvbWUoJ2NhcmV0LWRvd24nLCBmb250QXdlU29tZVNlcnZpY2UpXCJcclxuICAgICAgICAgICAgW0Byb3RhdGVBbmltYXRpb25dPVwie3ZhbHVlOiBjb2xsYXBzZWRHcm91cEJ5LmluY2x1ZGVzKGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeV0pID8gJ3JvdGF0ZScgOiAnZGVmYXVsdCcsIHBhcmFtczoge2RlZ3JlZTogLTkwfX1cIj5cclxuICAgICAgICAgIDwvZmEtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlydHVhbC1zY3JvbGwtZ3JvdXBieS1sYWJlbCBlMXRhZy1jb250YWluZXItc3R5bGU2XCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGU2XCI+XHJcbiAgICAgICAgICAgIHt7b3B0aW9ucy5ncm91cEJ5TGFiZWxUZW1wbGF0ZSA/IGdldEdyb3VwQnlMYWJlbFRlbXBsYXRlKGRhdGFJdGVtLCBvcHRpb25zKSA6IGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeV19fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhb3B0aW9ucy5pc0dyb3VwQnlFbmFibGVkXCIgW3N0eWxlLmhlaWdodC5weF09XCJvcHRpb25zLml0ZW1TaXplXCJcclxuICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cIm9wdGlvbnMuaXRlbVNpemVcIiBbc3R5bGUubWF4LWhlaWdodC5weF09XCJvcHRpb25zLml0ZW1TaXplXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlMlwiIGNsYXNzPVwiZTF0YWctY29udGFpbmVyLXN0eWxlMiB2aXJ0dWFsLXNjcm9sbC1kYXRhaXRlbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQsIGRhdGFJdGVtKVwiIFtpZF09XCJkYXRhLk5hbWUgKyAnXycgKyBkYXRhSXRlbT8uVmFsdWU/LklkIHx8ICcnXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRhdGFJdGVtXCIgW2lubmVySFRNTF09XCJvcHRpb25zLmxvYWRpbmdMYWJlbCB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFJdGVtLkxhYmVsXCIgW2lubmVySFRNTF09XCJkYXRhSXRlbS5MYWJlbCB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLmlzR3JvdXBCeUVuYWJsZWRcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIm9wdGlvbnMuaXRlbVNpemVcIlxyXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwib3B0aW9ucy5pdGVtU2l6ZVwiIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cIm9wdGlvbnMuaXRlbVNpemVcIlxyXG4gICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGUyXCIgY2xhc3M9XCJlMXRhZy1jb250YWluZXItc3R5bGUyIHZpcnR1YWwtc2Nyb2xsLWRhdGFpdGVtXCJcclxuICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudCwgZGF0YUl0ZW0pXCIgW2lkXT1cImRhdGEuTmFtZSArICdfJyArIGRhdGFJdGVtPy5WYWx1ZT8uSWQgfHwgJydcIlxyXG4gICAgICAgICAgW0Bjb2xsYXBzZUFuaW1hdGlvbl09XCJ7dmFsdWU6ICEhb3B0aW9ucy5ncm91cEJ5ICYmIGNvbGxhcHNlZEdyb3VwQnkuaW5jbHVkZXMoZGF0YUl0ZW1bb3B0aW9ucy5ncm91cEJ5XSkgPyAnY29sbGFwc2UnIDogJ2RlZmF1bHQnfVwiXHJcbiAgICAgICAgICBbY2xhc3MuZ3JvdXBieS12YWx1ZS1leHBhbmRdPVwiZ3JvdXBCeVZhbHVlVG9FeHBhbmQgPT0gKGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeV0pXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRhdGFJdGVtXCIgW2lubmVySFRNTF09XCJvcHRpb25zLmxvYWRpbmdMYWJlbCB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFJdGVtLkxhYmVsXCIgW2lubmVySFRNTF09XCJkYXRhSXRlbS5MYWJlbCB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGFwcC1jb250ZXh0LW1lbnUgW2RhdGFdPVwiZGF0YVwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIiBbdGFyZ2V0XT1cInZpcnR1YWxzY3JvbGxjb250ZW50XCIgW3NlbGVjdGVkRGF0YV09XCJkYXRhSXRlbVwiPjwvYXBwLWNvbnRleHQtbWVudT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGFwcC16Zm9ybWNvbnRyb2wgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvb3RlckZpZWxkc1wiIFtmaWVsZF09XCJmaWVsZFwiIFtjb250YWluZXJGaWVsZF09XCJkYXRhXCIgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgW2Zvcm1dPVwiZm9ybVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlM1wiIGNsYXNzPVwiZTF0YWctY29udGFpbmVyLXN0eWxlM1wiPlxyXG4gICAgPC9hcHAtemZvcm1jb250cm9sPlxyXG4gIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxyXG48L2Rpdj5cclxuIl19
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbC1zY3JvbGwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvdmlydHVhbC1zY3JvbGwvdmlydHVhbC1zY3JvbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFFOUIsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBRWhGLE9BQU8sRUFBc0UsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2SCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNsRSxPQUFPLEVBQWMsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7O0FBWXhGLDBHQUEwRztBQUMxRyw0R0FBNEc7QUFFNUcsTUFBTSxPQUFPLHNCQUF1QixTQUFRLGtCQUFrQjtJQVk1RCxZQUNFLGdCQUFtQyxFQUM1QixrQkFBc0M7UUFFN0MsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFGakIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQVp4QyxxQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxrQ0FBa0M7UUFDekQseUJBQW9CLEdBQUcsRUFBRSxDQUFDLENBQUUsa0NBQWtDO1FBQzlELHdDQUFtQyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUMsQ0FBQyx5R0FBeUc7UUFDbkssa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFDcEIsY0FBUyxHQUFlLEVBQUUsQ0FBQztRQUMzQixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFakIsaUJBQVksR0FBRyxFQUFFLENBQUM7SUFPekIsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUNwQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsSUFBSSxHQUFHLENBQUMsRUFDdEQsR0FBRyxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNyQixJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbkYsSUFBSSxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzlFO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDbEM7WUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksSUFBSSxvQkFBb0IsQ0FBQztZQUM5RSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ3pGO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxTQUFxQjtRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDMUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUMzQixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUM1QyxJQUFJLE9BQU8sYUFBYSxJQUFJLFFBQVEsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUMxRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDM0U7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQThCLENBQUMsQ0FBQztTQUM5QzthQUNJO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7U0FDckI7SUFDSCxDQUFDO0lBRU0sT0FBTyxDQUFDLGFBQTRCO1FBQ3pDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksYUFBYSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDckcsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNwRSxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO2dCQUM1RCxPQUFPO2FBQ1I7WUFFRCxJQUFJLENBQUMsU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN0RSxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzFCO1NBQ0Y7YUFDSSxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5RDthQUNJO1lBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDcEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFNBQWlCO1FBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyRCxJQUFJLFdBQVcsQ0FBQyxLQUFLLElBQUksV0FBVyxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRTtZQUNoRSxPQUFPO1NBQ1I7UUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVwRSxNQUFNLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBbUIsQ0FBQztRQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLENBQUMsQ0FBQyxDQUNKLENBQUM7YUFDSDtTQUNGO1FBRUQsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFTyxTQUFTLENBQUMsTUFBTTtRQUN0QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxRyxNQUFNLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEYsSUFBSSxPQUFPLGFBQWEsS0FBSyxVQUFVLEVBQUU7Z0JBQ3ZDLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDMUQsT0FBTyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBMkIsQ0FBQyxDQUFDO2FBQzVIO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRU8saUJBQWlCLENBQUMsYUFBcUIsRUFBRSxJQUFnQjtRQUMvRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0M7SUFDSCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUM7U0FDekU7SUFDSCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsa0JBQWtCO0lBQ1gsdUJBQXVCLENBQUMsUUFBUSxFQUFFLE9BQU87UUFDOUMsSUFBSSxPQUFPLENBQUMsb0JBQW9CLElBQUksT0FBTyxPQUFPLENBQUMsb0JBQW9CLElBQUksUUFBUSxFQUFFO1lBQ25GLElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDckQsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFFcEcsSUFBSSxlQUFlLEVBQUU7b0JBQ25CLE9BQU8sZUFBZSxDQUFDO3dCQUNyQixRQUFRO3dCQUNSLE9BQU87cUJBQ1IsQ0FBQyxDQUFDO2lCQUNKO2FBQ0Y7aUJBQ0k7Z0JBQ0gsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7YUFDL0M7U0FDRjtJQUNILENBQUM7SUFFTSxjQUFjLENBQUMsWUFBb0I7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUU7WUFDdEMsT0FBTztTQUNSO1FBRUQsc0RBQXNEO1FBQ3RELE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVuRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xHLElBQUksWUFBWSxFQUFFO1lBQ2hCLCtEQUErRDtZQUMvRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDOUQsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQ3BCLEdBQUcsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLENBQ0gsQ0FBQyxTQUFTLEVBQUUsQ0FBQztTQUNmO2FBQ0k7WUFDSCw2REFBNkQ7WUFDN0QsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksY0FBYyxDQUFDLENBQUM7WUFDckgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLFlBQVksQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUM5SyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsWUFBWSxDQUFDO1lBQ3pDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNsQixHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFlBQVksQ0FBQztZQUMzQyxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsbUNBQW1DLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDakwsQ0FBQztJQUVNLFNBQVM7UUFDZCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0scUJBQXFCLENBQUMsWUFBMkI7UUFDdEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDOzttSEF4T1Usc0JBQXNCO3VHQUF0QixzQkFBc0Isb0dBQ3RCLHdCQUF3Qix1RUM3QnJDLGsxSEFpREEscTVFRDlCYztRQUNWLGlCQUFpQjtRQUNqQixlQUFlO0tBQ2hCOzJGQU1VLHNCQUFzQjtrQkFibEMsU0FBUzsrQkFDRSxvQkFBb0IsY0FHbEI7d0JBQ1YsaUJBQWlCO3dCQUNqQixlQUFlO3FCQUNoQjt5SUFPb0MsUUFBUTtzQkFBNUMsU0FBUzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb250YWluZXJGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9jb250YWluZXJmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRhU2V0UmVzdWx0LCBGb250QXdlU29tZVNlcnZpY2UsIFZpcnR1YWxTY3JvbGxPcHRpb24sIFpDb21wb25lbnQsIFpDb21wb25lbnRIZWxwZXIgfSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcbmltcG9ydCB7IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCB9IGZyb20gXCJAYW5ndWxhci9jZGsvc2Nyb2xsaW5nXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIGF1ZGl0VGltZSwgZGVsYXksIGZvcmtKb2luLCBvZiwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgY29sbGFwc2VBbmltYXRpb24sIHJvdGF0ZUFuaW1hdGlvbiB9IGZyb20gXCIuLi9hbmltYXRpb25zL2NvbXBvbmVudC1hbmltYXRpb25zXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtdmlydHVhbC1zY3JvbGxcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3ZpcnR1YWwtc2Nyb2xsLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3ZpcnR1YWwtc2Nyb2xsLmNvbXBvbmVudC5zY3NzXCJdLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIGNvbGxhcHNlQW5pbWF0aW9uLFxyXG4gICAgcm90YXRlQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5cclxuLy8gQXBwcm9hY2ggMTogVG90YWwgQ291bnQgaXMga25vd24sIGdldCBuZXh0IHBhZ2UgdXBvbiBzY3JvbGwuIChXaWxsIG9ubHkgaGF2ZSBtdWx0aXBsZSBwYWdlcyAvIHBhZ2VhYmxlKVxyXG4vLyBBcHByb2FjaCAyOiBUb3RhbCBDb3VudCBpcyBub3Qga25vd24sIGFwcGVuZCBtb3JlIGRhdGEgYXQgcnVudGltZS4gKFdpbGwgb25seSBoYXZlIDEgcGFnZSAvIG5vdCBwYWdlYWJsZSlcclxuXHJcbmV4cG9ydCBjbGFzcyBWaXJ0dWFsU2Nyb2xsQ29tcG9uZW50IGV4dGVuZHMgQ29udGFpbmVyRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgdmlld1BvcnQ6IENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydDtcclxuICBwdWJsaWMgY29sbGFwc2VkR3JvdXBCeSA9IFtdOyAvLyBVc2VkIHRvIGRlZmluZSBhbmltYXRpb24gc3RhdHVzXHJcbiAgcHVibGljIGdyb3VwQnlWYWx1ZVRvRXhwYW5kID0gJyc7ICAvLyBVc2VkIHRvIGRlZmluZSBhbmltYXRpb24gc3RhdHVzXHJcbiAgcHVibGljIGNvbGxhcHNlZEdyb3VwQnlfRmlyc3ROb2RlSW5kZXhMaXN0ID0gbmV3IEFycmF5PG51bWJlcj4oKTsgLy8gV2hlbiBjb2xsYXBzZSwgbmVlZCB0byByZXRhaW4gdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGxpc3Qgc28gdGhhdCB0aGUgZ3JvdXAgYnkgdGl0bGUgd2lsbCBub3QgYmUgaGlkZGVuXHJcbiAgcHJpdmF0ZSBmdWxsRGF0YUl0ZW1zID0gW107XHJcbiAgcHVibGljIGRhdGFJdGVtczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIHB1YmxpYyBwYWdlU2l6ZSA9IDUwO1xyXG4gIHB1YmxpYyBwYWdlRmV0Y2hlZCA9IFtdO1xyXG4gIHB1YmxpYyBvcHRpb25zOiBWaXJ0dWFsU2Nyb2xsT3B0aW9uO1xyXG4gIHB1YmxpYyBmb290ZXJGaWVsZHMgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHB1YmxpYyBmb250QXdlU29tZVNlcnZpY2U6IEZvbnRBd2VTb21lU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0dXBDb21wb25lbnQoKTtcclxuICAgIHRoaXMuc2V0dXBEYXRhSXRlbXMoKTtcclxuICAgIHRoaXMuc2V0dXBGb290ZXIoKTtcclxuICAgIHN1cGVyLmluaXRDb21wb25lbnQoKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICAgIHRoaXMudmlld1BvcnQuc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKFxyXG4gICAgICBhdWRpdFRpbWUodGhpcy5kYXRhLlNjcm9sbEluZGV4Q2hhbmdlVGltZURlbGF5IHx8IDMwMCksXHJcbiAgICAgIHRhcCgoY3VyckluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICB0aGlzLnBvcHVsYXRlTGlzdERhdGEoY3VyckluZGV4KTtcclxuICAgICAgfSlcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2Nyb2xsVG9Ub3AoKSB7XHJcbiAgICBpZiAodGhpcy52aWV3UG9ydCkge1xyXG4gICAgICB0aGlzLnZpZXdQb3J0LnNjcm9sbFRvSW5kZXgoMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldHVwQ29tcG9uZW50KCkge1xyXG4gICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5ID0gW107XHJcbiAgICBpZiAodGhpcy5kYXRhLk9wdGlvbnMpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmRhdGEuT3B0aW9ucyA9PT0gJ3N0cmluZycgJiYgdGhpcy5kYXRhLk9wdGlvbnMuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLk9wdGlvbnMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuZGF0YS5PcHRpb25zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5vcHRpb25zLnBhZ2VTaXplID8/IDUwO1xyXG4gICAgICB0aGlzLm9wdGlvbnMubG9hZGluZ0xhYmVsID0gdGhpcy5vcHRpb25zLmxvYWRpbmdMYWJlbCA/PyAnPGRpdj5Mb2FkaW5nPC9kaXY+JztcclxuICAgICAgdGhpcy5vcHRpb25zLml0ZW1TaXplID0gdGhpcy5vcHRpb25zLml0ZW1TaXplID8/IDUwO1xyXG4gICAgICB0aGlzLm9wdGlvbnMubWluQnVmZmVyUHggPSB0aGlzLm9wdGlvbnMubWluQnVmZmVyUHggPz8gKHRoaXMub3B0aW9ucy5wYWdlU2l6ZSAqIHRoaXMub3B0aW9ucy5pdGVtU2l6ZSk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5tYXhCdWZmZXJQeCA9IHRoaXMub3B0aW9ucy5tYXhCdWZmZXJQeCA/PyAodGhpcy5vcHRpb25zLnBhZ2VTaXplICogdGhpcy5vcHRpb25zLml0ZW1TaXplKTtcclxuICAgICAgdGhpcy5vcHRpb25zLmlzR3JvdXBCeUVuYWJsZWQgPSB0aGlzLm9wdGlvbnMuaXNHcm91cEJ5RW5hYmxlZCA/PyAhIXRoaXMub3B0aW9ucy5ncm91cEJ5O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFwcGVuZERhdGEoZGF0YUl0ZW1zOiBBcnJheTxhbnk+KSB7XHJcbiAgICB0aGlzLmZ1bGxEYXRhSXRlbXMgPSB0aGlzLmZ1bGxEYXRhSXRlbXMuY29uY2F0KGRhdGFJdGVtcyk7XHJcbiAgICB0aGlzLnBhZ2VTaXplID0gdGhpcy5mdWxsRGF0YUl0ZW1zLmxlbmd0aDtcclxuICAgIHRoaXMuY29tcHV0ZURhdGFJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cERhdGFJdGVtcygpIHtcclxuICAgIHRoaXMucGFnZUZldGNoZWQgPSBbXTtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNldFJlc3VsdCkge1xyXG4gICAgICBsZXQgZGF0YVNldFJlc3VsdCA9IHRoaXMuZGF0YS5EYXRhU2V0UmVzdWx0O1xyXG4gICAgICBpZiAodHlwZW9mIGRhdGFTZXRSZXN1bHQgPT0gJ3N0cmluZycgJiYgZGF0YVNldFJlc3VsdC5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICAgIGRhdGFTZXRSZXN1bHQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZGF0YVNldFJlc3VsdCwgdGhpcy5ncm91cCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZXREYXRhKGRhdGFTZXRSZXN1bHQgYXMgRGF0YVNldFJlc3VsdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5kYXRhSXRlbXMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXREYXRhKGRhdGFTZXRSZXN1bHQ6IERhdGFTZXRSZXN1bHQpIHtcclxuICAgIHRoaXMucGFnZUZldGNoZWQgPSBbXTtcclxuICAgIGlmIChkYXRhU2V0UmVzdWx0LmRhdGFTZXQgJiYgQXJyYXkuaXNBcnJheShkYXRhU2V0UmVzdWx0LmRhdGFTZXQpICYmIGRhdGFTZXRSZXN1bHQuZGF0YVNldC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGNudCA9IGRhdGFTZXRSZXN1bHQudG90YWxDb3VudCAtIGRhdGFTZXRSZXN1bHQuZGF0YVNldC5sZW5ndGg7XHJcbiAgICAgIGlmIChjbnQgPCAwKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRGF0YUl0ZW1zIGNhbm5vdCBiZSBtb3JlIHRoYW4gdG90YWwgY291bnQuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRhdGFJdGVtcyA9IGRhdGFTZXRSZXN1bHQuZGF0YVNldC5jb25jYXQoQXJyYXkoY250KS5maWxsKGZhbHNlKSk7XHJcbiAgICAgIGNvbnN0IHBhZ2VOb1RvTWFya0FzRmV0Y2ggPSBNYXRoLmNlaWwoZGF0YVNldFJlc3VsdC5kYXRhU2V0Lmxlbmd0aCAvIHRoaXMucGFnZVNpemUpIC0gMTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPD0gcGFnZU5vVG9NYXJrQXNGZXRjaDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlRmV0Y2hlZC5wdXNoKGkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChkYXRhU2V0UmVzdWx0LnRvdGFsQ291bnQpIHtcclxuICAgICAgdGhpcy5kYXRhSXRlbXMgPSBBcnJheShkYXRhU2V0UmVzdWx0LnRvdGFsQ291bnQpLmZpbGwoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZGF0YUl0ZW1zID0gW107XHJcbiAgICB9XHJcbiAgICB0aGlzLmZ1bGxEYXRhSXRlbXMgPSB0aGlzLmRhdGFJdGVtcztcclxuICAgIHRoaXMuY29tcHV0ZURhdGFJdGVtcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwb3B1bGF0ZUxpc3REYXRhKGN1cnJJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCByZW5kZXJSYW5nZSA9IHRoaXMudmlld1BvcnQuZ2V0UmVuZGVyZWRSYW5nZSgpO1xyXG4gICAgaWYgKHJlbmRlclJhbmdlLnN0YXJ0ID09IHJlbmRlclJhbmdlLmVuZCAmJiByZW5kZXJSYW5nZS5lbmQgPT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc3RhcnRQYWdlTm8gPSBNYXRoLmZsb29yKHJlbmRlclJhbmdlLnN0YXJ0IC8gdGhpcy5wYWdlU2l6ZSk7XHJcbiAgICBjb25zdCBlbmRQYWdlTm8gPSBNYXRoLmZsb29yKChyZW5kZXJSYW5nZS5lbmQgLSAxKSAvIHRoaXMucGFnZVNpemUpO1xyXG5cclxuICAgIGNvbnN0IG9icyA9IG5ldyBBcnJheTxPYnNlcnZhYmxlPGFueT4+KCk7XHJcbiAgICBmb3IgKGxldCBpID0gc3RhcnRQYWdlTm87IGkgPD0gZW5kUGFnZU5vOyBpKyspIHtcclxuICAgICAgaWYgKCF0aGlzLnBhZ2VGZXRjaGVkLmluY2x1ZGVzKGkpKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlRmV0Y2hlZC5wdXNoKGkpO1xyXG4gICAgICAgIG9icy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5mZXRjaERhdGEoaSkucGlwZSh0YXAoKFtkYXRhLCBwYWdlTm9dKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGF0YUJ5SW5kZXgocGFnZU5vICogdGhpcy5wYWdlU2l6ZSwgZGF0YSk7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9icy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvcmtKb2luKG9icykucGlwZSh0YXAocmVzID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZpZXdQb3J0RGF0YSgpO1xyXG4gICAgICB9KSkuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZldGNoRGF0YShwYWdlTm8pOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5PblNjcm9sbCAmJiB0eXBlb2YgdGhpcy5kYXRhLk9uU2Nyb2xsID09ICdzdHJpbmcnICYmIHRoaXMuZGF0YS5PblNjcm9sbC5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICBjb25zdCBvblNjcm9sbEV2ZW50ID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PblNjcm9sbCk7XHJcbiAgICAgIGlmICh0eXBlb2Ygb25TY3JvbGxFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IGNhbGxGdW5jID0gb25TY3JvbGxFdmVudC5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oW2NhbGxGdW5jKHRoaXMuZ3JvdXAsIHsgcGFnZU5vOiBwYWdlTm8sIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplIH0pLCBvZihwYWdlTm8pXSBhcyBBcnJheTxPYnNlcnZhYmxlPGFueT4+KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvZihmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZURhdGFCeUluZGV4KHN0YXJ0aW5nSW5kZXg6IG51bWJlciwgZGF0YTogQXJyYXk8YW55Pikge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuZGF0YUl0ZW1zW3N0YXJ0aW5nSW5kZXggKyBpXSA9IGRhdGFbaV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVZpZXdQb3J0RGF0YSgpIHtcclxuICAgIHRoaXMuZGF0YUl0ZW1zID0gWy4uLnRoaXMuZGF0YUl0ZW1zXTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXR1cEZvb3RlcigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuVmFsdWUgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuZm9vdGVyRmllbGRzID0gdGhpcy5kYXRhLlZhbHVlLmZpbHRlcih4ID0+IHguU2VjdGlvbiA9PT0gJ2Zvb3RlcicpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbXBvbmVudE9wdGlvbnMoKTogVmlydHVhbFNjcm9sbE9wdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIEdyb3VwIEJ5XHJcbiAgcHVibGljIGdldEdyb3VwQnlMYWJlbFRlbXBsYXRlKGRhdGFJdGVtLCBvcHRpb25zKTogc3RyaW5nIHtcclxuICAgIGlmIChvcHRpb25zLmdyb3VwQnlMYWJlbFRlbXBsYXRlICYmIHR5cGVvZiBvcHRpb25zLmdyb3VwQnlMYWJlbFRlbXBsYXRlID09ICdzdHJpbmcnKSB7XHJcbiAgICAgIGlmIChvcHRpb25zLmdyb3VwQnlMYWJlbFRlbXBsYXRlLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgICAgY29uc3QgZ2V0VGVtcGxhdGVGdW5jID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIG9wdGlvbnMuZ3JvdXBCeUxhYmVsVGVtcGxhdGUpO1xyXG5cclxuICAgICAgICBpZiAoZ2V0VGVtcGxhdGVGdW5jKSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICAgICAgZGF0YUl0ZW0sXHJcbiAgICAgICAgICAgIG9wdGlvbnMsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeUxhYmVsVGVtcGxhdGVdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ3JvdXBCeU9uQ2xpY2soZ3JvdXBCeVZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLmlzR3JvdXBCeUNvbGxhcHNpYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB1c2UgY29sbGFwc2UgLyBleHBhbmQgdG8gY29udHJvbCBhbmltYXRpb24gc2VxdWVuY2VcclxuICAgIGNvbnN0IGlzVG9Db2xsYXBzZSA9ICF0aGlzLmNvbGxhcHNlZEdyb3VwQnkuaW5jbHVkZXMoZ3JvdXBCeVZhbHVlKTtcclxuXHJcbiAgICBjb25zdCBmaXJzdE5vZGVJbmRleCA9IHRoaXMuZnVsbERhdGFJdGVtcy5tYXAoeCA9PiB4W3RoaXMub3B0aW9ucy5ncm91cEJ5XSkuaW5kZXhPZihncm91cEJ5VmFsdWUpO1xyXG4gICAgaWYgKGlzVG9Db2xsYXBzZSkge1xyXG4gICAgICAvLyB0byBjb2xsYXBzZSAoRm9yIGFuaW1hdGlvbjogQ2hhbmdlIHN0YXR1cywgdGhlbiBhcHBlbmQgZGF0YSlcclxuICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5LnB1c2goZ3JvdXBCeVZhbHVlKTtcclxuICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5X0ZpcnN0Tm9kZUluZGV4TGlzdC5wdXNoKGZpcnN0Tm9kZUluZGV4KTtcclxuICAgICAgb2Yoe30pLnBpcGUoZGVsYXkoNDAwKSxcclxuICAgICAgICB0YXAoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb21wdXRlRGF0YUl0ZW1zKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyB0byBleHBhbmQgKEZvciBhbmltYXRpb246IEFwcGVuZCBkYXRhLCB0aGVuIGNoYW5nZSBzdGF0dXMpXHJcbiAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBCeV9GaXJzdE5vZGVJbmRleExpc3QgPSB0aGlzLmNvbGxhcHNlZEdyb3VwQnlfRmlyc3ROb2RlSW5kZXhMaXN0LmZpbHRlcih4ID0+IHggIT0gZmlyc3ROb2RlSW5kZXgpO1xyXG4gICAgICBjb25zdCB0ZW1wQ29sbGFwc2VkR3JvdXBCeSA9IHRoaXMuY29sbGFwc2VkR3JvdXBCeS5maWx0ZXIoeCA9PiB4ICE9PSBncm91cEJ5VmFsdWUpO1xyXG4gICAgICB0aGlzLmRhdGFJdGVtcyA9IHRoaXMuZnVsbERhdGFJdGVtcy5maWx0ZXIoKHgsIGluZGV4KSA9PiAhdGVtcENvbGxhcHNlZEdyb3VwQnkuaW5jbHVkZXMoeFt0aGlzLm9wdGlvbnMuZ3JvdXBCeV0pIHx8IHRoaXMuY29sbGFwc2VkR3JvdXBCeV9GaXJzdE5vZGVJbmRleExpc3QuaW5jbHVkZXMoaW5kZXgpKTtcclxuICAgICAgdGhpcy5ncm91cEJ5VmFsdWVUb0V4cGFuZCA9IGdyb3VwQnlWYWx1ZTtcclxuICAgICAgb2Yoe30pLnBpcGUoZGVsYXkoMCksXHJcbiAgICAgICAgdGFwKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBCeSA9IHRlbXBDb2xsYXBzZWRHcm91cEJ5O1xyXG4gICAgICAgICAgdGhpcy5ncm91cEJ5VmFsdWVUb0V4cGFuZCA9IGdyb3VwQnlWYWx1ZTtcclxuICAgICAgICB9KVxyXG4gICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wdXRlRGF0YUl0ZW1zKCkge1xyXG4gICAgdGhpcy5kYXRhSXRlbXMgPSB0aGlzLmZ1bGxEYXRhSXRlbXMuZmlsdGVyKCh4LCBpbmRleCkgPT4gIXRoaXMuY29sbGFwc2VkR3JvdXBCeS5pbmNsdWRlcyh4W3RoaXMub3B0aW9ucy5ncm91cEJ5XSkgfHwgdGhpcy5jb2xsYXBzZWRHcm91cEJ5X0ZpcnN0Tm9kZUluZGV4TGlzdC5pbmNsdWRlcyhpbmRleCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGV4cGFuZEFsbCgpIHtcclxuICAgIHRoaXMuZ3JvdXBCeVZhbHVlVG9FeHBhbmQgPSAnJztcclxuICAgIHRoaXMuY29sbGFwc2VkR3JvdXBCeSA9IFtdO1xyXG4gICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5X0ZpcnN0Tm9kZUluZGV4TGlzdCA9IFtdO1xyXG4gICAgdGhpcy5jb21wdXRlRGF0YUl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZXhwYW5kQnlHcm91cEJ5VmFsdWVzKGdyb3VwQnlWYWx1ZTogQXJyYXk8c3RyaW5nPikge1xyXG4gICAgdGhpcy5jb2xsYXBzZWRHcm91cEJ5ID0gdGhpcy5jb2xsYXBzZWRHcm91cEJ5LmZpbHRlcih4ID0+ICFncm91cEJ5VmFsdWUuaW5jbHVkZXMoeCkpO1xyXG4gICAgdGhpcy5jb21wdXRlRGF0YUl0ZW1zKCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG59XHJcbiIsIjxkaXZcclxuICAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiXHJcbiAgY2xhc3M9XCJjb250YWluZXIgZTF0YWctY29udGFpbmVyLXN0eWxlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGVcIlxyXG4gIFtuZ0NsYXNzXT1cIihkYXRhLkNvbXBvbmVudFN0eWxlVHlwZSB8fCAnJykgKyAnICcgKyAoZGF0YS5DbGFzcyB8fCAnJylcIj5cclxuICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0XHJcbiAgICAgICAgW2l0ZW1TaXplXT1cIm9wdGlvbnMuaXRlbVNpemVcIlxyXG4gICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICAgY2xhc3M9XCJ2aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBlMXRhZy1jb250YWluZXItc3R5bGUxXCJcclxuICAgICAgICBbbWluQnVmZmVyUHhdPVwib3B0aW9ucy5taW5CdWZmZXJQeFwiXHJcbiAgICAgICAgW21heEJ1ZmZlclB4XT1cIm9wdGlvbnMubWF4QnVmZmVyUHhcIj5cclxuICAgIDxuZy1jb250YWluZXIgKmNka1ZpcnR1YWxGb3I9XCJsZXQgZGF0YUl0ZW0gb2YgZGF0YUl0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxkaXYgI3ZpcnR1YWxzY3JvbGxjb250ZW50PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2aXJ0dWFsLXNjcm9sbC1ncm91cGJ5IGUxdGFnLWNvbnRhaW5lci1zdHlsZTRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5jb250YWluZXJTdHlsZS5zdHlsZTRcIlxyXG4gICAgICAgICAgKm5nSWY9XCJvcHRpb25zLmlzR3JvdXBCeUVuYWJsZWQgJiYgb3B0aW9ucy5ncm91cEJ5ICYmICghZGF0YUl0ZW1zW2ktMV0gfHwgZGF0YUl0ZW1bb3B0aW9ucy5ncm91cEJ5XSAhPT0gZGF0YUl0ZW1zW2ktMV1bb3B0aW9ucy5ncm91cEJ5XSlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImdyb3VwQnlPbkNsaWNrKGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeV0pXCIgW2NsYXNzLmdyb3VwYnktY29sbGFwc2libGVdPVwib3B0aW9ucy5pc0dyb3VwQnlDb2xsYXBzaWJsZVwiPlxyXG4gICAgICAgICAgPGZhLWljb24gY2xhc3M9XCJ2aXJ0dWFsLXNjcm9sbC1ncm91cGJ5LWFycm93LWljb24gZTF0YWctY29udGFpbmVyLXN0eWxlNVwiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlNVwiICpuZ0lmPVwiISFvcHRpb25zLmlzR3JvdXBCeUNvbGxhcHNpYmxlXCJcclxuICAgICAgICAgICAgW2ljb25dPVwiZ2V0Rm9udEF3ZXNvbWUoJ2NhcmV0LWRvd24nLCBmb250QXdlU29tZVNlcnZpY2UpXCJcclxuICAgICAgICAgICAgW0Byb3RhdGVBbmltYXRpb25dPVwie3ZhbHVlOiBjb2xsYXBzZWRHcm91cEJ5LmluY2x1ZGVzKGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeV0pID8gJ3JvdGF0ZScgOiAnZGVmYXVsdCcsIHBhcmFtczoge2RlZ3JlZTogLTkwfX1cIj5cclxuICAgICAgICAgIDwvZmEtaWNvbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidmlydHVhbC1zY3JvbGwtZ3JvdXBieS1sYWJlbCBlMXRhZy1jb250YWluZXItc3R5bGU2XCJcclxuICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGU2XCI+XHJcbiAgICAgICAgICAgIHt7b3B0aW9ucy5ncm91cEJ5TGFiZWxUZW1wbGF0ZSA/IGdldEdyb3VwQnlMYWJlbFRlbXBsYXRlKGRhdGFJdGVtLCBvcHRpb25zKSA6IGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeV19fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhb3B0aW9ucy5pc0dyb3VwQnlFbmFibGVkXCIgW3N0eWxlLmhlaWdodC5weF09XCJvcHRpb25zLml0ZW1TaXplXCJcclxuICAgICAgICAgIFtzdHlsZS5taW4taGVpZ2h0LnB4XT1cIm9wdGlvbnMuaXRlbVNpemVcIiBbc3R5bGUubWF4LWhlaWdodC5weF09XCJvcHRpb25zLml0ZW1TaXplXCJcclxuICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlMlwiIGNsYXNzPVwiZTF0YWctY29udGFpbmVyLXN0eWxlMiB2aXJ0dWFsLXNjcm9sbC1kYXRhaXRlbVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQsIGRhdGFJdGVtKVwiIFtpZF09XCJkYXRhLk5hbWUgKyAnXycgKyBkYXRhSXRlbT8uVmFsdWU/LklkIHx8ICcnXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRhdGFJdGVtXCIgW2lubmVySFRNTF09XCJvcHRpb25zLmxvYWRpbmdMYWJlbCB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFJdGVtLkxhYmVsXCIgW2lubmVySFRNTF09XCJkYXRhSXRlbS5MYWJlbCB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLmlzR3JvdXBCeUVuYWJsZWRcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cIm9wdGlvbnMuaXRlbVNpemVcIlxyXG4gICAgICAgICAgW3N0eWxlLm1pbi1oZWlnaHQucHhdPVwib3B0aW9ucy5pdGVtU2l6ZVwiIFtzdHlsZS5tYXgtaGVpZ2h0LnB4XT1cIm9wdGlvbnMuaXRlbVNpemVcIlxyXG4gICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuY29udGFpbmVyU3R5bGUuc3R5bGUyXCIgY2xhc3M9XCJlMXRhZy1jb250YWluZXItc3R5bGUyIHZpcnR1YWwtc2Nyb2xsLWRhdGFpdGVtXCJcclxuICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudCwgZGF0YUl0ZW0pXCIgW2lkXT1cImRhdGEuTmFtZSArICdfJyArIGRhdGFJdGVtPy5WYWx1ZT8uSWQgfHwgJydcIlxyXG4gICAgICAgICAgW0Bjb2xsYXBzZUFuaW1hdGlvbl09XCJ7dmFsdWU6ICEhb3B0aW9ucy5ncm91cEJ5ICYmIGNvbGxhcHNlZEdyb3VwQnkuaW5jbHVkZXMoZGF0YUl0ZW1bb3B0aW9ucy5ncm91cEJ5XSkgPyAnY29sbGFwc2UnIDogJ2RlZmF1bHQnfVwiXHJcbiAgICAgICAgICBbY2xhc3MuZ3JvdXBieS12YWx1ZS1leHBhbmRdPVwiZ3JvdXBCeVZhbHVlVG9FeHBhbmQgPT0gKGRhdGFJdGVtW29wdGlvbnMuZ3JvdXBCeV0pXCI+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWRhdGFJdGVtXCIgW2lubmVySFRNTF09XCJvcHRpb25zLmxvYWRpbmdMYWJlbCB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRhdGFJdGVtLkxhYmVsXCIgW2lubmVySFRNTF09XCJkYXRhSXRlbS5MYWJlbCB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGFwcC1jb250ZXh0LW1lbnUgW2RhdGFdPVwiZGF0YVwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIiBbdGFyZ2V0XT1cInZpcnR1YWxzY3JvbGxjb250ZW50XCIgW3NlbGVjdGVkRGF0YV09XCJkYXRhSXRlbVwiPjwvYXBwLWNvbnRleHQtbWVudT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGFwcC16Zm9ybWNvbnRyb2wgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZvb3RlckZpZWxkc1wiIFtmaWVsZF09XCJmaWVsZFwiIFtjb250YWluZXJGaWVsZF09XCJkYXRhXCIgW2dyb3VwXT1cImdyb3VwXCJcclxuICAgICAgW2Zvcm1dPVwiZm9ybVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLmNvbnRhaW5lclN0eWxlLnN0eWxlM1wiIGNsYXNzPVwiZTF0YWctY29udGFpbmVyLXN0eWxlM1wiPlxyXG4gICAgPC9hcHAtemZvcm1jb250cm9sPlxyXG4gIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxyXG48L2Rpdj5cclxuIl19
|