@huntsman-cancer-institute/navigation 17.13.0 → 17.14.1

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.
@@ -421,6 +421,15 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
421
421
  }
422
422
  return "input";
423
423
  }
424
+ getFields() {
425
+ return this.fields;
426
+ }
427
+ setFields(fields) {
428
+ this.fields = fields;
429
+ }
430
+ getField(fieldName) {
431
+ return this.fields.find(x => x.field == fieldName);
432
+ }
424
433
  /**
425
434
  * Create filters based upon available fields for filtering.
426
435
  */
@@ -663,6 +672,9 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
663
672
  getFilterForField(fieldName) {
664
673
  return this.boundAdvancedSearchFilters.find(x => x.field === fieldName);
665
674
  }
675
+ getBasicFilterForField(fieldName) {
676
+ return this.boundFilters.find(x => x.field === fieldName);
677
+ }
666
678
  /**
667
679
  * Listener for back button
668
680
  */
@@ -1661,4 +1673,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1661
1673
  type: HostListener,
1662
1674
  args: ["document:click", ["$event", "$event.target"]]
1663
1675
  }] } });
1664
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXZpZ2F0aW9uL3NyYy9jb21wb25lbnRzL3NlYXJjaC1saXN0L3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRDs7OztHQUlHO0FBMmxCSSxJQUFNLDZCQUE2QixHQUFuQyxNQUFNLDZCQUE4QixTQUFRLFlBQVk7SUF3RTdELGVBQWUsQ0FBQyxNQUFjO1FBQzVCLElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BD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Z0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBUZW1wbGF0ZVJlZixcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5cclxuaW1wb3J0IHtIY2lGaWx0ZXJEdG8sIEhjaVNvcnREdG99IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9oY2ktbmctZ3JpZC1kdG9cIjtcclxuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7TmF2Q29tcG9uZW50fSBmcm9tIFwiLi4vbmF2LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkdsb2JhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLWdsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG4vKipcclxuICogVGhlIHNlYXJjaCBsaXN0IGNvbnRyb2xsZXIgcmVuZGVycyBhcyBhIGhlYWRlciB0byBvbmUgb3IgbW9yZSBzZWFyY2ggbGlzdHMuICBPbmx5IG9uZSBzZWFyY2ggbGlzdCBjYW4gYmUgc2hvd24gYXQgYSB0aW1lLlxyXG4gKiBUaGUgY29udHJvbGxlciBmZWF0dXJlcyB0aGUgYWJpbGl0eSB0byBoYW5kbGUgZmlsdGVyaW5nIGFuZCBzb3J0aW5nLiAgV2l0aG91dCB0aGUgY29udHJvbGxlciwgdGhlIHNlYXJjaCBsaXN0IGNhbiBleGlzdCxcclxuICogYnV0IGl0IGNhbiBvbmx5IGhhbmRsZSBwYWdpbmcgaW50ZXJuYWxseS5cclxuICovXHJcbkBDb21wb25lbnRUeXBlKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIilcclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktc2VhcmNoLWxpc3QtY29udHJvbGxlclwiLFxyXG4gICAgZXhwb3J0QXM6IFwic2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIixcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgc2VsZWN0IHtcclxuICAgICAgICAgIHBhZGRpbmc6IC4yNWVtO1xyXG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMGVtO1xyXG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XHJcbiAgICAgICAgICBib3JkZXI6IDA7XHJcbiAgICAgICAgICBjb2xvcjogIzhBOTQ5OTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuY2xvc2VhYmxlIHtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYm94IHtcclxuICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgIGJvcmRlci1yaWdodDogMC4xcHggc29saWQgIzVCNjI2NjtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogLjVyZW0gIWltcG9ydGFudDtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpO1xyXG4gICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLW9wdGlvbnMge1xyXG4gICAgICAgICAgLyp3aWR0aDogNjV2dzsqL1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIC0tLS0tLS0gQlROIEdSQUQgQkxVRSAxIFNUWUxFUyAtLS0tLS0tICovXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246ZW5hYmxlZCB7XHJcbiAgICAgICAgICB3aWR0aDogMzAlO1xyXG4gICAgICAgICAgbWluLWhlaWdodDogMnJlbTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLXdoaXRlLWxpZ2h0ZXN0KTtcclxuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWV3YXJtLWRhcmspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246aG92ZXIge1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDAlLCB2YXIoLS1ibHVld2FybS1kYXJrKSAxMDAlKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246ZGlzYWJsZWQge1xyXG4gICAgICAgICAgd2lkdGg6IDMwJTtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLWJsdWV3YXJtLWRhcmspIDMwJSwgdmFyKC0tYmx1ZXdhcm0tbWVkZGFyaykgMTAwJSk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIC0tLS0tLS0gQlROIEdSQUQgQkxVRSAxIFNUWUxFUyAtLS0tLS0tICovXHJcblxyXG4gICAgICAgIC5nbG9iYWwtc2VhcmNoIHtcclxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICAgICAgICAgIGJvcmRlcjogMC4wNGVtIHNvbGlkIHZhcigtLWdyZXl3YXJtLWRhcmspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi10aXRsZS1jbGFzcyB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRncmF5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi1wYW5lIHtcclxuICAgICAgICAgIHdpZHRoOiBtaW4tY29udGVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1jb250ZW50LWJvZHkge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5iYXNpYy1zZWFyY2gge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5hZHZhbmNlZC1zZWFyY2gge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtb3B0aW9ucy5leHBhbmRlZCB7XHJcbiAgICAgICAgICBoZWlnaHQ6IGZpdC1jb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmNsYXNzaWZpY2F0aW9uLWhlYWRlciB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJ1dHRvbiB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFsaWduQnRuIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWRTZWFyY2gtYWxpZ25CdG4ge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kaXZpZGVyIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWRTZWFyY2gtc2Nyb2xsIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYmFja0J1dHRvbiAuZmEtYW5nbGUtZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN2Zy1pbmxpbmUtLWZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdCB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pdGVtIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pY29uIHtcclxuICAgICAgICAgIHdpZHRoOiAxLjVyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC10ZXh0OmhvdmVyIHtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5oY2ktZ3JleS1kYXJrZXN0IHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGV4dGFyZWEtc2VhcmNoLWJveCB7XHJcbiAgICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubXVsdGlsaW5lLXNlYXJjaC1idXR0b24ge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAzcmVtO1xyXG4gICAgICAgICAgbWluLXdpZHRoOiAzcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZpbHRlci1zb3J0aW5nLXBhbmVsIHtcclxuICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLmRpc2FibGVkLWJ1dHRvbiB7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm5hdi1jb250YWluZXIge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubm8tdXNlci1zZWxlY3QtdGV4dHtcclxuICAgICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJzZWFyY2gtdGl0bGVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUaXRsZVwiIGNsYXNzPVwiZC1mbGV4IHBzLTIgaGNpLWdyZXktZGFya2VzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0JhY2tCdXR0b25cIiBjbGFzcz1cIm1lLWF1dG8gbXMtMSBiYWNrQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYmFja0J1dHRvbkNsaWNrZWQoKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1iYWNrLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYW5nbGUtZG91YmxlLWxlZnRcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7e3RpdGxlfX1cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBtcy1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1dHRvblRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLWF1dG8gbWUtMlwiIChjbGljayk9XCJ0b2dnbGVTaG93T3B0aW9ucygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW9wdGlvbnNcIiBbY2xhc3MuZXhwYW5kZWRdPVwic2hvd09wdGlvbnNcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogKHNlYXJjaE9wdGlvbnNXaWR0aCAhPT0gJycpID8gc2VhcmNoT3B0aW9uc1dpZHRoIDogJ2F1dG8nfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUb2dnbGVPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlci1jb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYXJkLWhlYWRlci1idXR0b24gYnRuIGNsb3NlYWJsZVwiIChjbGljayk9XCJ0b2dnbGVTaG93T3B0aW9ucygkZXZlbnQpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLXRvZ2dsZS1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgY2FyZC1oZWFkZXItdGV4dD48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGlzYWJsZUxvY2FsRmlsdGVyaW5nOyBlbHNlIGRpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmF2IG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwiYWN0aXZlVGFiXCIgY2xhc3MgPSBcIm5hdi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIxXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIj5CQVNJQyBTRUFSQ0g8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLmJhc2ljU2VhcmNoSGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBib3VuZEZpbHRlcnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZSBjaGVjayBpZiB0aGUgdGV4dGFyZWEgbmVlZGVkIGluIEJhc2ljIFNlYXJjaC0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ3RleHRhcmVhJyBcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9IFwic2VhcmNoLWJveFwiIChrZXl1cCk9XCJkb0dsb2JhbFNlYXJjaCgkZXZlbnQpXCItLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMlwiPjwvdGV4dGFyZWE+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2Ryb3Bkb3duJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkc1tpXSAmJiBmaWVsZHNbaV0udmFsdWVzICYmIGZpZWxkc1tpXS52YWx1ZXNbMF0uZGlzcGxheTtlbHNlIGRpc3BsYXlfcmF3X3ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwibXlQaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwiZmFcIiBmb250SWNvbj1cImZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3MgPSBcInJpLWJ0bi1jYW5jZWxcIiBbbmdDbGFzc109XCJ7J3JpLWJ0bi1jYW5jZWwtZGlydHknOiB0aGlzLmNoYW5nZWR9XCIgW2Rpc2FibGVkXSA9XCIhdGhpcy5jaGFuZ2VkXCIgKGNsaWNrKT1cInNldHVwRmlsdGVycyhmYWxzZSlcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItY2xlYXItYmFzaWMtc2VhcmNoLWZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcz1cInJpLWJ0bi1zYXZlXCIgW25nQ2xhc3NdPVwieyAncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItYXBwbHktYmFzaWMtZmlsdGVyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMlwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhZHZhbmNlZFNlYXJjaEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIj5BRFZBTkNFRCBTRUFSQ0g8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHZhbmNlZFNlYXJjaC1zY3JvbGxcIiBpZD1cImFkdmFuY2VkU2VhcmNoLXNjcm9sbC1wYW5lbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkU2VhcmNoLXBhbmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhcmFtIG9mIHRoaXMuYWR2YW5jZWRTZWFyY2g7IGluZGV4IGFzIGpcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnYWR2YW5jZWQtc2VhcmNoJzogIXRoaXMuaGFzQWR2YW5jZWRTZWFyY2hWZXJ0aWNhbFNjcm9sbGJhciwgJ2FkdmFuY2VkLXNlYXJjaC1zY3JvbGxlZCc6IHRoaXMuaGFzQWR2YW5jZWRTZWFyY2hWZXJ0aWNhbFNjcm9sbGJhcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtY2xhc3NpZmljYXRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFyYW0uaGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhZHZhbmNlZC1zZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdGhpcy5wYXJhbS5maWVsZHM7IGluZGV4IGFzIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmllbGQuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnY2hlY2tib3gnICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiY2hlY2tib3hlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRGaWVsZERpc3BsYXkoZmllbGQuZmllbGQpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW25nTW9kZWxdPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGhpcy5maWVsZC52YWx1ZVVSTDtlbHNlIGRpc3BsYXlfcmF3X3ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgdGhpcy5maWVsZC52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZS5pZFwiPnt7dmFsdWUuZGlzcGxheX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB0aGlzLmZpZWxkLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwibXlQaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwibXlQaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYVwiIGZvbnRJY29uPVwiZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYWR2YW5jZWQtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3MgPSBcInJpLWJ0bi1jYW5jZWxcIiBbbmdDbGFzc109XCJ7J3JpLWJ0bi1jYW5jZWwtZGlydHknOiB0aGlzLmNoYW5nZWR9XCIgW2Rpc2FibGVkXT1cIiF0aGlzLmNoYW5nZWRcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKGZhbHNlKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1jbGVhci1hZHZhbmNlLXNlYXJjaC1maWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3MgPSBcInJpLWJ0bi1zYXZlXCIgIFtuZ0NsYXNzXSA9XCJ7J3JpLWJ0bi1zYXZlLWRpcnR5JzogdGhpcy5jaGFuZ2VkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLmNoYW5nZWRcIiAoY2xpY2spPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1hcHBseS1hZHZhbmNlLWZpbHRlci1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiM1wiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hTb3J0aW5nT3B0aW9ucy5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzID1cImZsZXgtZ3Jvdy0xXCIgPlNPUlRJTkc8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2hcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xhc3NpZmljYXRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhpcy5iYXNpY1NlYXJjaEhlYWRlcn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWFyY2hTb3J0SXRlbSBvZiBzZWFyY2hTb3J0aW5nT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHNvcnQtaXRlbVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnY29sLTYgc29ydC1pdGVtJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtaWNvblwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc29ydC1pY29uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFNlYXJjaFNvcnRpbmcudmFsdWU9PXNlYXJjaFNvcnRJdGVtLnZhbHVlICYmIGN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS11cCBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFNlYXJjaFNvcnRpbmcudmFsdWU9PXNlYXJjaFNvcnRJdGVtLnZhbHVlICYmICFjdXJyZW50U2VhcmNoU29ydGluZy5pc0FzY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvcnQtYXJyb3cnOnRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtZG93biBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LXRleHQgbm8tdXNlci1zZWxlY3QtdGV4dFwiIChjbGljayk9XCJvblNlYXJjaFNvcnRDbGlja2VkKCRldmVudCwgc2VhcmNoU29ydEl0ZW0pXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LXRleHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VhcmNoU29ydEl0ZW0uZGlzcGxheX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJhc2ljLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5hdiBuZ2JOYXYgI25hdjE9XCJuZ2JOYXZcIiBbKGFjdGl2ZUlkKV09XCJhY3RpdmVUYWIxXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCduYXYnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjFcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiICpuZ0lmPVwiZmlsdGVyQnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluaz5GSUxURVI8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXIgZmlsdGVyLXNvcnRpbmctcGFuZWxcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ2Jhc2ljLXNlYXJjaCBzaWRlYmFyLWZpbHRlciBmaWx0ZXItc29ydGluZy1wYW5lbCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNlYXJjaC1jb250ZW50LWJvZHlcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3JvdyBzZWFyY2gtY29udGVudC1ib2R5JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGJvdW5kRmlsdGVyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnY29sLTYnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnaW5wdXQnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ21hdC1mb3JtLWZpZWxkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2Ryb3Bkb3duJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdtYXQtZm9ybS1maWVsZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkc1tpXSAmJiBmaWVsZHNbaV0udmFsdWVzICYmIGZpZWxkc1tpXS52YWx1ZXNbMF0uZGlzcGxheTtlbHNlIGRpc3BsYXlfcmF3X3ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ21hdC1mb3JtLWZpZWxkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwibW0vZGQveXl5eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwibXlQaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwiZmFzXCIgZm9udEljb249XCJmYS1jYWxlbmRhci1hbHQgZmEtbGdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjbXlQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc2VhcmNoLW1zZy1ob2xkZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJhc2ljLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aCBzaWRlYmFyLWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uUm93VGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJyaS1idG4tY2FuY2VsIHJpLWJ0bi1jYW5jZWwtZGlydHlcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKHRydWUpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWZpbHRlci1yZXNldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU0VUXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzPVwicmktYnRuLXNhdmVcIiBbbmdDbGFzc109XCJ7J3JpLWJ0bi1zYXZlLWRpcnR5JzogdGhpcy5jaGFuZ2VkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLmNoYW5nZWQgXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWZpbHRlci1hcHBseS1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxURVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjJcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiICpuZ0lmPVwic29ydEJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+U09SVElORzwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaCBzaWRlYmFyLWZpbHRlciBmaWx0ZXItc29ydGluZy1wYW5lbFwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzb3J0RmllbGQgb2Ygc29ydEJ5QWxsb3dlZEZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBzb3J0LWl0ZW1cIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ2NvbC02IHNvcnQtaXRlbScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1pY29uXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LWljb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTb3J0KHNvcnRGaWVsZCkgJiYgaXNTb3J0QXNjKHNvcnRGaWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6aXNGaXJzdFNvcnQoc29ydEZpZWxkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtdXAgZmEtbGdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTb3J0KHNvcnRGaWVsZCkgJiYgIWlzU29ydEFzYyhzb3J0RmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvcnQtYXJyb3cnOmlzRmlyc3RTb3J0KHNvcnRGaWVsZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYXJyb3ctY2lyY2xlLWRvd24gZmEtbGdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC10ZXh0XCIgKGNsaWNrKT1cInNldFNvcnQoJGV2ZW50LCBzb3J0RmllbGQpXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LXRleHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShzb3J0RmllbGQpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGggc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXYxXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTEgZ2xvYmFsLXNlYXJjaFwiICpuZ0lmPVwiaW5wdXRNdWx0aWxpbmUgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtYm94XCIgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwiZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXJcIiBhcmlhLWxhYmVsPVwicXVpY2stc2VhcmNoLW9wdGlvbnNcIi8+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzaG93UXVpY2tTZWFyY2hPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlYXJjaFR5cGVcIiAoY2hhbmdlKT1cInNlbGVjdFNlYXJjaFR5cGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtaWRlbnRpZmllclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGJvcmRlci1yYWRpdXM6IDBweDsgYm9yZGVyLWNvbG9yOiBibGFjazsgXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VhcmNoVHlwZSBvZiBzZWFyY2hUeXBlQXJyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoVHlwZX19XHJcbiAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzPVwicGwtMSBwci0xIHNlYXJjaC1idXR0b25cIiBzdHlsZT1cImhlaWdodDogMTAwJVwiIFtkaXNhYmxlZF0gPSBcIiFxdWlja1NlYXJjaEVuYWJsZWRcIiBbbmdDbGFzc10gPSBcInsnZGlzYWJsZWQtYnV0dG9uJzohcXVpY2tTZWFyY2hFbmFibGVkfVwiIChjbGljayk9XCJzZWFyY2hCdXR0b25DbGlja2VkKClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItcXVpY2stc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi0xIGdsb2JhbC1zZWFyY2hcIiAqbmdJZj1cImlucHV0TXVsdGlsaW5lID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBhcmlhLWxhYmVsPVwiZ2xvYmFsU2VhcmNoXCIgW2Rpc2FibGVkXSA9IFwiIXF1aWNrU2VhcmNoRW5hYmxlZFwiIFtuZ01vZGVsXT1cImdsb2JhbFNlYXJjaFwiIGNsYXNzPVwic2VhcmNoLWJveCB0ZXh0YXJlYS1zZWFyY2gtYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc2VhcmNoLWJveCB0ZXh0YXJlYS1zZWFyY2gtYm94JylcIiAgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwiZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXJcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICA8c2VsZWN0ICpuZ0lmPVwic2hvd1F1aWNrU2VhcmNoT3B0aW9uc1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTZWFyY2hUeXBlXCIgKGNoYW5nZSk9XCJzZWxlY3RTZWFyY2hUeXBlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwic2VhcmNoLWlkZW50aWZpZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBib3JkZXItcmFkaXVzOiAwcHg7IGJvcmRlci1jb2xvcjogYmxhY2s7IFwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNlYXJjaFR5cGUgb2Ygc2VhcmNoVHlwZUFycmF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICB7e3NlYXJjaFR5cGV9fVxyXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBhcmlhLWxhYmVsPVwic2VhcmNoQnV0dG9uXCIgY2xhc3M9XCJwcy0xIHBlLTEgc2VhcmNoLWJ1dHRvbiBtdWx0aWxpbmUtc2VhcmNoLWJ1dHRvblwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc2VhcmNoLWJ1dHRvbiBtdWx0aWxpbmUtc2VhcmNoLWJ1dHRvbicpXCIgW2Rpc2FibGVkXSA9IFwiIXF1aWNrU2VhcmNoRW5hYmxlZFwiIFtuZ0NsYXNzXSA9IFwieydkaXNhYmxlZC1idXR0b24nOiFxdWlja1NlYXJjaEVuYWJsZWR9XCIgKGNsaWNrKT1cInNlYXJjaEJ1dHRvbkNsaWNrZWQoKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1xdWljay1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHgtYXV0b1wiICpuZ0lmPVwiaGFzVmFsaWRGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImNsZWFyRmlsdGVyKGZpbHRlcilcIiBjbGFzcz1cImQtZmxleCBwaWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7ZmlsdGVyLmZpZWxkfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIGZhLXhzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hMaXN0cy5sZW5ndGggPiAxXCIgY2xhc3M9XCJkLWZsZXggeC1oaWRkZW4gbGlzdC10b2dnbGVcIj5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFtuZ01vZGVsXT1cInNlbGVjdGVkU2VhcmNoTGlzdFwiIChuZ01vZGVsQ2hhbmdlKT1cInNldFNlbGVjdGVkU2VhcmNoTGlzdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0Zvcj1cImxldCBzZWFyY2hMaXN0IG9mIHNlYXJjaExpc3RzXCIgbWF0LXJhaXNlZC1idXR0b24tdG9nZ2xlIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICB7e3NlYXJjaExpc3R9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQgZXh0ZW5kcyBOYXZDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNob3dUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgYnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaW5wdXRNdWx0aWxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWFyY2hPcHRpb25zV2lkdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgZmllbGRzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVN0eWxlczogYW55ID0ge307XHJcbiAgQElucHV0KCkgYmFzaWNTZWFyY2g6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGFkdmFuY2VkU2VhcmNoOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBmaWx0ZXJCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgcXVpY2tTZWFyY2hGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgYWR2YW5jZWRTZWFyY2hGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgc29ydEJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzb3J0czogSGNpU29ydER0b1tdID0gW107XHJcbiAgQElucHV0KCkgc2hvd1F1aWNrU2VhcmNoT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dBZHZhbmNlZFNlYXJjaE9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgc2VhcmNoVHlwZTogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlU2VsZWN0ZWQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgYmFzaWNTZWFyY2hIZWFkZXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgZ2xvYmFsU2VhcmNoVmFsaWRhdG9yOiBhbnkgfCBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGJ1dHRvblJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcclxuICBASW5wdXQoKSBzZWFyY2hTb3J0aW5nT3B0aW9uczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBsYWJlbFRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQE91dHB1dCgpIHNlYXJjaExpc3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIGFjdGl2ZVRhYiA9IDE7XHJcblxyXG4gIGFjdGl2ZVRhYjEgPSAxO1xyXG5cclxuICBib3VuZEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgdXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IFtdO1xyXG5cclxuICBmaWx0ZXJzU3ViamVjdDogU3ViamVjdDxIY2lGaWx0ZXJEdG9bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaUZpbHRlckR0b1tdPihbXSk7XHJcbiAgYWR2YW5jZWRTZWFyY2hGaWx0ZXJzU3ViamVjdDogU3ViamVjdDxIY2lGaWx0ZXJEdG9bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaUZpbHRlckR0b1tdPihbXSk7XHJcbiAgc29ydHNTdWJqZWN0OiBTdWJqZWN0PEhjaVNvcnREdG9bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaVNvcnREdG9bXT4oW10pO1xyXG5cclxuICBnbG9iYWxTZWFyY2g6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHNob3dPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWFyY2hMaXN0czogc3RyaW5nW10gPSBbXTtcclxuICBzZWxlY3RlZFNlYXJjaExpc3Q6IHN0cmluZztcclxuICBzZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcclxuICBzZWFyY2hTdHJpbmdTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcclxuICBiYWNrQnV0dG9uU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgYWR2YW5jZWRTZWFyY2hTdHJpbmdTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcclxuICBzZWxlY3RlZFNlYXJjaFR5cGU6IHN0cmluZztcclxuICBzZWxlY3RlZFNlYXJjaFR5cGVTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcclxuICBwZXJmb3JtZWRTZWFyY2hTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcGVyZm9ybWVkQmFzaWNTZWFyY2hTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcGVyZm9ybWVkQWR2YW5jZWRTZWFyY2hTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgZGlzYWJsZUxvY2FsRmlsdGVyaW5nID0gZmFsc2U7XHJcbiAgYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlciA9IGZhbHNlO1xyXG5cclxuICBhbGxvd1NlYXJjaFN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBzZWFyY2hBbGxvd2VkU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGFsbG93VG9nZ2xlU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIHRvZ2dsZVNob3dTdWJqZWN0JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGNvZ1doZWVsQ2xpY2tlZFN1YmplY3QkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgY2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFsbG93U2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcclxuICBhbGxvd1RvZ2dsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd1RvZ2dsZU9wdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBxdWlja1NlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzZWFyY2hTb3J0aW5nU2VsZWN0aW9uQ2hhbmdlU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGN1cnJlbnRTZWFyY2hTb3J0aW5nID0ge1widmFsdWVcIjp1bmRlZmluZWQsIFwiZGlzcGxheVwiOnVuZGVmaW5lZCwgXCJpc0FzY1wiOnRydWV9O1xyXG5cclxuICBnZXRDdXN0b21TdHlsZXMoc3R5bGVzOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IGN1c3RvbVN0eWxlT2JqZWN0OiBhbnkgPSBcIlwiO1xyXG4gICAgZm9yIChsZXQgc3R5bGUgb2Ygc3R5bGVzLnNwbGl0KFwiIFwiKSkge1xyXG4gICAgICBsZXQgc3R5bGVPYmplY3QgPSB0aGlzLmN1c3RvbVN0eWxlc1tzdHlsZV07XHJcbiAgICAgIGlmIChzdHlsZU9iamVjdCkge1xyXG4gICAgICAgIGN1c3RvbVN0eWxlT2JqZWN0ID0gT2JqZWN0LmFzc2lnbih7fSwgY3VzdG9tU3R5bGVPYmplY3QsIHN0eWxlT2JqZWN0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXN0b21TdHlsZU9iamVjdDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgbmF2aWdhdGlvbkdsb2JhbFNlcnZpY2U6IE5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgcmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgaWYgKCFuYXZpZ2F0aW9uU2VydmljZSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZCgpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRhdGEgb25seSB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBpcyByZW5kZXJlZC5cclxuICAgKi9cclxuICBjaGVja0luaXRpYWxpemVkKCkge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLnBvc3RJbml0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRCdXR0b25Sb3dUZW1wbGF0ZShidXR0b25Sb3dUZW1wbGF0ZSl7XHJcbiAgICB0aGlzLmJ1dHRvblJvd1RlbXBsYXRlID0gYnV0dG9uUm93VGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICBkb0dsb2JhbFNlYXJjaChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgbGV0IHNlYXJjaFN0cmluZzogc3RyaW5nID0gKCg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlKS50cmltKCk7XHJcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy8gU2VuZCBhIG1lc3NhZ2Ugd2l0aCBzZWFyY2gtdGV4dFxyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiSW4gU2VhcmNoTGlzdENvbnRyb2xsZXIgZW50ZXIgd2FzIGRldGVjdGVkXCIpO1xyXG4gICAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IHNlYXJjaFN0cmluZztcclxuICAgICAgdGhpcy5zZWFyY2hTdHJpbmdTdWJqZWN0Lm5leHQodGhpcy5nZXRTZWFyY2hTdHJpbmcoc2VhcmNoU3RyaW5nKSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnV0dG9uQ2xpY2tlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nID09PSBmYWxzZSkge1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2ggIT09IHNlYXJjaFN0cmluZykge1xyXG4gICAgICAgIGlmICghc2VhcmNoU3RyaW5nIHx8IHNlYXJjaFN0cmluZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZDogc3RyaW5nO1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQgPSAoZmlsdGVyRmllbGQpID8gZmlsdGVyRmllbGQgKyBcIiBvciBcIiArIGZpZWxkIDogZmllbGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW25ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHNlYXJjaFN0cmluZyksIHVuZGVmaW5lZCwgXCJMXCIsIHRydWUpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IHNlYXJjaFN0cmluZztcclxuICB9XHJcblxyXG4gIHNlYXJjaEJ1dHRvbkNsaWNrZWQoKSB7XHJcblxyXG4gICAgLy8gVmFsaWRhdGlvbiBDaGVjazogaWYgaW52YWxpZCwgZG8gbm90IHNlYXJjaC5cclxuICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvciAmJiB0aGlzLmlzSW52YWxpZCgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsb3dTZWFyY2hTdWJqZWN0JC5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gXCJhbGxvd1NlYXJjaFwiKSB7XHJcbiAgICAgICAgdGhpcy5hbGxvd1NlYXJjaCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJwcmV2ZW50U2VhcmNoXCIpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dTZWFyY2ggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaEFsbG93ZWRTdWJqZWN0JC5uZXh0KHRoaXMuYWxsb3dTZWFyY2gpO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbG93U2VhcmNoKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nU3ViamVjdC5uZXh0KHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHRoaXMuZ2xvYmFsU2VhcmNoKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgICBpZiAodGhpcy5xdWlja1NlYXJjaEZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMucXVpY2tTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJGaWVsZCA9IChmaWx0ZXJGaWVsZCkgPyBmaWx0ZXJGaWVsZCArIFwiIG9yIFwiICsgZmllbGQgOiBmaWVsZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJGaWVsZCA9IChmaWx0ZXJGaWVsZCkgPyBmaWx0ZXJGaWVsZCArIFwiIG9yIFwiICsgZmllbGQgOiBmaWVsZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW25ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHRoaXMuZ2xvYmFsU2VhcmNoKSwgdW5kZWZpbmVkLCBcIkxcIiwgdHJ1ZSldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGVTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUpO1xyXG4gICAgICB0aGlzLnBlcmZvcm1lZFNlYXJjaFN1YmplY3QubmV4dChcInNlYXJjaFBlcmZvcm1lZFwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZFNlYXJjaExpc3Qoc2VsZWN0ZWRTZWFyY2hMaXN0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0ID0gc2VsZWN0ZWRTZWFyY2hMaXN0O1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaExpc3QpO1xyXG4gICAgdGhpcy5zZWFyY2hMaXN0Q2hhbmdlLmVtaXQoc2VsZWN0ZWRTZWFyY2hMaXN0KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFNlYXJjaFR5cGUoKSB7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwic2VsZWN0U2VhcmNoVHlwZVwiKTtcclxuICAgIGNvbnNvbGUuZGVidWcodGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGVTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgYWRkU2VhcmNoTGlzdCh0aXRsZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50LmFkZFNlYXJjaExpc3Q6IFwiICsgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aXRsZSAmJiB0aGlzLnNlYXJjaExpc3RzLmluZGV4T2YodGl0bGUpID09PSAtMSkge1xyXG4gICAgICB0aGlzLnNlYXJjaExpc3RzLnB1c2godGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaExpc3RzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCA9IHRpdGxlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmFibGVRdWlja1NlYXJjaChlbmFibGVkOiBib29sZWFuID0gdHJ1ZSl7XHJcbiAgICB0aGlzLnF1aWNrU2VhcmNoRW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgY29uZmlnIHdpdGggb3B0aW9ucyBhbmQgcmUtZmV0Y2hlcyBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidXBkYXRlQ29uZmlnXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZywgY29uZmlnKTtcclxuXHJcbiAgICAgIGlmIChjb25maWcuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZmlsdGVyQnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucXVpY2tTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLnF1aWNrU2VhcmNoRmllbGRzID0gY29uZmlnLnF1aWNrU2VhcmNoRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoRmllbGRzID0gY29uZmlnLmFkdmFuY2VkU2VhcmNoRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc29ydEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5zb3J0QnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucyA9IGNvbmZpZy5zaG93UXVpY2tTZWFyY2hPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaW5wdXRNdWx0aWxpbmUpIHtcclxuICAgICAgICB0aGlzLmlucHV0TXVsdGlsaW5lID0gY29uZmlnLmlucHV0TXVsdGlsaW5lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VhcmNoT3B0aW9uc1dpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25zV2lkdGggPSBjb25maWcuc2VhcmNoT3B0aW9uc1dpZHRoO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VhcmNoVHlwZUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlQXJyYXkgPSBjb25maWcuc2VhcmNoVHlwZUFycmF5O1xyXG4gICAgICAgIGlmIChjb25maWcuc2VhcmNoVHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVBcnJheVt0aGlzLnNlYXJjaFR5cGVBcnJheS5maW5kSW5kZXgoeCA9PiB4ID09PSBjb25maWcuc2VhcmNoVHlwZSldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZUFycmF5WzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRpc2FibGVMb2NhbEZpbHRlcmluZykge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nID0gY29uZmlnLmRpc2FibGVMb2NhbEZpbHRlcmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIgPSBjb25maWcuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlbGVjdGVkU2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBjb25maWcuc2VsZWN0ZWRTZWFyY2hTdHJpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBjb25maWcuc29ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWFyY2hMaXN0Q2hhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hMaXN0Q2hhbmdlID0gY29uZmlnLnNlYXJjaExpc3RDaGFuZ2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zaG93VGl0bGUgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1RpdGxlID0gY29uZmlnLnNob3dUaXRsZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJ1dHRvblRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25UZW1wbGF0ZSA9IGNvbmZpZy5idXR0b25UZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNob3dCYWNrQnV0dG9uICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNob3dCYWNrQnV0dG9uID0gY29uZmlnLnNob3dCYWNrQnV0dG9uO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYmFzaWNTZWFyY2hIZWFkZXIgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuYmFzaWNTZWFyY2hIZWFkZXIgPSBjb25maWcuYmFzaWNTZWFyY2hIZWFkZXI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5nbG9iYWxTZWFyY2hQbGFjZWhvbGRlcikge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXIgPSBjb25maWcuZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvciA9IGNvbmZpZy5nbG9iYWxTZWFyY2hWYWxpZGF0b3I7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5jdXN0b21TdHlsZXMpIHtcclxuICAgICAgICB0aGlzLmN1c3RvbVN0eWxlcyA9IGNvbmZpZy5jdXN0b21TdHlsZXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maWcuZmllbGRzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZpZWxkcyA9IGNvbmZpZy5maWVsZHM7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGRzKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xyXG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWVVUkwgJiYgIWZpZWxkLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgdmFsdWUgVVJMIGZvciB0aGUgZmllbGQgYW5kIHdpbGwgcG9wdWxhdGUgdGhlIHZhbHVlcyBub3dcclxuICAgICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21VUkwoZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2ggIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2ggPSBjb25maWcuYWR2YW5jZWRTZWFyY2g7XHJcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hZHZhbmNlZFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgajtcclxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnZhbHVlVVJMICYmICF0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS52YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVVSTCh0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihjb25maWcuc2VhcmNoU29ydGluZ09wdGlvbnMpe1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU29ydGluZ09wdGlvbnMgPSBjb25maWcuc2VhcmNoU29ydGluZ09wdGlvbnM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGNvbmZpZy5pbml0aWFsU2VhcmNoU29ydGluZ1NlbGVjdGlvbil7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZyA9IGNvbmZpZy5pbml0aWFsU2VhcmNoU29ydGluZ1NlbGVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwICYmIHRoaXMuc29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc29ydHMucHVzaChuZXcgSGNpU29ydER0byh0aGlzLnNvcnRCeUFsbG93ZWRGaWVsZHNbMF0pKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdhbm90aGVyU29ydGluZyBGaWVsZDonLCB0aGlzLnNlYXJjaFNvcnRpbmdPcHRpb25zKTtcclxuICAgIHRoaXMuc2V0dXBGaWx0ZXJzKCk7XHJcbiAgICBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdHMgYWZ0ZXIgbWFraW5nIGEgaHR0cCBjYWxsIHRvIHRoZSB2YWx1ZVVSTCBvZiB0aGUgZmllbGRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBmaWVsZFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cclxuICAgKi9cclxuICBnZXRWYWx1ZXNGcm9tVVJMKGZpZWxkOiBhbnkpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIHVybCA9IGZpZWxkLnZhbHVlVVJMO1xyXG4gICAgdGhpcy5odHRwLmdldCh1cmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwidmFsdWVzIGNvbWluZyBiYWNrIGZyb21cIiArIGZpZWxkLnZhbHVlVVJMKTtcclxuICAgICAgICAgIGxldCB2YWx1ZXM6IGFueVtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKHZhbHVlcyk7XHJcbiAgICAgICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLnZhbHVlcyA9IHZhbHVlcztcclxuICAgICAgICAgICAgLy9Tb3J0IHRoZSB2YWx1ZXMgb2YgdGhlIGRyb3AgZG93biBsaXN0cyBiZWZpbnJlXHJcbiAgICAgICAgICAgIHZhbHVlcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGEuZGlzcGxheSA8IGIuZGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgdmFsdWVzIGZvciBVUkxcIiArIHRoaXMuZ2V0RmllbGREaXNwbGF5KGZpZWxkKSk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGRpc3BsYXkgcHJvcGVydHkgb2YgdGhlIGZpZWxkIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlLCB0cnkgY29udmVydGluZyBjYW1lbCBjYXNlIHRvIHdvcmRzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcblxyXG5cclxuICBnZXRGaWVsZERpc3BsYXkoZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy90aGlzLmJhc2ljU2VhcmNoLmZpZWxkc1xyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gZmllbGQuZGlzcGxheTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9hZHZhbmNlZFNlYXJjaCBmaWVsZCBkaXNwbGF5XHJcbiAgICBsZXQgaTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0uZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLmRpc3BsYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpc3BsYXk6IHN0cmluZyA9IGZpZWxkTmFtZS5yZXBsYWNlKC8oW0EtWl0pL2csIFwiICQxXCIpO1xyXG4gICAgcmV0dXJuIGRpc3BsYXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBkaXNwbGF5LnNsaWNlKDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIHByb3BlcnR5IG9mIHRoZSBmaWVsZCBpZiBpdCBleGlzdHMuIERlZmF1bHRzIHRvIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRGaWVsZFR5cGUoZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy90aGlzLmJhc2ljU2VhcmNoLmZpZWxkc1xyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gZmllbGQudHlwZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYWR2YW5jZWRTZWFyY2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGo7XHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0udHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcImlucHV0XCI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgZmlsdGVycyBiYXNlZCB1cG9uIGF2YWlsYWJsZSBmaWVsZHMgZm9yIGZpbHRlcmluZy5cclxuICAgKi9cclxuICBzZXR1cEZpbHRlcnMoYXBwbHk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5ib3VuZEZpbHRlcnMgPSBbXTtcclxuICAgIHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnMgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBmaWx0ZXJGaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICB0aGlzLmJvdW5kRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIkxcIiwgZmFsc2UpKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGZpbHRlckZpZWxkIG9mIHRoaXMuYWR2YW5jZWRTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIkxcIiwgZmFsc2UpKTtcclxuICAgIH1cclxuICAgIGlmIChhcHBseSkge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB0aGlzLmFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZmlsdGVyIGlzIHZhbGlkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaGFzVmFsaWRGaWx0ZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuYm91bmRGaWx0ZXJzKSB7XHJcbiAgICAgIGlmIChmaWx0ZXIudmFsaWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBmaWx0ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcclxuICAgKiBAcGFyYW0ge0hjaUZpbHRlckR0b30gZmlsdGVyXHJcbiAgICovXHJcbiAgc2V0RmlsdGVyKHZhbHVlOiBzdHJpbmcsIGZpbHRlcjogSGNpRmlsdGVyRHRvKTogdm9pZCB7XHJcbiAgICBmaWx0ZXIudmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBmbCBvZiB0aGlzLmJvdW5kRmlsdGVycykge1xyXG4gICAgICAgICAgaWYgKGZsLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdmFsaWQgZmlsdGVycyB0byB2YWxpZCBhbmQgY2FsbCBkYXRhLlxyXG4gICAqL1xyXG4gIGFwcGx5RmlsdGVycyhldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC5rZXlDb2RlICE9PSAxMyAmJiBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuYm91bmRGaWx0ZXJzKSB7XHJcbiAgICAgIGlmIChmaWx0ZXIudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbGlkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChmaWx0ZXIudmFsdWUgJiYgZmlsdGVyLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmaWx0ZXIudmFsaWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlci52YWxpZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBcIlwiO1xyXG4gICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMuYm91bmRGaWx0ZXJzKTtcclxuICAgIC8vU2V0dGluZyBhIGZsYWcgb24gYnV0dG9uQ2xpY2sgZXZlbnQuXHJcbiAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LmtleUNvZGUgPT09IDEzIHx8IGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikpIHtcclxuICAgICAgdGhpcy5wZXJmb3JtZWRCYXNpY1NlYXJjaFN1YmplY3QubmV4dChcImJhc2ljU2VhcmNoQ2xpY2tlZFwiKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHZhbGlkIGFkdmFuY2VkIHNlYXJjaCBmaWx0ZXJzIHRvIHZhbGlkIGFuZCBjYWxsIGRhdGEuXHJcbiAgICovXHJcblxyXG4gIGFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMgPSBbXTtcclxuICAgIGlmIChldmVudCAmJiBldmVudC5rZXlDb2RlICE9PSAxMyAmJiBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnMpIHtcclxuICAgICAgZmlsdGVyLnZhbGlkID0gKGZpbHRlci52YWx1ZSAmJiBmaWx0ZXIudmFsdWUubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMgPSB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzO1xyXG5cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gXCJcIjtcclxuICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoRmlsdGVyc1N1YmplY3QubmV4dCh0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyk7XHJcblxyXG4gICAgaWYgKGV2ZW50ICYmIChldmVudC5rZXlDb2RlID09PSAxMyB8fCBldmVudC50eXBlID09PSBcImNsaWNrXCIpKSB7XHJcbiAgICAgIHRoaXMucGVyZm9ybWVkQWR2YW5jZWRTZWFyY2hTdWJqZWN0Lm5leHQoXCJhZHZhbmNlZFNlYXJjaENsaWNrZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBmaWx0ZXIgZmllbGRzIGFuZCBtYWtlIGludmFsaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hjaUZpbHRlckR0b30gZmlsdGVyXHJcbiAgICovXHJcbiAgY2xlYXJGaWx0ZXIoZmlsdGVyOiBIY2lGaWx0ZXJEdG8pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZEZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuYm91bmRGaWx0ZXJzW2ldLmZpZWxkID09PSBmaWx0ZXIuZmllbGQpIHtcclxuICAgICAgICB0aGlzLmJvdW5kRmlsdGVyc1tpXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMuYm91bmRGaWx0ZXJzW2ldLnNldFZhbGlkKGZhbHNlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dCh0aGlzLmJvdW5kRmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaFNvcnRDbGlja2VkKCRldmVudDogTW91c2VFdmVudCwgc2VhcmNoU29ydEl0ZW06IGFueSl7XHJcbiAgICBpZih0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLnZhbHVlID09PSBzZWFyY2hTb3J0SXRlbS52YWx1ZSl7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcuaXNBc2MgPSAhdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZy5pc0FzYztcclxuICAgIH1lbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHNlYXJjaFNvcnRJdGVtKTtcclxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZy5pc0FzYyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlYXJjaFNvcnRpbmdTZWxlY3Rpb25DaGFuZ2VTdWJqZWN0JC5uZXh0KHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVE9ETzogSWYgc29ydCBpbiBncm91cCwgcmVzZXQgZ3JvdXAgZGF0YSwgbm90IG92ZXJhbGwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXHJcbiAgICovXHJcbiAgc2V0U29ydChldmVudDogTW91c2VFdmVudCwgZmllbGQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc29ydHMgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5zb3J0c1swXS5maWVsZCA9PT0gZmllbGQpIHtcclxuICAgICAgLy8gUmVndWxhciBiZWhhdmlvclxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNvcnRzICYmIHRoaXMuc29ydHMubGVuZ3RoID09PSAxICYmICFldmVudC5jdHJsS2V5ICYmIHRoaXMuc29ydHNbMF0uZmllbGQgIT09IGZpZWxkKSB7XHJcbiAgICAgIHRoaXMuc29ydHMgPSBbXTtcclxuICAgIH0gZWxzZSBpZiAoIWV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8oZmllbGQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBleGlzdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgaWYgKHNvcnQuZmllbGQgPT09IGZpZWxkKSB7XHJcbiAgICAgICAgICBzb3J0LmFzYyA9ICFzb3J0LmFzYztcclxuICAgICAgICAgIGV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cy5wdXNoKG5ldyBIY2lTb3J0RHRvKGZpZWxkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc29ydHNTdWJqZWN0Lm5leHQodGhpcy5zb3J0cyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyB1c2VkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzU29ydChzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICBpZiAoc29ydC5maWVsZCA9PT0gc29ydEZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyBhc2NlbmRpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaXNTb3J0QXNjKHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgIGlmIChzb3J0LmZpZWxkID09PSBzb3J0RmllbGQpIHtcclxuICAgICAgICByZXR1cm4gc29ydC5hc2M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBmaWVsZCBpcyB0aGUgZmlyc3Qgc29ydCBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBpc0ZpcnN0U29ydChzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zb3J0cyB8fCB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zb3J0c1swXS5maWVsZCA9PT0gc29ydEZpZWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSBvcHRpb25zIHBvcG91dC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICB0b2dnbGVTaG93T3B0aW9ucyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb2dXaGVlbENsaWNrZWRTdWJqZWN0JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFsbG93VG9nZ2xlU3ViamVjdCQuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IFwiYWxsb3dUb2dnbGVcIikge1xyXG4gICAgICAgIHRoaXMuYWxsb3dUb2dnbGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1RvZ2dsZU9wdGlvbnMgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWwgPT09IFwicHJldmVudFRvZ2dsZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93VG9nZ2xlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dUb2dnbGVPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd09wdGlvbnMgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtb3B0aW9uc1wiKS5jb250YWlucyhldmVudC50YXJnZXQpXHJcbiAgICAgICYmICghKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJidXR0b24uY2FyZC1oZWFkZXItYnV0dG9uLmJ0bi5jbG9zZWFibGVcIikuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB0aXRsZTogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NlYXJjaC10aXRsZVwiKTtcclxuXHJcbiAgICBsZXQgb3B0aW9uczogSFRNTEVsZW1lbnQgPSB0aXRsZS5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1vcHRpb25zXCIpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3B0aW9ucywgXCJsZWZ0XCIsICh0aXRsZS5vZmZzZXRMZWZ0ICsgdGl0bGUub2Zmc2V0V2lkdGgpICsgXCJweFwiKTtcclxuICAgIGlmICghb3B0aW9ucy5jbG9zZXN0KFwiLmRyb3Bkb3duLW1lbnVcIikpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcHRpb25zLCBcInRvcFwiLCB0aXRsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBcInB4XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2hvd09wdGlvbnMgPSAhdGhpcy5zaG93T3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgbWF0Y2ggYSBIY2lGaWx0ZXJEdG8gYnkgY29tcGFyaW5nIGEgcHJvdmlkZWQgZmllbGQtbmFtZVxyXG4gICAqL1xyXG4gIGdldEZpbHRlckZvckZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycy5maW5kKHggPT4geC5maWVsZCA9PT0gZmllbGROYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbmVyIGZvciBiYWNrIGJ1dHRvblxyXG4gICAqL1xyXG5cclxuICBiYWNrQnV0dG9uQ2xpY2tlZCgpIHtcclxuICAgIHRoaXMuYmFja0J1dHRvblN1YmplY3QubmV4dCh0aGlzLmJhY2tCdXR0b25TdWJqZWN0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiBmb3IgZG9jdW1lbnQgY2xpY2tzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDpjbGlja1wiLCBbXCIkZXZlbnRcIiwgXCIkZXZlbnQudGFyZ2V0XCJdKVxyXG4gIGRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldDogSFRNTEVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLmFsbG93VG9nZ2xlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLmluY2x1ZGVzKFwiY2xvc2VhYmxlXCIpKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRvZ2dsZVNob3dTdWJqZWN0JC5uZXh0KHRoaXMuc2hvd09wdGlvbnMpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0ludmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yKSB7XHJcbiAgICAgIGxldCBzZWFyY2hTdHJpbmcgPSB0aGlzLmdldFNlYXJjaFN0cmluZyh0aGlzLmdsb2JhbFNlYXJjaCk7XHJcbiAgICAgIGxldCBnbG9iYWxTZWFyY2hTdHJMaXN0OiBzdHJpbmdbXSA9IHNlYXJjaFN0cmluZy5zcGxpdChcIixcIik7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZ2xvYmFsU2VhcmNoU3RyIG9mIGdsb2JhbFNlYXJjaFN0ckxpc3QpIHtcclxuICAgICAgICAgIGlmKCFnbG9iYWxTZWFyY2hTdHIubWF0Y2godGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IpKSB7XHJcbiAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLnJlcXVpcmVkICYmIGdsb2JhbFNlYXJjaFN0ckxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1pblJhbmdlICYmICFpc05hTihOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UpKSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgZ2xvYmFsU2VhcmNoU3RyIG9mIGdsb2JhbFNlYXJjaFN0ckxpc3QpIHtcclxuICAgICAgICAgICAgaWYoKCFnbG9iYWxTZWFyY2hTdHIgJiYgTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1pblJhbmdlKSA+IDApXHJcbiAgICAgICAgICAgICAgfHwgKGdsb2JhbFNlYXJjaFN0ciAmJiBnbG9iYWxTZWFyY2hTdHIubGVuZ3RoIDwgTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1pblJhbmdlKSkpIHtcclxuICAgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWF4UmFuZ2UgJiYgIWlzTmFOKE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5tYXhSYW5nZSkpKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgICBpZihnbG9iYWxTZWFyY2hTdHIgJiYgZ2xvYmFsU2VhcmNoU3RyLmxlbmd0aCA+IE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5tYXhSYW5nZSkpIHtcclxuICAgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IucGF0dGVybikge1xyXG4gICAgICAgICAgZm9yIChsZXQgZ2xvYmFsU2VhcmNoU3RyIG9mIGdsb2JhbFNlYXJjaFN0ckxpc3QpIHtcclxuICAgICAgICAgICAgaWYgKCFnbG9iYWxTZWFyY2hTdHIubWF0Y2godGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IucGF0dGVybikpIHtcclxuICAgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hTdHJpbmcoc2VhcmNoU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyaW5nLnJlcGxhY2UoL1xcbi9nLCBcIixcIik7XHJcbiAgICBpZiAoc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHN0ckxpc3QgPSBzZWFyY2hTdHJpbmcuc3BsaXQoXCIsXCIpO1xyXG4gICAgICBzZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICBmb3IgKGxldCBzdHIgb2Ygc3RyTGlzdCkge1xyXG4gICAgICAgIHN0ciA9IHN0ci50cmltKCk7XHJcbiAgICAgICAgc2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyaW5nID8gKHN0ciA/IHNlYXJjaFN0cmluZyArIFwiLFwiICsgc3RyIDogc2VhcmNoU3RyaW5nKSA6IHN0cjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWFyY2hTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzQWR2YW5jZWRTZWFyY2hWZXJ0aWNhbFNjcm9sbGJhcigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRpdlBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHZhbmNlZFNlYXJjaC1zY3JvbGwtcGFuZWxcIik7XHJcbiAgICByZXR1cm4gZGl2UGFuZWwuc2Nyb2xsSGVpZ2h0ID4gZGl2UGFuZWwuY2xpZW50SGVpZ2h0O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
1676
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXZpZ2F0aW9uL3NyYy9jb21wb25lbnRzL3NlYXJjaC1saXN0L3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRDs7OztHQUlHO0FBMmxCSSxJQUFNLDZCQUE2QixHQUFuQyxNQUFNLDZCQUE4QixTQUFRLFlBQVk7SUF3RTdELGVBQWUsQ0FBQyxNQUFjO1FBQzVCLElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BD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QUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBbXNCUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBUZW1wbGF0ZVJlZixcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5cclxuaW1wb3J0IHtIY2lGaWx0ZXJEdG8sIEhjaVNvcnREdG99IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9oY2ktbmctZ3JpZC1kdG9cIjtcclxuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7TmF2Q29tcG9uZW50fSBmcm9tIFwiLi4vbmF2LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkdsb2JhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLWdsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG4vKipcclxuICogVGhlIHNlYXJjaCBsaXN0IGNvbnRyb2xsZXIgcmVuZGVycyBhcyBhIGhlYWRlciB0byBvbmUgb3IgbW9yZSBzZWFyY2ggbGlzdHMuICBPbmx5IG9uZSBzZWFyY2ggbGlzdCBjYW4gYmUgc2hvd24gYXQgYSB0aW1lLlxyXG4gKiBUaGUgY29udHJvbGxlciBmZWF0dXJlcyB0aGUgYWJpbGl0eSB0byBoYW5kbGUgZmlsdGVyaW5nIGFuZCBzb3J0aW5nLiAgV2l0aG91dCB0aGUgY29udHJvbGxlciwgdGhlIHNlYXJjaCBsaXN0IGNhbiBleGlzdCxcclxuICogYnV0IGl0IGNhbiBvbmx5IGhhbmRsZSBwYWdpbmcgaW50ZXJuYWxseS5cclxuICovXHJcbkBDb21wb25lbnRUeXBlKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIilcclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktc2VhcmNoLWxpc3QtY29udHJvbGxlclwiLFxyXG4gICAgZXhwb3J0QXM6IFwic2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIixcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgc2VsZWN0IHtcclxuICAgICAgICAgIHBhZGRpbmc6IC4yNWVtO1xyXG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMGVtO1xyXG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XHJcbiAgICAgICAgICBib3JkZXI6IDA7XHJcbiAgICAgICAgICBjb2xvcjogIzhBOTQ5OTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuY2xvc2VhYmxlIHtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYm94IHtcclxuICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgIGJvcmRlci1yaWdodDogMC4xcHggc29saWQgIzVCNjI2NjtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogLjVyZW0gIWltcG9ydGFudDtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpO1xyXG4gICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLW9wdGlvbnMge1xyXG4gICAgICAgICAgLyp3aWR0aDogNjV2dzsqL1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIC0tLS0tLS0gQlROIEdSQUQgQkxVRSAxIFNUWUxFUyAtLS0tLS0tICovXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246ZW5hYmxlZCB7XHJcbiAgICAgICAgICB3aWR0aDogMzAlO1xyXG4gICAgICAgICAgbWluLWhlaWdodDogMnJlbTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLXdoaXRlLWxpZ2h0ZXN0KTtcclxuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWV3YXJtLWRhcmspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246aG92ZXIge1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDAlLCB2YXIoLS1ibHVld2FybS1kYXJrKSAxMDAlKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246ZGlzYWJsZWQge1xyXG4gICAgICAgICAgd2lkdGg6IDMwJTtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLWJsdWV3YXJtLWRhcmspIDMwJSwgdmFyKC0tYmx1ZXdhcm0tbWVkZGFyaykgMTAwJSk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIC0tLS0tLS0gQlROIEdSQUQgQkxVRSAxIFNUWUxFUyAtLS0tLS0tICovXHJcblxyXG4gICAgICAgIC5nbG9iYWwtc2VhcmNoIHtcclxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICAgICAgICAgIGJvcmRlcjogMC4wNGVtIHNvbGlkIHZhcigtLWdyZXl3YXJtLWRhcmspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi10aXRsZS1jbGFzcyB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRncmF5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi1wYW5lIHtcclxuICAgICAgICAgIHdpZHRoOiBtaW4tY29udGVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1jb250ZW50LWJvZHkge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5iYXNpYy1zZWFyY2gge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5hZHZhbmNlZC1zZWFyY2gge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtb3B0aW9ucy5leHBhbmRlZCB7XHJcbiAgICAgICAgICBoZWlnaHQ6IGZpdC1jb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmNsYXNzaWZpY2F0aW9uLWhlYWRlciB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJ1dHRvbiB7XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmFsaWduQnRuIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWRTZWFyY2gtYWxpZ25CdG4ge1xyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5kaXZpZGVyIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYWR2YW5jZWRTZWFyY2gtc2Nyb2xsIHtcclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYmFja0J1dHRvbiAuZmEtYW5nbGUtZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN2Zy1pbmxpbmUtLWZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdCB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pdGVtIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pY29uIHtcclxuICAgICAgICAgIHdpZHRoOiAxLjVyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC10ZXh0OmhvdmVyIHtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5oY2ktZ3JleS1kYXJrZXN0IHtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGV4dGFyZWEtc2VhcmNoLWJveCB7XHJcbiAgICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubXVsdGlsaW5lLXNlYXJjaC1idXR0b24ge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAzcmVtO1xyXG4gICAgICAgICAgbWluLXdpZHRoOiAzcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZpbHRlci1zb3J0aW5nLXBhbmVsIHtcclxuICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLmRpc2FibGVkLWJ1dHRvbiB7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm5hdi1jb250YWluZXIge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubm8tdXNlci1zZWxlY3QtdGV4dHtcclxuICAgICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJzZWFyY2gtdGl0bGVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUaXRsZVwiIGNsYXNzPVwiZC1mbGV4IHBzLTIgaGNpLWdyZXktZGFya2VzdFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0JhY2tCdXR0b25cIiBjbGFzcz1cIm1lLWF1dG8gbXMtMSBiYWNrQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYmFja0J1dHRvbkNsaWNrZWQoKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1iYWNrLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYW5nbGUtZG91YmxlLWxlZnRcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB7e3RpdGxlfX1cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXJvdyBtcy1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJ1dHRvblRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1zLWF1dG8gbWUtMlwiIChjbGljayk9XCJ0b2dnbGVTaG93T3B0aW9ucygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1maWx0ZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW9wdGlvbnNcIiBbY2xhc3MuZXhwYW5kZWRdPVwic2hvd09wdGlvbnNcIiBbbmdTdHlsZV09XCJ7J3dpZHRoJzogKHNlYXJjaE9wdGlvbnNXaWR0aCAhPT0gJycpID8gc2VhcmNoT3B0aW9uc1dpZHRoIDogJ2F1dG8nfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUb2dnbGVPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlci1jb21wb25lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luLWxlZnQ6IGF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYXJkLWhlYWRlci1idXR0b24gYnRuIGNsb3NlYWJsZVwiIChjbGljayk9XCJ0b2dnbGVTaG93T3B0aW9ucygkZXZlbnQpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLXRvZ2dsZS1vcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCIgY2FyZC1oZWFkZXItdGV4dD48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGlzYWJsZUxvY2FsRmlsdGVyaW5nOyBlbHNlIGRpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmF2IG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwiYWN0aXZlVGFiXCIgY2xhc3MgPSBcIm5hdi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIxXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIj5CQVNJQyBTRUFSQ0g8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLmJhc2ljU2VhcmNoSGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBib3VuZEZpbHRlcnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZSBjaGVjayBpZiB0aGUgdGV4dGFyZWEgbmVlZGVkIGluIEJhc2ljIFNlYXJjaC0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ3RleHRhcmVhJyBcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9IFwic2VhcmNoLWJveFwiIChrZXl1cCk9XCJkb0dsb2JhbFNlYXJjaCgkZXZlbnQpXCItLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogI2YyZjJmMlwiPjwvdGV4dGFyZWE+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2Ryb3Bkb3duJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkc1tpXSAmJiBmaWVsZHNbaV0udmFsdWVzICYmIGZpZWxkc1tpXS52YWx1ZXNbMF0uZGlzcGxheTtlbHNlIGRpc3BsYXlfcmF3X3ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwibXlQaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwiZmFcIiBmb250SWNvbj1cImZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3MgPSBcInJpLWJ0bi1jYW5jZWxcIiBbbmdDbGFzc109XCJ7J3JpLWJ0bi1jYW5jZWwtZGlydHknOiB0aGlzLmNoYW5nZWR9XCIgW2Rpc2FibGVkXSA9XCIhdGhpcy5jaGFuZ2VkXCIgKGNsaWNrKT1cInNldHVwRmlsdGVycyhmYWxzZSlcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItY2xlYXItYmFzaWMtc2VhcmNoLWZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcz1cInJpLWJ0bi1zYXZlXCIgW25nQ2xhc3NdPVwieyAncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItYXBwbHktYmFzaWMtZmlsdGVyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMlwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhZHZhbmNlZFNlYXJjaEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIj5BRFZBTkNFRCBTRUFSQ0g8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHZhbmNlZFNlYXJjaC1zY3JvbGxcIiBpZD1cImFkdmFuY2VkU2VhcmNoLXNjcm9sbC1wYW5lbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkU2VhcmNoLXBhbmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhcmFtIG9mIHRoaXMuYWR2YW5jZWRTZWFyY2g7IGluZGV4IGFzIGpcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnYWR2YW5jZWQtc2VhcmNoJzogIXRoaXMuaGFzQWR2YW5jZWRTZWFyY2hWZXJ0aWNhbFNjcm9sbGJhciwgJ2FkdmFuY2VkLXNlYXJjaC1zY3JvbGxlZCc6IHRoaXMuaGFzQWR2YW5jZWRTZWFyY2hWZXJ0aWNhbFNjcm9sbGJhcn1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHZhbmNlZC1zZWFyY2gtY2xhc3NpZmljYXRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFyYW0uaGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhZHZhbmNlZC1zZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdGhpcy5wYXJhbS5maWVsZHM7IGluZGV4IGFzIGtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmllbGQuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnY2hlY2tib3gnICBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94IGNsYXNzPVwiY2hlY2tib3hlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRGaWVsZERpc3BsYXkoZmllbGQuZmllbGQpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW25nTW9kZWxdPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGhpcy5maWVsZC52YWx1ZVVSTDtlbHNlIGRpc3BsYXlfcmF3X3ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgdGhpcy5maWVsZC52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZS5pZFwiPnt7dmFsdWUuZGlzcGxheX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB0aGlzLmZpZWxkLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdERhdGVwaWNrZXJdPVwibXlQaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwibXlQaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYVwiIGZvbnRJY29uPVwiZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYWR2YW5jZWQtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3MgPSBcInJpLWJ0bi1jYW5jZWxcIiBbbmdDbGFzc109XCJ7J3JpLWJ0bi1jYW5jZWwtZGlydHknOiB0aGlzLmNoYW5nZWR9XCIgW2Rpc2FibGVkXT1cIiF0aGlzLmNoYW5nZWRcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKGZhbHNlKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1jbGVhci1hZHZhbmNlLXNlYXJjaC1maWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3MgPSBcInJpLWJ0bi1zYXZlXCIgIFtuZ0NsYXNzXSA9XCJ7J3JpLWJ0bi1zYXZlLWRpcnR5JzogdGhpcy5jaGFuZ2VkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLmNoYW5nZWRcIiAoY2xpY2spPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1hcHBseS1hZHZhbmNlLWZpbHRlci1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiM1wiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hTb3J0aW5nT3B0aW9ucy5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzID1cImZsZXgtZ3Jvdy0xXCIgPlNPUlRJTkc8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2hcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xhc3NpZmljYXRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhpcy5iYXNpY1NlYXJjaEhlYWRlcn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWFyY2hTb3J0SXRlbSBvZiBzZWFyY2hTb3J0aW5nT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHNvcnQtaXRlbVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnY29sLTYgc29ydC1pdGVtJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtaWNvblwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc29ydC1pY29uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFNlYXJjaFNvcnRpbmcudmFsdWU9PXNlYXJjaFNvcnRJdGVtLnZhbHVlICYmIGN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS11cCBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3VycmVudFNlYXJjaFNvcnRpbmcudmFsdWU9PXNlYXJjaFNvcnRJdGVtLnZhbHVlICYmICFjdXJyZW50U2VhcmNoU29ydGluZy5pc0FzY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvcnQtYXJyb3cnOnRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtZG93biBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LXRleHQgbm8tdXNlci1zZWxlY3QtdGV4dFwiIChjbGljayk9XCJvblNlYXJjaFNvcnRDbGlja2VkKCRldmVudCwgc2VhcmNoU29ydEl0ZW0pXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LXRleHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VhcmNoU29ydEl0ZW0uZGlzcGxheX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJhc2ljLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXZcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXk+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5hdiBuZ2JOYXYgI25hdjE9XCJuZ2JOYXZcIiBbKGFjdGl2ZUlkKV09XCJhY3RpdmVUYWIxXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCduYXYnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjFcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiICpuZ0lmPVwiZmlsdGVyQnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluaz5GSUxURVI8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXIgZmlsdGVyLXNvcnRpbmctcGFuZWxcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ2Jhc2ljLXNlYXJjaCBzaWRlYmFyLWZpbHRlciBmaWx0ZXItc29ydGluZy1wYW5lbCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNlYXJjaC1jb250ZW50LWJvZHlcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3JvdyBzZWFyY2gtY29udGVudC1ib2R5JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGJvdW5kRmlsdGVyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnY29sLTYnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnaW5wdXQnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ21hdC1mb3JtLWZpZWxkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2Ryb3Bkb3duJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdtYXQtZm9ybS1maWVsZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZpZWxkc1tpXSAmJiBmaWVsZHNbaV0udmFsdWVzICYmIGZpZWxkc1tpXS52YWx1ZXNbMF0uZGlzcGxheTtlbHNlIGRpc3BsYXlfcmF3X3ZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiBmaWVsZHNbaV0udmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCI+e3t2YWx1ZX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2RhdGUnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ21hdC1mb3JtLWZpZWxkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIiBtYXRJbnB1dCBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwibW0vZGQveXl5eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwibXlQaWNrZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwiZmFzXCIgZm9udEljb249XCJmYS1jYWxlbmRhci1hbHQgZmEtbGdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjbXlQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc2VhcmNoLW1zZy1ob2xkZXInKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJhc2ljLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aCBzaWRlYmFyLWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uUm93VGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJyaS1idG4tY2FuY2VsIHJpLWJ0bi1jYW5jZWwtZGlydHlcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKHRydWUpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWZpbHRlci1yZXNldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU0VUXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzPVwicmktYnRuLXNhdmVcIiBbbmdDbGFzc109XCJ7J3JpLWJ0bi1zYXZlLWRpcnR5JzogdGhpcy5jaGFuZ2VkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLmNoYW5nZWQgXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWZpbHRlci1hcHBseS1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxURVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjJcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiICpuZ0lmPVwic29ydEJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+U09SVElORzwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaCBzaWRlYmFyLWZpbHRlciBmaWx0ZXItc29ydGluZy1wYW5lbFwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzb3J0RmllbGQgb2Ygc29ydEJ5QWxsb3dlZEZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBzb3J0LWl0ZW1cIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ2NvbC02IHNvcnQtaXRlbScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1pY29uXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LWljb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTb3J0KHNvcnRGaWVsZCkgJiYgaXNTb3J0QXNjKHNvcnRGaWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6aXNGaXJzdFNvcnQoc29ydEZpZWxkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtdXAgZmEtbGdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNTb3J0KHNvcnRGaWVsZCkgJiYgIWlzU29ydEFzYyhzb3J0RmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvcnQtYXJyb3cnOmlzRmlyc3RTb3J0KHNvcnRGaWVsZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYXJyb3ctY2lyY2xlLWRvd24gZmEtbGdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC10ZXh0XCIgKGNsaWNrKT1cInNldFNvcnQoJGV2ZW50LCBzb3J0RmllbGQpXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LXRleHQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShzb3J0RmllbGQpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGggc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmF2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW25nYk5hdk91dGxldF09XCJuYXYxXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTEgZ2xvYmFsLXNlYXJjaFwiICpuZ0lmPVwiaW5wdXRNdWx0aWxpbmUgPT09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtYm94XCIgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwiZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXJcIiBhcmlhLWxhYmVsPVwicXVpY2stc2VhcmNoLW9wdGlvbnNcIi8+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzaG93UXVpY2tTZWFyY2hPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlYXJjaFR5cGVcIiAoY2hhbmdlKT1cInNlbGVjdFNlYXJjaFR5cGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtaWRlbnRpZmllclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGJvcmRlci1yYWRpdXM6IDBweDsgYm9yZGVyLWNvbG9yOiBibGFjazsgXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VhcmNoVHlwZSBvZiBzZWFyY2hUeXBlQXJyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoVHlwZX19XHJcbiAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzPVwicGwtMSBwci0xIHNlYXJjaC1idXR0b25cIiBzdHlsZT1cImhlaWdodDogMTAwJVwiIFtkaXNhYmxlZF0gPSBcIiFxdWlja1NlYXJjaEVuYWJsZWRcIiBbbmdDbGFzc10gPSBcInsnZGlzYWJsZWQtYnV0dG9uJzohcXVpY2tTZWFyY2hFbmFibGVkfVwiIChjbGljayk9XCJzZWFyY2hCdXR0b25DbGlja2VkKClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItcXVpY2stc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi0xIGdsb2JhbC1zZWFyY2hcIiAqbmdJZj1cImlucHV0TXVsdGlsaW5lID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBhcmlhLWxhYmVsPVwiZ2xvYmFsU2VhcmNoXCIgW2Rpc2FibGVkXSA9IFwiIXF1aWNrU2VhcmNoRW5hYmxlZFwiIFtuZ01vZGVsXT1cImdsb2JhbFNlYXJjaFwiIGNsYXNzPVwic2VhcmNoLWJveCB0ZXh0YXJlYS1zZWFyY2gtYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc2VhcmNoLWJveCB0ZXh0YXJlYS1zZWFyY2gtYm94JylcIiAgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIiBbcGxhY2Vob2xkZXJdPVwiZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXJcIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICA8c2VsZWN0ICpuZ0lmPVwic2hvd1F1aWNrU2VhcmNoT3B0aW9uc1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTZWFyY2hUeXBlXCIgKGNoYW5nZSk9XCJzZWxlY3RTZWFyY2hUeXBlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwic2VhcmNoLWlkZW50aWZpZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBib3JkZXItcmFkaXVzOiAwcHg7IGJvcmRlci1jb2xvcjogYmxhY2s7IFwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNlYXJjaFR5cGUgb2Ygc2VhcmNoVHlwZUFycmF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICB7e3NlYXJjaFR5cGV9fVxyXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBhcmlhLWxhYmVsPVwic2VhcmNoQnV0dG9uXCIgY2xhc3M9XCJwcy0xIHBlLTEgc2VhcmNoLWJ1dHRvbiBtdWx0aWxpbmUtc2VhcmNoLWJ1dHRvblwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc2VhcmNoLWJ1dHRvbiBtdWx0aWxpbmUtc2VhcmNoLWJ1dHRvbicpXCIgW2Rpc2FibGVkXSA9IFwiIXF1aWNrU2VhcmNoRW5hYmxlZFwiIFtuZ0NsYXNzXSA9IFwieydkaXNhYmxlZC1idXR0b24nOiFxdWlja1NlYXJjaEVuYWJsZWR9XCIgKGNsaWNrKT1cInNlYXJjaEJ1dHRvbkNsaWNrZWQoKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1xdWljay1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHgtYXV0b1wiICpuZ0lmPVwiaGFzVmFsaWRGaWx0ZXJzKClcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBmaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnZhbGlkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImNsZWFyRmlsdGVyKGZpbHRlcilcIiBjbGFzcz1cImQtZmxleCBwaWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7ZmlsdGVyLmZpZWxkfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xvc2UtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXMtY2lyY2xlIGZhLXhzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWFyY2hMaXN0cy5sZW5ndGggPiAxXCIgY2xhc3M9XCJkLWZsZXggeC1oaWRkZW4gbGlzdC10b2dnbGVcIj5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFtuZ01vZGVsXT1cInNlbGVjdGVkU2VhcmNoTGlzdFwiIChuZ01vZGVsQ2hhbmdlKT1cInNldFNlbGVjdGVkU2VhcmNoTGlzdCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlICpuZ0Zvcj1cImxldCBzZWFyY2hMaXN0IG9mIHNlYXJjaExpc3RzXCIgbWF0LXJhaXNlZC1idXR0b24tdG9nZ2xlIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hMaXN0XCI+XHJcbiAgICAgICAgICAgICAgICB7e3NlYXJjaExpc3R9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgYFxyXG4gIH1cclxuKVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQgZXh0ZW5kcyBOYXZDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNob3dUaXRsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgYnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQElucHV0KCkgaW5wdXRNdWx0aWxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWFyY2hPcHRpb25zV2lkdGg6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgZmllbGRzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVN0eWxlczogYW55ID0ge307XHJcbiAgQElucHV0KCkgYmFzaWNTZWFyY2g6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGFkdmFuY2VkU2VhcmNoOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBmaWx0ZXJCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgcXVpY2tTZWFyY2hGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgYWR2YW5jZWRTZWFyY2hGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgc29ydEJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzb3J0czogSGNpU29ydER0b1tdID0gW107XHJcbiAgQElucHV0KCkgc2hvd1F1aWNrU2VhcmNoT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dBZHZhbmNlZFNlYXJjaE9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlQXJyYXk6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgc2VhcmNoVHlwZTogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlU2VsZWN0ZWQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgYmFzaWNTZWFyY2hIZWFkZXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgZ2xvYmFsU2VhcmNoVmFsaWRhdG9yOiBhbnkgfCBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGJ1dHRvblJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+ID0gbnVsbDtcclxuICBASW5wdXQoKSBzZWFyY2hTb3J0aW5nT3B0aW9uczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBsYWJlbFRleHQ6IHN0cmluZyA9IFwiXCI7XHJcbiAgQE91dHB1dCgpIHNlYXJjaExpc3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gIGFjdGl2ZVRhYiA9IDE7XHJcblxyXG4gIGFjdGl2ZVRhYjEgPSAxO1xyXG5cclxuICBib3VuZEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcbiAgdXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IFtdO1xyXG5cclxuICBmaWx0ZXJzU3ViamVjdDogU3ViamVjdDxIY2lGaWx0ZXJEdG9bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaUZpbHRlckR0b1tdPihbXSk7XHJcbiAgYWR2YW5jZWRTZWFyY2hGaWx0ZXJzU3ViamVjdDogU3ViamVjdDxIY2lGaWx0ZXJEdG9bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaUZpbHRlckR0b1tdPihbXSk7XHJcbiAgc29ydHNTdWJqZWN0OiBTdWJqZWN0PEhjaVNvcnREdG9bXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEhjaVNvcnREdG9bXT4oW10pO1xyXG5cclxuICBnbG9iYWxTZWFyY2g6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHNob3dPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWFyY2hMaXN0czogc3RyaW5nW10gPSBbXTtcclxuICBzZWxlY3RlZFNlYXJjaExpc3Q6IHN0cmluZztcclxuICBzZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcclxuICBzZWFyY2hTdHJpbmdTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcclxuICBiYWNrQnV0dG9uU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgYWR2YW5jZWRTZWFyY2hTdHJpbmdTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcclxuICBzZWxlY3RlZFNlYXJjaFR5cGU6IHN0cmluZztcclxuICBzZWxlY3RlZFNlYXJjaFR5cGVTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4odW5kZWZpbmVkKTtcclxuICBwZXJmb3JtZWRTZWFyY2hTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcGVyZm9ybWVkQmFzaWNTZWFyY2hTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgcGVyZm9ybWVkQWR2YW5jZWRTZWFyY2hTdWJqZWN0OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgZGlzYWJsZUxvY2FsRmlsdGVyaW5nID0gZmFsc2U7XHJcbiAgYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlciA9IGZhbHNlO1xyXG5cclxuICBhbGxvd1NlYXJjaFN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBzZWFyY2hBbGxvd2VkU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGFsbG93VG9nZ2xlU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIHRvZ2dsZVNob3dTdWJqZWN0JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGNvZ1doZWVsQ2xpY2tlZFN1YmplY3QkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgY2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGFsbG93U2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcclxuICBhbGxvd1RvZ2dsZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgc2hvd1RvZ2dsZU9wdGlvbnM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBxdWlja1NlYXJjaEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBzZWFyY2hTb3J0aW5nU2VsZWN0aW9uQ2hhbmdlU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGN1cnJlbnRTZWFyY2hTb3J0aW5nID0ge1widmFsdWVcIjp1bmRlZmluZWQsIFwiZGlzcGxheVwiOnVuZGVmaW5lZCwgXCJpc0FzY1wiOnRydWV9O1xyXG5cclxuICBnZXRDdXN0b21TdHlsZXMoc3R5bGVzOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgbGV0IGN1c3RvbVN0eWxlT2JqZWN0OiBhbnkgPSBcIlwiO1xyXG4gICAgZm9yIChsZXQgc3R5bGUgb2Ygc3R5bGVzLnNwbGl0KFwiIFwiKSkge1xyXG4gICAgICBsZXQgc3R5bGVPYmplY3QgPSB0aGlzLmN1c3RvbVN0eWxlc1tzdHlsZV07XHJcbiAgICAgIGlmIChzdHlsZU9iamVjdCkge1xyXG4gICAgICAgIGN1c3RvbVN0eWxlT2JqZWN0ID0gT2JqZWN0LmFzc2lnbih7fSwgY3VzdG9tU3R5bGVPYmplY3QsIHN0eWxlT2JqZWN0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXN0b21TdHlsZU9iamVjdDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICByZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gICAgbmF2aWdhdGlvbkdsb2JhbFNlcnZpY2U6IE5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlLFxyXG4gICAgQE9wdGlvbmFsKCkgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBzdXBlcihlbGVtZW50UmVmLCByZW5kZXJlciwgcmVzb2x2ZXIsIG5hdmlnYXRpb25TZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgaWYgKCFuYXZpZ2F0aW9uU2VydmljZSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmV3IE5hdmlnYXRpb25TZXJ2aWNlKG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRJZCgpID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc1Jvb3QgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGRhdGEgb25seSB3aGVuIHRoZSBjb21wb25lbnQgaGFzIGZ1bGx5IGluaXRpYWxpemVkIGFuZCBpcyByZW5kZXJlZC5cclxuICAgKi9cclxuICBjaGVja0luaXRpYWxpemVkKCkge1xyXG4gICAgaWYgKHRoaXMuYWZ0ZXJWaWV3SW5pdCkge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVDb25maWcodGhpcy5jb25maWcpO1xyXG4gICAgICB0aGlzLnBvc3RJbml0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRCdXR0b25Sb3dUZW1wbGF0ZShidXR0b25Sb3dUZW1wbGF0ZSl7XHJcbiAgICB0aGlzLmJ1dHRvblJvd1RlbXBsYXRlID0gYnV0dG9uUm93VGVtcGxhdGU7XHJcbiAgfVxyXG5cclxuICBkb0dsb2JhbFNlYXJjaChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgbGV0IHNlYXJjaFN0cmluZzogc3RyaW5nID0gKCg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLnZhbHVlKS50cmltKCk7XHJcbiAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcclxuICAgICAgLy8gU2VuZCBhIG1lc3NhZ2Ugd2l0aCBzZWFyY2gtdGV4dFxyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiSW4gU2VhcmNoTGlzdENvbnRyb2xsZXIgZW50ZXIgd2FzIGRldGVjdGVkXCIpO1xyXG4gICAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IHNlYXJjaFN0cmluZztcclxuICAgICAgdGhpcy5zZWFyY2hTdHJpbmdTdWJqZWN0Lm5leHQodGhpcy5nZXRTZWFyY2hTdHJpbmcoc2VhcmNoU3RyaW5nKSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQnV0dG9uQ2xpY2tlZCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nID09PSBmYWxzZSkge1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2ggIT09IHNlYXJjaFN0cmluZykge1xyXG4gICAgICAgIGlmICghc2VhcmNoU3RyaW5nIHx8IHNlYXJjaFN0cmluZy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZDogc3RyaW5nO1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICAgICAgZmlsdGVyRmllbGQgPSAoZmlsdGVyRmllbGQpID8gZmlsdGVyRmllbGQgKyBcIiBvciBcIiArIGZpZWxkIDogZmllbGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW25ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHNlYXJjaFN0cmluZyksIHVuZGVmaW5lZCwgXCJMXCIsIHRydWUpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IHNlYXJjaFN0cmluZztcclxuICB9XHJcblxyXG4gIHNlYXJjaEJ1dHRvbkNsaWNrZWQoKSB7XHJcblxyXG4gICAgLy8gVmFsaWRhdGlvbiBDaGVjazogaWYgaW52YWxpZCwgZG8gbm90IHNlYXJjaC5cclxuICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvciAmJiB0aGlzLmlzSW52YWxpZCgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsb3dTZWFyY2hTdWJqZWN0JC5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gXCJhbGxvd1NlYXJjaFwiKSB7XHJcbiAgICAgICAgdGhpcy5hbGxvd1NlYXJjaCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJwcmV2ZW50U2VhcmNoXCIpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dTZWFyY2ggPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICB0aGlzLnNlYXJjaEFsbG93ZWRTdWJqZWN0JC5uZXh0KHRoaXMuYWxsb3dTZWFyY2gpO1xyXG5cclxuICAgIGlmICh0aGlzLmFsbG93U2VhcmNoKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU3RyaW5nU3ViamVjdC5uZXh0KHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHRoaXMuZ2xvYmFsU2VhcmNoKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgICBpZiAodGhpcy5xdWlja1NlYXJjaEZpZWxkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMucXVpY2tTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJGaWVsZCA9IChmaWx0ZXJGaWVsZCkgPyBmaWx0ZXJGaWVsZCArIFwiIG9yIFwiICsgZmllbGQgOiBmaWVsZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICAgICAgICBmaWx0ZXJGaWVsZCA9IChmaWx0ZXJGaWVsZCkgPyBmaWx0ZXJGaWVsZCArIFwiIG9yIFwiICsgZmllbGQgOiBmaWVsZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW25ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHRoaXMuZ2xvYmFsU2VhcmNoKSwgdW5kZWZpbmVkLCBcIkxcIiwgdHJ1ZSldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGVTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUpO1xyXG4gICAgICB0aGlzLnBlcmZvcm1lZFNlYXJjaFN1YmplY3QubmV4dChcInNlYXJjaFBlcmZvcm1lZFwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZFNlYXJjaExpc3Qoc2VsZWN0ZWRTZWFyY2hMaXN0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0ID0gc2VsZWN0ZWRTZWFyY2hMaXN0O1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaExpc3QpO1xyXG4gICAgdGhpcy5zZWFyY2hMaXN0Q2hhbmdlLmVtaXQoc2VsZWN0ZWRTZWFyY2hMaXN0KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFNlYXJjaFR5cGUoKSB7XHJcbiAgICBjb25zb2xlLmRlYnVnKFwic2VsZWN0U2VhcmNoVHlwZVwiKTtcclxuICAgIGNvbnNvbGUuZGVidWcodGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGVTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgYWRkU2VhcmNoTGlzdCh0aXRsZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIlNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50LmFkZFNlYXJjaExpc3Q6IFwiICsgdGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aXRsZSAmJiB0aGlzLnNlYXJjaExpc3RzLmluZGV4T2YodGl0bGUpID09PSAtMSkge1xyXG4gICAgICB0aGlzLnNlYXJjaExpc3RzLnB1c2godGl0bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNlYXJjaExpc3RzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCA9IHRpdGxlO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlbmFibGVRdWlja1NlYXJjaChlbmFibGVkOiBib29sZWFuID0gdHJ1ZSl7XHJcbiAgICB0aGlzLnF1aWNrU2VhcmNoRW5hYmxlZCA9IGVuYWJsZWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgY29uZmlnIHdpdGggb3B0aW9ucyBhbmQgcmUtZmV0Y2hlcyBkYXRhLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIGNvbmZpZ1xyXG4gICAqL1xyXG4gIHVwZGF0ZUNvbmZpZyhjb25maWcpIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwidXBkYXRlQ29uZmlnXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb25maWcpIHtcclxuICAgICAgdGhpcy5jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmNvbmZpZywgY29uZmlnKTtcclxuXHJcbiAgICAgIGlmIChjb25maWcuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuZmlsdGVyQnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcucXVpY2tTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLnF1aWNrU2VhcmNoRmllbGRzID0gY29uZmlnLnF1aWNrU2VhcmNoRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoRmllbGRzID0gY29uZmlnLmFkdmFuY2VkU2VhcmNoRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc29ydEJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5zb3J0QnlBbGxvd2VkRmllbGRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucyA9IGNvbmZpZy5zaG93UXVpY2tTZWFyY2hPcHRpb25zO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuaW5wdXRNdWx0aWxpbmUpIHtcclxuICAgICAgICB0aGlzLmlucHV0TXVsdGlsaW5lID0gY29uZmlnLmlucHV0TXVsdGlsaW5lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VhcmNoT3B0aW9uc1dpZHRoKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25zV2lkdGggPSBjb25maWcuc2VhcmNoT3B0aW9uc1dpZHRoO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VhcmNoVHlwZUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hUeXBlQXJyYXkgPSBjb25maWcuc2VhcmNoVHlwZUFycmF5O1xyXG4gICAgICAgIGlmIChjb25maWcuc2VhcmNoVHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVBcnJheVt0aGlzLnNlYXJjaFR5cGVBcnJheS5maW5kSW5kZXgoeCA9PiB4ID09PSBjb25maWcuc2VhcmNoVHlwZSldO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZUFycmF5WzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmRpc2FibGVMb2NhbEZpbHRlcmluZykge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nID0gY29uZmlnLmRpc2FibGVMb2NhbEZpbHRlcmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIgPSBjb25maWcuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlbGVjdGVkU2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBjb25maWcuc2VsZWN0ZWRTZWFyY2hTdHJpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMgPSBjb25maWcuc29ydHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWFyY2hMaXN0Q2hhbmdlKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hMaXN0Q2hhbmdlID0gY29uZmlnLnNlYXJjaExpc3RDaGFuZ2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zaG93VGl0bGUgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1RpdGxlID0gY29uZmlnLnNob3dUaXRsZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJ1dHRvblRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25UZW1wbGF0ZSA9IGNvbmZpZy5idXR0b25UZW1wbGF0ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNob3dCYWNrQnV0dG9uICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNob3dCYWNrQnV0dG9uID0gY29uZmlnLnNob3dCYWNrQnV0dG9uO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYmFzaWNTZWFyY2hIZWFkZXIgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuYmFzaWNTZWFyY2hIZWFkZXIgPSBjb25maWcuYmFzaWNTZWFyY2hIZWFkZXI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5nbG9iYWxTZWFyY2hQbGFjZWhvbGRlcikge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXIgPSBjb25maWcuZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvciA9IGNvbmZpZy5nbG9iYWxTZWFyY2hWYWxpZGF0b3I7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5jdXN0b21TdHlsZXMpIHtcclxuICAgICAgICB0aGlzLmN1c3RvbVN0eWxlcyA9IGNvbmZpZy5jdXN0b21TdHlsZXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjb25maWcuZmllbGRzICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmZpZWxkcyA9IGNvbmZpZy5maWVsZHM7XHJcbiAgICAgICAgaWYgKHRoaXMuZmllbGRzKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xyXG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWVVUkwgJiYgIWZpZWxkLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgIC8vIFdlIGZvdW5kIGEgdmFsdWUgVVJMIGZvciB0aGUgZmllbGQgYW5kIHdpbGwgcG9wdWxhdGUgdGhlIHZhbHVlcyBub3dcclxuICAgICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21VUkwoZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2ggIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2ggPSBjb25maWcuYWR2YW5jZWRTZWFyY2g7XHJcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2ggIT0gbnVsbCkge1xyXG4gICAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hZHZhbmNlZFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgajtcclxuICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnZhbHVlVVJMICYmICF0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS52YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVVSTCh0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihjb25maWcuc2VhcmNoU29ydGluZ09wdGlvbnMpe1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU29ydGluZ09wdGlvbnMgPSBjb25maWcuc2VhcmNoU29ydGluZ09wdGlvbnM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGNvbmZpZy5pbml0aWFsU2VhcmNoU29ydGluZ1NlbGVjdGlvbil7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZyA9IGNvbmZpZy5pbml0aWFsU2VhcmNoU29ydGluZ1NlbGVjdGlvbjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwICYmIHRoaXMuc29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc29ydHMucHVzaChuZXcgSGNpU29ydER0byh0aGlzLnNvcnRCeUFsbG93ZWRGaWVsZHNbMF0pKTtcclxuICAgIH1cclxuICAgIGNvbnNvbGUubG9nKCdhbm90aGVyU29ydGluZyBGaWVsZDonLCB0aGlzLnNlYXJjaFNvcnRpbmdPcHRpb25zKTtcclxuICAgIHRoaXMuc2V0dXBGaWx0ZXJzKCk7XHJcbiAgICBzdXBlci51cGRhdGVDb25maWcoY29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIG9iamVjdHMgYWZ0ZXIgbWFraW5nIGEgaHR0cCBjYWxsIHRvIHRoZSB2YWx1ZVVSTCBvZiB0aGUgZmllbGRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSBmaWVsZFxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cclxuICAgKi9cclxuICBnZXRWYWx1ZXNGcm9tVVJMKGZpZWxkOiBhbnkpIHtcclxuICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgIHVybCA9IGZpZWxkLnZhbHVlVVJMO1xyXG4gICAgdGhpcy5odHRwLmdldCh1cmwpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKFwidmFsdWVzIGNvbWluZyBiYWNrIGZyb21cIiArIGZpZWxkLnZhbHVlVVJMKTtcclxuICAgICAgICAgIGxldCB2YWx1ZXM6IGFueVtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgICBjb25zb2xlLmRlYnVnKHZhbHVlcyk7XHJcbiAgICAgICAgICBpZiAodmFsdWVzICYmIHZhbHVlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZpZWxkLnZhbHVlcyA9IHZhbHVlcztcclxuICAgICAgICAgICAgLy9Tb3J0IHRoZSB2YWx1ZXMgb2YgdGhlIGRyb3AgZG93biBsaXN0cyBiZWZpbnJlXHJcbiAgICAgICAgICAgIHZhbHVlcy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGEuZGlzcGxheSA8IGIuZGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHdoaWxlIGdldHRpbmcgdmFsdWVzIGZvciBVUkxcIiArIHRoaXMuZ2V0RmllbGREaXNwbGF5KGZpZWxkKSk7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIGRpc3BsYXkgcHJvcGVydHkgb2YgdGhlIGZpZWxkIGlmIGl0IGV4aXN0cywgb3RoZXJ3aXNlLCB0cnkgY29udmVydGluZyBjYW1lbCBjYXNlIHRvIHdvcmRzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcblxyXG5cclxuICBnZXRGaWVsZERpc3BsYXkoZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy90aGlzLmJhc2ljU2VhcmNoLmZpZWxkc1xyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gZmllbGQuZGlzcGxheTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy9hZHZhbmNlZFNlYXJjaCBmaWVsZCBkaXNwbGF5XHJcbiAgICBsZXQgaTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0uZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLmRpc3BsYXk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRpc3BsYXk6IHN0cmluZyA9IGZpZWxkTmFtZS5yZXBsYWNlKC8oW0EtWl0pL2csIFwiICQxXCIpO1xyXG4gICAgcmV0dXJuIGRpc3BsYXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBkaXNwbGF5LnNsaWNlKDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB0eXBlIHByb3BlcnR5IG9mIHRoZSBmaWVsZCBpZiBpdCBleGlzdHMuIERlZmF1bHRzIHRvIGlucHV0XHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuICBnZXRGaWVsZFR5cGUoZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy90aGlzLmJhc2ljU2VhcmNoLmZpZWxkc1xyXG4gICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcclxuICAgICAgaWYgKGZpZWxkLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICByZXR1cm4gZmllbGQudHlwZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYWR2YW5jZWRTZWFyY2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGo7XHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0udHlwZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcImlucHV0XCI7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZHMoKXtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkcztcclxuICB9XHJcblxyXG4gIHNldEZpZWxkcyhmaWVsZHMpe1xyXG4gICAgdGhpcy5maWVsZHMgPSBmaWVsZHM7XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZChmaWVsZE5hbWU6c3RyaW5nKXtcclxuICAgIHJldHVybiB0aGlzLmZpZWxkcy5maW5kKHg9PnguZmllbGQgPT0gZmllbGROYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBmaWx0ZXJzIGJhc2VkIHVwb24gYXZhaWxhYmxlIGZpZWxkcyBmb3IgZmlsdGVyaW5nLlxyXG4gICAqL1xyXG4gIHNldHVwRmlsdGVycyhhcHBseTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICB0aGlzLmJvdW5kRmlsdGVycyA9IFtdO1xyXG4gICAgdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycyA9IFtdO1xyXG5cclxuICAgIGZvciAobGV0IGZpbHRlckZpZWxkIG9mIHRoaXMuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuYm91bmRGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiTFwiLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgZmlsdGVyRmllbGQgb2YgdGhpcy5hZHZhbmNlZFNlYXJjaEZpZWxkcykge1xyXG4gICAgICB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzLnB1c2gobmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFwiTFwiLCBmYWxzZSkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGFwcGx5KSB7XHJcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKCk7XHJcbiAgICAgIHRoaXMuYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIGF0IGxlYXN0IG9uZSBmaWx0ZXIgaXMgdmFsaWQuXHJcbiAgICpcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBoYXNWYWxpZEZpbHRlcnMoKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgaWYgKGZpbHRlci52YWxpZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIGZpbHRlci5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxyXG4gICAqIEBwYXJhbSB7SGNpRmlsdGVyRHRvfSBmaWx0ZXJcclxuICAgKi9cclxuICBzZXRGaWx0ZXIodmFsdWU6IHN0cmluZywgZmlsdGVyOiBIY2lGaWx0ZXJEdG8pOiB2b2lkIHtcclxuICAgIGZpbHRlci52YWx1ZSA9IHZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcclxuICAgICAgaWYgKCF0aGlzLmRpc2FibGVMb2NhbEZpbHRlcmluZykge1xyXG4gICAgICAgIGZvciAobGV0IGZsIG9mIHRoaXMuYm91bmRGaWx0ZXJzKSB7XHJcbiAgICAgICAgICBpZiAoZmwudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB2YWxpZCBmaWx0ZXJzIHRvIHZhbGlkIGFuZCBjYWxsIGRhdGEuXHJcbiAgICovXHJcbiAgYXBwbHlGaWx0ZXJzKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleUNvZGUgIT09IDEzICYmIGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgaWYgKGZpbHRlci52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgICBmaWx0ZXIudmFsaWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGZpbHRlci52YWx1ZSAmJiBmaWx0ZXIudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZpbHRlci52YWxpZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbGlkID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IFwiXCI7XHJcbiAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy5ib3VuZEZpbHRlcnMpO1xyXG4gICAgLy9TZXR0aW5nIGEgZmxhZyBvbiBidXR0b25DbGljayBldmVudC5cclxuICAgIGlmIChldmVudCAmJiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgfHwgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1lZEJhc2ljU2VhcmNoU3ViamVjdC5uZXh0KFwiYmFzaWNTZWFyY2hDbGlja2VkXCIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdmFsaWQgYWR2YW5jZWQgc2VhcmNoIGZpbHRlcnMgdG8gdmFsaWQgYW5kIGNhbGwgZGF0YS5cclxuICAgKi9cclxuXHJcbiAgYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoZXZlbnQ/OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyA9IFtdO1xyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmtleUNvZGUgIT09IDEzICYmIGV2ZW50LnR5cGUgJiYgZXZlbnQudHlwZSAhPT0gXCJjbGlja1wiKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBmaWx0ZXIgb2YgdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycykge1xyXG4gICAgICBmaWx0ZXIudmFsaWQgPSAoZmlsdGVyLnZhbHVlICYmIGZpbHRlci52YWx1ZS5sZW5ndGggPiAwKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyA9IHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnM7XHJcblxyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBcIlwiO1xyXG4gICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcikge1xyXG4gICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgIH1cclxuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hGaWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzKTtcclxuXHJcbiAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LmtleUNvZGUgPT09IDEzIHx8IGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikpIHtcclxuICAgICAgdGhpcy5wZXJmb3JtZWRBZHZhbmNlZFNlYXJjaFN1YmplY3QubmV4dChcImFkdmFuY2VkU2VhcmNoQ2xpY2tlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGZpbHRlciBmaWVsZHMgYW5kIG1ha2UgaW52YWxpZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7SGNpRmlsdGVyRHRvfSBmaWx0ZXJcclxuICAgKi9cclxuICBjbGVhckZpbHRlcihmaWx0ZXI6IEhjaUZpbHRlckR0byk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvdW5kRmlsdGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAodGhpcy5ib3VuZEZpbHRlcnNbaV0uZmllbGQgPT09IGZpbHRlci5maWVsZCkge1xyXG4gICAgICAgIHRoaXMuYm91bmRGaWx0ZXJzW2ldLnNldFZhbHVlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5ib3VuZEZpbHRlcnNbaV0uc2V0VmFsaWQoZmFsc2UpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMuYm91bmRGaWx0ZXJzKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoU29ydENsaWNrZWQoJGV2ZW50OiBNb3VzZUV2ZW50LCBzZWFyY2hTb3J0SXRlbTogYW55KXtcclxuICAgIGlmKHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcudmFsdWUgPT09IHNlYXJjaFNvcnRJdGVtLnZhbHVlKXtcclxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZy5pc0FzYyA9ICF0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc2VhcmNoU29ydEl0ZW0pO1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VhcmNoU29ydGluZ1NlbGVjdGlvbkNoYW5nZVN1YmplY3QkLm5leHQodGhpcy5jdXJyZW50U2VhcmNoU29ydGluZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUT0RPOiBJZiBzb3J0IGluIGdyb3VwLCByZXNldCBncm91cCBkYXRhLCBub3Qgb3ZlcmFsbC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRcclxuICAgKi9cclxuICBzZXRTb3J0KGV2ZW50OiBNb3VzZUV2ZW50LCBmaWVsZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zb3J0cyAmJiB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnNvcnRzWzBdLmZpZWxkID09PSBmaWVsZCkge1xyXG4gICAgICAvLyBSZWd1bGFyIGJlaGF2aW9yXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc29ydHMgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDEgJiYgIWV2ZW50LmN0cmxLZXkgJiYgdGhpcy5zb3J0c1swXS5maWVsZCAhPT0gZmllbGQpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IFtdO1xyXG4gICAgfSBlbHNlIGlmICghZXZlbnQuY3RybEtleSkge1xyXG4gICAgICB0aGlzLnNvcnRzID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuc29ydHMucHVzaChuZXcgSGNpU29ydER0byhmaWVsZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGV4aXN0czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgICBpZiAoc29ydC5maWVsZCA9PT0gZmllbGQpIHtcclxuICAgICAgICAgIHNvcnQuYXNjID0gIXNvcnQuYXNjO1xyXG4gICAgICAgICAgZXhpc3RzID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFleGlzdHMpIHtcclxuICAgICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8oZmllbGQpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zb3J0c1N1YmplY3QubmV4dCh0aGlzLnNvcnRzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIHVzZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaXNTb3J0KHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgIGlmIChzb3J0LmZpZWxkID09PSBzb3J0RmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBzb3J0IGZpZWxkIGlzIGFzY2VuZGluZy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBpc1NvcnRBc2Moc29ydEZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgaWYgKHNvcnQuZmllbGQgPT09IHNvcnRGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiBzb3J0LmFzYztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIGZpZWxkIGlzIHRoZSBmaXJzdCBzb3J0IGZpZWxkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzRmlyc3RTb3J0KHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnNvcnRzIHx8IHRoaXMuc29ydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNvcnRzWzBdLmZpZWxkID09PSBzb3J0RmllbGQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUb2dnbGUgdGhlIG9wdGlvbnMgcG9wb3V0LlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAqL1xyXG4gIHRvZ2dsZVNob3dPcHRpb25zKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmNvZ1doZWVsQ2xpY2tlZFN1YmplY3QkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuYWxsb3dUb2dnbGVTdWJqZWN0JC5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgaWYgKHZhbCA9PT0gXCJhbGxvd1RvZ2dsZVwiKSB7XHJcbiAgICAgICAgdGhpcy5hbGxvd1RvZ2dsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93VG9nZ2xlT3B0aW9ucyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHZhbCA9PT0gXCJwcmV2ZW50VG9nZ2xlXCIpIHtcclxuICAgICAgICAgIHRoaXMuYWxsb3dUb2dnbGUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2hvd1RvZ2dsZU9wdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93T3B0aW9ucyAmJiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1vcHRpb25zXCIpLmNvbnRhaW5zKGV2ZW50LnRhcmdldClcclxuICAgICAgJiYgKCEodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcImJ1dHRvbi5jYXJkLWhlYWRlci1idXR0b24uYnRuLmNsb3NlYWJsZVwiKS5jb250YWlucyhldmVudC50YXJnZXQpKSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHRpdGxlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjc2VhcmNoLXRpdGxlXCIpO1xyXG5cclxuICAgIGxldCBvcHRpb25zOiBIVE1MRWxlbWVudCA9IHRpdGxlLnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLW9wdGlvbnNcIik7XHJcblxyXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcHRpb25zLCBcImxlZnRcIiwgKHRpdGxlLm9mZnNldExlZnQgKyB0aXRsZS5vZmZzZXRXaWR0aCkgKyBcInB4XCIpO1xyXG4gICAgaWYgKCFvcHRpb25zLmNsb3Nlc3QoXCIuZHJvcGRvd24tbWVudVwiKSkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG9wdGlvbnMsIFwidG9wXCIsIHRpdGxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFwicHhcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zaG93T3B0aW9ucyA9ICF0aGlzLnNob3dPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBmdW5jdGlvbiB3b3VsZCBtYXRjaCBhIEhjaUZpbHRlckR0byBieSBjb21wYXJpbmcgYSBwcm92aWRlZCBmaWVsZC1uYW1lXHJcbiAgICovXHJcbiAgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGROYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzLmZpbmQoeCA9PiB4LmZpZWxkID09PSBmaWVsZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QmFzaWNGaWx0ZXJGb3JGaWVsZChmaWVsZE5hbWU6IHN0cmluZyl7XHJcbiAgICByZXR1cm4gdGhpcy5ib3VuZEZpbHRlcnMuZmluZCh4ID0+IHguZmllbGQgPT09IGZpZWxkTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW5lciBmb3IgYmFjayBidXR0b25cclxuICAgKi9cclxuXHJcbiAgYmFja0J1dHRvbkNsaWNrZWQoKSB7XHJcbiAgICB0aGlzLmJhY2tCdXR0b25TdWJqZWN0Lm5leHQodGhpcy5iYWNrQnV0dG9uU3ViamVjdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMaXN0ZW4gZm9yIGRvY3VtZW50IGNsaWNrcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSB0YXJnZXRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIiwgW1wiJGV2ZW50XCIsIFwiJGV2ZW50LnRhcmdldFwiXSlcclxuICBkb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCB0YXJnZXQ6IEhUTUxFbGVtZW50KSB7XHJcbiAgICBpZiAodGhpcy5hbGxvd1RvZ2dsZSkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0YXJnZXQucGFyZW50RWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKS5pbmNsdWRlcyhcImNsb3NlYWJsZVwiKSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93T3B0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50b2dnbGVTaG93U3ViamVjdCQubmV4dCh0aGlzLnNob3dPcHRpb25zKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGludmFsaWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvcikge1xyXG4gICAgICBsZXQgc2VhcmNoU3RyaW5nID0gdGhpcy5nZXRTZWFyY2hTdHJpbmcodGhpcy5nbG9iYWxTZWFyY2gpO1xyXG4gICAgICBsZXQgZ2xvYmFsU2VhcmNoU3RyTGlzdDogc3RyaW5nW10gPSBzZWFyY2hTdHJpbmcuc3BsaXQoXCIsXCIpO1xyXG5cclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGZvciAobGV0IGdsb2JhbFNlYXJjaFN0ciBvZiBnbG9iYWxTZWFyY2hTdHJMaXN0KSB7XHJcbiAgICAgICAgICBpZighZ2xvYmFsU2VhcmNoU3RyLm1hdGNoKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yKSkge1xyXG4gICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvciA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5yZXF1aXJlZCAmJiBnbG9iYWxTZWFyY2hTdHJMaXN0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5taW5SYW5nZSAmJiAhaXNOYU4oTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1pblJhbmdlKSkpIHtcclxuICAgICAgICAgIGZvciAobGV0IGdsb2JhbFNlYXJjaFN0ciBvZiBnbG9iYWxTZWFyY2hTdHJMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmKCghZ2xvYmFsU2VhcmNoU3RyICYmIE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5taW5SYW5nZSkgPiAwKVxyXG4gICAgICAgICAgICAgIHx8IChnbG9iYWxTZWFyY2hTdHIgJiYgZ2xvYmFsU2VhcmNoU3RyLmxlbmd0aCA8IE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5taW5SYW5nZSkpKSB7XHJcbiAgICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1heFJhbmdlICYmICFpc05hTihOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWF4UmFuZ2UpKSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgZ2xvYmFsU2VhcmNoU3RyIG9mIGdsb2JhbFNlYXJjaFN0ckxpc3QpIHtcclxuICAgICAgICAgICAgaWYoZ2xvYmFsU2VhcmNoU3RyICYmIGdsb2JhbFNlYXJjaFN0ci5sZW5ndGggPiBOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWF4UmFuZ2UpKSB7XHJcbiAgICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLnBhdHRlcm4pIHtcclxuICAgICAgICAgIGZvciAobGV0IGdsb2JhbFNlYXJjaFN0ciBvZiBnbG9iYWxTZWFyY2hTdHJMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICghZ2xvYmFsU2VhcmNoU3RyLm1hdGNoKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLnBhdHRlcm4pKSB7XHJcbiAgICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VhcmNoU3RyaW5nKHNlYXJjaFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHNlYXJjaFN0cmluZyA9IHNlYXJjaFN0cmluZy5yZXBsYWNlKC9cXG4vZywgXCIsXCIpO1xyXG4gICAgaWYgKHNlYXJjaFN0cmluZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBzdHJMaXN0ID0gc2VhcmNoU3RyaW5nLnNwbGl0KFwiLFwiKTtcclxuICAgICAgc2VhcmNoU3RyaW5nID0gXCJcIjtcclxuICAgICAgZm9yIChsZXQgc3RyIG9mIHN0ckxpc3QpIHtcclxuICAgICAgICBzdHIgPSBzdHIudHJpbSgpO1xyXG4gICAgICAgIHNlYXJjaFN0cmluZyA9IHNlYXJjaFN0cmluZyA/IChzdHIgPyBzZWFyY2hTdHJpbmcgKyBcIixcIiArIHN0ciA6IHNlYXJjaFN0cmluZykgOiBzdHI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2VhcmNoU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0FkdmFuY2VkU2VhcmNoVmVydGljYWxTY3JvbGxiYXIoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBkaXZQYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWR2YW5jZWRTZWFyY2gtc2Nyb2xsLXBhbmVsXCIpO1xyXG4gICAgcmV0dXJuIGRpdlBhbmVsLnNjcm9sbEhlaWdodCA+IGRpdlBhbmVsLmNsaWVudEhlaWdodDtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==