axidio-styleguide-library1-v2 0.0.831 → 0.0.832

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.
@@ -393,7 +393,7 @@ export class HorizontalGroupedBarWithScrollZoomComponent extends ComponentUnique
393
393
  .selectAll('g.x1.axis1 g.tick text')
394
394
  .attr('class', 'lib-xaxis-labels-texts-drilldown')
395
395
  .style('font-size', '18px')
396
- .attr('y', this.isHeaderVisible ? short_tick_length_bg + 35 : short_tick_length_bg)
396
+ .attr('y', this.isHeaderVisible ? short_tick_length_bg + 25 : short_tick_length_bg)
397
397
  .text(function (d) {
398
398
  var isValueToBeIgnored = false;
399
399
  if (isMobile && !self.isHeaderVisible) {
@@ -1360,4 +1360,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1360
1360
  }], headerMenuclickEvent: [{
1361
1361
  type: Output
1362
1362
  }] } });
1363
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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SSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxJQUFJLElBQUksQ0FBQzt3QkFDVCxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7NEJBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dDQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7b0NBQ3BELFNBQVMsQ0FBQyxLQUFLLENBQUM7d0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0NBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3FDQUMxQyxDQUFDLENBQUM7b0NBQ0gsa0JBQWtCO2dDQUNwQixDQUFDOztvQ0FDQyxTQUFTLENBQUMsS0FBSyxDQUFDO3dDQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dDQUM3QixDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFDO2dDQUNM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RSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7d0JBQzlCLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ3BDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQ0FDcEQsU0FBUyxDQUFDLEtBQUssQ0FBQzt3Q0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3Q0FDN0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7cUNBQzFDLENBQUMsQ0FBQztnQ0FDTCxDQUFDOztvQ0FDQyxTQUFTLENBQUMsS0FBSyxDQUFDO3dDQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dDQUM3QixDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7O2dDQUNDLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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QUFDO0lBQ3JDLENBQUM7SUFDRCxjQUFjLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELDhCQUE4QixDQUFDLEtBQUs7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0FqN0NVLDJDQUEyQzttR0FBM0MsMkNBQTJDLGdoQkN6QnhELGs3SEF3SEE7OzRGRC9GYSwyQ0FBMkM7a0JBVHZELFNBQVM7K0JBQ0UsNkNBQTZDLGlCQU14QyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdwQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEdyb3VwZWRCYXJXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBpc0hlYWRlclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxlZ2VuZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeEF4aXNHcmlkOiB1bmRlZmluZWQsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogZmFsc2UsXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRzT25CYXI6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNEYXNoZWQ6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgZGlzcGxheVlheGlzTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgdGV4dEFsd2F5c0hvcml6b250YWw6IHVuZGVmaW5lZCxcclxuICAgIGxlZ2VuZEF0VG9wUmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHRydWUsXHJcbiAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb2dnbGVWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b206IHVuZGVmaW5lZCxcclxuICAgIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiAwLFxyXG4gICAgYmFyVmF1bGVDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgZGVmYXVsdEJhckhlaWdodDogNCxcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNERDFPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNERDJPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KSB7XHJcbiAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgIHNlbGYuaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKTtcclxuICAgICAgfS5iaW5kKHNlbGYpLFxyXG4gICAgICAxMFxyXG4gICAgKTtcclxuICB9XHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCkge1xyXG4gICAgdGhpcy5pc1pvb21lZE91dCA9IGlzWm9vbU91dDtcclxuICAgIHRoaXMub25SZXNpemVkKGV2ZW50KTtcclxuICB9XHJcbiAgaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKHsgaXNab29tT3V0LCBldmVudCB9KSB7XHJcbiAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCwgZXZlbnQpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHt9XHJcbiAgaXNMZWdlbmRWaXNpYmxlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgJiZcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzKS5sZW5ndGggPiAxXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtlZXBPcmRlciA9IChhLCBiKSA9PiB7XHJcbiAgICByZXR1cm4gYTtcclxuICB9O1xyXG5cclxuICBnZXQgaXNBbGVydEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24/LmhlYWRlck1lbnVPcHRpb25zPy5zb21lKFxyXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09ICdlZGl0QWxlcnQnXHJcbiAgICApO1xyXG4gIH1cclxuICBpbml0aWFsaXplZ3JvdXBDaGFydCgpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGxldCBkYXRhID0gW107XHJcbiAgICBsZXQgbWV0YURhdGE6IGFueSA9IG51bGw7XHJcbiAgICBsZXQga2V5TGlzdCA9IG51bGw7XHJcbiAgICBsZXQgbGluZURhdGEgPSBudWxsO1xyXG4gICAgbGV0IGNvbG9yTWFwID0ge307XHJcbiAgICB2YXIgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgICB2YXIgZm9ybWF0Rm9ySHVnZU51bWJlcnM7XHJcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA1NzY7XHJcbiAgY29uc3QgaXNUYWJsZXQgPSB3aW5kb3cuaW5uZXJXaWR0aCA+PSA1NzYgJiYgd2luZG93LmlubmVyV2lkdGggPCA5OTI7XHJcbiAgY29uc3QgaXNEZXNrdG9wID0gd2luZG93LmlubmVyV2lkdGggPj0gOTkyO1xyXG5cclxuICAgIHZhciB4OiBhbnk7XHJcblxyXG4gICAgdmFyIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGggPSA0O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGggPSAxNjtcclxuICAgIC8qKlxyXG4gICAgICogbG9uZ2VyIHRpY2sgbGVuZ3RoIG5lZWRlZCBmb3Igd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuICAgIHZhciBsZWZ0QW5kUmlnaHRTcGFjZXMgPSA1MDtcclxuICAgIHZhciByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICB2YXIgdGVtcFNjYWxlO1xyXG5cclxuICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltpXSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBpLFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG5cclxuICAgIC8vIGlmIChsaW5lRGF0YSB8fCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgLy8gICByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgbWV0YURhdGFbJ2NvbG9yQWJvdmVUYXJnZXQnXSA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIH1cclxuICAgIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcblxyXG4gICAgdmFyIGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdmFyIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdChcclxuICAgICAgdGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgdmFyIG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIHZhciB3aWR0aCA9XHJcbiAgICAgIHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gMzAgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICB3aWR0aCA9XHJcbiAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTFcclxuICAgICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDYwXHJcbiAgICAgICAgICAgIDogd2lkdGhcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMVxyXG4gICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDYwXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcblxyXG4gICAgICB3aWR0aCA9XHJcbiAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICA/IHdpZHRoXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgd2lkdGggPCB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMCAmJlxyXG4gICAgICB0aGlzLmlzWm9vbWVkT3V0XHJcbiAgICApIHtcclxuICAgICAgd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgICB3aWR0aCA8IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMjUwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAyNTA7XHJcbiAgICAgIH0gZWxzZSB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTYwO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCkge1xyXG4gICAgLy8gICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTQwO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHZhciBoZWlnaHQgPVxyXG4gICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAqXHJcbiAgICAgICAgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAvIDEwMCkgLVxyXG4gICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgbWFyZ2luLmJvdHRvbTtcclxuICAgIC8qKlxyXG4gICAgICogZW50aXJlIGhlaWdodCB1c2VkIGluIHdlZWtseSBjaGFydHMgYXMgeCBheGlzIG5lZWRlZCB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2hhcnRcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlblxyXG4gICAgKSB7XHJcbiAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9IDcwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICAgICAgOiBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmICF0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAxMzA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAxMDA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZvciBoaWRpbmcgaGVhZGVyXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBmb3IgaGlkaW5nIGxlZ2VuZHNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5sZWdlbmRWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGZvciByZW1vdmluZyBiYWNrZ3JvdW5kIGNvbG9yIHNvIHRoYXQgaXQgY2FuIHRha2UgcGFyZW50cyBjb2xvclxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kID1cclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZm9ybWF0IGRhdGEgdmFsdWVzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gcmVjZWl2ZWRcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgKTtcclxuICAgICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gICAgfVxyXG4gICAgdmFyIG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgIC5zdHlsZSgnaGVpZ2h0JywgaGVpZ2h0KVxyXG5cclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpXHJcbiAgICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgYCR7bWFyZ2luLmxlZnR9cHhgKVxyXG4gICAgICAvLyAuY2FsbChDaGFydEhlbHBlci5yZXNwb25zaXZlZnkpXHJcblxyXG4gICAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcxNXB4Jyk7XHJcbiAgICB2YXIgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCcpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoXHJcbiAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgJ3RyYW5zbGF0ZSgnICsgKG1hcmdpbi5sZWZ0ICsgMTUpICsgJywnICsgbWFyZ2luLnRvcCArICcpJ1xyXG4gICAgICApO1xyXG5cclxuICAgIHZhciBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAuc3R5bGUoJ3JpZ2h0JywgJzEycHgnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuXHJcbiAgICB2YXIgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLy8gLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGggLSByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAgICAgLy8gLmNhbGwoQ2hhcnRIZWxwZXIucmVzcG9uc2l2ZWZ5KVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG5cclxuICAgIHZhciBncm91cHMgPSBkM1xyXG4gICAgICAubWFwKGRhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuIGQubmFtZTtcclxuICAgICAgfSlcclxuICAgICAgLmtleXMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIHggYXhpcyByYW5nZSBtYWRlIHNpbWlsYXIgdG8gbGluZSBjaGFydCBvciB2ZXJ0aWNhbCBzdGFjayBzbyB0aGF0IGFsbCB0aGUgY2hhcnRzIHdpbGwgZ2V0IGFsaWduZWQgd2l0aCBlYWNoIG90aGVyLlxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHggPSBkM1xyXG4gICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAgICAgLmFsaWduKDAuNSlcclxuICAgICAgICAucGFkZGluZyhbMC41XSlcclxuICAgICAgICAuZG9tYWluKFxyXG4gICAgICAgICAgZGF0YS5tYXAoZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB4ID0gZDNcclxuICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgICAucmFuZ2UoW2xlZnRBbmRSaWdodFNwYWNlcywgd2lkdGggLSByaWdodFN2Z1dpZHRoIC0gbGVmdEFuZFJpZ2h0U3BhY2VzXSlcclxuICAgICAgICAucGFkZGluZyhbMC4zXSk7XHJcbiAgICB9XHJcbiAgICAvLyB4LmJhbmR3aWR0aCg5Nik7XHJcbiAgICB2YXIgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgLnJhbmdlKFswLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGhdKTtcclxuICAgIC8vIC5wYWRkaW5nKFswLjJdKTtcclxuICAgIC8qKlxyXG4gICAgICogZHJhdyBzZWNvbmQgeCBheGlzIG9uIHRvcFxyXG4gICAgICovXHJcbiAgICAvLyBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc2hvd1hheGlzVG9wKSB7XHJcbiAgICAvLyAgIHN2Z1xyXG4gICAgLy8gICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgIC8vICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAvLyAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBkMy5zdmcuYXhpcygpLnNjYWxlKHgpLm9yaWVudCgnYm90dG9tJykudGlja3MoMSkuaW5uZXJUaWNrU2l6ZSgtaGVpZ2h0KTtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIG5vcm1hbCB0aWNrcyBmb3IgYWxsIGRhc2hib2FyZCBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG5cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgICAgIC8vIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyAgIGlmIChhbHRlcm5hdGVfdGV4dCkge1xyXG4gICAgICAvLyAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgLy8gICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoICsgMTtcclxuICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoICsgMTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIGJpZ2dlciB0aWNrcyBmb3Igd2Vla2x5IGNoYXJ0cyBhbmQgbW9yZSBzcGFjZSBmcm9tIHggYXhpcyB0byBsYWJlbHNcclxuICAgICAgICovXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBkcmF3IHggYXhpc1xyXG4gICAgICAgKi9cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB0aWNrIGxpbmUgc2l6ZSBpbiBhbHRlcm5hdGUgZmFzaGlvblxyXG4gICAgICAgKi9cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0ID09IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnIC0gNztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnIC0gNDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICAvKipcclxuICAgICAgICogcmVzZXQgdGhlIGZsYWcgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIHNob3duIGluIHNhbWUgYWx0ZXJuYXRlIGZhc2hpb25cclxuICAgICAgICovXHJcbiAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBwcmludCB4LWF4aXMgbGFiZWwgdGV4dHNcclxuICAgICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueExhYmVsc09uU2FtZUxpbmUpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxOHB4JylcclxuICAgICAgICAuYXR0cigneScsIHRoaXMuaXNIZWFkZXJWaXNpYmxlID8gc2hvcnRfdGlja19sZW5ndGhfYmcgKyAzNSA6IHNob3J0X3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICB2YXIgaXNWYWx1ZVRvQmVJZ25vcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoaXNNb2JpbGUgJiYgIXNlbGYuaXNIZWFkZXJWaXNpYmxlKSB7ICAgIFxyXG4gICAgICAgICAgbGV0IGZpcnN0UGFydCA9IGQuc3BsaXQoL1tcXHNcXC1dKy8pWzBdOyAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHJldHVybiBmaXJzdFBhcnQuc3Vic3RyaW5nKDAsIDMpLnRvTG93ZXJDYXNlKCk7ICAgXHJcbiAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09IC0xXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlzVmFsdWVUb0JlSWdub3JlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJZiBsYWJlbCBsb29rcyBsaWtlIGEgZGF0ZSAoY29udGFpbnMgZGlnaXRzIGFuZCAtIG9yIC8pLCBzaG93IGZ1bGwgbGFiZWwgYXMgb25lIGxpbmVcclxuICAgICAgICAgIGlmICgvXFxkezIsNH1bLVxcL10vLnRlc3QoZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoIWlzTW9iaWxlKXtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2snKVxyXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAhL1xcZHsyLDR9Wy1cXC9dLy50ZXN0KGQpOyAvLyBPbmx5IHByb2Nlc3Mgbm9uLWRhdGUgbGFiZWxzXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5hdHRyKCd5JywgbG9uZ190aWNrX2xlbmd0aF9iZylcclxuICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKGQuaW5kZXhPZignICcpLCBkLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgICBpZiAoaXNNb2JpbGUgJiYgIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7ICBcclxuICAgICAgc3ZnICAgXHJcbiAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JykgICBcclxuICAgICAgICAuY2xhc3NlZCgnbW9iaWxlLXhheGlzLW92ZXJyaWRlJywgdHJ1ZSk7fVxyXG4gICAgLyoqeSBzY2FsZSBmb3IgbGVmdCB5IGF4aXMgKi9cclxuICAgIHZhciB5ID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuICAgIHZhciBtYXhWYWx1ZSA9IGQzLm1heChkYXRhLCAoZCkgPT4gZDMubWF4KGtleUxpc3QsIChrZXkpID0+ICtkW2tleV0pKTtcclxuICAgIGlmIChtYXhWYWx1ZSA9PSAwKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgIG1heFZhbHVlID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgLy8gc3ZnXHJcbiAgICAgIC8vICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC8vICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAvLyAgIC5jYWxsKFxyXG4gICAgICAvLyAgICAgZDNcclxuICAgICAgLy8gICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC8vICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgLy8gICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgLy8gICAgICAgLnRpY2tGb3JtYXQoJycpXHJcbiAgICAgIC8vICAgKVxyXG4gICAgICAvLyAgIC8vIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAvLyAgIC5zdHlsZSgnY29sb3InLCAnI0I5QjlCOScpXHJcbiAgICAgIC8vICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgIC8vICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgICAvKipcclxuICAgICAgICogaW5jcmVhc2UgeS1zY2FsZSBzbyB0aGF0IHZhbHVlcyB3b250IGNyb3NzIG9yIGV4Y2VlZCBvdXQgb2YgcmFuZ2VcclxuICAgICAgICogdXNlZCBpbiB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICBtYXhWYWx1ZSA9IG1heFZhbHVlICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBtYXhWYWx1ZSA8IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldFxyXG4gICAgKSB7XHJcbiAgICAgIG1heFZhbHVlID1cclxuICAgICAgICBtYXhWYWx1ZSA8IDEwICYmIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCA8IDEwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDNcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICB9XHJcbiAgICB5LmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcbiAgICBsZXQgbGluZVlzY2FsZTtcclxuXHJcbiAgICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgbWF4TGluZVZhbHVlID0gZDMubWF4KGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiArZC52YWx1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtYXhMaW5lVmFsdWUgPSBtYXhMaW5lVmFsdWUgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcblxyXG4gICAgICBsZXQgbWluTGluZVZhbHVlID0gZDMubWluKGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiArZC52YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChtYXhMaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgPSBtaW5MaW5lVmFsdWUgLSAzO1xyXG4gICAgICBpZiAobWluTGluZVZhbHVlID4gMCkge1xyXG4gICAgICAgIG1pbkxpbmVWYWx1ZSA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgbGluZVlzY2FsZSA9IGQzXHJcbiAgICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFttaW5MaW5lVmFsdWUsIG1heExpbmVWYWx1ZV0pXHJcbiAgICAgICAgLnJhbmdlKFtoZWlnaHQsIG1pbkxpbmVWYWx1ZV0pO1xyXG4gICAgfVxyXG4gICAgbGV0IHlMaW5lQXhpcztcclxuICAgIGlmIChsaW5lWXNjYWxlICE9IG51bGwpIHtcclxuICAgICAgeUxpbmVBeGlzID0gZDNcclxuICAgICAgICAuYXhpc1JpZ2h0KGxpbmVZc2NhbGUpXHJcbiAgICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBzaG93IHgtYXhpcyBncmlkIGJldHdlZW4gbGFiZWxzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgeC5iYW5kd2lkdGgoKSAvIDIgKyAnLCcgKyBoZWlnaHQgKyAnKSdcclxuICAgICAgICApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJykgLy8gVXNlIENTUyB2YXJpYWJsZVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5jYWxsKFxyXG4gICAgICAgICAgZDNcclxuICAgICAgICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAgICAgLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKTsgLy8gQWRkIENTUyB2YXJpYWJsZSBmb3IgZG9tYWluXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuY2FsbChkMy5heGlzTGVmdCh5KS50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcykpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpIC8vIEFkZCBDU1MgdmFyaWFibGUgZm9yIGRvbWFpblxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTsgLy8gRW5zdXJlIHZpc2liaWxpdHlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgeFN1Ymdyb3VwID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKHN1Ymdyb3Vwcyk7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHVzZWQgdG8gbWFrZSBncm91cGVkIGJhcnMgd2l0aCBsZXNzZXIgd2lkdGggYXMgd2UgYXJlIG5vdCB1c2luZyBwYWRkaW5nIGZvciB3aWR0aFxyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuXHJcbiAgICAvLyB9XHJcbiAgICB2YXIgY29sb3IgPSBkM1xyXG4gICAgICAuc2NhbGVPcmRpbmFsKClcclxuICAgICAgLmRvbWFpbihzdWJncm91cHMpXHJcbiAgICAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9ycykpO1xyXG4gICAgLy8gdmFyIGNvbG9yQWJvdmVUYXJnZXQgPSBkM1xyXG4gICAgLy8gICAuc2NhbGVPcmRpbmFsKClcclxuICAgIC8vICAgLmRvbWFpbihzdWJncm91cHMpXHJcbiAgICAvLyAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpKTtcclxuICAgIHZhciBzdGF0ZSA9IHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLnNlbGVjdEFsbCgnLnN0YXRlJylcclxuICAgICAgLmRhdGEoZGF0YSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyB4KGQubmFtZSkgKyAnLDApJztcclxuICAgICAgfSk7XHJcbiAgICBzdGF0ZVxyXG4gICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgc3ViZ3JvdXBzLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAvLyBpZiAoa2V5ICE9PSBcImdyb3VwXCIpIHtcclxuICAgICAgICAgIGxldCBvYmo6IGFueSA9IHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9O1xyXG4gICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xpc3Q7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnYmFycycpXHJcbiAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkLmtleSAhPSAnVGFyZ2V0Jykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8XHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyBzZWxmLmhhbmRsZUNsaWNrKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gdGVtcFNjYWxlKGQua2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZC52YWx1ZSA9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHkoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZC52YWx1ZSkge1xyXG4gICAgICAgICAgLy8gRm9yIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEwLCBwb3NpdGlvbiBiYXIgYXQgYmFzZWxpbmUgd2l0aCBkZWZhdWx0IGhlaWdodFxyXG4gICAgICAgICAgaWYgKGQudmFsdWUgPD0gMTAgJiYgZC52YWx1ZSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRIZWlnaHQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kZWZhdWx0QmFySGVpZ2h0IHx8IDg7XHJcbiAgICAgICAgICAgIHJldHVybiB5KDApIC0gZGVmYXVsdEhlaWdodDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEwLCB1c2Ugbm9ybWFsIGNhbGN1bGF0ZWQgcG9zaXRpb25cclxuICAgICAgICAgIHJldHVybiB5KGQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHkoMCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgIC8vIHZhciB0ZW1wU2NhbGU7XHJcblxyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHZhciB0ZW1wO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5pc1pvb21lZE91dFxyXG4gICAgICAgICAgICA/IHRlbXBTY2FsZS5iYW5kd2lkdGgoKSBcclxuICAgICAgICAgICAgOiB0ZW1wU2NhbGUuYmFuZHdpZHRoKClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuaXNab29tZWRPdXRcclxuICAgICAgICAgID8geFN1Ymdyb3VwLmJhbmR3aWR0aCgpIFxyXG4gICAgICAgICAgOiB4U3ViZ3JvdXAuYmFuZHdpZHRoKCkqMC41O1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZC52YWx1ZSA9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZC52YWx1ZSkge1xyXG4gICAgICAgICAgLy8gRm9yIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEwIChpbmNsdXNpdmUpLCB1c2UgZGVmYXVsdCBoZWlnaHRcclxuICAgICAgICAgIGlmIChkLnZhbHVlIDw9IDEwICYmIGQudmFsdWUgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGVmYXVsdEJhckhlaWdodCB8fCA4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gRm9yIHZhbHVlcyBncmVhdGVyIHRoYW4gMTAsIHVzZSBjYWxjdWxhdGVkIGhlaWdodFxyXG4gICAgICAgICAgcmV0dXJuIGhlaWdodCAtIHkoZC52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICAgICAgfSlcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCAoKSA9PlxyXG4gICAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J1xyXG4gICAgICApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBkLnZhbHVlICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgZC52YWx1ZSA+PSBwYXJzZUludChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0XHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRbZC5rZXldO1xyXG4gICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRpc3BsYXkgYW5nbGVkIHRleHRzIG9uIHRoZSBiYXJzXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICE9IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgICBzdWJncm91cHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICAgIG5ld0xpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkLmtleSAmJiBkLnZhbHVlXHJcbiAgICAgICAgICAgID8gZC5rZXkubGVuZ3RoID4gMjBcclxuICAgICAgICAgICAgICA/IGQua2V5LnN1YnN0cmluZygwLCAxNykgKyAnLi4uJ1xyXG4gICAgICAgICAgICAgIDogZC5rZXlcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJyMwMDAnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZi5pc1pvb21lZE91dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJzlweCc7IC8vIPCfkYggWm9vbWVkIG91dCBtb2RlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTkwMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMThweCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcxMHB4JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzE0cHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJzE0cHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXA7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogaWYgc2V0LCB0aGVuIGFsbCB0ZXh0cyBsbCBiZSBob3Jpem9udGFsXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0QWx3YXlzSG9yaXpvbnRhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHhTdWJncm91cChkLmtleSkgKyAnLCcgKyAoeShkLnZhbHVlKSAtIDMpICsgJyknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIHJvdGF0ZSB0ZXh0cyBoYXZpbmcgbW9yZSB0aGFuIG9uZSBkaWdpdHNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgLy8gaWYgKGQudmFsdWUgPiA5KVxyXG4gICAgICAgICAgaWYgKCFpc05hTih0ZW1wU2NhbGUoZC5rZXkpKSlcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICh0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpICogMC41NSkgK1xyXG4gICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgKHkoMCkgLSAxMCkgK1xyXG4gICAgICAgICAgICAgICcpIHJvdGF0ZSgyNzApJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwwKSc7XHJcbiAgICAgICAgICAvLyBlbHNlXHJcbiAgICAgICAgICAvLyAgIHJldHVybiAoXHJcbiAgICAgICAgICAvLyAgICAgJ3RyYW5zbGF0ZSgnICtcclxuICAgICAgICAgIC8vICAgICAodGVtcFNjYWxlKGQua2V5KSArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDIpICtcclxuICAgICAgICAgIC8vICAgICAnLCcgK1xyXG4gICAgICAgICAgLy8gICAgIHkoMCkgK1xyXG4gICAgICAgICAgLy8gICAgICcpJ1xyXG4gICAgICAgICAgLy8gICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHxcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiZcclxuICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dClcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgaGFuZGxlTW91c2VPdXQpXHJcbiAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdmVyKGQsIGkpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAvLyAuLi5leGlzdGluZyBjb2RlIGZvciB0ZW1wU2NhbGUgY2FsY3VsYXRpb24uLi5cclxuICAgICAgICAgIHZhciBlbGVtZW50c0NvdW50ZXI7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgZWxlbWVudHNDb3VudGVyID0ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICAgICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDkwXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIHgoZC5uYW1lKSArXHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICAgICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybiB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpIC0gKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIHkoZC52YWx1ZSkgLSAzIC0gNDAgLSAxMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBkLmNsYXNzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICAgIH0gZWxzZSByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MClcclxuICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgICAgLnN0eWxlKCd6LWluZGV4JywgOTkpXHJcbiAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgLy8gU2hvdyB0aGUgeC1heGlzIGxhYmVsIChiYXIgbmFtZSkgZm9yIHRoaXMgYmFyLCBub3QgdGhlIGRhdGUgb3IgYW55IG90aGVyIHZhbHVlXHJcbiAgICAgICAgICBsZXQgYmFyTGFiZWwgPSBkLm5hbWU7IC8vIFRoaXMgaXMgdGhlIHgtYXhpcyBsYWJlbCBmb3IgdGhlIGJhclxyXG4gICAgICAgICAgbGV0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgPyBtZXRhRGF0YS5kYXRhVHlwZSA6ICcnO1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gZC52YWx1ZTtcclxuICAgICAgICAgIGxldCBrZXkgPSBkLmtleTtcclxuICAgICAgICAgIC8vIFRvb2x0aXA6IHNob3cgeC1heGlzIGxhYmVsIGFuZCB2YWx1ZSwgYnV0IGRvIG5vdCBzaG93IGRhdGVcclxuICAgICAgICAgIGxldCBkZXNpcmVkVGV4dCA9XHJcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JyArIGJhckxhYmVsICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgICAgZGVzaXJlZFRleHQgKz1cclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLXZhbHVlXCI+PHNwYW4+JyArXHJcbiAgICAgICAgICAgIHZhbHVlICtcclxuICAgICAgICAgICAgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgZGF0YVR5cGUgK1xyXG4gICAgICAgICAgICAnPC9zcGFuPic7XHJcbiAgICAgICAgICByZXR1cm4gZGVzaXJlZFRleHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU91dChkLCBpKSB7XHJcbiAgICAgIGlmICghc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGRpc3BsYXkgZGF0YSB2YWx1ZXMgb24gbW91c2Ugb3ZlclxyXG4gICAgICogdXNlZCBieSBkYXNoYm9hcmQgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dHNPbkJhciA9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3AgPT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHN0YXRlLnNlbGVjdEFsbCgnLmJhcnN0ZXh0JykucmVtb3ZlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIChkMSkge1xyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAgIHN1Ymdyb3Vwcy5tYXAoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBrZXkgIT09ICduYW1lJyAmJlxyXG4gICAgICAgICAgICAgICAgICBkMS5rZXkgPT0ga2V5ICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLnZhbHVlID09IGRba2V5XSAmJlxyXG4gICAgICAgICAgICAgICAgICBkMS5uYW1lID09IGQubmFtZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9O1xyXG4gICAgICAgICAgICAgICAgICBuZXdMaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnN0ZXh0JylcclxuICAgICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4U3ViZ3JvdXAoZC5rZXkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHkoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICdzdHlsZScsXHJcbiAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZTogJyArICcuODVlbScgKyAnOycgKyAnIGZvbnQtd2VpZ2h0OicgKyAnYm9sZCcgKyAnOydcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgICAnd2lkdGgnLFxyXG4gICAgICAgICAgICAgIHNlbGYuaXNab29tZWRPdXRcclxuICAgICAgICAgICAgICAgID8geFN1Ymdyb3VwLmJhbmR3aWR0aCgpICogMC41XHJcbiAgICAgICAgICAgICAgICA6IHhTdWJncm91cC5iYW5kd2lkdGgoKSAqIDAuOFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQudmFsdWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgIzAwMCknKSAvLyBVc2UgQ1NTIHZhcmlhYmxlIGluc3RlYWQgb2YgaGFyZGNvZGVkICMwMDBcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGVGcm9tT3JpZ2luKS50aWNrU2l6ZSgwKSlcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54Mi5heGlzMiBnLnRpY2sgdGV4dCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHkpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja0Zvcm1hdChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXJcclxuICAgICAgICAgICAgICA/IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcihkKVxyXG4gICAgICAgICAgICAgIDogZDtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZCA+PSAxMDAwID8gZm9ybWF0dGVkIC8gMTAwMCArICdrJyA6IGZvcm1hdHRlZDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAvLyBTdHlsZSB0aGUgZG9tYWluIGxpbmUgZm9yIHRoZW1lIHN1cHBvcnRcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgICB9KVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB4IGF4aXMgbGFiZWxzXHJcbiAgICAgKiBjb25maWcgaXMgdGhlcmUgZm9yIGZ1dHVyZSB1c2VcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1saW5lLXgtYXhpcy10ZXh0ID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB5IGF4aXMgbGFiZWxzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JykuYXR0cihcclxuICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICdsaWItZGlzcGxheS1oaWRkZW4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhpZGUgeSBheGlzIGxhYmVsc1xyXG4gICAgICogY29uZmlnIGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgLyoqICAgXHJcbiAgICAgKiBkYXNoZWQgeSBheGlzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICM5OTk5OTkpJyk7IC8vIFVzZSBDU1MgdmFyaWFibGVcclxuICAgIH1cclxuICAgIGlmIChsaW5lRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChsaW5lRGF0YSAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcykge1xyXG4gICAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0MScpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsMCknKVxyXG4gICAgICAgICAgLmNhbGwoeUxpbmVBeGlzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIHRvIGRpc3BsYXkgeSBsYWJlbFxyXG4gICAgICovXHJcblxyXG4gICAgLy8gaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIC8vICAgc3ZnXHJcbiAgICAvLyAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgIC8vICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgLy8gc3ZnXHJcbiAgICAgIC8vICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLy8gICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtMzApJylcclxuICAgICAgLy8gICAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJylcclxuICAgICAgLy8gICAuYXR0cigneCcsICctNScpXHJcbiAgICAgIC8vICAgLmF0dHIoJ2R5JywgbnVsbClcclxuICAgICAgLy8gICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuZWFjaCgoZCwgaSwgbm9kZXMpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Qobm9kZXNbaV0pO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWwgPSB0ZXh0LnRleHQoKTtcclxuICAgICAgICAgIGNvbnN0IHdvcmRzID0gbGFiZWwuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICB0ZXh0LnRleHQobnVsbCk7IC8vIENsZWFyIGN1cnJlbnQgdGV4dFxyXG5cclxuICAgICAgICAgIC8vIEFkZCBlYWNoIHdvcmQgdG8gYSBuZXcgdHNwYW5cclxuICAgICAgICAgIHdvcmRzLmZvckVhY2goKHdvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRleHQuYXBwZW5kKCd0c3BhbicpLnRleHQod29yZCk7XHJcbiAgICAgICAgICAgIC8vIC5hdHRyKCd4JywgJzE1JylcclxuICAgICAgICAgICAgLy8gLmF0dHIoJ2R5JywgaW5kZXggPT09IDAgPyAnMGVtJyA6ICcwLjllbScpIC8vIFJlZHVjZWQgdmVydGljYWwgc3BhY2luZ1xyXG4gICAgICAgICAgICAvLyAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIG51bGwpOyAvLyBSZW1vdmUgcm90YXRlIGlmIHVzaW5nIGxpbmUgYnJlYWtzXHJcblxyXG4gICAgICAvLyBPcHRpb25hbDogQWRqdXN0IGJvdHRvbSBtYXJnaW4gb3IgY2hhcnQgbGF5b3V0XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3QoJy54LWF4aXMnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0IC0gbWFyZ2luLmJvdHRvbSArIDEwfSlgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgdG8gd3JpdGUgeSBsYWJlbHMgYmFzZWQgb24gY29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbiAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMScpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgICAuYXR0cigneScsIDAgLSBtYXJnaW4ubGVmdCAvIDIgLSAzMClcclxuICAgICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICcxZW0nKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlsYWJlbC13ZWVrbHlDaGFydHMnKVxyXG4gICAgICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgY29uc3QgeVplcm8gPSB5KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgICAgLmF0dHIoJ3gyJywgd2lkdGgpXHJcbiAgICAgICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAgICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcbiAgICAgIC8vIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLy8gICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgLy8gICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAvLyAgIC5hdHRyKCd4MicsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgIC8vICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAgIC8vICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgIC8vICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcbiAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArICh5WmVybyAtIDMwKSArICcpJylcclxuICAgICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd0YXJnZXQtZGlzcGxheScpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKVxyXG4gICAgICAgIC5odG1sKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGxldCBkYXRhVHlwZVRlbXAgPSAnJztcclxuICAgICAgICAgIGxldCB0YXJnZXRMaW5lTmFtZSA9ICd0YXJnZXQnO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGFyZ2V0TGluZU5hbWUgPSBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgYDxkaXY+JHt0YXJnZXRMaW5lTmFtZX08L2Rpdj5gICtcclxuICAgICAgICAgICAgJzxkaXY+JyArXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArXHJcbiAgICAgICAgICAgICcnICtcclxuICAgICAgICAgICAgZGF0YVR5cGVUZW1wICtcclxuICAgICAgICAgICAgJzwvZGl2PidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCBieSBkcmlsbGRvd24gY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICAvLyBzdmdcclxuICAgICAgLy8gICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAvLyAgIC5hdHRyKCdjbGFzcycsICdsaWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0cycpXHJcbiAgICAgIC8vICAgLnRleHQobWV0YURhdGEueUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICBmdW5jdGlvbiBpc0Fjcm9ueW0obGFiZWwpIHtcclxuICAgIHJldHVybiAobGFiZWwubGVuZ3RoIDw9IDQgJiYgL15bQS1aXSskLy50ZXN0KGxhYmVsKSkgfHwgKGxhYmVsID09PSBsYWJlbC50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChsYWJlbCkpO1xyXG4gIH1cclxuICBjb25zdCB4TGFiZWxUZXh0ID0gbWV0YURhdGEueExhYmVsO1xyXG4gIGNvbnN0IGlzQWNyID0gaXNBY3JvbnltKHhMYWJlbFRleHQucmVwbGFjZSgvW15BLVphLXpdL2csICcnKSk7XHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCd0ZXh0JylcclxuLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24oKSB7XHJcbiAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKSByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLXdlZWtseUNoYXJ0cyc7XHJcbiAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxufSlcclxuICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAuYXR0cihcclxuICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICd0cmFuc2xhdGUoJyArIHdpZHRoIC8gMiArICcgLCcgKyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIDQwKSArICcpJ1xyXG4gICAgKVxyXG4gICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgLnRleHQoaXNBY3IgPyB4TGFiZWxUZXh0LnRvVXBwZXJDYXNlKCkgOiB4TGFiZWxUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3IgPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpXHJcbn1cclxuICAgIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKSByb3RhdGUoOTApJylcclxuICAgICAgICAuYXR0cigneScsIDAgLSAxMDApXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAwICsgMTAwKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICdzbWFsbGVyJylcclxuICAgICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgIH1cclxuICAgIGlmIChsaW5lRGF0YSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgICAuZGF0dW0obGluZURhdGEpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxLjUpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAnZCcsXHJcbiAgICAgICAgICBkM1xyXG4gICAgICAgICAgICAubGluZSgpXHJcbiAgICAgICAgICAgIC54KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAueShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB2YXIgZG90ID0gc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnbXlDaXJjbGVzJylcclxuICAgICAgICAuZGF0YShsaW5lRGF0YSlcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8XHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgZG90XHJcbiAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+XHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoJ3InLCAzKTtcclxuXHJcbiAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICAgIGRvdFxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgIC5hdHRyKCdjb2xvcicsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogJyArICcuODVlbScpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdkeScsICctMWVtJylcclxuICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEZvcm1hdHRlcihkLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGljayhkOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSlcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgfVxyXG4gIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZCkge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcbiAgaGFuZGxlREQxQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGhhbmRsZUREMkNsaWNrKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuICBoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oZXZlbnQpIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICNncm91cGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbiAgPC9kaXY+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjFcclxuICAgIFt0aXRsZV09XCJjaGFydERhdGEubWV0YURhdGEudGl0bGVcIlxyXG4gICAgW2hhc0RyaWxsRG93bl09XCJjaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duXCJcclxuICAgIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCJcclxuICAgIFttZW51T3B0aW9uc109XCJjaGFydENvbmZpZ3VyYXRpb24uaGVhZGVyTWVudU9wdGlvbnNcIlxyXG4gICAgW2lzcmlhXT1cImN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVwiXHJcbiAgICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIlxyXG4gICAgKG1lbnVPcHRpb25DbGlja0V2ZW50KT1cImhhbmRsZUhlYWRlck1lbnVDbGljaygkZXZlbnQpXCJcclxuICAgIFtpc0FsZXJ0RW5hYmxlZF09XCJpc0FsZXJ0RW5hYmxlZFwiXHJcbiAgICAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBjaGFydERhdGEgJiZcclxuICAgICAgY2hhcnREYXRhLm1ldGFEYXRhICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRKdXN0aWZpZWQgJiZcclxuICAgICAgbGVnZW5kVmlzaWJsZSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kQXRUb3BSaWdodFxyXG4gICAgXCJcclxuICAgIGNsYXNzPVwibGVnZW5kLWhvbGRlci1yaWdodFwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5mb290ZXJIZWlnaHRcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cImRpc3BsYXktZmxleFwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxlZ2VuZHMtcG9zaXRpb25pbmctaW5saW5lXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWUgOiBrZWVwT3JkZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pY29uLWRyaWxsZG93blwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICA+PC9zcGFuXHJcbiAgICAgICAgPjxzcGFuPnt7IGl0ZW0ua2V5IH19PC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJncm91cGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICNncm91cGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gPGRpdlxyXG4gICAgKm5nSWY9XCJcclxuICAgICAgY2hhcnREYXRhICYmXHJcbiAgICAgIGNoYXJ0RGF0YS5tZXRhRGF0YSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kSnVzdGlmaWVkICYmXHJcbiAgICAgIGxlZ2VuZFZpc2libGUgJiZcclxuICAgICAgIWNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRBdFRvcFJpZ2h0XHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJsaWItZG9udXQtY2hhcnQtZm9vdGVyXCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLmZvb3RlckhlaWdodFwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC13cmFwcGVyXCI+XHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pdGVtXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pY29uXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+PHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvZGl2PiAtLT5cclxuXHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImNoYXJ0Q29uZmlndXJhdGlvbj8uaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiYmFyLXZhbHVlcyBsaWItZGlzcGxheS1mbGV4IGxpYi1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGxpYi1hbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAqbmdGb3I9XCJcclxuICAgICAgICBsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWUgOiBrZWVwT3JkZXI7XHJcbiAgICAgICAgbGV0IGkgPSBpbmRleFxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYmFyLW5hbWUgZm9udC1zaXplLTFcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gJiZcclxuICAgICAgICAgIGkgPD0gY2hhcnRDb25maWd1cmF0aW9uLmhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGl0ZW0ua2V5IH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJiYXItdmFsdWUgbGliLWRpc3BsYXktZmxleCBsaWItYWxpZ24taXRlbXMtY2VudGVyIGZvbnQtc2l6ZS0xXCJcclxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiXHJcbiAgICAgICAgICBjaGFydENvbmZpZ3VyYXRpb24uYmFyVmF1bGVDb2xvciA/IGJhclZhdWxlQ29sb3IgOiBpdGVtLnZhbHVlXHJcbiAgICAgICAgXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldICYmXHJcbiAgICAgICAgICBpIDw9IGNoYXJ0Q29uZmlndXJhdGlvbi5ob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj4gLS0+XHJcbjwvZGl2PlxyXG4iXX0=
1363
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F4aWRpby1zdHlsZWd1aWRlLWxpYnJhcnkvc3JjL2xpYi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20vaG9yaXpvbnRhbC1ncm91cGVkLWJhci13aXRoLXNjcm9sbC16b29tLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxXQUFXLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFFekIsT0FBTyxrQkFBa0IsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7OztBQVdsRCxNQUFNLE9BQU8sMkNBQ1gsU0FBUSxpQkFBaUI7SUF5RXpCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUEvREEsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6RCxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qiw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFD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SSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3dCQUMxRCxJQUFJLElBQUksQ0FBQzt3QkFDVCxTQUFTLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7NEJBQ3hCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO2dDQUNwQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7b0NBQ3BELFNBQVMsQ0FBQyxLQUFLLENBQUM7d0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7d0NBQzdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3FDQUMxQyxDQUFDLENBQUM7b0NBQ0gsa0JBQWtCO2dDQUNwQixDQUFDOztvQ0FDQyxTQUFTLENBQUMsS0FBSyxDQUFDO3dDQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dDQUM3QixDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFDO2dDQUNM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RSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDMUQsZUFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7d0JBQzlCLFNBQVMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNsRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0NBQ3BDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztvQ0FDcEQsU0FBUyxDQUFDLEtBQUssQ0FBQzt3Q0FDZCxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQzt3Q0FDN0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUM7cUNBQzFDLENBQUMsQ0FBQztnQ0FDTCxDQUFDOztvQ0FDQyxTQUFTLENBQUMsS0FBSyxDQUFDO3dDQUNkLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dDQUM3QixDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztxQ0FDMUMsQ0FBQyxDQUFDOzRCQUNQLENBQUM7O2dDQUNDLFNBQVMsQ0FBQyxLQUFLLENBQUM7b0NBQ2QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFD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QUFDO0lBQ3JDLENBQUM7SUFDRCxjQUFjLENBQUMsS0FBSztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBQ0QsY0FBYyxDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUNELDhCQUE4QixDQUFDLEtBQUs7UUFDbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQzsrR0FqN0NVLDJDQUEyQzttR0FBM0MsMkNBQTJDLGdoQkN6QnhELGs3SEF3SEE7OzRGRC9GYSwyQ0FBMkM7a0JBVHZELFNBQVM7K0JBQ0UsNkNBQTZDLGlCQU14QyxpQkFBaUIsQ0FBQyxJQUFJO3dEQU9yQyxZQUFZO3NCQURYLFNBQVM7dUJBQUMscUJBQXFCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUlsRCxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUdwQyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHdCQUF3QjtzQkFBaEMsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRVbmlxdWVJZCB9IGZyb20gJy4uL3VuaXF1ZS1pZCc7XHJcbmltcG9ydCBDaGFydEhlbHBlciBmcm9tICcuLi9jaGFydC1oZWxwZXInO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XHJcbmltcG9ydCB7IFJlc2l6ZWRFdmVudCB9IGZyb20gJ2FuZ3VsYXItcmVzaXplLWV2ZW50JztcclxuaW1wb3J0IEhlYWRlckNvbmZpZ0hlbHBlciBmcm9tICcuLi9oZWFkZXItY29uZmlnJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWhvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hvcml6b250YWwtZ3JvdXBlZC1iYXItd2l0aC1zY3JvbGwtem9vbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbXHJcbiAgICAnLi9ob3Jpem9udGFsLWdyb3VwZWQtYmFyLXdpdGgtc2Nyb2xsLXpvb20uY29tcG9uZW50Lmxlc3MnLFxyXG4gICAgJy4uL2NvbW1vbi1zdHlsZXMubGVzcycsXHJcbiAgXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9yaXpvbnRhbEdyb3VwZWRCYXJXaXRoU2Nyb2xsWm9vbUNvbXBvbmVudFxyXG4gIGV4dGVuZHMgQ29tcG9uZW50VW5pcXVlSWRcclxuICBpbXBsZW1lbnRzIE9uSW5pdFxyXG57XHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjaGFydGNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZ3JvdXBjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGdyb3VwY29udGFpbmVyRWx0ITogRWxlbWVudFJlZjtcclxuXHJcbiAgQElucHV0KCkgY2hhcnREYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tQ2hhcnRDb25maWd1cmF0aW9uOiBhbnk7XHJcbiAgQE91dHB1dCgpIGNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgaGVhZGVyTWVudWNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBpc0hlYWRlclZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGxlZ2VuZFZpc2libGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiBib29sZWFuID0gZmFsc2U7XHJcbiAgY2hhcnRDb25maWd1cmF0aW9uOiBhbnkgPSB7fTtcclxuICBvYmplY3RLZXlzID0gT2JqZWN0LmtleXM7XHJcblxyXG4gIGRlZmF1bHRDb25maWd1cmF0aW9uOiBhbnkgPSB7XHJcbiAgICBtYXJnaW46IHsgdG9wOiAyMCwgcmlnaHQ6IDIwLCBib3R0b206IDIwLCBsZWZ0OiA0MCB9LFxyXG4gICAgbGFiZWxGb3JtYXR0ZXI6IENoYXJ0SGVscGVyLmRlZmF1bHRGb3JtYXR0ZXIsXHJcbiAgICBzdmdIZWlnaHQ6IDcwLFxyXG4gICAgbnVtYmVyT2ZZVGlja3M6IDUsXHJcbiAgICBsZWdlbmRKdXN0aWZpZWQ6IHRydWUsXHJcbiAgICB5TGluZUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgeUF4aXNMYWJlbEZvbWF0dGVyOiBDaGFydEhlbHBlci5kZWZhdWx0Rm9ybWF0dGVyLFxyXG4gICAgbGluZUdyYXBoQ29sb3I6ICcjRjZEMjgzJyxcclxuICAgIHNob3dMaW5lQ2hhcnRBeGlzOiB0cnVlLFxyXG4gICAgc2hvd1ZhbHVlczogdHJ1ZSxcclxuICAgIGhlYWRlck1lbnVPcHRpb25zOiBIZWFkZXJDb25maWdIZWxwZXIuaGVhZGVyQ29uZmlnLmhlYWRlck1lbnVPcHRpb25zLFxyXG4gICAgeEF4aXNHcmlkOiB1bmRlZmluZWQsXHJcbiAgICB5QXhpc0dyaWQ6IGZhbHNlLFxyXG4gICAgbGVnZW5kVmlzaWJsZTogZmFsc2UsXHJcbiAgICBpc0hlYWRlclZpc2libGU6IHVuZGVmaW5lZCxcclxuICAgIGlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kOiB1bmRlZmluZWQsXHJcbiAgICBpc011bHRpQ2hhcnRHcmlkTGluZTogdW5kZWZpbmVkLFxyXG4gICAgaXNGdWxsU2NyZWVuOiB1bmRlZmluZWQsXHJcbiAgICBjdXN0b21Zc2NhbGU6IHVuZGVmaW5lZCxcclxuICAgIHRleHRzT25CYXI6IHVuZGVmaW5lZCxcclxuICAgIGlzWGF4aXNMYWJlbEhpZGRlbjogdW5kZWZpbmVkLFxyXG4gICAgaXNZYXhpc0xhYmVsSGlkZGVuOiBmYWxzZSxcclxuICAgIGlzWWF4aXNIaWRkZW46IHVuZGVmaW5lZCxcclxuICAgIGlzWWF4aXNEYXNoZWQ6IHVuZGVmaW5lZCxcclxuICAgIHRleHRGb3JtYXR0ZXI6IHVuZGVmaW5lZCxcclxuICAgIGlzTm9BbHRlcm5hdGVYYXhpc1RleHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzWGdyaWRCZXR3ZWVuTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjRkZGRkZGJyxcclxuICAgIGhpZGVMZWdlbmRPblRvcDogdHJ1ZSxcclxuICAgIGlzWGF4aXNDb2xvcjogJyM5OTk5OTknLFxyXG4gICAgbGFiZWxPdmVybGFwTWlub3JGaXg6IHRydWUsXHJcbiAgICBub0hvdmVyRWZmZWN0OiB0cnVlLFxyXG4gICAgbm9Ib3ZlckRpc3BsYXlEYXRhOiB0cnVlLFxyXG4gICAgc2hvd1hheGlzVG9wOiB0cnVlLFxyXG4gICAgZGlzcGxheVlheGlzTGFiZWxzOiB1bmRlZmluZWQsXHJcbiAgICB4TGFiZWxzT25TYW1lTGluZTogdW5kZWZpbmVkLFxyXG4gICAgdGV4dEFsd2F5c0hvcml6b250YWw6IHVuZGVmaW5lZCxcclxuICAgIGxlZ2VuZEF0VG9wUmlnaHQ6IHVuZGVmaW5lZCxcclxuICAgIGlzRHJpbGxkb3duQ2hhcnQ6IHRydWUsXHJcbiAgICBkaXNwbGF5VGl0bGVPblRvcDogdW5kZWZpbmVkLFxyXG4gICAgaXNUb2dnbGVWaXNpYmxlOiB1bmRlZmluZWQsXHJcbiAgICBpc1RpdGxlSGlkZGVuOiB1bmRlZmluZWQsXHJcbiAgICBpc0Rpc3BsYXlCYXJEZXRhaWxzQXRCb3R0b206IHVuZGVmaW5lZCxcclxuICAgIGhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5OiAwLFxyXG4gICAgYmFyVmF1bGVDb2xvcjogdW5kZWZpbmVkLFxyXG4gICAgZGVmYXVsdEJhckhlaWdodDogNCxcclxuICB9O1xyXG5cclxuICB1bmlxdWVJZDogYW55ID0gdGhpcy5nZXRVbmlxdWVJZCgpO1xyXG4gIGlzWm9vbWVkT3V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNERDFPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNERDJPcGVuOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIG9uUmVzaXplZChldmVudDogUmVzaXplZEV2ZW50KSB7XHJcbiAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICBzZXRUaW1lb3V0KFxyXG4gICAgICBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZDMuc2VsZWN0KCcjJyArIHNlbGYudW5pcXVlSWQpLnJlbW92ZSgpO1xyXG4gICAgICAgIHNlbGYuaW5pdGlhbGl6ZWdyb3VwQ2hhcnQoKTtcclxuICAgICAgfS5iaW5kKHNlbGYpLFxyXG4gICAgICAxMFxyXG4gICAgKTtcclxuICB9XHJcbiAgaXNab29tT3V0U2VsZWN0ZWQoaXNab29tT3V0LCBldmVudCkge1xyXG4gICAgdGhpcy5pc1pvb21lZE91dCA9IGlzWm9vbU91dDtcclxuICAgIHRoaXMub25SZXNpemVkKGV2ZW50KTtcclxuICB9XHJcbiAgaGFuZGxlWm9vbWluWm9vbW91dENsaWNrKHsgaXNab29tT3V0LCBldmVudCB9KSB7XHJcbiAgICB0aGlzLmlzWm9vbU91dFNlbGVjdGVkKGlzWm9vbU91dCwgZXZlbnQpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHt9XHJcbiAgaXNMZWdlbmRWaXNpYmxlKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YSAmJlxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnMgJiZcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5jaGFydERhdGEubWV0YURhdGEuY29sb3JzKS5sZW5ndGggPiAxXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGtlZXBPcmRlciA9IChhLCBiKSA9PiB7XHJcbiAgICByZXR1cm4gYTtcclxuICB9O1xyXG5cclxuICBnZXQgaXNBbGVydEVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24/LmhlYWRlck1lbnVPcHRpb25zPy5zb21lKFxyXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09ICdlZGl0QWxlcnQnXHJcbiAgICApO1xyXG4gIH1cclxuICBpbml0aWFsaXplZ3JvdXBDaGFydCgpIHtcclxuICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgIGxldCBkYXRhID0gW107XHJcbiAgICBsZXQgbWV0YURhdGE6IGFueSA9IG51bGw7XHJcbiAgICBsZXQga2V5TGlzdCA9IG51bGw7XHJcbiAgICBsZXQgbGluZURhdGEgPSBudWxsO1xyXG4gICAgbGV0IGNvbG9yTWFwID0ge307XHJcbiAgICB2YXIgZm9ybWF0RnJvbUJhY2tlbmQ7XHJcbiAgICB2YXIgZm9ybWF0Rm9ySHVnZU51bWJlcnM7XHJcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gd2luZG93LmlubmVyV2lkdGggPCA1NzY7XHJcbiAgY29uc3QgaXNUYWJsZXQgPSB3aW5kb3cuaW5uZXJXaWR0aCA+PSA1NzYgJiYgd2luZG93LmlubmVyV2lkdGggPCA5OTI7XHJcbiAgY29uc3QgaXNEZXNrdG9wID0gd2luZG93LmlubmVyV2lkdGggPj0gOTkyO1xyXG5cclxuICAgIHZhciB4OiBhbnk7XHJcblxyXG4gICAgdmFyIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGggPSA0O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGggPSAxNjtcclxuICAgIC8qKlxyXG4gICAgICogbG9uZ2VyIHRpY2sgbGVuZ3RoIG5lZWRlZCBmb3Igd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICB2YXIgc2hvcnRfdGlja19sZW5ndGhfYmcgPSA1O1xyXG4gICAgdmFyIGxvbmdfdGlja19sZW5ndGhfYmcgPSAzMDtcclxuICAgIHZhciBsZWZ0QW5kUmlnaHRTcGFjZXMgPSA1MDtcclxuICAgIHZhciByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICB2YXIgdGVtcFNjYWxlO1xyXG5cclxuICAgIGZvciAodmFyIGkgaW4gdGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbikge1xyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbltpXSA9IENoYXJ0SGVscGVyLmdldFZhbHVlQnlDb25maWd1cmF0aW9uVHlwZShcclxuICAgICAgICBpLFxyXG4gICAgICAgIHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24sXHJcbiAgICAgICAgdGhpcy5jdXN0b21DaGFydENvbmZpZ3VyYXRpb25cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBkYXRhID0gdGhpcy5jaGFydERhdGEuZGF0YTtcclxuICAgIG1ldGFEYXRhID0gdGhpcy5jaGFydERhdGEubWV0YURhdGE7XHJcbiAgICBsaW5lRGF0YSA9IHRoaXMuY2hhcnREYXRhLmxpbmVEYXRhO1xyXG5cclxuICAgIC8vIGlmIChsaW5lRGF0YSB8fCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgLy8gICByaWdodFN2Z1dpZHRoID0gNjA7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAoIW1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpIHtcclxuICAgICAgbWV0YURhdGFbJ2NvbG9yQWJvdmVUYXJnZXQnXSA9IG1ldGFEYXRhLmNvbG9ycztcclxuICAgIH1cclxuICAgIGNvbG9yTWFwID0gbWV0YURhdGEuY29sb3JzO1xyXG4gICAga2V5TGlzdCA9IG1ldGFEYXRhLmtleUxpc3Q7XHJcblxyXG4gICAgdmFyIGNoYXJ0Q29udGFpbmVyID0gZDMuc2VsZWN0KHRoaXMuY29udGFpbmVyRWx0Lm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdmFyIHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lciA9IGQzLnNlbGVjdChcclxuICAgICAgdGhpcy5ncm91cGNvbnRhaW5lckVsdC5uYXRpdmVFbGVtZW50XHJcbiAgICApO1xyXG4gICAgdmFyIG1hcmdpbiA9IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLm1hcmdpbjtcclxuICAgIHZhciB3aWR0aCA9XHJcbiAgICAgIHBhcnNlSW50KGNoYXJ0Q29udGFpbmVyLnN0eWxlKCd3aWR0aCcpKSAtIG1hcmdpbi5sZWZ0IC0gbWFyZ2luLnJpZ2h0O1xyXG4gICAgaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gMzAgJiYgdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICB3aWR0aCA9XHJcbiAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTFcclxuICAgICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDYwXHJcbiAgICAgICAgICAgIDogd2lkdGhcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEuZHJvcGRvd25EYXRhMVxyXG4gICAgICAgICAgPyB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDYwXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcblxyXG4gICAgICB3aWR0aCA9XHJcbiAgICAgICAgd2lkdGggPiB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDQwXHJcbiAgICAgICAgICA/IHdpZHRoXHJcbiAgICAgICAgICA6IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogNDA7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgd2lkdGggPCB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMCAmJlxyXG4gICAgICB0aGlzLmlzWm9vbWVkT3V0XHJcbiAgICApIHtcclxuICAgICAgd2lkdGggPSB0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCAqIDEyMDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA+IDggJiYgIXRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuY2hhcnREYXRhLmRyb3Bkb3duRGF0YTIgJiZcclxuICAgICAgICB3aWR0aCA8IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMjUwXHJcbiAgICAgICkge1xyXG4gICAgICAgIHdpZHRoID0gdGhpcy5jaGFydERhdGEuZGF0YS5sZW5ndGggKiAyNTA7XHJcbiAgICAgIH0gZWxzZSB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTYwO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoID4gOCkge1xyXG4gICAgLy8gICB3aWR0aCA9IHRoaXMuY2hhcnREYXRhLmRhdGEubGVuZ3RoICogMTQwO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHZhciBoZWlnaHQgPVxyXG4gICAgICBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKSAqXHJcbiAgICAgICAgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodCAvIDEwMCkgLVxyXG4gICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgbWFyZ2luLmJvdHRvbTtcclxuICAgIC8qKlxyXG4gICAgICogZW50aXJlIGhlaWdodCB1c2VkIGluIHdlZWtseSBjaGFydHMgYXMgeCBheGlzIG5lZWRlZCB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUgY2hhcnRcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0Z1bGxTY3JlZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRnVsbFNjcmVlblxyXG4gICAgKSB7XHJcbiAgICAgIGhlaWdodCA9XHJcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uc3ZnSGVpZ2h0ICE9IDcwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnN2Z0hlaWdodFxyXG4gICAgICAgICAgOiBwYXJzZUludCh2ZXJ0aWNhbHN0YWNrZWRjb250YWluZXIuc3R5bGUoJ2hlaWdodCcpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc0RyaWxsZG93bkNoYXJ0ICYmICF0aGlzLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAxMzA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSkge1xyXG4gICAgICBoZWlnaHQgPVxyXG4gICAgICAgIHBhcnNlSW50KHZlcnRpY2Fsc3RhY2tlZGNvbnRhaW5lci5zdHlsZSgnaGVpZ2h0JykpIC1cclxuICAgICAgICBtYXJnaW4udG9wIC1cclxuICAgICAgICBtYXJnaW4uYm90dG9tIC1cclxuICAgICAgICAxMDA7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGZvciBoaWRpbmcgaGVhZGVyXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzSGVhZGVyVmlzaWJsZSAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuaXNIZWFkZXJWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNIZWFkZXJWaXNpYmxlO1xyXG4gICAgLyoqXHJcbiAgICAgKiBmb3IgaGlkaW5nIGxlZ2VuZHNcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5sZWdlbmRWaXNpYmxlID0gdGhpcy5jaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kVmlzaWJsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGZvciByZW1vdmluZyBiYWNrZ3JvdW5kIGNvbG9yIHNvIHRoYXQgaXQgY2FuIHRha2UgcGFyZW50cyBjb2xvclxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kID1cclxuICAgICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1RyYW5zcGFyZW50QmFja2dyb3VuZDtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogZm9ybWF0IGRhdGEgdmFsdWVzIGJhc2VkIG9uIGNvbmZpZ3VyYXRpb24gcmVjZWl2ZWRcclxuICAgICAqL1xyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXIgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGZvcm1hdEZyb21CYWNrZW5kID0gQ2hhcnRIZWxwZXIuZGF0YVZhbHVlRm9ybWF0dGVyKFxyXG4gICAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLnRleHRGb3JtYXR0ZXJcclxuICAgICAgKTtcclxuICAgICAgZm9ybWF0Rm9ySHVnZU51bWJlcnMgPSBDaGFydEhlbHBlci5kYXRhVmFsdWVGb3JtYXR0ZXIoJy4ycycpO1xyXG4gICAgfVxyXG4gICAgdmFyIG91dGVyQ29udGFpbmVyID0gY2hhcnRDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnZGl2JylcclxuICAgICAgLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ291dGVyLWNvbnRhaW5lcicpXHJcbiAgICAgIC5zdHlsZSgnd2lkdGgnLCAnMTAwJScpXHJcbiAgICAgIC5zdHlsZSgnaGVpZ2h0JywgaGVpZ2h0KVxyXG5cclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2hpZGRlbicpXHJcbiAgICAgIC5zdHlsZSgncGFkZGluZy1sZWZ0JywgYCR7bWFyZ2luLmxlZnR9cHhgKVxyXG4gICAgICAvLyAuY2FsbChDaGFydEhlbHBlci5yZXNwb25zaXZlZnkpXHJcblxyXG4gICAgICAuc3R5bGUoJ3BhZGRpbmctcmlnaHQnLCBgJHtyaWdodFN2Z1dpZHRofXB4YClcclxuICAgICAgLnN0eWxlKCdtYXJnaW4tbGVmdCcsICcxNXB4Jyk7XHJcbiAgICB2YXIgc3ZnWUF4aXNMZWZ0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgJzEwMCcpXHJcbiAgICAgIC5hdHRyKCdoZWlnaHQnLCBoZWlnaHQgKyBtYXJnaW4udG9wICsgbWFyZ2luLmJvdHRvbSArIDEwKVxyXG4gICAgICAuc3R5bGUoJ3Bvc2l0aW9uJywgJ2Fic29sdXRlJylcclxuICAgICAgLnN0eWxlKCdsZWZ0JywgJzAnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoXHJcbiAgICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICAgJ3RyYW5zbGF0ZSgnICsgKG1hcmdpbi5sZWZ0ICsgMTUpICsgJywnICsgbWFyZ2luLnRvcCArICcpJ1xyXG4gICAgICApO1xyXG5cclxuICAgIHZhciBzdmdZQXhpc1JpZ2h0ID0gb3V0ZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgcmlnaHRTdmdXaWR0aClcclxuICAgICAgLmF0dHIoJ2hlaWdodCcsIGhlaWdodCArIG1hcmdpbi50b3AgKyBtYXJnaW4uYm90dG9tICsgMTApXHJcbiAgICAgIC5zdHlsZSgncG9zaXRpb24nLCAnYWJzb2x1dGUnKVxyXG4gICAgICAuc3R5bGUoJ3JpZ2h0JywgJzEycHgnKVxyXG4gICAgICAuc3R5bGUoJ3otaW5kZXgnLCAxKVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgaW5uZXJDb250YWluZXIgPSBvdXRlckNvbnRhaW5lclxyXG4gICAgICAuYXBwZW5kKCdkaXYnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnaW5uZXItY29udGFpbmVyJylcclxuICAgICAgLnN0eWxlKCd3aWR0aCcsICcxMDAlJylcclxuICAgICAgLnN0eWxlKCdvdmVyZmxvdy14JywgJ2F1dG8nKTtcclxuXHJcbiAgICB2YXIgc3ZnID0gaW5uZXJDb250YWluZXJcclxuICAgICAgLmFwcGVuZCgnc3ZnJylcclxuICAgICAgLy8gLmF0dHIoJ2lkJywgc2VsZi51bmlxdWVJZClcclxuICAgICAgLmF0dHIoJ3dpZHRoJywgd2lkdGggLSByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgaGVpZ2h0ICsgbWFyZ2luLnRvcCArIG1hcmdpbi5ib3R0b20gKyAzMClcclxuICAgICAgLy8gLmNhbGwoQ2hhcnRIZWxwZXIucmVzcG9uc2l2ZWZ5KVxyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoJyArIDAgKyAnLCcgKyBtYXJnaW4udG9wICsgJyknKTtcclxuXHJcbiAgICB2YXIgc3ViZ3JvdXBzOiBhbnkgPSBrZXlMaXN0O1xyXG5cclxuICAgIHZhciBncm91cHMgPSBkM1xyXG4gICAgICAubWFwKGRhdGEsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgcmV0dXJuIGQubmFtZTtcclxuICAgICAgfSlcclxuICAgICAgLmtleXMoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIHggYXhpcyByYW5nZSBtYWRlIHNpbWlsYXIgdG8gbGluZSBjaGFydCBvciB2ZXJ0aWNhbCBzdGFjayBzbyB0aGF0IGFsbCB0aGUgY2hhcnRzIHdpbGwgZ2V0IGFsaWduZWQgd2l0aCBlYWNoIG90aGVyLlxyXG4gICAgICovXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHggPSBkM1xyXG4gICAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAgIC5yYW5nZVJvdW5kKFt3aWR0aCwgMF0pXHJcbiAgICAgICAgLmFsaWduKDAuNSlcclxuICAgICAgICAucGFkZGluZyhbMC41XSlcclxuICAgICAgICAuZG9tYWluKFxyXG4gICAgICAgICAgZGF0YS5tYXAoZnVuY3Rpb24gKGQ6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB4ID0gZDNcclxuICAgICAgICAuc2NhbGVCYW5kKClcclxuICAgICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgICAucmFuZ2UoW2xlZnRBbmRSaWdodFNwYWNlcywgd2lkdGggLSByaWdodFN2Z1dpZHRoIC0gbGVmdEFuZFJpZ2h0U3BhY2VzXSlcclxuICAgICAgICAucGFkZGluZyhbMC4zXSk7XHJcbiAgICB9XHJcbiAgICAvLyB4LmJhbmR3aWR0aCg5Nik7XHJcbiAgICB2YXIgeFNjYWxlRnJvbU9yaWdpbiA9IGQzXHJcbiAgICAgIC5zY2FsZUJhbmQoKVxyXG4gICAgICAuZG9tYWluKGdyb3VwcylcclxuICAgICAgLnJhbmdlKFswLCB3aWR0aCAtIHJpZ2h0U3ZnV2lkdGhdKTtcclxuICAgIC8vIC5wYWRkaW5nKFswLjJdKTtcclxuICAgIC8qKlxyXG4gICAgICogZHJhdyBzZWNvbmQgeCBheGlzIG9uIHRvcFxyXG4gICAgICovXHJcbiAgICAvLyBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uc2hvd1hheGlzVG9wKSB7XHJcbiAgICAvLyAgIHN2Z1xyXG4gICAgLy8gICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgLy8gICAgIC5hdHRyKCdjbGFzcycsICdsaWItbGluZS1heGlzLXRleHQgbGliLWxpbmUteC1heGlzLXRleHQgeC1heGlzJylcclxuICAgIC8vICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi54QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAvLyAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBkMy5zdmcuYXhpcygpLnNjYWxlKHgpLm9yaWVudCgnYm90dG9tJykudGlja3MoMSkuaW5uZXJUaWNrU2l6ZSgtaGVpZ2h0KTtcclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc011bHRpQ2hhcnRHcmlkTGluZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIG5vcm1hbCB0aWNrcyBmb3IgYWxsIGRhc2hib2FyZCBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd4MSBheGlzMScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKVxyXG4gICAgICAgIC5jYWxsKGQzLmF4aXNCb3R0b20oeCkpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG5cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLnJlbW92ZSgpO1xyXG5cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuXHJcbiAgICAgIC8vIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAvLyAgIGlmIChhbHRlcm5hdGVfdGV4dCkge1xyXG4gICAgICAvLyAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgLy8gICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoICsgMTtcclxuICAgICAgLy8gICB9IGVsc2Uge1xyXG4gICAgICAvLyAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAvLyAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoICsgMTtcclxuICAgICAgLy8gICB9XHJcbiAgICAgIC8vIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIGJpZ2dlciB0aWNrcyBmb3Igd2Vla2x5IGNoYXJ0cyBhbmQgbW9yZSBzcGFjZSBmcm9tIHggYXhpcyB0byBsYWJlbHNcclxuICAgICAgICovXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBkcmF3IHggYXhpc1xyXG4gICAgICAgKi9cclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ3gxIGF4aXMxJylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgwKSlcclxuICAgICAgICAuY2FsbCgoZykgPT4gZy5zZWxlY3QoJy5kb21haW4nKS5hdHRyKCdmaWxsJywgJ25vbmUnKSk7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiB0aWNrIGxpbmUgc2l6ZSBpbiBhbHRlcm5hdGUgZmFzaGlvblxyXG4gICAgICAgKi9cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgbGluZScpLmF0dHIoJ3kyJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5pc05vQWx0ZXJuYXRlWGF4aXNUZXh0ID09IHVuZGVmaW5lZFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnIC0gNztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIHNob3J0X3RpY2tfbGVuZ3RoX2JnIC0gNDtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICAvKipcclxuICAgICAgICogcmVzZXQgdGhlIGZsYWcgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIHNob3duIGluIHNhbWUgYWx0ZXJuYXRlIGZhc2hpb25cclxuICAgICAgICovXHJcbiAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBwcmludCB4LWF4aXMgbGFiZWwgdGV4dHNcclxuICAgICAgICogdXNlZCBieSB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICBzdmdcclxuICAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZV90ZXh0KSB7XHJcbiAgICAgICAgICAgIGFsdGVybmF0ZV90ZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBsb25nX3RpY2tfbGVuZ3RoX2JnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYWx0ZXJuYXRlX3RleHQgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gc2hvcnRfdGlja19sZW5ndGhfYmc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueExhYmVsc09uU2FtZUxpbmUpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2sgdGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxOHB4JylcclxuICAgICAgICAuYXR0cigneScsIHRoaXMuaXNIZWFkZXJWaXNpYmxlID8gc2hvcnRfdGlja19sZW5ndGhfYmcgKyAyNSA6IHNob3J0X3RpY2tfbGVuZ3RoX2JnKVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICB2YXIgaXNWYWx1ZVRvQmVJZ25vcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICBpZiAoaXNNb2JpbGUgJiYgIXNlbGYuaXNIZWFkZXJWaXNpYmxlKSB7ICAgIFxyXG4gICAgICAgICAgbGV0IGZpcnN0UGFydCA9IGQuc3BsaXQoL1tcXHNcXC1dKy8pWzBdOyAgICAgXHJcbiAgICAgICAgICBcclxuICAgICAgICAgIHJldHVybiBmaXJzdFBhcnQuc3Vic3RyaW5nKDAsIDMpLnRvTG93ZXJDYXNlKCk7ICAgXHJcbiAgICAgICAgIH1cclxuICAgICAgICAgIGRhdGEubWFwKChpbmRpdjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBpbmRpdi5uYW1lLnRvTG93ZXJDYXNlKCkgPT0gZC50cmltKCkudG9Mb3dlckNhc2UoKSAmJlxyXG4gICAgICAgICAgICAgIGluZGl2W21ldGFEYXRhLmtleUxpc3RbMF1dID09IC0xXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGlzVmFsdWVUb0JlSWdub3JlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGlzVmFsdWVUb0JlSWdub3JlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBJZiBsYWJlbCBsb29rcyBsaWtlIGEgZGF0ZSAoY29udGFpbnMgZGlnaXRzIGFuZCAtIG9yIC8pLCBzaG93IGZ1bGwgbGFiZWwgYXMgb25lIGxpbmVcclxuICAgICAgICAgIGlmICgvXFxkezIsNH1bLVxcL10vLnRlc3QoZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZC50cmltKCkuaW5kZXhPZignICcpID4gLTEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudHJpbSgpLnN1YnN0cmluZygwLCBkLmluZGV4T2YoJyAnKSkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBkLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYoIWlzTW9iaWxlKXtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnZy54MS5heGlzMSBnLnRpY2snKVxyXG4gICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAhL1xcZHsyLDR9Wy1cXC9dLy50ZXN0KGQpOyAvLyBPbmx5IHByb2Nlc3Mgbm9uLWRhdGUgbGFiZWxzXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXhheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24nKVxyXG4gICAgICAgIC5hdHRyKCd5JywgbG9uZ190aWNrX2xlbmd0aF9iZylcclxuICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIGlmIChkLnRyaW0oKS5pbmRleE9mKCcgJykgPiAtMSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZC50cmltKCkuc3Vic3RyaW5nKGQuaW5kZXhPZignICcpLCBkLmxlbmd0aCkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgICBpZiAoaXNNb2JpbGUgJiYgIXRoaXMuaXNIZWFkZXJWaXNpYmxlKSB7ICBcclxuICAgICAgc3ZnICAgXHJcbiAgICAgICAuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayB0ZXh0JykgICBcclxuICAgICAgICAuY2xhc3NlZCgnbW9iaWxlLXhheGlzLW92ZXJyaWRlJywgdHJ1ZSk7fVxyXG4gICAgLyoqeSBzY2FsZSBmb3IgbGVmdCB5IGF4aXMgKi9cclxuICAgIHZhciB5ID0gZDMuc2NhbGVMaW5lYXIoKS5yYW5nZVJvdW5kKFtoZWlnaHQsIDBdKTtcclxuICAgIHZhciBtYXhWYWx1ZSA9IGQzLm1heChkYXRhLCAoZCkgPT4gZDMubWF4KGtleUxpc3QsIChrZXkpID0+ICtkW2tleV0pKTtcclxuICAgIGlmIChtYXhWYWx1ZSA9PSAwKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSkge1xyXG4gICAgICAgIG1heFZhbHVlID0gdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWF4VmFsdWUgPSAxMDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0dyaWQpIHtcclxuICAgICAgLy8gc3ZnXHJcbiAgICAgIC8vICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC8vICAgLmF0dHIoJ2NsYXNzJywgJ2dyaWQnKVxyXG4gICAgICAvLyAgIC5jYWxsKFxyXG4gICAgICAvLyAgICAgZDNcclxuICAgICAgLy8gICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgIC8vICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgLy8gICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgLy8gICAgICAgLnRpY2tGb3JtYXQoJycpXHJcbiAgICAgIC8vICAgKVxyXG4gICAgICAvLyAgIC8vIC5zdHlsZSgnc3Ryb2tlLWRhc2hhcnJheScsICc1IDUnKVxyXG4gICAgICAvLyAgIC5zdHlsZSgnY29sb3InLCAnI0I5QjlCOScpXHJcbiAgICAgIC8vICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgIC8vICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykucmVtb3ZlKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmN1c3RvbVlzY2FsZSkge1xyXG4gICAgICAvKipcclxuICAgICAgICogaW5jcmVhc2UgeS1zY2FsZSBzbyB0aGF0IHZhbHVlcyB3b250IGNyb3NzIG9yIGV4Y2VlZCBvdXQgb2YgcmFuZ2VcclxuICAgICAgICogdXNlZCBpbiB3ZWVrbHkgY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICBtYXhWYWx1ZSA9IG1heFZhbHVlICogdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uY3VzdG9tWXNjYWxlO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICBtYXhWYWx1ZSA8IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldFxyXG4gICAgKSB7XHJcbiAgICAgIG1heFZhbHVlID1cclxuICAgICAgICBtYXhWYWx1ZSA8IDEwICYmIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCA8IDEwXHJcbiAgICAgICAgICA/IHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArIDNcclxuICAgICAgICAgIDogdGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEudGFyZ2V0ICsgMjA7XHJcbiAgICB9XHJcbiAgICB5LmRvbWFpbihbMCwgbWF4VmFsdWVdKS5uaWNlKCk7XHJcbiAgICBsZXQgbGluZVlzY2FsZTtcclxuXHJcbiAgICBpZiAobGluZURhdGEgIT0gbnVsbCkge1xyXG4gICAgICBsZXQgbWF4TGluZVZhbHVlID0gZDMubWF4KGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiArZC52YWx1ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBtYXhMaW5lVmFsdWUgPSBtYXhMaW5lVmFsdWUgKiB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5jdXN0b21Zc2NhbGU7XHJcblxyXG4gICAgICBsZXQgbWluTGluZVZhbHVlID0gZDMubWluKGxpbmVEYXRhLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiArZC52YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChtYXhMaW5lVmFsdWUgPiAwKSBtaW5MaW5lVmFsdWUgPSBtaW5MaW5lVmFsdWUgLSAzO1xyXG4gICAgICBpZiAobWluTGluZVZhbHVlID4gMCkge1xyXG4gICAgICAgIG1pbkxpbmVWYWx1ZSA9IDA7XHJcbiAgICAgIH1cclxuICAgICAgbGluZVlzY2FsZSA9IGQzXHJcbiAgICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFttaW5MaW5lVmFsdWUsIG1heExpbmVWYWx1ZV0pXHJcbiAgICAgICAgLnJhbmdlKFtoZWlnaHQsIG1pbkxpbmVWYWx1ZV0pO1xyXG4gICAgfVxyXG4gICAgbGV0IHlMaW5lQXhpcztcclxuICAgIGlmIChsaW5lWXNjYWxlICE9IG51bGwpIHtcclxuICAgICAgeUxpbmVBeGlzID0gZDNcclxuICAgICAgICAuYXhpc1JpZ2h0KGxpbmVZc2NhbGUpXHJcbiAgICAgICAgLnRpY2tzKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLm51bWJlck9mWVRpY2tzKVxyXG4gICAgICAgIC50aWNrU2l6ZSgwKVxyXG4gICAgICAgIC50aWNrRm9ybWF0KHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlMaW5lQXhpc0xhYmVsRm9tYXR0ZXIpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBzaG93IHgtYXhpcyBncmlkIGJldHdlZW4gbGFiZWxzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzWGdyaWRCZXR3ZWVuTGFiZWxzKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdncmlkJylcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICd0cmFuc2Zvcm0nLFxyXG4gICAgICAgICAgJ3RyYW5zbGF0ZSgnICsgeC5iYW5kd2lkdGgoKSAvIDIgKyAnLCcgKyBoZWlnaHQgKyAnKSdcclxuICAgICAgICApXHJcbiAgICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4KS50aWNrU2l6ZSgtaGVpZ2h0KS50aWNrRm9ybWF0KCcnKSlcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWdyaWQtY29sb3IsICM5OTk5OTkpJykgLy8gVXNlIENTUyB2YXJpYWJsZVxyXG4gICAgICAgIC5jYWxsKChnKSA9PiBnLnNlbGVjdCgnLmRvbWFpbicpLnJlbW92ZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNHcmlkKSB7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5jYWxsKFxyXG4gICAgICAgICAgZDNcclxuICAgICAgICAgICAgLmF4aXNMZWZ0KHkpXHJcbiAgICAgICAgICAgIC50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcylcclxuICAgICAgICAgICAgLnRpY2tTaXplKC13aWR0aClcclxuICAgICAgICApXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAgICAgLnJlbW92ZSgpXHJcbiAgICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlJywgJ3ZhcigtLWNoYXJ0LWRvbWFpbi1jb2xvciwgIzAwMDAwMCknKTsgLy8gQWRkIENTUyB2YXJpYWJsZSBmb3IgZG9tYWluXHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgICAuY2FsbChkMy5heGlzTGVmdCh5KS50aWNrcyhzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5udW1iZXJPZllUaWNrcykpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsICd2YXIoLS1jaGFydC1heGlzLWNvbG9yLCAjQjlCOUI5KScpXHJcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgJzAuNScpXHJcbiAgICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAgIGcuc2VsZWN0KCcuZG9tYWluJylcclxuICAgICAgICAgICAgLnN0eWxlKCdzdHJva2UnLCAndmFyKC0tY2hhcnQtZG9tYWluLWNvbG9yLCAjMDAwMDAwKScpIC8vIEFkZCBDU1MgdmFyaWFibGUgZm9yIGRvbWFpblxyXG4gICAgICAgICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcxcHgnKTsgLy8gRW5zdXJlIHZpc2liaWxpdHlcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgeFN1Ymdyb3VwID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKHN1Ymdyb3Vwcyk7XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLyoqXHJcbiAgICAgICAqIHVzZWQgdG8gbWFrZSBncm91cGVkIGJhcnMgd2l0aCBsZXNzZXIgd2lkdGggYXMgd2UgYXJlIG5vdCB1c2luZyBwYWRkaW5nIGZvciB3aWR0aFxyXG4gICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICovXHJcbiAgICAgIHhTdWJncm91cC5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuXHJcbiAgICAvLyB9XHJcbiAgICB2YXIgY29sb3IgPSBkM1xyXG4gICAgICAuc2NhbGVPcmRpbmFsKClcclxuICAgICAgLmRvbWFpbihzdWJncm91cHMpXHJcbiAgICAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9ycykpO1xyXG4gICAgLy8gdmFyIGNvbG9yQWJvdmVUYXJnZXQgPSBkM1xyXG4gICAgLy8gICAuc2NhbGVPcmRpbmFsKClcclxuICAgIC8vICAgLmRvbWFpbihzdWJncm91cHMpXHJcbiAgICAvLyAgIC5yYW5nZShPYmplY3QudmFsdWVzKG1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXQpKTtcclxuICAgIHZhciBzdGF0ZSA9IHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLnNlbGVjdEFsbCgnLnN0YXRlJylcclxuICAgICAgLmRhdGEoZGF0YSlcclxuICAgICAgLmVudGVyKClcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIHJldHVybiAndHJhbnNsYXRlKCcgKyB4KGQubmFtZSkgKyAnLDApJztcclxuICAgICAgfSk7XHJcbiAgICBzdGF0ZVxyXG4gICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgLmRhdGEoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgc3ViZ3JvdXBzLm1hcChmdW5jdGlvbiAoa2V5KSB7XHJcbiAgICAgICAgICAvLyBpZiAoa2V5ICE9PSBcImdyb3VwXCIpIHtcclxuICAgICAgICAgIGxldCBvYmo6IGFueSA9IHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9O1xyXG4gICAgICAgICAgbmV3TGlzdC5wdXNoKG9iaik7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xpc3Q7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5lbnRlcigpXHJcbiAgICAgIC5hcHBlbmQoJ3JlY3QnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnYmFycycpXHJcbiAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgIGlmIChkLmtleSAhPSAnVGFyZ2V0Jykge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8XHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICAvLyBzZWxmLmhhbmRsZUNsaWNrKGQuZGF0YS5uYW1lKTtcclxuICAgICAgICAgICAgc2VsZi5oYW5kbGVDbGljayhkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gdGVtcFNjYWxlKGQua2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHhTdWJncm91cChkLmtleSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZC52YWx1ZSA9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIHkoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZC52YWx1ZSkge1xyXG4gICAgICAgICAgLy8gRm9yIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEwLCBwb3NpdGlvbiBiYXIgYXQgYmFzZWxpbmUgd2l0aCBkZWZhdWx0IGhlaWdodFxyXG4gICAgICAgICAgaWYgKGQudmFsdWUgPD0gMTAgJiYgZC52YWx1ZSA+PSAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRIZWlnaHQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5kZWZhdWx0QmFySGVpZ2h0IHx8IDg7XHJcbiAgICAgICAgICAgIHJldHVybiB5KDApIC0gZGVmYXVsdEhlaWdodDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIEZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEwLCB1c2Ugbm9ybWFsIGNhbGN1bGF0ZWQgcG9zaXRpb25cclxuICAgICAgICAgIHJldHVybiB5KGQudmFsdWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHkoMCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5hdHRyKCd3aWR0aCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgIC8vIHZhciB0ZW1wU2NhbGU7XHJcblxyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHZhciB0ZW1wO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAucGFkZGluZygwLjA1KTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMTI1KSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5pc1pvb21lZE91dFxyXG4gICAgICAgICAgICA/IHRlbXBTY2FsZS5iYW5kd2lkdGgoKSBcclxuICAgICAgICAgICAgOiB0ZW1wU2NhbGUuYmFuZHdpZHRoKClcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNlbGYuaXNab29tZWRPdXRcclxuICAgICAgICAgID8geFN1Ymdyb3VwLmJhbmR3aWR0aCgpIFxyXG4gICAgICAgICAgOiB4U3ViZ3JvdXAuYmFuZHdpZHRoKCkqMC41O1xyXG4gICAgICB9KVxyXG4gICAgICAuYXR0cignaGVpZ2h0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoZC52YWx1ZSA9PSAtMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGhlaWdodCAtIHkoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZC52YWx1ZSkge1xyXG4gICAgICAgICAgLy8gRm9yIHZhbHVlcyBiZXR3ZWVuIDAgYW5kIDEwIChpbmNsdXNpdmUpLCB1c2UgZGVmYXVsdCBoZWlnaHRcclxuICAgICAgICAgIGlmIChkLnZhbHVlIDw9IDEwICYmIGQudmFsdWUgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGVmYXVsdEJhckhlaWdodCB8fCA4O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gRm9yIHZhbHVlcyBncmVhdGVyIHRoYW4gMTAsIHVzZSBjYWxjdWxhdGVkIGhlaWdodFxyXG4gICAgICAgICAgcmV0dXJuIGhlaWdodCAtIHkoZC52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gaGVpZ2h0IC0geSgwKTtcclxuICAgICAgfSlcclxuICAgICAgLnN0eWxlKCdjdXJzb3InLCAoKSA9PlxyXG4gICAgICAgIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmhhc0RyaWxsRG93biA/ICdwb2ludGVyJyA6ICdkZWZhdWx0J1xyXG4gICAgICApXHJcbiAgICAgIC5hdHRyKCdmaWxsJywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBkLnZhbHVlICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgZC52YWx1ZSA+PSBwYXJzZUludChzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXQpICYmXHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvckFib3ZlVGFyZ2V0XHJcbiAgICAgICAgKVxyXG4gICAgICAgICAgcmV0dXJuIHNlbGYuY2hhcnREYXRhLm1ldGFEYXRhLmNvbG9yQWJvdmVUYXJnZXRbZC5rZXldO1xyXG4gICAgICAgIHJldHVybiBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRpc3BsYXkgYW5nbGVkIHRleHRzIG9uIHRoZSBiYXJzXHJcbiAgICAgKi9cclxuICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0c09uQmFyICE9IHVuZGVmaW5lZCAmJiAhdGhpcy5pc1pvb21lZE91dCkge1xyXG4gICAgICBzdGF0ZVxyXG4gICAgICAgIC5zZWxlY3RBbGwoJ3RleHQnKVxyXG4gICAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBsZXQgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICAgICAgICBzdWJncm91cHMubWFwKGZ1bmN0aW9uIChrZXkpIHtcclxuICAgICAgICAgICAgbGV0IG9iajogYW55ID0geyBrZXk6IGtleSwgdmFsdWU6IGRba2V5XSwgbmFtZTogZC5uYW1lIH07XHJcbiAgICAgICAgICAgIG5ld0xpc3QucHVzaChvYmopO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCd4JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRhdGEtbGFiZWxzLXdlZWtseWNoYXJ0cycpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHJldHVybiBkLmtleSAmJiBkLnZhbHVlXHJcbiAgICAgICAgICAgID8gZC5rZXkubGVuZ3RoID4gMjBcclxuICAgICAgICAgICAgICA/IGQua2V5LnN1YnN0cmluZygwLCAxNykgKyAnLi4uJ1xyXG4gICAgICAgICAgICAgIDogZC5rZXlcclxuICAgICAgICAgICAgOiAnJztcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gJyMwMDAnO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKCdmb250LXdlaWdodCcsICdib2xkJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoc2VsZi5pc1pvb21lZE91dCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJzlweCc7IC8vIPCfkYggWm9vbWVkIG91dCBtb2RlXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHtcclxuICAgICAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoID4gMTkwMCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAnMThweCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDAwKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICcxMHB4JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzE0cHgnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJzE0cHgnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgdmFyIHRlbXA7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIC5wYWRkaW5nKDAuMDUpO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgLy8gLnBhZGRpbmcoMC4wNSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogaWYgc2V0LCB0aGVuIGFsbCB0ZXh0cyBsbCBiZSBob3Jpem9udGFsXHJcbiAgICAgICAgICAgKi9cclxuICAgICAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi50ZXh0QWx3YXlzSG9yaXpvbnRhbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICd0cmFuc2xhdGUoJyArIHhTdWJncm91cChkLmtleSkgKyAnLCcgKyAoeShkLnZhbHVlKSAtIDMpICsgJyknXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvKipcclxuICAgICAgICAgICAqIHJvdGF0ZSB0ZXh0cyBoYXZpbmcgbW9yZSB0aGFuIG9uZSBkaWdpdHNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgLy8gaWYgKGQudmFsdWUgPiA5KVxyXG4gICAgICAgICAgaWYgKCFpc05hTih0ZW1wU2NhbGUoZC5rZXkpKSlcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAndHJhbnNsYXRlKCcgK1xyXG4gICAgICAgICAgICAgICh0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpICogMC41NSkgK1xyXG4gICAgICAgICAgICAgICcsJyArXHJcbiAgICAgICAgICAgICAgKHkoMCkgLSAxMCkgK1xyXG4gICAgICAgICAgICAgICcpIHJvdGF0ZSgyNzApJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgcmV0dXJuICd0cmFuc2xhdGUoMCwwKSc7XHJcbiAgICAgICAgICAvLyBlbHNlXHJcbiAgICAgICAgICAvLyAgIHJldHVybiAoXHJcbiAgICAgICAgICAvLyAgICAgJ3RyYW5zbGF0ZSgnICtcclxuICAgICAgICAgIC8vICAgICAodGVtcFNjYWxlKGQua2V5KSArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDIpICtcclxuICAgICAgICAgIC8vICAgICAnLCcgK1xyXG4gICAgICAgICAgLy8gICAgIHkoMCkgK1xyXG4gICAgICAgICAgLy8gICAgICcpJ1xyXG4gICAgICAgICAgLy8gICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdjbGljaycsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2sgfHxcclxuICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5sZW5ndGggfHxcclxuICAgICAgICAgICAgKCFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2suaW5jbHVkZXMoZD8ubmFtZSkgJiZcclxuICAgICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/LmtleSkpXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICAgIHNlbGYuaGFuZGxlQ2xpY2soZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHN0YXRlXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1kYXRhLWxhYmVscy13ZWVrbHljaGFydHMnKVxyXG4gICAgICAgIC5vbignbW91c2VvdXQnLCBoYW5kbGVNb3VzZU91dClcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGhhbmRsZU1vdXNlT3Zlcik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgaGFuZGxlTW91c2VPdXQpXHJcbiAgICAgICAgLm9uKCdtb3VzZW92ZXInLCBoYW5kbGVNb3VzZU92ZXIpO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaGFuZGxlTW91c2VPdmVyKGQsIGkpIHtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLmFwcGVuZCgnZm9yZWlnbk9iamVjdCcpXHJcbiAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAvLyAuLi5leGlzdGluZyBjb2RlIGZvciB0ZW1wU2NhbGUgY2FsY3VsYXRpb24uLi5cclxuICAgICAgICAgIHZhciBlbGVtZW50c0NvdW50ZXI7XHJcbiAgICAgICAgICBkYXRhLm1hcCgoaW5kaXY6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaW5kaXYubmFtZSA9PSBkLm5hbWUpIHtcclxuICAgICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGluZGl2KS5maWx0ZXIoKHRlbXAsIGkpID0+IGkgIT0gMCk7XHJcbiAgICAgICAgICAgICAgZWxlbWVudHNDb3VudGVyID0ga2V5cy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlID0gZDMuc2NhbGVCYW5kKCkuZG9tYWluKGtleXMpLnJhbmdlKFswLCB4LmJhbmR3aWR0aCgpXSk7XHJcbiAgICAgICAgICAgICAgaWYgKHguYmFuZHdpZHRoKCkgPiAxMDApIHtcclxuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNoYXJ0RGF0YS5kYXRhLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWxmLmNoYXJ0RGF0YS5kYXRhWzBdKS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBTY2FsZS5yYW5nZShbXHJcbiAgICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDIwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAzMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgIHguYmFuZHdpZHRoKCkgLSAoeC5iYW5kd2lkdGgoKSAtIDEyNSkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmhhc0RyaWxsRG93bikge1xyXG4gICAgICAgICAgICBpZiAodGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMiA+IDE4MCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpICsgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMiAtIDkwXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIHgoZC5uYW1lKSArXHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlKGQua2V5KSAtXHJcbiAgICAgICAgICAgICAgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArXHJcbiAgICAgICAgICAgICAgdGVtcFNjYWxlLmJhbmR3aWR0aCgpIC8gMlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHJldHVybiB4KGQubmFtZSkgKyB0ZW1wU2NhbGUoZC5rZXkpIC0gKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIpIC8gMiArIHRlbXBTY2FsZS5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXZlcnRpY2Fsc3RhY2stdGl0bGUtb250b3AnKVxyXG4gICAgICAgIC5hdHRyKCd5JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgcmV0dXJuIHkoZC52YWx1ZSkgLSAzIC0gNDAgLSAxMDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHJldHVybiBkLmNsYXNzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoJ3dpZHRoJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgZGF0YS5tYXAoKGluZGl2OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGluZGl2Lm5hbWUgPT0gZC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRpdikuZmlsdGVyKCh0ZW1wLCBpKSA9PiBpICE9IDApO1xyXG4gICAgICAgICAgICAgIHRlbXBTY2FsZSA9IGQzLnNjYWxlQmFuZCgpLmRvbWFpbihrZXlzKS5yYW5nZShbMCwgeC5iYW5kd2lkdGgoKV0pO1xyXG4gICAgICAgICAgICAgIGlmICh4LmJhbmR3aWR0aCgpID4gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jaGFydERhdGEuZGF0YS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc2VsZi5jaGFydERhdGEuZGF0YVswXSkubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wU2NhbGUucmFuZ2UoW1xyXG4gICAgICAgICAgICAgICAgICAgICAgMCArICh4LmJhbmR3aWR0aCgpIC0gMjAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAyMDApIC8gMixcclxuICAgICAgICAgICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAgIDAgKyAoeC5iYW5kd2lkdGgoKSAtIDMwMCkgLyAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeC5iYW5kd2lkdGgoKSAtICh4LmJhbmR3aWR0aCgpIC0gMzAwKSAvIDIsXHJcbiAgICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2VcclxuICAgICAgICAgICAgICAgICAgdGVtcFNjYWxlLnJhbmdlKFtcclxuICAgICAgICAgICAgICAgICAgICAwICsgKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgICB4LmJhbmR3aWR0aCgpIC0gKHguYmFuZHdpZHRoKCkgLSAxMjUpIC8gMixcclxuICAgICAgICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChtZXRhRGF0YS5oYXNEcmlsbERvd24pIHtcclxuICAgICAgICAgICAgaWYgKHRlbXBTY2FsZS5iYW5kd2lkdGgoKSArIGxlZnRBbmRSaWdodFNwYWNlcyAqIDIgPiAxODApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gJzE4MHB4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICAgIH0gZWxzZSByZXR1cm4gdGVtcFNjYWxlLmJhbmR3aWR0aCgpICsgbGVmdEFuZFJpZ2h0U3BhY2VzICogMjtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCA0MClcclxuICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd0aXRsZScpXHJcbiAgICAgICAgLnN0eWxlKCd6LWluZGV4JywgOTkpXHJcbiAgICAgICAgLmh0bWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgLy8gU2hvdyB0aGUgeC1heGlzIGxhYmVsIChiYXIgbmFtZSkgZm9yIHRoaXMgYmFyLCBub3QgdGhlIGRhdGUgb3IgYW55IG90aGVyIHZhbHVlXHJcbiAgICAgICAgICBsZXQgYmFyTGFiZWwgPSBkLm5hbWU7IC8vIFRoaXMgaXMgdGhlIHgtYXhpcyBsYWJlbCBmb3IgdGhlIGJhclxyXG4gICAgICAgICAgbGV0IGRhdGFUeXBlID0gbWV0YURhdGEuZGF0YVR5cGUgPyBtZXRhRGF0YS5kYXRhVHlwZSA6ICcnO1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gZC52YWx1ZTtcclxuICAgICAgICAgIGxldCBrZXkgPSBkLmtleTtcclxuICAgICAgICAgIC8vIFRvb2x0aXA6IHNob3cgeC1heGlzIGxhYmVsIGFuZCB2YWx1ZSwgYnV0IGRvIG5vdCBzaG93IGRhdGVcclxuICAgICAgICAgIGxldCBkZXNpcmVkVGV4dCA9XHJcbiAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cInRpdGxlLWJhci1uYW1lXCI+JyArIGJhckxhYmVsICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgICAgZGVzaXJlZFRleHQgKz1cclxuICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwidGl0bGUtYmFyLXZhbHVlXCI+PHNwYW4+JyArXHJcbiAgICAgICAgICAgIHZhbHVlICtcclxuICAgICAgICAgICAgJzwvc3Bhbj4nICtcclxuICAgICAgICAgICAgZGF0YVR5cGUgK1xyXG4gICAgICAgICAgICAnPC9zcGFuPic7XHJcbiAgICAgICAgICByZXR1cm4gZGVzaXJlZFRleHQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBoYW5kbGVNb3VzZU91dChkLCBpKSB7XHJcbiAgICAgIGlmICghc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3ApIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgc3ZnLnNlbGVjdEFsbCgnLmxpYi12ZXJ0aWNhbHN0YWNrLXRpdGxlLW9udG9wJykucmVtb3ZlKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGRpc3BsYXkgZGF0YSB2YWx1ZXMgb24gbW91c2Ugb3ZlclxyXG4gICAgICogdXNlZCBieSBkYXNoYm9hcmQgY2hhcnRzXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24udGV4dHNPbkJhciA9PSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uZGlzcGxheVRpdGxlT25Ub3AgPT0gdW5kZWZpbmVkXHJcbiAgICApIHtcclxuICAgICAgc3RhdGVcclxuICAgICAgICAuc2VsZWN0QWxsKCdyZWN0JylcclxuICAgICAgICAub24oJ21vdXNlb3V0JywgZnVuY3Rpb24gKGQpIHtcclxuICAgICAgICAgIHN0YXRlLnNlbGVjdEFsbCgnLmJhcnN0ZXh0JykucmVtb3ZlKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAub24oJ21vdXNlb3ZlcicsIGZ1bmN0aW9uIChkMSkge1xyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICAgICAgLnNlbGVjdEFsbCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5kYXRhKGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gICAgICAgICAgICAgIHN1Ymdyb3Vwcy5tYXAoZnVuY3Rpb24gKGtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICBrZXkgIT09ICduYW1lJyAmJlxyXG4gICAgICAgICAgICAgICAgICBkMS5rZXkgPT0ga2V5ICYmXHJcbiAgICAgICAgICAgICAgICAgIGQxLnZhbHVlID09IGRba2V5XSAmJlxyXG4gICAgICAgICAgICAgICAgICBkMS5uYW1lID09IGQubmFtZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBvYmo6IGFueSA9IHsga2V5OiBrZXksIHZhbHVlOiBkW2tleV0sIG5hbWU6IGQubmFtZSB9O1xyXG4gICAgICAgICAgICAgICAgICBuZXdMaXN0LnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICByZXR1cm4gbmV3TGlzdDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2JhcnN0ZXh0JylcclxuICAgICAgICAgICAgLmF0dHIoJ3gnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiB4U3ViZ3JvdXAoZC5rZXkpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHkoZC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICdzdHlsZScsXHJcbiAgICAgICAgICAgICAgJ2ZvbnQtc2l6ZTogJyArICcuODVlbScgKyAnOycgKyAnIGZvbnQtd2VpZ2h0OicgKyAnYm9sZCcgKyAnOydcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3R5bGUoJ2ZpbGwnLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBtZXRhRGF0YS5jb2xvcnNbZC5rZXldO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgICAnd2lkdGgnLFxyXG4gICAgICAgICAgICAgIHNlbGYuaXNab29tZWRPdXRcclxuICAgICAgICAgICAgICAgID8geFN1Ymdyb3VwLmJhbmR3aWR0aCgpICogMC41XHJcbiAgICAgICAgICAgICAgICA6IHhTdWJncm91cC5iYW5kd2lkdGgoKSAqIDAuOFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGQudmFsdWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc3ZnXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAneDIgYXhpczInKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLCcgKyBoZWlnaHQgKyAnKScpXHJcbiAgICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtYXhpcy1jb2xvciwgIzAwMCknKSAvLyBVc2UgQ1NTIHZhcmlhYmxlIGluc3RlYWQgb2YgaGFyZGNvZGVkICMwMDBcclxuICAgICAgLmNhbGwoZDMuYXhpc0JvdHRvbSh4U2NhbGVGcm9tT3JpZ2luKS50aWNrU2l6ZSgwKSlcclxuICAgICAgLmNhbGwoKGcpID0+IGcuc2VsZWN0KCcuZG9tYWluJykuYXR0cignZmlsbCcsICdub25lJykpO1xyXG4gICAgc3ZnLnNlbGVjdEFsbCgnZy54Mi5heGlzMiBnLnRpY2sgdGV4dCcpLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIHN2Z1xyXG4gICAgICAuYXBwZW5kKCdnJylcclxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0IHlheGlzLWRhc2hlZCcpXHJcbiAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tVGV4dFN0eWxlcylcclxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKScpXHJcbiAgICAgIC5jYWxsKHkpXHJcbiAgICAgIC5zdHlsZSgnZGlzcGxheScsICdub25lJyk7XHJcbiAgICBzdmdZQXhpc0xlZnRcclxuICAgICAgLmFwcGVuZCgnZycpXHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoXHJcbiAgICAgICAgZDNcclxuICAgICAgICAgIC5heGlzTGVmdCh5KVxyXG4gICAgICAgICAgLnRpY2tTaXplKDApXHJcbiAgICAgICAgICAudGlja3Moc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubnVtYmVyT2ZZVGlja3MpXHJcbiAgICAgICAgICAudGlja0Zvcm1hdChmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0xhYmVsRm9tYXR0ZXJcclxuICAgICAgICAgICAgICA/IHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzTGFiZWxGb21hdHRlcihkKVxyXG4gICAgICAgICAgICAgIDogZDtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZCA+PSAxMDAwID8gZm9ybWF0dGVkIC8gMTAwMCArICdrJyA6IGZvcm1hdHRlZDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLmNhbGwoKGcpID0+IHtcclxuICAgICAgICAvLyBTdHlsZSB0aGUgZG9tYWluIGxpbmUgZm9yIHRoZW1lIHN1cHBvcnRcclxuICAgICAgICBnLnNlbGVjdCgnLmRvbWFpbicpXHJcbiAgICAgICAgICAuc3R5bGUoJ3N0cm9rZScsICd2YXIoLS1jaGFydC1kb21haW4tY29sb3IsICMwMDAwMDApJylcclxuICAgICAgICAgIC5zdHlsZSgnc3Ryb2tlLXdpZHRoJywgJzFweCcpO1xyXG4gICAgICB9KVxyXG4gICAgICAuc2VsZWN0QWxsKCd0ZXh0JylcclxuICAgICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJyk7XHJcbiAgICBzdmdZQXhpc1JpZ2h0XHJcbiAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlheGlzLWxhYmVscy10ZXh0cy1kcmlsbGRvd24geWF4aXMtZGFzaGVkJylcclxuICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21UZXh0U3R5bGVzKVxyXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgwLDApJylcclxuICAgICAgLmNhbGwoeSlcclxuICAgICAgLnN0eWxlKCdkaXNwbGF5JywgJ25vbmUnKTtcclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB4IGF4aXMgbGFiZWxzXHJcbiAgICAgKiBjb25maWcgaXMgdGhlcmUgZm9yIGZ1dHVyZSB1c2VcclxuICAgICAqIHVzZWQgYnkgd2Vla2x5IGNoYXJ0c1xyXG4gICAgICovXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWGF4aXNMYWJlbEhpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNYYXhpc0xhYmVsSGlkZGVuXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCdnLmxpYi1saW5lLXgtYXhpcy10ZXh0ID4gZyA+IHRleHQnKS5hdHRyKFxyXG4gICAgICAgICdjbGFzcycsXHJcbiAgICAgICAgJ2xpYi1kaXNwbGF5LWhpZGRlbidcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogaGlkZSB5IGF4aXMgbGFiZWxzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzTGFiZWxIaWRkZW4gIT0gdW5kZWZpbmVkICYmXHJcbiAgICAgIHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzWWF4aXNMYWJlbEhpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCA+IGcgPiB0ZXh0JykuYXR0cihcclxuICAgICAgICAnY2xhc3MnLFxyXG4gICAgICAgICdsaWItZGlzcGxheS1oaWRkZW4nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIGhpZGUgeSBheGlzIGxhYmVsc1xyXG4gICAgICogY29uZmlnIGlzIHRoZXJlIGZvciBmdXR1cmUgdXNlXHJcbiAgICAgKi9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlbiAhPSB1bmRlZmluZWQgJiZcclxuICAgICAgdGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNZYXhpc0hpZGRlblxyXG4gICAgKSB7XHJcbiAgICAgIGQzLnNlbGVjdEFsbCgnLnlheGlzLWRhc2hlZCcpLmF0dHIoJ2NsYXNzJywgJ2xpYi1kaXNwbGF5LWhpZGRlbicpO1xyXG4gICAgfVxyXG4gICAgLyoqICAgXHJcbiAgICAgKiBkYXNoZWQgeSBheGlzXHJcbiAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkICE9IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLmNoYXJ0Q29uZmlndXJhdGlvbi5pc1lheGlzRGFzaGVkXHJcbiAgICApIHtcclxuICAgICAgZDMuc2VsZWN0QWxsKCcueWF4aXMtZGFzaGVkJylcclxuICAgICAgICAuc3R5bGUoJ3N0cm9rZS1kYXNoYXJyYXknLCAnNSA1JylcclxuICAgICAgICAuc3R5bGUoJ2NvbG9yJywgJ3ZhcigtLWNoYXJ0LWF4aXMtY29sb3IsICM5OTk5OTkpJyk7IC8vIFVzZSBDU1MgdmFyaWFibGVcclxuICAgIH1cclxuICAgIGlmIChsaW5lRGF0YSAhPSBudWxsKSB7XHJcbiAgICAgIGlmIChsaW5lRGF0YSAmJiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5zaG93TGluZUNoYXJ0QXhpcykge1xyXG4gICAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xpYi1zdGFja2VkLXktYXhpcy10ZXh0MScpXHJcbiAgICAgICAgICAuYXR0cignc3R5bGUnLCBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi55QXhpc0N1c3RvbVRleHRTdHlsZXMpXHJcbiAgICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsMCknKVxyXG4gICAgICAgICAgLmNhbGwoeUxpbmVBeGlzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiB1c2VkIHRvIGRpc3BsYXkgeSBsYWJlbFxyXG4gICAgICovXHJcblxyXG4gICAgLy8gaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgIC8vICAgc3ZnXHJcbiAgICAvLyAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgIC8vICAgICAuYXR0cignY2xhc3MnLCAnbGliLWRpc3BsYXktaGlkZGVuJyk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNab29tZWRPdXQpIHtcclxuICAgICAgLy8gc3ZnXHJcbiAgICAgIC8vICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgLy8gICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtMzApJylcclxuICAgICAgLy8gICAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJylcclxuICAgICAgLy8gICAuYXR0cigneCcsICctNScpXHJcbiAgICAgIC8vICAgLmF0dHIoJ2R5JywgbnVsbClcclxuICAgICAgLy8gICAuc3R5bGUoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKTtcclxuICAgICAgc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi14YXhpcy1sYWJlbHMtdGV4dHMtZHJpbGxkb3duJylcclxuICAgICAgICAuZWFjaCgoZCwgaSwgbm9kZXMpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRleHQgPSBkMy5zZWxlY3Qobm9kZXNbaV0pO1xyXG4gICAgICAgICAgY29uc3QgbGFiZWwgPSB0ZXh0LnRleHQoKTtcclxuICAgICAgICAgIGNvbnN0IHdvcmRzID0gbGFiZWwuc3BsaXQoJyAnKTtcclxuXHJcbiAgICAgICAgICB0ZXh0LnRleHQobnVsbCk7IC8vIENsZWFyIGN1cnJlbnQgdGV4dFxyXG5cclxuICAgICAgICAgIC8vIEFkZCBlYWNoIHdvcmQgdG8gYSBuZXcgdHNwYW5cclxuICAgICAgICAgIHdvcmRzLmZvckVhY2goKHdvcmQsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRleHQuYXBwZW5kKCd0c3BhbicpLnRleHQod29yZCk7XHJcbiAgICAgICAgICAgIC8vIC5hdHRyKCd4JywgJzE1JylcclxuICAgICAgICAgICAgLy8gLmF0dHIoJ2R5JywgaW5kZXggPT09IDAgPyAnMGVtJyA6ICcwLjllbScpIC8vIFJlZHVjZWQgdmVydGljYWwgc3BhY2luZ1xyXG4gICAgICAgICAgICAvLyAuYXR0cigndGV4dC1hbmNob3InLCAnZW5kJyk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZSgnZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIG51bGwpOyAvLyBSZW1vdmUgcm90YXRlIGlmIHVzaW5nIGxpbmUgYnJlYWtzXHJcblxyXG4gICAgICAvLyBPcHRpb25hbDogQWRqdXN0IGJvdHRvbSBtYXJnaW4gb3IgY2hhcnQgbGF5b3V0XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5zZWxlY3QoJy54LWF4aXMnKVxyXG4gICAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsICR7aGVpZ2h0IC0gbWFyZ2luLmJvdHRvbSArIDEwfSlgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIHVzZWQgdG8gd3JpdGUgeSBsYWJlbHMgYmFzZWQgb24gY29uZmlndXJhdGlvblxyXG4gICAgICovXHJcbiAgICBpZiAobWV0YURhdGEueUxhYmVsKSB7XHJcbiAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgIC5hcHBlbmQoJ3RleHQnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMScpXHJcbiAgICAgICAgLmF0dHIoJ3N0eWxlJywgc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ueUF4aXNDdXN0b21sYWJlbFN0eWxlcylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3JvdGF0ZSgtOTApJylcclxuICAgICAgICAuYXR0cigneScsIDAgLSBtYXJnaW4ubGVmdCAvIDIgLSAzMClcclxuICAgICAgICAuYXR0cigneCcsIDAgLSBoZWlnaHQgLyAyKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICcxZW0nKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAuYXR0cignZmlsbCcsICd2YXIoLS1jaGFydC10ZXh0LWNvbG9yKScpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuY2hhcnRDb25maWd1cmF0aW9uLmlzTXVsdGlDaGFydEdyaWRMaW5lID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN2Z1lBeGlzTGVmdFxyXG4gICAgICAgICAgLnNlbGVjdEFsbCgnLmxpYi1heGlzLWdyb3VwLWxhYmVsJylcclxuICAgICAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJ3NtYWxsZXInKVxyXG4gICAgICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvKipcclxuICAgICAgICAgKiB1c2VkIGJ5IHdlZWtseSBjaGFydHNcclxuICAgICAgICAgKi9cclxuICAgICAgICBzdmdcclxuICAgICAgICAgIC5zZWxlY3RBbGwoJy5saWItYXhpcy1ncm91cC1sYWJlbCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLXlsYWJlbC13ZWVrbHlDaGFydHMnKVxyXG4gICAgICAgICAgLnRleHQobWV0YURhdGEueUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydERhdGEudGFyZ2V0TGluZURhdGEpIHtcclxuICAgICAgY29uc3QgeVplcm8gPSB5KHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCk7XHJcbiAgICAgIHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoJ2xpbmUnKVxyXG4gICAgICAgIC5hdHRyKCd4MScsIDApXHJcbiAgICAgICAgLmF0dHIoJ3gyJywgd2lkdGgpXHJcbiAgICAgICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAgICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UtZGFzaGFycmF5JywgJzUgNScpXHJcbiAgICAgICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcbiAgICAgIC8vIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgLy8gICAuYXBwZW5kKCdsaW5lJylcclxuICAgICAgLy8gICAuYXR0cigneDEnLCAwKVxyXG4gICAgICAvLyAgIC5hdHRyKCd4MicsIHJpZ2h0U3ZnV2lkdGgpXHJcbiAgICAgIC8vICAgLmF0dHIoJ3kxJywgeVplcm8pXHJcbiAgICAgIC8vICAgLmF0dHIoJ3kyJywgeVplcm8pXHJcbiAgICAgIC8vICAgLnN0eWxlKCdzdHJva2UnLCB0aGlzLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS5jb2xvcik7XHJcbiAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAuYXBwZW5kKCdmb3JlaWduT2JqZWN0JylcclxuICAgICAgICAuYXR0cigndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgnICsgMCArICcsJyArICh5WmVybyAtIDMwKSArICcpJylcclxuICAgICAgICAuYXR0cignd2lkdGgnLCByaWdodFN2Z1dpZHRoKVxyXG4gICAgICAgIC5hdHRyKCdoZWlnaHQnLCA1MClcclxuICAgICAgICAuYXBwZW5kKCd4aHRtbDpkaXYnKVxyXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICd0YXJnZXQtZGlzcGxheScpXHJcbiAgICAgICAgLnN0eWxlKCdjb2xvcicsIHRoaXMuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLmNvbG9yKVxyXG4gICAgICAgIC5odG1sKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGxldCBkYXRhVHlwZVRlbXAgPSAnJztcclxuICAgICAgICAgIGxldCB0YXJnZXRMaW5lTmFtZSA9ICd0YXJnZXQnO1xyXG4gICAgICAgICAgaWYgKG1ldGFEYXRhLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgIGRhdGFUeXBlVGVtcCA9IG1ldGFEYXRhLmRhdGFUeXBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YSAmJlxyXG4gICAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGFyZ2V0TGluZU5hbWUgPSBzZWxmLmNoYXJ0RGF0YS50YXJnZXRMaW5lRGF0YS50YXJnZXROYW1lO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgYDxkaXY+JHt0YXJnZXRMaW5lTmFtZX08L2Rpdj5gICtcclxuICAgICAgICAgICAgJzxkaXY+JyArXHJcbiAgICAgICAgICAgIHNlbGYuY2hhcnREYXRhLnRhcmdldExpbmVEYXRhLnRhcmdldCArXHJcbiAgICAgICAgICAgICcnICtcclxuICAgICAgICAgICAgZGF0YVR5cGVUZW1wICtcclxuICAgICAgICAgICAgJzwvZGl2PidcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jaGFydENvbmZpZ3VyYXRpb24uaXNEcmlsbGRvd25DaGFydCkge1xyXG4gICAgICAvKipcclxuICAgICAgICogdXNlZCBieSBkcmlsbGRvd24gY2hhcnRzXHJcbiAgICAgICAqL1xyXG4gICAgICAvLyBzdmdcclxuICAgICAgLy8gICAuc2VsZWN0QWxsKCcubGliLWF4aXMtZ3JvdXAtbGFiZWwnKVxyXG4gICAgICAvLyAgIC5hdHRyKCdjbGFzcycsICdsaWIteWxhYmVsLWRyaWxsZG93bmNoYXJ0cycpXHJcbiAgICAgIC8vICAgLnRleHQobWV0YURhdGEueUxhYmVsLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICBzdmcuc2VsZWN0QWxsKCdnLngxLmF4aXMxIGcudGljayBsaW5lJykuc3R5bGUoJ2Rpc3BsYXknLCAnbm9uZScpO1xyXG4gICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChtZXRhRGF0YS54TGFiZWwpIHtcclxuICBmdW5jdGlvbiBpc0Fjcm9ueW0obGFiZWwpIHtcclxuICAgIHJldHVybiAobGFiZWwubGVuZ3RoIDw9IDQgJiYgL15bQS1aXSskLy50ZXN0KGxhYmVsKSkgfHwgKGxhYmVsID09PSBsYWJlbC50b1VwcGVyQ2FzZSgpICYmIC9bQS1aXS8udGVzdChsYWJlbCkpO1xyXG4gIH1cclxuICBjb25zdCB4TGFiZWxUZXh0ID0gbWV0YURhdGEueExhYmVsO1xyXG4gIGNvbnN0IGlzQWNyID0gaXNBY3JvbnltKHhMYWJlbFRleHQucmVwbGFjZSgvW15BLVphLXpdL2csICcnKSk7XHJcbiAgc3ZnXHJcbiAgICAuYXBwZW5kKCd0ZXh0JylcclxuLmF0dHIoJ2NsYXNzJywgZnVuY3Rpb24oKSB7XHJcbiAgbGV0IGJhc2VDbGFzcyA9ICdsaWItYXhpcy1ncm91cC1sYWJlbCBmb250LXNpemUtMSc7XHJcbiAgaWYgKHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmlzRHJpbGxkb3duQ2hhcnQpIHJldHVybiBiYXNlQ2xhc3MgKyAnIGxpYi14bGFiZWwtZHJpbGxkb3duY2hhcnRzJztcclxuICBpZiAoc2VsZi5jaGFydENvbmZpZ3VyYXRpb24uaXNNdWx0aUNoYXJ0R3JpZExpbmUgIT0gdW5kZWZpbmVkKSByZXR1cm4gYmFzZUNsYXNzICsgJyBsaWIteGxhYmVsLXdlZWtseUNoYXJ0cyc7XHJcbiAgcmV0dXJuIGJhc2VDbGFzcyArICcgbGliLWF4aXMtd2F0ZXJmYWxsLWxhYmVsJztcclxufSlcclxuICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnhBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAuYXR0cihcclxuICAgICAgJ3RyYW5zZm9ybScsXHJcbiAgICAgICd0cmFuc2xhdGUoJyArIHdpZHRoIC8gMiArICcgLCcgKyAoaGVpZ2h0ICsgbWFyZ2luLnRvcCArIDQwKSArICcpJ1xyXG4gICAgKVxyXG4gICAgLnN0eWxlKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxyXG4gICAgLnN0eWxlKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgIC5zdHlsZSgnY29sb3InLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgLnRleHQoaXNBY3IgPyB4TGFiZWxUZXh0LnRvVXBwZXJDYXNlKCkgOiB4TGFiZWxUZXh0LnRvTG93ZXJDYXNlKCkpXHJcbiAgICAuc3R5bGUoJ3RleHQtdHJhbnNmb3JtJywgaXNBY3IgPyAnbm9uZScgOiAnY2FwaXRhbGl6ZScpXHJcbn1cclxuICAgIGlmIChtZXRhRGF0YS5saW5leUxhYmVsKSB7XHJcbiAgICAgIHN2Z1lBeGlzUmlnaHRcclxuICAgICAgICAuYXBwZW5kKCd0ZXh0JylcclxuICAgICAgICAuYXR0cignY2xhc3MnLCAnbGliLWF4aXMtZ3JvdXAtbGFiZWwgbGliLWxpbmUtYXhpcycpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAndmFyKC0tY2hhcnQtdGV4dC1jb2xvciknKVxyXG4gICAgICAgIC5hdHRyKCdzdHlsZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLnlBeGlzQ3VzdG9tbGFiZWxTdHlsZXMpXHJcbiAgICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwwKSByb3RhdGUoOTApJylcclxuICAgICAgICAuYXR0cigneScsIDAgLSAxMDApXHJcbiAgICAgICAgLmF0dHIoJ3gnLCAwICsgMTAwKVxyXG4gICAgICAgIC5hdHRyKCdkeScsICc1ZW0nKVxyXG4gICAgICAgIC5zdHlsZSgndGV4dC1hbmNob3InLCAnbWlkZGxlJylcclxuICAgICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICdzbWFsbGVyJylcclxuICAgICAgICAudGV4dChtZXRhRGF0YS5saW5leUxhYmVsKTtcclxuICAgIH1cclxuICAgIGlmIChsaW5lRGF0YSkge1xyXG4gICAgICBzdmdcclxuICAgICAgICAuYXBwZW5kKCdwYXRoJylcclxuICAgICAgICAuZGF0dW0obGluZURhdGEpXHJcbiAgICAgICAgLmF0dHIoJ2ZpbGwnLCAnbm9uZScpXHJcbiAgICAgICAgLmF0dHIoJ3N0cm9rZScsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgIC5hdHRyKCdzdHJva2Utd2lkdGgnLCAxLjUpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAnZCcsXHJcbiAgICAgICAgICBkM1xyXG4gICAgICAgICAgICAubGluZSgpXHJcbiAgICAgICAgICAgIC54KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHgoZC5uYW1lKSArIHguYmFuZHdpZHRoKCkgLyAyO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAueShmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICB2YXIgZG90ID0gc3ZnXHJcbiAgICAgICAgLnNlbGVjdEFsbCgnbXlDaXJjbGVzJylcclxuICAgICAgICAuZGF0YShsaW5lRGF0YSlcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoJ2cnKVxyXG4gICAgICAgIC5vbignY2xpY2snLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhbWV0YURhdGEuYmFyV2l0aG91dENsaWNrIHx8XHJcbiAgICAgICAgICAgICFtZXRhRGF0YS5iYXJXaXRob3V0Q2xpY2subGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICghbWV0YURhdGEuYmFyV2l0aG91dENsaWNrLmluY2x1ZGVzKGQ/Lm5hbWUpICYmXHJcbiAgICAgICAgICAgICAgIW1ldGFEYXRhLmJhcldpdGhvdXRDbGljay5pbmNsdWRlcyhkPy5rZXkpKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUNsaWNrKGQpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgZG90XHJcbiAgICAgICAgLmFwcGVuZCgnY2lyY2xlJylcclxuICAgICAgICAuYXR0cignZmlsbCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4gc2VsZi5jaGFydENvbmZpZ3VyYXRpb24ubGluZUdyYXBoQ29sb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignc3Ryb2tlJywgJ25vbmUnKVxyXG4gICAgICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICByZXR1cm4geChkLm5hbWUpICsgeC5iYW5kd2lkdGgoKSAvIDI7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cignY3knLCBmdW5jdGlvbiAoZCkge1xyXG4gICAgICAgICAgcmV0dXJuIGxpbmVZc2NhbGUoZC52YWx1ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoJ2N1cnNvcicsICgpID0+XHJcbiAgICAgICAgICBzZWxmLmNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gPyAncG9pbnRlcicgOiAnZGVmYXVsdCdcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoJ3InLCAzKTtcclxuXHJcbiAgICAgIGlmIChzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5saW5lR3JhcGhDb2xvcikge1xyXG4gICAgICAgIGRvdFxyXG4gICAgICAgICAgLmFwcGVuZCgndGV4dCcpXHJcbiAgICAgICAgICAuYXR0cignY2xhc3MnLCAnZG90JylcclxuICAgICAgICAgIC5hdHRyKCdmaWxsJywgJ3ZhcigtLWNoYXJ0LXRleHQtY29sb3IpJylcclxuICAgICAgICAgIC5hdHRyKCdjb2xvcicsIHNlbGYuY2hhcnRDb25maWd1cmF0aW9uLmxpbmVHcmFwaENvbG9yKVxyXG4gICAgICAgICAgLmF0dHIoJ3N0eWxlJywgJ2ZvbnQtc2l6ZTogJyArICcuODVlbScpXHJcbiAgICAgICAgICAuYXR0cigneCcsIGZ1bmN0aW9uIChkLCBpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4KGQubmFtZSkgKyB4LmJhbmR3aWR0aCgpIC8gMjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuYXR0cigneScsIGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBsaW5lWXNjYWxlKGQudmFsdWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5hdHRyKCdkeScsICctMWVtJylcclxuICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNoYXJ0Q29uZmlndXJhdGlvbi5sYWJlbEZvcm1hdHRlcihkLnZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDbGljayhkOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNoYXJ0RGF0YS5tZXRhRGF0YS5oYXNEcmlsbERvd24gfHwgZD8udG9nZ2xlRnJvbSlcclxuICAgICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoZCk7XHJcbiAgfVxyXG4gIGhhbmRsZUhlYWRlck1lbnVDbGljayhpZCkge1xyXG4gICAgdGhpcy5oZWFkZXJNZW51Y2xpY2tFdmVudC5lbWl0KGlkKTtcclxuICB9XHJcbiAgaGFuZGxlREQxQ2xpY2soZXZlbnQpIHtcclxuICAgIHRoaXMuaXNERDFPcGVuID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNERDJPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG4gIGhhbmRsZUREMkNsaWNrKGV2ZW50KSB7XHJcbiAgICB0aGlzLmlzREQyT3BlbiA9IHRydWU7XHJcbiAgICB0aGlzLmlzREQxT3BlbiA9IGZhbHNlO1xyXG4gIH1cclxuICBoYW5kbGVDb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24oZXZlbnQpIHtcclxuICAgIHRoaXMuY2xpY2tFdmVudC5lbWl0KGV2ZW50KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gICNncm91cGNvbnRhaW5lclxyXG4gIGNsYXNzPVwibGliLWNoYXJ0LXdyYXBwZXJcIlxyXG4gIFtuZ0NsYXNzXT1cInsgJ2xpYi1uby1iYWNrZ3JvdW5kJzogaXNUcmFuc3BhcmVudEJhY2tncm91bmQgfVwiXHJcbiAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jYXJkLWJnKTtcIlxyXG4gIChyZXNpemVkKT1cIm9uUmVzaXplZCgkZXZlbnQpXCJcclxuPlxyXG4gIDxkaXYgY2xhc3M9XCJoZWFkZXItYWx0XCIgKm5nSWY9XCIhaXNIZWFkZXJWaXNpYmxlXCI+XHJcbiAgICA8bGliLWNoYXJ0LWhlYWRlci12MlxyXG4gICAgICBbY2hhcnREYXRhXT1cImNoYXJ0RGF0YVwiXHJcbiAgICAgIFtjaGFydENvbmZpZ3VyYXRpb25dPVwiY2hhcnRDb25maWd1cmF0aW9uXCJcclxuICAgICAgKGNsaWNrRXZlbnQpPVwiaGFuZGxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICA+PC9saWItY2hhcnQtaGVhZGVyLXYyPlxyXG4gICAgPGxpYi1jaGFydC1oZWFkZXItdjNcclxuICAgICAgW2NoYXJ0RGF0YV09XCJjaGFydERhdGFcIlxyXG4gICAgICBbY2hhcnRDb25maWd1cmF0aW9uXT1cImNoYXJ0Q29uZmlndXJhdGlvblwiXHJcbiAgICAgIChjb21wYXJlQnlGaWx0ZXJTZWxlY3Rpb24pPVwiaGFuZGxlQ29tcGFyZUJ5RmlsdGVyU2VsZWN0aW9uKCRldmVudClcIlxyXG4gICAgICAoem9vbUluWm9vbU91dENsaWNrKT1cImhhbmRsZVpvb21pblpvb21vdXRDbGljaygkZXZlbnQpXCJcclxuICAgID48L2xpYi1jaGFydC1oZWFkZXItdjM+XHJcbiAgPC9kaXY+XHJcbiAgPGxpYi1jaGFydC1oZWFkZXItdjFcclxuICAgIFt0aXRsZV09XCJjaGFydERhdGEubWV0YURhdGEudGl0bGVcIlxyXG4gICAgW2hhc0RyaWxsRG93bl09XCJjaGFydERhdGEubWV0YURhdGEuaGFzRHJpbGxEb3duXCJcclxuICAgIFtpc0VkaXRFbmFibGVkXT1cImNoYXJ0RGF0YS5tZXRhRGF0YS5pc0VkaXRFbmFibGVkXCJcclxuICAgIFttZW51T3B0aW9uc109XCJjaGFydENvbmZpZ3VyYXRpb24uaGVhZGVyTWVudU9wdGlvbnNcIlxyXG4gICAgW2lzcmlhXT1cImN1c3RvbUNoYXJ0Q29uZmlndXJhdGlvbi5pc1JpYVwiXHJcbiAgICBbc2VsZWN0ZWRLcGlUb29sdG9wXT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zZWxlY3RlZEtwaVRvb2x0b3BcIlxyXG4gICAgKG1lbnVPcHRpb25DbGlja0V2ZW50KT1cImhhbmRsZUhlYWRlck1lbnVDbGljaygkZXZlbnQpXCJcclxuICAgIFtpc0FsZXJ0RW5hYmxlZF09XCJpc0FsZXJ0RW5hYmxlZFwiXHJcbiAgICAqbmdJZj1cImlzSGVhZGVyVmlzaWJsZVwiXHJcbiAgPjwvbGliLWNoYXJ0LWhlYWRlci12MT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIlxyXG4gICAgICBjaGFydERhdGEgJiZcclxuICAgICAgY2hhcnREYXRhLm1ldGFEYXRhICYmXHJcbiAgICAgIGNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRKdXN0aWZpZWQgJiZcclxuICAgICAgbGVnZW5kVmlzaWJsZSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kQXRUb3BSaWdodFxyXG4gICAgXCJcclxuICAgIGNsYXNzPVwibGVnZW5kLWhvbGRlci1yaWdodFwiXHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5mb290ZXJIZWlnaHRcIlxyXG4gID5cclxuICAgIDx1bCBjbGFzcz1cImRpc3BsYXktZmxleFwiPlxyXG4gICAgICA8bGlcclxuICAgICAgICBjbGFzcz1cImxlZ2VuZHMtcG9zaXRpb25pbmctaW5saW5lXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWUgOiBrZWVwT3JkZXJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pY29uLWRyaWxsZG93blwiXHJcbiAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICA+PC9zcGFuXHJcbiAgICAgICAgPjxzcGFuPnt7IGl0ZW0ua2V5IH19PC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0Q29uZmlndXJhdGlvbi5zdmdIZWlnaHRcIlxyXG4gICAgaWQ9XCJncm91cGNoYXJ0Y29udGFpbmVyXCJcclxuICAgICNncm91cGNoYXJ0Y29udGFpbmVyXHJcbiAgICBjbGFzcz1cImxpYi1jaGFydC1zdmdcIlxyXG4gID48L2Rpdj5cclxuXHJcblxyXG4gIDwhLS0gPGRpdlxyXG4gICAgKm5nSWY9XCJcclxuICAgICAgY2hhcnREYXRhICYmXHJcbiAgICAgIGNoYXJ0RGF0YS5tZXRhRGF0YSAmJlxyXG4gICAgICBjaGFydENvbmZpZ3VyYXRpb24ubGVnZW5kSnVzdGlmaWVkICYmXHJcbiAgICAgIGxlZ2VuZFZpc2libGUgJiZcclxuICAgICAgIWNoYXJ0Q29uZmlndXJhdGlvbi5sZWdlbmRBdFRvcFJpZ2h0XHJcbiAgICBcIlxyXG4gICAgY2xhc3M9XCJsaWItZG9udXQtY2hhcnQtZm9vdGVyXCJcclxuICAgIFtzdHlsZS5oZWlnaHRdPVwiY2hhcnRDb25maWd1cmF0aW9uLmZvb3RlckhlaWdodFwiXHJcbiAgPlxyXG4gICAgPHVsIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC13cmFwcGVyXCI+XHJcbiAgICAgIDxsaVxyXG4gICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pdGVtXCJcclxuICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHNwYW5cclxuICAgICAgICAgIGNsYXNzPVwibGliLWRvbnV0LWp1c3RpZmllZC1sYWJlbC1pY29uXCJcclxuICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgID48L3NwYW5cclxuICAgICAgICA+PHNwYW4+e3sgaXRlbS5rZXkgfX08L3NwYW4+XHJcbiAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gIDwvZGl2PiAtLT5cclxuXHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cImNoYXJ0Q29uZmlndXJhdGlvbj8uaXNEaXNwbGF5QmFyRGV0YWlsc0F0Qm90dG9tXCI+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwiYmFyLXZhbHVlcyBsaWItZGlzcGxheS1mbGV4IGxpYi1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGxpYi1hbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAqbmdGb3I9XCJcclxuICAgICAgICBsZXQgaXRlbSBvZiBjaGFydERhdGEubWV0YURhdGEuY29sb3JzIHwga2V5dmFsdWUgOiBrZWVwT3JkZXI7XHJcbiAgICAgICAgbGV0IGkgPSBpbmRleFxyXG4gICAgICBcIj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiYmFyLW5hbWUgZm9udC1zaXplLTFcIlxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gJiZcclxuICAgICAgICAgIGkgPD0gY2hhcnRDb25maWd1cmF0aW9uLmhvd21hbnlCYXJEZXRhaWxzVG9EaXNwbGF5XHJcbiAgICAgICAgXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGl0ZW0ua2V5IH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJiYXItdmFsdWUgbGliLWRpc3BsYXktZmxleCBsaWItYWxpZ24taXRlbXMtY2VudGVyIGZvbnQtc2l6ZS0xXCJcclxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiXHJcbiAgICAgICAgICBjaGFydENvbmZpZ3VyYXRpb24uYmFyVmF1bGVDb2xvciA/IGJhclZhdWxlQ29sb3IgOiBpdGVtLnZhbHVlXHJcbiAgICAgICAgXCJcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgY2hhcnREYXRhLmRhdGFbMF1baXRlbS5rZXldICYmXHJcbiAgICAgICAgICBpIDw9IGNoYXJ0Q29uZmlndXJhdGlvbi5ob3dtYW55QmFyRGV0YWlsc1RvRGlzcGxheVxyXG4gICAgICAgIFwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBjaGFydERhdGEuZGF0YVswXVtpdGVtLmtleV0gfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj4gLS0+XHJcbjwvZGl2PlxyXG4iXX0=