@hestia-earth/ui-components 0.22.0 → 0.22.2

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.
@@ -24,10 +24,10 @@ export class TagsInputDirective {
24
24
  return this.elementRef.nativeElement;
25
25
  }
26
26
  get tagsInputNode() {
27
- return this.elementRef.nativeElement.parentNode.querySelectorAll('.tags-input')[0];
27
+ return this.elementRef.nativeElement?.parentNode?.querySelectorAll('.tags-input')?.[0];
28
28
  }
29
29
  get tagsInputInput() {
30
- return this.tagsInputNode.querySelectorAll('.input')[0];
30
+ return this.tagsInputNode?.querySelectorAll('.input')?.[0];
31
31
  }
32
32
  setInputEvent({ event, listener }) {
33
33
  this.tagsInputInput.addEventListener(event, listener);
@@ -39,7 +39,7 @@ export class TagsInputDirective {
39
39
  addInputValue(value) {
40
40
  if (value && this.mapValue(value)) {
41
41
  this.tagsInput.add(value);
42
- this.tagsInputInput.value = '';
42
+ this.tagsInputInput && (this.tagsInputInput.value = '');
43
43
  }
44
44
  }
45
45
  enableTagsInput() {
@@ -48,11 +48,11 @@ export class TagsInputDirective {
48
48
  this.tagsInput = new BulmaTagsInput(this.input, options);
49
49
  // TODO: remove when fixed, @see https://github.com/CreativeBulma/bulma-tagsinput/issues/23
50
50
  const classes = ['is-small', 'is-large'].filter(v => this.input.classList.contains(v));
51
- classes.map(v => this.tagsInputNode.classList.add(v));
51
+ this.tagsInputNode && classes.map(v => this.tagsInputNode.classList.add(v));
52
52
  // regex pattern matching
53
53
  this.tagsInput.on('before.add', value => this.mapValue(value));
54
54
  // add item on blur if value
55
- const onBlur = () => this.addInputValue(this.tagsInputInput.value);
55
+ const onBlur = () => this.addInputValue(this.tagsInputInput?.value);
56
56
  this.setInputEvent({ event: 'blur', listener: onBlur });
57
57
  }
58
58
  catch (err) {
@@ -70,4 +70,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.8", ngImpor
70
70
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { appTagsInput: [{
71
71
  type: Input
72
72
  }] } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3RhZ3MtaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLGNBQWMsTUFBTSxlQUFlLENBQUM7O0FBNkIzQyxNQUFNLGNBQWMsR0FFaEI7SUFDRixNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDeEQsQ0FBQztBQVVGLE1BQU0sT0FBTyxrQkFBa0I7SUFPN0IsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUxsQyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUczQixpQkFBWSxHQUFzQixFQUFFLENBQUM7SUFFQSxDQUFDO0lBRTlDLGVBQWU7UUFDYixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN0QyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FB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QUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCO2lHQU1TLFlBQVk7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBCdWxtYVRhZ3NJbnB1dCBmcm9tICcuLi90YWdzLWlucHV0JztcblxuaW50ZXJmYWNlIElUYWdzSW5wdXRPcHRpb25zIHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG4gIGl0ZW1zPzogYW55O1xuICBhbGxvd0R1cGxpY2F0ZXM/OiBib29sZWFuO1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgY2xlYXJTZWxlY3Rpb25PblR5cGluZz86IGJvb2xlYW47XG4gIGNsb3NlRHJvcGRvd25Pbkl0ZW1TZWxlY3Q/OiBib29sZWFuO1xuICBkZWxpbWl0ZXI/OiBzdHJpbmc7XG4gIGZyZWVJbnB1dD86IGJvb2xlYW47XG4gIGhpZ2hsaWdodER1cGxpY2F0ZT86IGJvb2xlYW47XG4gIGhpZ2hsaWdodE1hdGNoZXNTdHJpbmc/OiBib29sZWFuO1xuICBpdGVtVmFsdWU/OiBzdHJpbmc7XG4gIGl0ZW1UZXh0Pzogc3RyaW5nO1xuICBtYXhUYWdzPzogbnVtYmVyO1xuICBtYXhDaGFycz86IG51bWJlcjtcbiAgbWluQ2hhcnM/OiBudW1iZXI7XG4gIG5vUmVzdWx0c0xhYmVsPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgcmVtb3ZhYmxlPzogYm9vbGVhbjtcbiAgc2VhcmNoTWluQ2hhcnM/OiBudW1iZXI7XG4gIHNlYXJjaE9uPzogJ3RleHQnIHwgJ3ZhbHVlJztcbiAgc2VsZWN0YWJsZT86IGJvb2xlYW47XG4gIHNvdXJjZT86IGFueTtcbiAgdGFnQ2xhc3M/OiBzdHJpbmc7XG4gIHRyaW0/OiBib29sZWFuO1xufVxuXG5jb25zdCByZXN0cmljdFRvVHlwZToge1xuICBbdHlwZTogc3RyaW5nXTogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59ID0ge1xuICBudW1iZXI6IHZhbCA9PiAocGFyc2VGbG9hdCh2YWwpID09PSArdmFsID8gdmFsIDogZmFsc2UpXG59O1xuXG5pbnRlcmZhY2UgSUV2ZW50IHtcbiAgZXZlbnQ6IGFueTtcbiAgbGlzdGVuZXI6IGFueTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcFRhZ3NJbnB1dF0nXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NJbnB1dERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgdGFnc0lucHV0PzogQnVsbWFUYWdzSW5wdXQ7XG4gIHByaXZhdGUgaW5wdXRFdmVudHM6IElFdmVudFtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBhcHBUYWdzSW5wdXQ6IElUYWdzSW5wdXRPcHRpb25zID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCB7IGVuYWJsZWQgfSA9IHRoaXMuYXBwVGFnc0lucHV0O1xuICAgIGNvbnN0IHsgbG9jYWxOYW1lIH0gPSB0aGlzLmlucHV0O1xuICAgIHNldFRpbWVvdXQoKCkgPT4gIXRoaXMudGFnc0lucHV0ICYmIGVuYWJsZWQgJiYgbG9jYWxOYW1lID09PSAnaW5wdXQnICYmIHRoaXMuZW5hYmxlVGFnc0lucHV0KCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5pbnB1dEV2ZW50cy5tYXAoKHsgZXZlbnQsIGxpc3RlbmVyIH0pID0+IHRoaXMudGFnc0lucHV0SW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpKTtcbiAgICB0aGlzLmlucHV0RXZlbnRzID0gW107XG4gICAgdGhpcy50YWdzSW5wdXQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBpbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRhZ3NJbnB1dE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLnRhZ3MtaW5wdXQnKVswXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRhZ3NJbnB1dElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLnRhZ3NJbnB1dE5vZGUucXVlcnlTZWxlY3RvckFsbCgnLmlucHV0JylbMF0gYXMgSFRNTElucHV0RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5wdXRFdmVudCh7IGV2ZW50LCBsaXN0ZW5lciB9OiBJRXZlbnQpIHtcbiAgICB0aGlzLnRhZ3NJbnB1dElucHV0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyKTtcbiAgICB0aGlzLmlucHV0RXZlbnRzLnB1c2goeyBldmVudCwgbGlzdGVuZXIgfSk7XG4gIH1cblxuICBwcml2YXRlIG1hcFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcHBUYWdzSW5wdXQuaXRlbXMudHlwZSBpbiByZXN0cmljdFRvVHlwZSA/IHJlc3RyaWN0VG9UeXBlW3RoaXMuYXBwVGFnc0lucHV0Lml0ZW1zLnR5cGVdKHZhbHVlKSA6IHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRJbnB1dFZhbHVlKHZhbHVlPzogc3RyaW5nKSB7XG4gICAgaWYgKHZhbHVlICYmIHRoaXMubWFwVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aGlzLnRhZ3NJbnB1dCEuYWRkKHZhbHVlKTtcbiAgICAgIHRoaXMudGFnc0lucHV0SW5wdXQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGVuYWJsZVRhZ3NJbnB1dCgpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBlbmFibGVkLCBpdGVtcywgLi4ub3B0aW9ucyB9ID0gdGhpcy5hcHBUYWdzSW5wdXQ7XG4gICAgICB0aGlzLnRhZ3NJbnB1dCA9IG5ldyBCdWxtYVRhZ3NJbnB1dCh0aGlzLmlucHV0LCBvcHRpb25zKTtcblxuICAgICAgLy8gVE9ETzogcmVtb3ZlIHdoZW4gZml4ZWQsIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0NyZWF0aXZlQnVsbWEvYnVsbWEtdGFnc2lucHV0L2lzc3Vlcy8yM1xuICAgICAgY29uc3QgY2xhc3NlcyA9IFsnaXMtc21hbGwnLCAnaXMtbGFyZ2UnXS5maWx0ZXIodiA9PiB0aGlzLmlucHV0LmNsYXNzTGlzdC5jb250YWlucyh2KSk7XG4gICAgICBjbGFzc2VzLm1hcCh2ID0+IHRoaXMudGFnc0lucHV0Tm9kZS5jbGFzc0xpc3QuYWRkKHYpKTtcblxuICAgICAgLy8gcmVnZXggcGF0dGVybiBtYXRjaGluZ1xuICAgICAgdGhpcy50YWdzSW5wdXQub24oJ2JlZm9yZS5hZGQnLCB2YWx1ZSA9PiB0aGlzLm1hcFZhbHVlKHZhbHVlKSk7XG5cbiAgICAgIC8vIGFkZCBpdGVtIG9uIGJsdXIgaWYgdmFsdWVcbiAgICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHRoaXMuYWRkSW5wdXRWYWx1ZSh0aGlzLnRhZ3NJbnB1dElucHV0LnZhbHVlKTtcbiAgICAgIHRoaXMuc2V0SW5wdXRFdmVudCh7IGV2ZW50OiAnYmx1cicsIGxpc3RlbmVyOiBvbkJsdXIgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuICB9XG59XG4iXX0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFncy1pbnB1dC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tbW9uL3RhZ3MtaW5wdXQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsU0FBUyxFQUFjLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLGNBQWMsTUFBTSxlQUFlLENBQUM7O0FBNkIzQyxNQUFNLGNBQWMsR0FFaEI7SUFDRixNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7Q0FDeEQsQ0FBQztBQVVGLE1BQU0sT0FBTyxrQkFBa0I7SUFPN0IsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUxsQyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUczQixpQkFBWSxHQUFzQixFQUFFLENBQUM7SUFFQSxDQUFDO0lBRTlDLGVBQWU7UUFDYixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN0QyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNqQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLE9BQU8sSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FB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QUNwQjtJQUNILENBQUM7OEdBbkVVLGtCQUFrQjtrR0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzNCO2lHQU1TLFlBQVk7c0JBRG5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBCdWxtYVRhZ3NJbnB1dCBmcm9tICcuLi90YWdzLWlucHV0JztcblxuaW50ZXJmYWNlIElUYWdzSW5wdXRPcHRpb25zIHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG4gIGl0ZW1zPzogYW55O1xuICBhbGxvd0R1cGxpY2F0ZXM/OiBib29sZWFuO1xuICBjYXNlU2Vuc2l0aXZlPzogYm9vbGVhbjtcbiAgY2xlYXJTZWxlY3Rpb25PblR5cGluZz86IGJvb2xlYW47XG4gIGNsb3NlRHJvcGRvd25Pbkl0ZW1TZWxlY3Q/OiBib29sZWFuO1xuICBkZWxpbWl0ZXI/OiBzdHJpbmc7XG4gIGZyZWVJbnB1dD86IGJvb2xlYW47XG4gIGhpZ2hsaWdodER1cGxpY2F0ZT86IGJvb2xlYW47XG4gIGhpZ2hsaWdodE1hdGNoZXNTdHJpbmc/OiBib29sZWFuO1xuICBpdGVtVmFsdWU/OiBzdHJpbmc7XG4gIGl0ZW1UZXh0Pzogc3RyaW5nO1xuICBtYXhUYWdzPzogbnVtYmVyO1xuICBtYXhDaGFycz86IG51bWJlcjtcbiAgbWluQ2hhcnM/OiBudW1iZXI7XG4gIG5vUmVzdWx0c0xhYmVsPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgcmVtb3ZhYmxlPzogYm9vbGVhbjtcbiAgc2VhcmNoTWluQ2hhcnM/OiBudW1iZXI7XG4gIHNlYXJjaE9uPzogJ3RleHQnIHwgJ3ZhbHVlJztcbiAgc2VsZWN0YWJsZT86IGJvb2xlYW47XG4gIHNvdXJjZT86IGFueTtcbiAgdGFnQ2xhc3M/OiBzdHJpbmc7XG4gIHRyaW0/OiBib29sZWFuO1xufVxuXG5jb25zdCByZXN0cmljdFRvVHlwZToge1xuICBbdHlwZTogc3RyaW5nXTogKHZhbHVlOiBzdHJpbmcpID0+IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW47XG59ID0ge1xuICBudW1iZXI6IHZhbCA9PiAocGFyc2VGbG9hdCh2YWwpID09PSArdmFsID8gdmFsIDogZmFsc2UpXG59O1xuXG5pbnRlcmZhY2UgSUV2ZW50IHtcbiAgZXZlbnQ6IGFueTtcbiAgbGlzdGVuZXI6IGFueTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcFRhZ3NJbnB1dF0nXG59KVxuZXhwb3J0IGNsYXNzIFRhZ3NJbnB1dERpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgdGFnc0lucHV0PzogQnVsbWFUYWdzSW5wdXQ7XG4gIHByaXZhdGUgaW5wdXRFdmVudHM6IElFdmVudFtdID0gW107XG5cbiAgQElucHV0KClcbiAgcHJpdmF0ZSBhcHBUYWdzSW5wdXQ6IElUYWdzSW5wdXRPcHRpb25zID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBjb25zdCB7IGVuYWJsZWQgfSA9IHRoaXMuYXBwVGFnc0lucHV0O1xuICAgIGNvbnN0IHsgbG9jYWxOYW1lIH0gPSB0aGlzLmlucHV0O1xuICAgIHNldFRpbWVvdXQoKCkgPT4gIXRoaXMudGFnc0lucHV0ICYmIGVuYWJsZWQgJiYgbG9jYWxOYW1lID09PSAnaW5wdXQnICYmIHRoaXMuZW5hYmxlVGFnc0lucHV0KCkpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5pbnB1dEV2ZW50cy5tYXAoKHsgZXZlbnQsIGxpc3RlbmVyIH0pID0+IHRoaXMudGFnc0lucHV0SW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgbGlzdGVuZXIpKTtcbiAgICB0aGlzLmlucHV0RXZlbnRzID0gW107XG4gICAgdGhpcy50YWdzSW5wdXQgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldCBpbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHRhZ3NJbnB1dE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5wYXJlbnROb2RlPy5xdWVyeVNlbGVjdG9yQWxsKCcudGFncy1pbnB1dCcpPy5bMF07XG4gIH1cblxuICBwcml2YXRlIGdldCB0YWdzSW5wdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy50YWdzSW5wdXROb2RlPy5xdWVyeVNlbGVjdG9yQWxsKCcuaW5wdXQnKT8uWzBdIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIHNldElucHV0RXZlbnQoeyBldmVudCwgbGlzdGVuZXIgfTogSUV2ZW50KSB7XG4gICAgdGhpcy50YWdzSW5wdXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lcik7XG4gICAgdGhpcy5pbnB1dEV2ZW50cy5wdXNoKHsgZXZlbnQsIGxpc3RlbmVyIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBWYWx1ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwVGFnc0lucHV0Lml0ZW1zLnR5cGUgaW4gcmVzdHJpY3RUb1R5cGUgPyByZXN0cmljdFRvVHlwZVt0aGlzLmFwcFRhZ3NJbnB1dC5pdGVtcy50eXBlXSh2YWx1ZSkgOiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkSW5wdXRWYWx1ZSh2YWx1ZT86IHN0cmluZykge1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLm1hcFZhbHVlKHZhbHVlKSkge1xuICAgICAgdGhpcy50YWdzSW5wdXQhLmFkZCh2YWx1ZSk7XG4gICAgICB0aGlzLnRhZ3NJbnB1dElucHV0ICYmICh0aGlzLnRhZ3NJbnB1dElucHV0LnZhbHVlID0gJycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlVGFnc0lucHV0KCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGVuYWJsZWQsIGl0ZW1zLCAuLi5vcHRpb25zIH0gPSB0aGlzLmFwcFRhZ3NJbnB1dDtcbiAgICAgIHRoaXMudGFnc0lucHV0ID0gbmV3IEJ1bG1hVGFnc0lucHV0KHRoaXMuaW5wdXQsIG9wdGlvbnMpO1xuXG4gICAgICAvLyBUT0RPOiByZW1vdmUgd2hlbiBmaXhlZCwgQHNlZSBodHRwczovL2dpdGh1Yi5jb20vQ3JlYXRpdmVCdWxtYS9idWxtYS10YWdzaW5wdXQvaXNzdWVzLzIzXG4gICAgICBjb25zdCBjbGFzc2VzID0gWydpcy1zbWFsbCcsICdpcy1sYXJnZSddLmZpbHRlcih2ID0+IHRoaXMuaW5wdXQuY2xhc3NMaXN0LmNvbnRhaW5zKHYpKTtcbiAgICAgIHRoaXMudGFnc0lucHV0Tm9kZSAmJiBjbGFzc2VzLm1hcCh2ID0+IHRoaXMudGFnc0lucHV0Tm9kZS5jbGFzc0xpc3QuYWRkKHYpKTtcblxuICAgICAgLy8gcmVnZXggcGF0dGVybiBtYXRjaGluZ1xuICAgICAgdGhpcy50YWdzSW5wdXQub24oJ2JlZm9yZS5hZGQnLCB2YWx1ZSA9PiB0aGlzLm1hcFZhbHVlKHZhbHVlKSk7XG5cbiAgICAgIC8vIGFkZCBpdGVtIG9uIGJsdXIgaWYgdmFsdWVcbiAgICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHRoaXMuYWRkSW5wdXRWYWx1ZSh0aGlzLnRhZ3NJbnB1dElucHV0Py52YWx1ZSk7XG4gICAgICB0aGlzLnNldElucHV0RXZlbnQoeyBldmVudDogJ2JsdXInLCBsaXN0ZW5lcjogb25CbHVyIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -187,6 +187,7 @@ export const isAddPropertyEnabled = (node, schemaType, schema, fullKey = '') =>
187
187
  (!fullKey || nestingTypeEnabled(schemaType));
188
188
  const editableKey = (key) => !['type', '@type', 'termType'].includes(key);
189
189
  export const propertyId = () => uuidv4();
190
+ const isGeojson = (schema) => schema.geojson;
190
191
  const propertyUrl = (node, key) => ['@id', 'name'].includes(key) && linkTypeEnabled(node['@type'])
191
192
  ? node['@id']
192
193
  ? {
@@ -211,11 +212,13 @@ const propertyMapsUrl = (node, key, value) => ['type'].includes(key) &&
211
212
  : undefined;
212
213
  const propertyExternalUrl = (node, key, value) => propertyUrl(node, key) || propertyMapsUrl(node, key, value);
213
214
  const arrayPlaceholder = (valueType) => `Type a ${valueType} then press Enter`;
214
- const defaultPlaceholder = ({ type, examples }, valueType) => examples?.length
215
- ? Array.isArray(examples[0])
216
- ? arrayPlaceholder(valueType)
217
- : examples[0]
218
- : `Must be of type ${type || valueType}`;
215
+ const defaultPlaceholder = ({ type, examples, geojson }, valueType) => geojson
216
+ ? 'Must be a valid GeoJSON'
217
+ : examples?.length
218
+ ? Array.isArray(examples[0])
219
+ ? arrayPlaceholder(valueType)
220
+ : examples[0]
221
+ : `Must be of type ${type || valueType}`;
219
222
  const schemaPlacholder = (schema, fullKey) => {
220
223
  const [parent, ...keys] = fullKey.split('.');
221
224
  const properties = schema.properties || {};
@@ -243,20 +246,24 @@ const propertyTypeValue = {
243
246
  boolean: val => (`${val}` || '').toLowerCase() === 'true'
244
247
  };
245
248
  const propertyValue = (schema, value) => {
246
- const valueType = schema.type
247
- ? Array.isArray(schema.type) && typeof value in propertyTypeValue
248
- ? typeof value
249
- : schema.type
250
- : 'object';
249
+ const valueType = isGeojson(schema)
250
+ ? 'json'
251
+ : schema.type
252
+ ? Array.isArray(schema.type) && typeof value in propertyTypeValue
253
+ ? typeof value
254
+ : schema.type
255
+ : 'object';
251
256
  return propertyTypeValue[valueType in propertyTypeValue ? valueType : 'string'](value, schema);
252
257
  };
253
- const propertyValueType = (schema, value) => (schema.type
254
- ? Array.isArray(schema.type)
255
- ? schema.type[0]
256
- : schema.type === 'array'
257
- ? propertyValueType({ ...schema, type: [schema.items.type] })
258
- : schema.type
259
- : typeof value);
258
+ const propertyValueType = (schema, value) => (isGeojson(schema)
259
+ ? 'json'
260
+ : schema.type
261
+ ? Array.isArray(schema.type)
262
+ ? schema.type[0]
263
+ : schema.type === 'array'
264
+ ? propertyValueType({ ...schema, type: [schema.items.type] })
265
+ : schema.type
266
+ : typeof value);
260
267
  const propertyTypeParseValue = {
261
268
  undefined: () => undefined,
262
269
  object: val => safeJSONParse(val),
@@ -281,10 +288,10 @@ const propertyTypeParseValue = {
281
288
  * @param value
282
289
  * @returns Value in the correct format.
283
290
  */
284
- export const parseNewValue = (schema, value) => schema.type
285
- ? Array.isArray(schema.type)
291
+ export const parseNewValue = (schema, value) => schema?.type
292
+ ? Array.isArray(schema?.type)
286
293
  ? propertyTypeParseValue[typeof value](value, schema)
287
- : propertyTypeParseValue[schema.type](value, schema)
294
+ : propertyTypeParseValue[isGeojson(schema) ? 'json' : schema.type](value, schema)
288
295
  : value;
289
296
  const isOpenDefault = (schemaType) => [SchemaType.Term].includes(schemaType);
290
297
  // can the property be seen when the group is closed
@@ -433,10 +440,6 @@ export const typeToNewProperty = (schemas, schema, nodeSchema, node, fullKey) =>
433
440
  const { schemaType, properties } = schemaRequiredProperties(schemas, schema);
434
441
  node[key] = node[key] || {};
435
442
  node[key].type = schemaType;
436
- // TODO: handle load schemas from http source
437
- if (schemaType.startsWith('http')) {
438
- return typeToNewProperty(schemas, { type: 'json' }, nodeSchema, node, fullKey);
439
- }
440
443
  // TODO: handle nodeSchema should be schema unless last recursion
441
444
  const props = properties
442
445
  .filter(prop => nestingEnabled(schemaType, prop.key) && !!prop.value)
@@ -499,6 +502,7 @@ export const typeToNewProperty = (schemas, schema, nodeSchema, node, fullKey) =>
499
502
  formatter: formatter(key)
500
503
  };
501
504
  },
505
+ geojson: () => typeToNewProperty(schemas, { type: 'json' }, nodeSchema, node, fullKey),
502
506
  default: () => {
503
507
  const valueType = propertyValueType(schema);
504
508
  const value = schema.default || schema.const || valueTypeToDefault[valueType];
@@ -523,11 +527,13 @@ export const typeToNewProperty = (schemas, schema, nodeSchema, node, fullKey) =>
523
527
  };
524
528
  }
525
529
  };
526
- const mapped = !schema.type
527
- ? mappings.object
528
- : schema.type in mappings
529
- ? mappings[schema.type]
530
- : mappings.default;
530
+ const mapped = isGeojson(schema)
531
+ ? mappings.geojson
532
+ : !schema.type
533
+ ? mappings.object
534
+ : schema.type in mappings
535
+ ? mappings[schema.type]
536
+ : mappings.default;
531
537
  return mapped();
532
538
  };
533
539
  export const findProperty = (properties, fullKey) => {
@@ -602,4 +608,4 @@ export const calculateCycleStartDate = (properties, property) => {
602
608
  const endDate = siblingProperty(properties, property, 'endDate');
603
609
  return moment(endDate.value).locale('en-gb').subtract(cycleDuration.value, 'days').format('YYYY-MM-DD');
604
610
  };
605
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBRUwsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFHWixnQkFBZ0IsRUFDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLFdBQVcsRUFDWCxzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLGVBQWUsRUFFZixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVySCxNQUFNLHVCQUF1QixHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQU8sRUFBRSxjQUFpQyxFQUFFLEVBQUUsQ0FDdEcsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssTUFBTTtJQUNyQixDQUFDLENBQUMsbUNBQW1DO1FBQ25DLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztZQUNoQyxDQUFDLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxnQ0FBZ0MsWUFBWSxDQUFDLG1CQUFtQixDQUFDO3lCQUM1RixZQUFZLENBQUMsVUFBVSxDQUFDLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7SUFDL0csQ0FBQyxDQUFDLFFBQVEsVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7TUFDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO3dDQUNsRCxVQUFVLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7QUFFbEgsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUcxQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBbUIsU0FBUyxDQUFDO0FBOEQvRCxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxXQUFXLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM3RyxNQUFNLDBCQUEwQixHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FDaEUsU0FBUyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDdkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBZ0IsRUFBRSxDQUFnQixFQUFFLEVBQUU7SUFDbkUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEQ7SUFDRCxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUU7UUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNYO0lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7UUFDVixPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ1g7SUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ1g7SUFDRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDbkIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDWDtJQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFO1FBQzlCLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBRXRCO0lBQ0YsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsRUFBRTtJQUN2QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFO0lBQ3ZDLE9BQU8sRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLHlCQUF5QixlQUFlLEdBQUc7SUFDN0UsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxzQ0FBc0MsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztDQUNoSCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxNQUFXLEVBQUUsUUFBdUIsRUFBRSxFQUFFO0lBQzFFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsT0FBTyxHQUFHLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkgsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQ3ZELE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUU1RixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVoRyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV0RyxNQUFNLHdCQUF3QixHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVksRUFBRSxFQUFFO0lBQzdELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUM7U0FDL0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sVUFBVSxDQUFDLE1BQU07UUFDdEIsQ0FBQyxDQUFDO1lBQ0U7Z0JBQ0UsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM3QixLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtxQkFDbEIsQ0FBQyxDQUFDLENBQ0osQ0FDRjtvQkFDRCxvQkFBb0IsRUFBRSxDQUFDO2lCQUN4QjthQUNGO1NBQ0Y7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyxDQUFDO0FBRUYsa0VBQWtFO0FBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFjLEVBQUUsT0FBZSxFQUF1QyxFQUFFO0lBQ2hHLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDbkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQWMsRUFBRSxPQUFlLEVBQXVDLEVBQUU7SUFDbkcsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFHLENBQUM7SUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzNHLENBQUMsQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FDeEUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUV4RSxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLEtBQUssRUFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7SUFDbkIsT0FBTyxFQUFFO1FBQ1AsR0FBRyx3QkFBd0IsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFNLENBQUM7UUFDdkUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDeEQ7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLGdCQUFnQixHQU1sQjtJQUNGLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDM0QsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUseUJBQXlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUMzRCxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqRixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3pFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDekQsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUseUJBQXlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRTtRQUN6QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUMvQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUcsRUFBRSxZQUFpQyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRyxDQUFDO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUMzQix1Q0FBdUM7UUFDdkMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ3RHLENBQUMsQ0FBQztnQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQ3JCLFdBQVcsRUFBRSxDQUFDO2FBQ2Y7WUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7SUFDRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3pCLE1BQU0sTUFBTSxHQUFJLE1BQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsTUFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsT0FBTztZQUNMLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7WUFDMUQsZ0NBQWdDO1lBQ2hDLE1BQU07U0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDMUIsTUFBTSxNQUFNLEdBQUksTUFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxNQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtZQUMxRCxnQ0FBZ0M7WUFDaEMsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUM5QixnQ0FBZ0M7UUFDaEMsTUFBTSxNQUFNLEdBQUksTUFBYyxDQUFDLEtBQUs7WUFDbEMsQ0FBQyxDQUFDLENBQUUsTUFBYyxDQUFDLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBRSxNQUFjLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7WUFDNUUsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNkLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztLQUMxQixDQUFDO0NBQ0gsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsWUFBd0IsRUFDeEIsSUFBeUMsRUFDekMsT0FBZSxFQUNmLE1BQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pHLE9BQU8sQ0FDTCxVQUFVO1FBQ1YsQ0FBQyxNQUFNLElBQUssTUFBTSxDQUFDLElBQW9CLElBQUksZ0JBQWdCO1lBQ3pELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBbUIsQ0FBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDO1lBQzlFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FDZixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FDckMsSUFBNEIsRUFDNUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBMEIsRUFDdkQsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE1BQU8sRUFBRSxVQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFN0csTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsSUFBNEIsRUFDNUIsVUFBc0IsRUFDdEIsTUFBa0IsRUFDbEIsT0FBTyxHQUFHLEVBQUUsRUFDWixFQUFFLENBQ0YsQ0FBQyxDQUFDLE1BQU07SUFDUixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU07SUFDeEUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRXpDLE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBNEIsRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUNoRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNYLENBQUMsQ0FBQztZQUNFLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakUsS0FBSyxFQUFFLE1BQU07U0FDZDtRQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDLElBQUk7WUFDbkMsQ0FBQyxDQUFDO2dCQUNFLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQ25DLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixLQUFLLEVBQUUsb0JBQW9CO2FBQzVCO1lBQ0gsQ0FBQyxDQUFDLFNBQVM7SUFDYixDQUFDLENBQUMsU0FBUyxDQUFDO0FBRWhCLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBeUIsRUFBRSxHQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDeEUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQ3RCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hHLENBQUMsQ0FBQztRQUNFLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pELEtBQUssRUFBRSxjQUFjO1FBQ3JCLElBQUksRUFBRSxLQUFLO0tBQ1o7SUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0FBRWhCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUE0QixFQUFFLEdBQVcsRUFBRSxLQUFVLEVBQUUsRUFBRSxDQUNwRixXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFXLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXJFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxTQUFzQixFQUFFLEVBQUUsQ0FBQyxVQUFVLFNBQVMsbUJBQW1CLENBQUM7QUFFNUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBTyxFQUFFLFNBQXNCLEVBQUUsRUFBRSxDQUM3RSxRQUFRLEVBQUUsTUFBTTtJQUNkLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7QUFFN0MsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQVcsRUFBRSxPQUFlLEVBQUUsRUFBRTtJQUN4RCxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUMzQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRixPQUFPLFFBQVEsRUFBRSxNQUFNLElBQUksT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3RyxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBVyxFQUFFLFNBQXNCLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxZQUFrQixFQUFFLEVBQUUsQ0FDcEcsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO0lBQ3JCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xGLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUU1QyxNQUFNLGlCQUFpQixHQUVuQjtJQUNGLE1BQU0sRUFBRSxpQkFBaUI7SUFDekIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUEwQixDQUFDO1FBQzdDLE9BQU8sTUFBTSxJQUFJLEtBQUs7WUFDcEIsQ0FBQyxDQUFDLEdBQUc7WUFDTCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3JFLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDVixDQUFDO0lBQ0QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUU7SUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTtJQUN0QyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDakMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO0NBQzFELENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWtCLEVBQUUsS0FBVSxFQUFFLEVBQUU7SUFDdkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUk7UUFDM0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sS0FBSyxJQUFJLGlCQUFpQjtZQUMvRCxDQUFDLENBQUMsT0FBTyxLQUFLO1lBQ2QsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxJQUFlO1FBQzNCLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDYixPQUFPLGlCQUFpQixDQUFDLFNBQVMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQWtCLEVBQUUsS0FBVyxFQUFFLEVBQUUsQ0FDNUQsQ0FBQyxNQUFNLENBQUMsSUFBSTtJQUNWLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU87WUFDekIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFtQixDQUFDLEVBQUUsQ0FBQztZQUM1RSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7SUFDZixDQUFDLENBQUMsT0FBTyxLQUFLLENBQWdCLENBQUM7QUFFbkMsTUFBTSxzQkFBc0IsR0FFeEI7SUFDRixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUztJQUMxQixNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO0lBQ2pDLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBMEIsQ0FBQztRQUM3QyxPQUFPLE1BQU0sSUFBSSxLQUFLO1lBQ3BCLENBQUMsQ0FBQyxHQUFHO1lBQ0wsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO2dCQUM1QixDQUFDLENBQUMsR0FBRztnQkFDTCxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFO0lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUU7SUFDdEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQ2pDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztJQUNsQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTTtDQUMxRCxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsTUFBa0IsRUFBRSxLQUFVLEVBQUUsRUFBRSxDQUM5RCxNQUFNLENBQUMsSUFBSTtJQUNULENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7UUFDMUIsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLE9BQU8sS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztRQUNyRCxDQUFDLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLElBQWMsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7SUFDaEUsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUVaLE1BQU0sYUFBYSxHQUFHLENBQUMsVUFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXpGLG9EQUFvRDtBQUNwRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUV6RixNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXJFLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBVyxFQUFFLEdBQXVCLEVBQUUsRUFBRSxDQUM3RCxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUV0RSxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQ3hCLENBQUMsTUFBMEIsRUFBRSxFQUFFLENBQy9CLENBQUMsUUFBZ0IsRUFBRSxrQkFBa0IsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUMvQyxNQUFNLENBQUMsSUFBSSxDQUNULEtBQUssQ0FBQyxFQUFFLENBQ04sQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVE7SUFDMUIsQ0FBQyxrQkFBa0I7UUFDakIsMEJBQTBCLENBQUMsS0FBSyxDQUFDLFFBQVMsQ0FBQyxLQUFLLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUYsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQzFELENBQUM7QUFFTixNQUFNLHFCQUFxQixHQUFHLENBQzVCLElBQTRCLEVBQzVCLE1BQTBCLEVBQzFCLE1BQU0sR0FBRyxFQUFFLEVBQ00sRUFBRTtJQUNuQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNwSCxrQ0FBa0M7SUFDbEMsTUFBTSxXQUFXLEdBQUcsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDakQsT0FBTyxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1lBQ0U7Z0JBQ0UsRUFBRSxFQUFFLFVBQVUsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNyQixXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUU7Z0JBQzVDLEdBQUcsRUFBRSxFQUFFO2dCQUNQLE9BQU8sRUFBRSxNQUFNO2dCQUNmLEtBQUssRUFBRSxFQUFFO2dCQUNULEtBQUssRUFBRTtvQkFDTCxLQUFLLEVBQUUsT0FBTztvQkFDZCxPQUFPLEVBQUUsdUJBQXVCLENBQzlCLElBQUksRUFDSixXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLGVBQWUsS0FBSyxLQUFLLENBQUMsQ0FDcEU7aUJBQ0Y7Z0JBQ0QsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsVUFBVSxFQUFFLEVBQUU7Z0JBQ2Qsa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUM7YUFDekI7U0FDRjtRQUNILENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sRUFBRSxlQUFlLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTyxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUMxRSxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRCxPQUFPO2dCQUNMLEVBQUUsRUFBRSxVQUFVLEVBQUU7Z0JBQ2hCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDckIsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixFQUFFO2dCQUM1QyxHQUFHLEVBQUUsZUFBZTtnQkFDcEIsT0FBTztnQkFDUCxLQUFLLEVBQUUsa0JBQWtCO2dCQUN6QixRQUFRLEVBQUUsS0FBSztnQkFDZixLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDekIsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO2dCQUNyRCxVQUFVLEVBQUUsWUFBWSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7Z0JBQ2xELFVBQVUsRUFBRSxFQUFFO2dCQUNkLGtCQUFrQixFQUFFLElBQUk7Z0JBQ3hCLFNBQVMsRUFBRSxTQUFTLENBQUMsZUFBZSxDQUFDO2FBQ3RDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQ3BCLENBQ0UsT0FBb0IsRUFDcEIsTUFBMEIsRUFDMUIsVUFBc0IsRUFDdEIsWUFBcUIsRUFDckIsTUFBTSxHQUFHLEVBQUUsRUFDWCxJQUFTLEVBQ1QsRUFBRSxDQUNKLENBQUMsR0FBVyxFQUFpQixFQUFFO0lBQzdCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxNQUFNLGtCQUFrQixHQUFHLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxNQUFNLFVBQVUsR0FBRyxVQUFVO1FBQzNCLENBQUMsQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU07WUFDdkIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNwQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDYixNQUFNLE1BQU0sR0FDVixDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFDM0MsQ0FBQyxDQUFDLFVBQVU7WUFDVixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztZQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQixNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sWUFBWSxHQUFHLFVBQVU7UUFDN0IsQ0FBQyxDQUFDLDhEQUE4RDtZQUM5RCxPQUFPO2dCQUNQLENBQUMsQ0FBQyxNQUFNO2dCQUNSLENBQUMsQ0FBQyxVQUFVO1FBQ2QsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUNmLE1BQU0sVUFBVSxHQUNkLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQzlHLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0QsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxNQUFNLFFBQVEsR0FDWixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxLQUFLO1FBQ1AsQ0FBQyxDQUFDLDhEQUE4RDtZQUNoRSxDQUFDLFlBQVk7Z0JBQ1gsVUFBVSxDQUFDLFVBQVUsQ0FBQztnQkFDdEIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDckYsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDLGFBQWE7b0JBQ2IsQ0FBQyxDQUFDLFVBQVUsSUFBSSxHQUFHLEtBQUssS0FBSyxDQUFDLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRCxPQUFPO1FBQ0wsRUFBRSxFQUFFLFVBQVUsRUFBRTtRQUNoQixVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVU7UUFDckMsTUFBTTtRQUNOLEdBQUc7UUFDSCxPQUFPO1FBQ1AsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQ25DLFFBQVEsRUFBRSxPQUFPLElBQUksUUFBUTtRQUM3QixXQUFXLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUN0RSxrQkFBa0IsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDM0UsV0FBVyxFQUFFLEVBQUU7UUFDZixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO1FBQzlCLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO1FBQ3pCLFFBQVEsRUFBRSxNQUFNLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQztRQUNwQyxhQUFhLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDO1FBQ3RDLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFVBQVUsRUFBRSxTQUFTO1FBQ3JCLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxPQUFPO1FBQ1AsWUFBWSxFQUFFLFVBQVU7UUFDeEIsTUFBTSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUM7UUFDakMsVUFBVTtRQUNWLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUM7UUFDMUUsV0FBVyxFQUFFLG1CQUFtQixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDO1FBQ2xELFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO0tBQzFCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFSixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFvQixFQUFFLE1BQTBCLEVBQUUsSUFBUyxFQUFFLE9BQWUsRUFBRSxFQUFFO0lBQzdHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQztJQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxPQUFPLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQzlCLENBQUMsT0FBb0IsRUFBRSxNQUEwQixFQUFFLFVBQXNCLEVBQUUsWUFBcUIsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FDakgsQ0FBQyxJQUFTLEVBQW1CLEVBQUUsQ0FDN0IsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7S0FDZCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDeEMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDOUUsTUFBTSxDQUFDLEdBQUcscUJBQXFCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFFNUIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUN2QyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtJQUMvQixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDckIsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN0QztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDLENBQUM7QUFFTCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixFQUFFLFVBQVUsRUFBMEIsRUFDdEMsT0FBK0MsRUFDL0MsRUFBRSxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTlFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLENBQy9CLE9BQW9CLEVBQ3BCLE1BQWtCLEVBQ2xCLFVBQXNCLEVBQ3RCLElBQVMsRUFDVCxPQUFlLEVBQ0EsRUFBRTtJQUNqQixNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFHLENBQUM7SUFDekMsTUFBTSxRQUFRLEdBRVY7UUFDRixNQUFNLEVBQUUsR0FBRyxFQUFFO1lBQ1gsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsR0FBRyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsTUFBMkIsQ0FBQyxDQUFDO1lBQ2xHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1lBQzVCLDZDQUE2QztZQUM3QyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2pDLE9BQU8saUJBQWlCLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDdkY7WUFDRCxpRUFBaUU7WUFDakUsTUFBTSxLQUFLLEdBQUcsVUFBVTtpQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7aUJBQ3BFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ1QsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDcEYsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDTixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RGLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLFVBQVUsRUFBRTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7Z0JBQzNCLFVBQVU7Z0JBQ1YsR0FBRztnQkFDSCxPQUFPO2dCQUNQLEtBQUs7Z0JBQ0wsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7Z0JBQzFCLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUMxQixhQUFhLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDO2dCQUN0QyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUM7Z0JBQy9ELFVBQVUsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDdEMsa0JBQWtCLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDO2dCQUNwRixXQUFXLEVBQUUsRUFBRTtnQkFDZixRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUM5QixVQUFVLEVBQUUsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFhLENBQUM7Z0JBQzdDLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFlBQVksRUFBRSxJQUFJO2dCQUNsQixNQUFNLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQztnQkFDakMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7YUFDMUIsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ1YsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQTBCLENBQUM7WUFDN0Msc0NBQXNDO1lBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtnQkFDZCxPQUFPLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUMzQjtZQUNELE1BQU0sVUFBVSxHQUFHLHNCQUFzQixDQUFDLEtBQTBCLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sS0FBSyxDQUFDLENBQUM7WUFDdkcsT0FBTztnQkFDTCxFQUFFLEVBQUUsVUFBVSxFQUFFO2dCQUNoQixPQUFPLEVBQUUsSUFBSTtnQkFDYixNQUFNO2dCQUNOLFVBQVU7Z0JBQ1YsR0FBRztnQkFDSCxPQUFPO2dCQUNQLEtBQUssRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZCLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUMxQixRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsYUFBYSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDdEMsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDdEIsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDOUIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLGtCQUFrQixFQUFFLEtBQUs7Z0JBQ3pCLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO2FBQzFCLENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNaLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUssTUFBYyxDQUFDLEtBQUssSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLFVBQVUsRUFBRTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTTtnQkFDTixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ3JCLEdBQUc7Z0JBQ0gsT0FBTztnQkFDUCxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7Z0JBQ25DLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUMxQixRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsYUFBYSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDdEMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7Z0JBQ3RFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUM7Z0JBQ3hFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQztnQkFDbEQsVUFBVSxFQUFFLEVBQUU7Z0JBQ2Qsa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7YUFDMUIsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSTtRQUN6QixDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07UUFDakIsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxJQUFlLElBQUksUUFBUTtZQUNyQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFjLENBQUM7WUFDakMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7SUFDckIsT0FBTyxNQUFNLEVBQUUsQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUEyQixFQUFFLE9BQWUsRUFBRSxFQUFFO0lBQzNFLEtBQUssTUFBTSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQzFCLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7WUFDekIsT0FBTyxDQUFDLENBQUM7U0FDVjtRQUNELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ25ELElBQUksTUFBTSxFQUFFO1lBQ1YsT0FBTyxNQUFNLENBQUM7U0FDZjtLQUNGO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxVQUEyQixFQUFFLFFBQXVCLEVBQUUsRUFBRTtJQUNyRixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDaEYsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNuRCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDakIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFPLEVBQUU7UUFDOUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDNUMsT0FBTyxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSyxFQUFvQixDQUFDLENBQUMsQ0FBQyxJQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUN0RyxDQUFDLEVBQUUsVUFBVSxDQUF5QixDQUFDO0lBQ3ZDLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsRUFBRSxVQUFVLEVBQWlCLEVBQUUsU0FBaUIsRUFBRSxFQUFFLENBQ2pGLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsVUFBMkIsRUFBRSxRQUF1QixFQUFFLFVBQWtCLEVBQUUsRUFBRTtJQUMxRyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQzlFLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQztBQUNoRSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxVQUEyQixFQUFFLEdBQVcsRUFBRSxLQUFXLEVBQUUsRUFBRTtJQUNwRixJQUFJO1FBQ0YsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO1lBQzFDLElBQUksU0FBUyxLQUFLLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEVBQ25DLENBQUMsQ0FDRixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDeEI7UUFDSCxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7S0FDaEI7SUFBQyxPQUFPLElBQUksRUFBRTtRQUNiLGVBQWU7S0FDaEI7QUFDSCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLFFBQXVCLEVBQUUsRUFBRSxDQUM3RCxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUNsQyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO0lBQ3BGLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNoRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDO0FBRUwsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsQ0FBQyxVQUEyQixFQUFFLFFBQXVCLEVBQUUsRUFBRTtJQUNwRyxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUNyRSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRSxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsVUFBMkIsRUFBRSxRQUF1QixFQUFFLEVBQUU7SUFDN0YsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFFLENBQUM7SUFDdEUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFFLENBQUM7SUFDbEUsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxVQUEyQixFQUFFLFFBQXVCLEVBQUUsRUFBRTtJQUNyRyxNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUM3RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRSxPQUFPLENBQUMsQ0FBQyxhQUFhLEVBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDO0FBQ3BELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsVUFBMkIsRUFBRSxRQUF1QixFQUFFLEVBQUU7SUFDOUYsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsZUFBZSxDQUFFLENBQUM7SUFDOUUsTUFBTSxPQUFPLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFFLENBQUM7SUFDbEUsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDMUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuaW1wb3J0IGdldCBmcm9tICdsb2Rhc2guZ2V0JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9lbi1nYic7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGRpZmZJbkRheXMsIGlzTnVtYmVyIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC91dGlscyc7XG5pbXBvcnQge1xuICBKU09OIGFzIEhlc3RpYUpzb24sXG4gIFNjaGVtYVR5cGUsXG4gIE5vZGVUeXBlLFxuICBpc1R5cGVOb2RlLFxuICBpc1R5cGVWYWxpZCxcbiAgaXNFeHBhbmRhYmxlLFxuICBTaXRlLFxuICBPcmdhbmlzYXRpb24sXG4gIHR5cGVUb1NjaGVtYVR5cGVcbn0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9zY2hlbWEnO1xuaW1wb3J0IHsgZGVmaW5pdGlvbnMsIGRlZmluaXRpb24sIElEZWZpbml0aW9uT2JqZWN0LCBJRGVmaW5pdGlvbkFycmF5LCBnZW5lcmljVHlwZSB9IGZyb20gJ0BoZXN0aWEtZWFydGgvanNvbi1zY2hlbWEnO1xuXG5pbXBvcnQge1xuICBJVmFsaWRhdGlvbkVycm9yLFxuICBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UsXG4gIGZvcm1hdEVycm9yLFxuICBpc01pc3NpbmdQcm9wZXJ0eUVycm9yLFxuICBlcnJvckhhc0Vycm9yLFxuICBlcnJvckhhc1dhcm5pbmcsXG4gIHZhbGlkYXRpb25FcnJvckxldmVsLFxuICBtaXNzaW5nTm9kZUVycm9ycyxcbiAgaXNNaXNzaW5nT25lT2ZFcnJvcixcbiAgaXNNaWdyYXRpb25FcnJvcixcbiAgbWlncmF0aW9uRXJyb3JNZXNzYWdlXG59IGZyb20gJy4vZmlsZXMtZXJyb3IubW9kZWwnO1xuaW1wb3J0IHtcbiAgc2NoZW1hUmVxdWlyZWRQcm9wZXJ0aWVzLFxuICB2YWx1ZVR5cGVUb0RlZmF1bHQsXG4gIGRlZmluaXRpb25Ub1NjaGVtYVR5cGUsXG4gIGF2YWlsYWJsZVByb3BlcnRpZXMsXG4gIG5lc3RpbmdUeXBlRW5hYmxlZCxcbiAgbmVzdGluZ0VuYWJsZWQsXG4gIGxpbmtUeXBlRW5hYmxlZCxcbiAgaXNTY2hlbWFJcmlcbn0gZnJvbSAnLi4vc2NoZW1hL3NjaGVtYS5zZXJ2aWNlJztcbmltcG9ydCB7IG1hdGNoQ291bnRyeSB9IGZyb20gJy4uL3NlYXJjaC9zZWFyY2gubW9kZWwnO1xuaW1wb3J0IHsgYmFzZVVybCwgY29kZSwgZ2xvc3NhcnlMaW5rLCBtYXBzVXJsLCBzYWZlSlNPTlBhcnNlLCBzYWZlSlNPTlN0cmluZ2lmeSwgc2NoZW1hTGluayB9IGZyb20gJy4uL2NvbW1vbi91dGlscyc7XG5cbmNvbnN0IG1pc3NpbmdOb2RlRXJyb3JNZXNzYWdlID0gKHsgJ0B0eXBlJzogX3QsIHR5cGUsIG5hbWUgfTogYW55LCBtaXNzaW5nSWRFcnJvcj86IElWYWxpZGF0aW9uRXJyb3IpID0+XG4gIChfdCB8fCB0eXBlKSA9PT0gJ1Rlcm0nXG4gICAgPyAvLyBtaWdyYXRlZCBmcm9tIGEgdmFsdWUgdG8gYW5vdGhlclxuICAgICAgaXNNaWdyYXRpb25FcnJvcihtaXNzaW5nSWRFcnJvcilcbiAgICAgID8gbWlncmF0aW9uRXJyb3JNZXNzYWdlKG1pc3NpbmdJZEVycm9yKVxuICAgICAgOiBgJHtuYW1lID8gYFRoZSB0ZXJtIFwiJHtuYW1lfVwiYCA6ICdUaGlzIHRlcm0nfSBkb2Vzbid0IG1hdGNoIGEgdGVybSBpbiB0aGUgJHtnbG9zc2FyeUxpbmsoJ0dsb3NzYXJ5IG9mIFRlcm1zJyl9LlxuICAgICAgUGxlYXNlIGNoZWNrIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3NhcnknKX0gZm9yIHRoZSBjb3JyZWN0ICR7Y29kZSgnQGlkJyl9IG9yICR7Y29kZSgnbmFtZScpfSBhbmQgc3BlbGxpbmcuYFxuICAgIDogYFRoaXMgJHtzY2hlbWFMaW5rKF90IHx8IHR5cGUpfSBkb2VzIG5vdCBleGlzdCBpbiBIZXN0aWEuIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGxpbmsgdG8gYW4gZXhpc3RpbmdcbiAgICAke3NjaGVtYUxpbmsoX3QgfHwgdHlwZSl9IGluIEhlc3RpYSwgcGxlYXNlIGNoZWNrIHRoZSAke2NvZGUoJ25hbWUnKX0gb3IgJHtjb2RlKCdAaWQnKX0gaXMgY29ycmVjdC5cbiAgICBJZiB5b3UgYXJlIHRyeWluZyB0byBjcmVhdGUgYSBuZXcgJHtzY2hlbWFMaW5rKF90IHx8IHR5cGUpfSwgcGxlYXNlIGlkZW50aWZ5IGl0IHdpdGggYW4gJHtjb2RlKCdpZCcpfSBmaWVsZC5gO1xuXG5leHBvcnQgY29uc3QgQVJSQVlfREVMSU1JVEVSID0gJzsnO1xuY29uc3QgaWdub3JlS2V5cyA9IFsnZmlsZXBhdGgnLCAnX2NhY2hlJ107XG5cbmV4cG9ydCB0eXBlIHN1Z2dlc3Rpb25UeXBlID0gTm9kZVR5cGUgfCAnc2VsZWN0JyB8ICdkZWZhdWx0JztcbmV4cG9ydCBjb25zdCBkZWZhdWx0U3VnZ2VzdGlvblR5cGU6IHN1Z2dlc3Rpb25UeXBlID0gJ2RlZmF1bHQnO1xuXG5pbnRlcmZhY2UgSU5vZGVQcm9wZXJ0eVN1Z2dlc3Rpb24ge1xuICB0eXBlPzogc3VnZ2VzdGlvblR5cGU7XG4gIHF1ZXJpZXM/OiBhbnlbXTtcbiAgdmFsdWVzPzogc3RyaW5nW107XG4gIHBhcmVudExldmVsPzogbnVtYmVyO1xuICBpc0xpbmtOb2RlPzogYm9vbGVhbjtcbiAgaXNVbmlxdWVLZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5ld1Byb3BlcnR5IHtcbiAgbmFtZT86IHN0cmluZztcbiAgcHJvcD86IGRlZmluaXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUVycm9yUHJvcGVydHkge1xuICBsZXZlbD86IHZhbGlkYXRpb25FcnJvckxldmVsO1xuICBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElOb2RlUHJvcGVydHkge1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhpcyBwcm9wZXJ0eSB3YXMgYWRkZWQgYnkgdGhlIHVzZXJcbiAgICovXG4gIGlkOiBzdHJpbmc7XG4gIGlzQWRkZWQ/OiBib29sZWFuO1xuICBzY2hlbWFUeXBlOiBTY2hlbWFUeXBlO1xuICBrZXk6IHN0cmluZztcbiAgZnVsbEtleTogc3RyaW5nO1xuICB2YWx1ZTogYW55O1xuICBhZGRQcm9wZXJ0eUVuYWJsZWQ6IGJvb2xlYW47XG4gIHN1Z2dlc3Rpb25zPzogSU5vZGVQcm9wZXJ0eVN1Z2dlc3Rpb247XG4gIHNjaGVtYT86IGRlZmluaXRpb247XG4gIGVycm9yPzogSVZhbGlkYXRpb25FcnJvcjtcbiAgaGFzRXJyb3I/OiBib29sZWFuO1xuICBoYXNXYXJuaW5nPzogYm9vbGVhbjtcbiAgZWRpdGFibGU/OiBib29sZWFuO1xuICBjbG9zZWRWaXNpYmxlPzogYm9vbGVhbjtcbiAgbmV3UHJvcGVydHk/OiBJTmV3UHJvcGVydHk7XG4gIG5ld0Vycm9yPzogSUVycm9yUHJvcGVydHk7XG4gIGlzUmVxdWlyZWQ/OiBib29sZWFuO1xuICBpc0hpZGRlbj86IGJvb2xlYW47XG4gIGlzQXJyYXk/OiBib29sZWFuO1xuICBpc0V4cGFuZGFibGU/OiBib29sZWFuO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W107XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBleHRlcm5hbFVybD86IHtcbiAgICB1cmw/OiBzdHJpbmc7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICAvLyBkZWZhdWx0IGlzIGV4dGVybmFsLWxpbmstYWx0XG4gICAgaWNvbj86IHN0cmluZztcbiAgICB1cmxQYXJhbVZhbHVlPzogYm9vbGVhbjtcbiAgfTtcbiAgLy8gbWFraW5nIGNoYW5nZXMgb24gdGhlIHByb3BlcnR5XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICAvLyB1c2VyIG1hZGUgY2hhbmdlcyB0byB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgY2hhbmdlZD86IGJvb2xlYW47XG4gIGZvcm1hdHRlcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZztcbn1cblxuY29uc3Qgc3RyaW5nVmFsdWUgPSAodmFsdWU6IGFueSkgPT4gKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdmFsdWUgPT09IG51bGwgPyAnJyA6IHZhbHVlKS50b1N0cmluZygpO1xuY29uc3Qgbm9uRXhwYW5kYWJsZUFycmF5RGF0YVBhdGggPSAoa2V5OiBzdHJpbmcpID0+IGtleS5yZXBsYWNlKC9cXFtcXGQrXFxdJC8sICcnKTtcbmV4cG9ydCBjb25zdCBrZXlUb0RhdGFQYXRoID0gKGtleTogc3RyaW5nKSA9PiAoa2V5Py5sZW5ndGggPyBgLiR7a2V5fWAgOiAnJyk7XG5leHBvcnQgY29uc3QgZGF0YVBhdGhUb0tleSA9IChkYXRhUGF0aCA9ICcnLCB0cmltQXJyYXkgPSBmYWxzZSkgPT5cbiAgdHJpbUFycmF5ID8gbm9uRXhwYW5kYWJsZUFycmF5RGF0YVBhdGgoZGF0YVBhdGguc3Vic3RyaW5nKDEpKSA6IGRhdGFQYXRoLnN1YnN0cmluZygxKTtcbmV4cG9ydCBjb25zdCBwYXJlbnRLZXkgPSAoa2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3Qga2V5cyA9IChrZXkuc3RhcnRzV2l0aCgnLicpID8ga2V5LnN1YnN0cmluZygxKSA6IGtleSkuc3BsaXQoJy4nKTtcbiAga2V5cy5wb3AoKTtcbiAgcmV0dXJuIGtleXMuam9pbignLicpO1xufTtcblxuLyoqXG4gKiBTb3J0IHByb3BlcnRpZXMgaGF2aW5nIGVycm9ycywgdHlwZSwgaWQsIC4uLnByb3BlcnRpZXMgKHNpbXBsZSksIGFuZCBmaW5hbGx5IHRoZSBncm91cHNcbiAqXG4gKiBAcGFyYW0gYSB7SU5vZGVQcm9wZXJ0eX1cbiAqIEBwYXJhbSBiIHtJTm9kZVByb3BlcnR5fVxuICovXG5leHBvcnQgY29uc3Qgc29ydFByb3BlcnRpZXMgPSAoYTogSU5vZGVQcm9wZXJ0eSwgYjogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBpZiAoaXNOdW1iZXIoYS5rZXkpICYmIGlzTnVtYmVyKGIua2V5KSkge1xuICAgIHJldHVybiArYS5rZXkgLSArYi5rZXk7XG4gIH1cbiAgaWYgKGEuaXNFeHBhbmRhYmxlKSB7XG4gICAgcmV0dXJuIGIuaXNFeHBhbmRhYmxlID8gYS5rZXkubG9jYWxlQ29tcGFyZShiLmtleSkgOiAxO1xuICB9XG4gIGlmIChiLmlzRXhwYW5kYWJsZSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoIWEua2V5KSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGNvbnN0IGFLZXkgPSBhLmtleS5yZXBsYWNlKCdAJywgJycpO1xuICBjb25zdCBiS2V5ID0gYi5rZXkucmVwbGFjZSgnQCcsICcnKTtcbiAgaWYgKGFLZXkgPT09ICd0eXBlJykge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpZiAoYktleSA9PT0gJ3R5cGUnKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cbiAgaWYgKGFLZXkgPT09ICdpZCcgJiYgYktleSAhPT0gJ3R5cGUnKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChhLmhhc0Vycm9yIHx8IGEuaGFzV2FybmluZykge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICByZXR1cm4gYS5rZXkubG9jYWxlQ29tcGFyZShiLmtleSk7XG59O1xuXG5jb25zdCBkZWZhdWx0UHJvcGVydHlFcnJvcjoge1xuICBba2V5OiBzdHJpbmddOiAoZXJyb3I6IGFueSwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbn0gPSB7XG4gIG1heDogKHsgbWF4IH0pID0+IGBzaG91bGQgYmUgPD0gJHttYXh9YCxcbiAgbWluOiAoeyBtaW4gfSkgPT4gYHNob3VsZCBiZSA+PSAke21pbn1gLFxuICBwYXR0ZXJuOiAoeyByZXF1aXJlZFBhdHRlcm4gfSkgPT4gYHNob3VsZCBtYXRjaCBwYXR0ZXJuIFwiJHtyZXF1aXJlZFBhdHRlcm59XCJgLFxuICByZXF1aXJlZDogKF9lLCB7IHNjaGVtYVR5cGUgfSkgPT4gKHNjaGVtYVR5cGUgPyBgc2hvdWxkIGJlIHNldCBvciBsaW5rZWQgdG8gYW5vdGhlciAke3NjaGVtYVR5cGV9YCA6IHVuZGVmaW5lZClcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRQcm9wZXJ0eUVycm9yID0gKGVycm9yczogYW55LCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhlcnJvcnMpWzBdO1xuICByZXR1cm4ga2V5IGluIGRlZmF1bHRQcm9wZXJ0eUVycm9yID8gZm9ybWF0Q3VzdG9tRXJyb3JNZXNzYWdlKGRlZmF1bHRQcm9wZXJ0eUVycm9yW2tleV0oZXJyb3JzW2tleV0sIHByb3BlcnR5KSkgOiAnJztcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXR0ZXIgPSAoa2V5OiBzdHJpbmcpID0+ICh2YWx1ZTogYW55KSA9PlxuICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUuYmlibGlvZ3JhcGh5Py50aXRsZSB8fCB2YWx1ZVtrZXldIHx8IHZhbHVlLm5hbWUgOiB2YWx1ZTtcblxuZXhwb3J0IGNvbnN0IGhhc0Vycm9yID0gdmFsdWUgPT4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuc29tZShoYXNFcnJvcikgOiB2YWx1ZS5oYXNFcnJvcik7XG5cbmV4cG9ydCBjb25zdCBoYXNXYXJuaW5nID0gdmFsdWUgPT4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuc29tZShoYXNXYXJuaW5nKSA6IHZhbHVlLmhhc1dhcm5pbmcpO1xuXG5jb25zdCBjb21waWxlU3VnZ2VzdGlvblF1ZXJpZXMgPSAoa2V5OiBzdHJpbmcsIGFsbE9mOiBhbnlbXSkgPT4ge1xuICBjb25zdCBjb25kaXRpb25zID0gKGFsbE9mIHx8IFtdKVxuICAgIC5maWx0ZXIodiA9PiAodi5pZj8ucmVxdWlyZWQgfHwgW10pLmluY2x1ZGVzKGtleSkpXG4gICAgLm1hcCh2ID0+IHYudGhlbj8ucHJvcGVydGllcz8uW2tleV0pXG4gICAgLm1hcCh2ID0+IHY/Lml0ZW1zPy5wcm9wZXJ0aWVzIHx8IHY/LnByb3BlcnRpZXMpXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIGNvbmRpdGlvbnMubGVuZ3RoXG4gICAgPyBbXG4gICAgICAgIHtcbiAgICAgICAgICBib29sOiB7XG4gICAgICAgICAgICBzaG91bGQ6IGNvbmRpdGlvbnMuZmxhdE1hcChjb25kID0+XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmQpLmZsYXRNYXAoayA9PlxuICAgICAgICAgICAgICAgIChjb25kW2tdLmVudW0gfHwgW10pLm1hcCh2ID0+ICh7XG4gICAgICAgICAgICAgICAgICBtYXRjaDogeyBba106IHYgfVxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWluaW11bV9zaG91bGRfbWF0Y2g6IDFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICA6IFtdO1xufTtcblxuLy8gZGVmYXVsdCBzdWdnZXN0IGZvciBsaW5raW5nIG5vZGVzIHRvZ2V0aGVyIHVzaW5nIHRoZSBgaWRgIGZpZWxkXG5jb25zdCBzdWdnZXN0TGlua05vZGVzID0gKHR5cGU6IE5vZGVUeXBlLCBmdWxsS2V5OiBzdHJpbmcpOiBJTm9kZVByb3BlcnR5U3VnZ2VzdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGtleXMgPSBmdWxsS2V5LnNwbGl0KCcuJyk7XG4gIGNvbnN0IGtleSA9IGtleXMucG9wKCk7XG4gIHJldHVybiBrZXkgPT09ICdpZCcgJiYga2V5cy5sZW5ndGggPj0gMSA/IHsgdHlwZSwgaXNMaW5rTm9kZTogdHJ1ZSB9IDogdW5kZWZpbmVkO1xufTtcblxuY29uc3Qgc3VnZ2VzdEV4aXN0aW5nTm9kZSA9ICh0eXBlOiBOb2RlVHlwZSwgZnVsbEtleTogc3RyaW5nKTogSU5vZGVQcm9wZXJ0eVN1Z2dlc3Rpb24gfCB1bmRlZmluZWQgPT4ge1xuICBjb25zdCBrZXlzID0gZnVsbEtleS5zcGxpdCgnLicpO1xuICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpITtcbiAgcmV0dXJuIGtleXMubGVuZ3RoID49IDEgJiYgWydAaWQnLCAnb3BlbkxDQUlkJ10uaW5jbHVkZXMoa2V5KSA/IHsgdHlwZSwgaXNVbmlxdWVLZXk6ICdAaWQnIH0gOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uID0gKHR5cGU6IE5vZGVUeXBlKSA9PiAoZnVsbEtleTogc3RyaW5nKSA9PlxuICBzdWdnZXN0TGlua05vZGVzKHR5cGUsIGZ1bGxLZXkpIHx8IHN1Z2dlc3RFeGlzdGluZ05vZGUodHlwZSwgZnVsbEtleSk7XG5cbmNvbnN0IHRlcm1TdWdnZXN0aW9ucyA9IChwYXJlbnQ6IHN0cmluZywgeyBhbGxPZiB9OiBJRGVmaW5pdGlvbk9iamVjdCkgPT4gKHtcbiAgdHlwZTogTm9kZVR5cGUuVGVybSxcbiAgcXVlcmllczogW1xuICAgIC4uLmNvbXBpbGVTdWdnZXN0aW9uUXVlcmllcyhub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aChwYXJlbnQpLCBhbGxPZiEpLFxuICAgIC4uLihbJ2NvdW50cnknXS5pbmNsdWRlcyhwYXJlbnQpID8gW21hdGNoQ291bnRyeV0gOiBbXSlcbiAgXVxufSk7XG5cbmNvbnN0IHR5cGVUb1N1Z2dlc3Rpb246IHtcbiAgW3R5cGUgaW4gU2NoZW1hVHlwZSB8IE5vZGVUeXBlIHwgZ2VuZXJpY1R5cGUgfCAnaW50ZWdlciddPzogKFxuICAgIGZ1bGxLZXk6IHN0cmluZyxcbiAgICBwYXJlbnRTY2hlbWE/OiBkZWZpbml0aW9uLFxuICAgIHNjaGVtYT86IGRlZmluaXRpb25cbiAgKSA9PiBJTm9kZVByb3BlcnR5U3VnZ2VzdGlvbiB8IGFueTtcbn0gPSB7XG4gIFtOb2RlVHlwZS5BY3Rvcl06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuQWN0b3IpLFxuICBbTm9kZVR5cGUuQ3ljbGVdOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLkN5Y2xlKSxcbiAgW05vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnRdOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLkltcGFjdEFzc2Vzc21lbnQpLFxuICBbTm9kZVR5cGUuT3JnYW5pc2F0aW9uXTogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5PcmdhbmlzYXRpb24pLFxuICBbTm9kZVR5cGUuU2l0ZV06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuU2l0ZSksXG4gIFtOb2RlVHlwZS5Tb3VyY2VdOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLlNvdXJjZSksXG4gIFtOb2RlVHlwZS5UZXJtXTogKGZ1bGxLZXksIHBhcmVudFNjaGVtYSkgPT4ge1xuICAgIGNvbnN0IGtleXMgPSBmdWxsS2V5LnNwbGl0KCcuJyk7XG4gICAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKSE7XG4gICAgcmV0dXJuIFsnbmFtZSddLmluY2x1ZGVzKGtleSkgJiYga2V5cy5sZW5ndGggPj0gMVxuICAgICAgPyB0ZXJtU3VnZ2VzdGlvbnMoa2V5cy5wb3AoKSEsIHBhcmVudFNjaGVtYSBhcyBJRGVmaW5pdGlvbk9iamVjdClcbiAgICAgIDogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5UZXJtKShmdWxsS2V5KTtcbiAgfSxcbiAgW1NjaGVtYVR5cGUuQmlibGlvZ3JhcGh5XTogZnVsbEtleSA9PiB7XG4gICAgY29uc3Qga2V5cyA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpITtcbiAgICBjb25zdCBwYXJlbnQgPSBrZXlzLnBvcCgpITtcbiAgICAvLyBwcmV2ZW50IHJlcGxhY2luZyBhIHRvcC1sZXZlbCBzb3VyY2VcbiAgICByZXR1cm4gWyd0aXRsZScsICdkb2N1bWVudERPSScsICdzY29wdXMnXS5pbmNsdWRlcyhrZXkpICYmIHBhcmVudCA9PT0gJ2JpYmxpb2dyYXBoeScgJiYga2V5cy5sZW5ndGggPj0gMVxuICAgICAgPyB7XG4gICAgICAgICAgdHlwZTogTm9kZVR5cGUuU291cmNlLFxuICAgICAgICAgIHBhcmVudExldmVsOiAxXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICB9LFxuICBudW1iZXI6IChfYSwgX2IsIHNjaGVtYSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlcyA9IChzY2hlbWEgYXMgYW55KS5jb25zdCA/IFsoc2NoZW1hIGFzIGFueSkuY29uc3RdIDogW107XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IHZhbHVlcy5sZW5ndGggPiAwID8gJ3NlbGVjdCcgOiBkZWZhdWx0U3VnZ2VzdGlvblR5cGUsXG4gICAgICAvLyBleGNsdWRlIHN1Z2dlc3RpbmcgU2NoZW1hVHlwZVxuICAgICAgdmFsdWVzXG4gICAgfTtcbiAgfSxcbiAgaW50ZWdlcjogKF9hLCBfYiwgc2NoZW1hKSA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gKHNjaGVtYSBhcyBhbnkpLmNvbnN0ID8gWyhzY2hlbWEgYXMgYW55KS5jb25zdF0gOiBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdmFsdWVzLmxlbmd0aCA+IDAgPyAnc2VsZWN0JyA6IGRlZmF1bHRTdWdnZXN0aW9uVHlwZSxcbiAgICAgIC8vIGV4Y2x1ZGUgc3VnZ2VzdGluZyBTY2hlbWFUeXBlXG4gICAgICB2YWx1ZXNcbiAgICB9O1xuICB9LFxuICBzdHJpbmc6IChmdWxsS2V5LCBfYiwgc2NoZW1hKSA9PiB7XG4gICAgLy8gZXhjbHVkZSBzdWdnZXN0aW5nIFNjaGVtYVR5cGVcbiAgICBjb25zdCB2YWx1ZXMgPSAoc2NoZW1hIGFzIGFueSkuY29uc3RcbiAgICAgID8gWyhzY2hlbWEgYXMgYW55KS5jb25zdF1cbiAgICAgIDogKChzY2hlbWEgYXMgYW55KS5lbnVtIHx8IFtdKS5maWx0ZXIodmFsID0+ICFPYmplY3QudmFsdWVzKFNjaGVtYVR5cGUpLmluY2x1ZGVzKHZhbCkpO1xuICAgIGNvbnN0IGtleSA9IGZ1bGxLZXkuc3BsaXQoJy4nKS5wb3AoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdmFsdWVzLmxlbmd0aCA+IDAgJiYga2V5ICE9PSAndHlwZScgPyAnc2VsZWN0JyA6IGRlZmF1bHRTdWdnZXN0aW9uVHlwZSxcbiAgICAgIHZhbHVlc1xuICAgIH07XG4gIH0sXG4gIGJvb2xlYW46IF9hID0+ICh7XG4gICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgdmFsdWVzOiBbJ3RydWUnLCAnZmFsc2UnXVxuICB9KVxufTtcblxuY29uc3QgZW5hYmxlU3VnZ2VzdGlvbnMgPSAoXG4gIHBhcmVudFNjaGVtYTogZGVmaW5pdGlvbixcbiAgdHlwZTogU2NoZW1hVHlwZSB8IE5vZGVUeXBlIHwgZ2VuZXJpY1R5cGUsXG4gIGZ1bGxLZXk6IHN0cmluZyxcbiAgc2NoZW1hPzogZGVmaW5pdGlvblxuKSA9PiB7XG4gIGNvbnN0IHN1Z2dlc3Rpb24gPSB0eXBlIGluIHR5cGVUb1N1Z2dlc3Rpb24gPyB0eXBlVG9TdWdnZXN0aW9uW3R5cGVdIShmdWxsS2V5LCBwYXJlbnRTY2hlbWEpIDogdW5kZWZpbmVkO1xuICByZXR1cm4gKFxuICAgIHN1Z2dlc3Rpb24gfHxcbiAgICAoc2NoZW1hICYmIChzY2hlbWEudHlwZSBhcyBnZW5lcmljVHlwZSkgaW4gdHlwZVRvU3VnZ2VzdGlvblxuICAgICAgPyB0eXBlVG9TdWdnZXN0aW9uW3NjaGVtYS50eXBlIGFzIGdlbmVyaWNUeXBlXSEoZnVsbEtleSwgcGFyZW50U2NoZW1hLCBzY2hlbWEpXG4gICAgICA6IHVuZGVmaW5lZClcbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBub2RlQXZhaWxhYmxlUHJvcGVydGllcyA9IChcbiAgbm9kZTogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPixcbiAgeyBmdWxsS2V5LCBzY2hlbWEsIHNjaGVtYVR5cGUgfTogUGFydGlhbDxJTm9kZVByb3BlcnR5PlxuKSA9PiBhdmFpbGFibGVQcm9wZXJ0aWVzKHNjaGVtYSEsIHNjaGVtYVR5cGUhLCBmdWxsS2V5ID8gZ2V0KG5vZGUsIGZ1bGxLZXksIHt9KSA6IG5vZGUsIGZ1bGxLZXkhLmxlbmd0aCA+IDApO1xuXG5leHBvcnQgY29uc3QgaXNBZGRQcm9wZXJ0eUVuYWJsZWQgPSAoXG4gIG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sXG4gIHNjaGVtYVR5cGU6IFNjaGVtYVR5cGUsXG4gIHNjaGVtYTogZGVmaW5pdGlvbixcbiAgZnVsbEtleSA9ICcnXG4pID0+XG4gICEhc2NoZW1hICYmXG4gICEhT2JqZWN0LmtleXMobm9kZUF2YWlsYWJsZVByb3BlcnRpZXMobm9kZSwgeyBmdWxsS2V5LCBzY2hlbWEgfSkpLmxlbmd0aCAmJlxuICAoIWZ1bGxLZXkgfHwgbmVzdGluZ1R5cGVFbmFibGVkKHNjaGVtYVR5cGUpKTtcblxuY29uc3QgZWRpdGFibGVLZXkgPSAoa2V5OiBzdHJpbmcpID0+ICFbJ3R5cGUnLCAnQHR5cGUnLCAndGVybVR5cGUnXS5pbmNsdWRlcyhrZXkpO1xuXG5leHBvcnQgY29uc3QgcHJvcGVydHlJZCA9ICgpID0+IHV1aWR2NCgpO1xuXG5jb25zdCBwcm9wZXJ0eVVybCA9IChub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+LCBrZXk6IHN0cmluZykgPT5cbiAgWydAaWQnLCAnbmFtZSddLmluY2x1ZGVzKGtleSkgJiYgbGlua1R5cGVFbmFibGVkKG5vZGVbJ0B0eXBlJ10pXG4gICAgPyBub2RlWydAaWQnXVxuICAgICAgPyB7XG4gICAgICAgICAgdXJsOiBgJHtiYXNlVXJsKCl9LyR7bm9kZVsnQHR5cGUnXS50b0xvd2VyQ2FzZSgpfS8ke25vZGVbJ0BpZCddfWAsXG4gICAgICAgICAgdGl0bGU6ICdPcGVuJ1xuICAgICAgICB9XG4gICAgICA6IG5vZGVbJ0B0eXBlJ10gPT09IFNjaGVtYVR5cGUuVGVybVxuICAgICAgPyB7XG4gICAgICAgICAgdXJsOiBgJHtiYXNlVXJsKCl9L2dsb3NzYXJ5P3F1ZXJ5PWAsXG4gICAgICAgICAgdXJsUGFyYW1WYWx1ZTogdHJ1ZSxcbiAgICAgICAgICB0aXRsZTogJ1NlYXJjaCBpbiBHbG9zc2FyeSdcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWRcbiAgICA6IHVuZGVmaW5lZDtcblxuY29uc3QgcHJvcGVydHlNYXBzVXJsID0gKG5vZGU6IFNpdGUgfCBPcmdhbmlzYXRpb24sIGtleTogc3RyaW5nLCB2YWx1ZSkgPT5cbiAgWyd0eXBlJ10uaW5jbHVkZXMoa2V5KSAmJlxuICBbU2NoZW1hVHlwZS5TaXRlLnRvU3RyaW5nKCksIFNjaGVtYVR5cGUuT3JnYW5pc2F0aW9uLnRvU3RyaW5nKCldLmluY2x1ZGVzKHN0cmluZ1ZhbHVlKHZhbHVlKSB8fCBub2RlLnR5cGUpXG4gICAgPyB7XG4gICAgICAgIHVybDogbWFwc1VybCh7IGxhdDogbm9kZS5sYXRpdHVkZSwgbG5nOiBub2RlLmxvbmdpdHVkZSB9KSxcbiAgICAgICAgdGl0bGU6ICdWaWV3IG9uIG1hcHMnLFxuICAgICAgICBpY29uOiAnbWFwJ1xuICAgICAgfVxuICAgIDogdW5kZWZpbmVkO1xuXG5jb25zdCBwcm9wZXJ0eUV4dGVybmFsVXJsID0gKG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PlxuICBwcm9wZXJ0eVVybChub2RlLCBrZXkpIHx8IHByb3BlcnR5TWFwc1VybChub2RlIGFzIGFueSwga2V5LCB2YWx1ZSk7XG5cbmNvbnN0IGFycmF5UGxhY2Vob2xkZXIgPSAodmFsdWVUeXBlOiBnZW5lcmljVHlwZSkgPT4gYFR5cGUgYSAke3ZhbHVlVHlwZX0gdGhlbiBwcmVzcyBFbnRlcmA7XG5cbmNvbnN0IGRlZmF1bHRQbGFjZWhvbGRlciA9ICh7IHR5cGUsIGV4YW1wbGVzIH06IGFueSwgdmFsdWVUeXBlOiBnZW5lcmljVHlwZSkgPT5cbiAgZXhhbXBsZXM/Lmxlbmd0aFxuICAgID8gQXJyYXkuaXNBcnJheShleGFtcGxlc1swXSlcbiAgICAgID8gYXJyYXlQbGFjZWhvbGRlcih2YWx1ZVR5cGUpXG4gICAgICA6IGV4YW1wbGVzWzBdXG4gICAgOiBgTXVzdCBiZSBvZiB0eXBlICR7dHlwZSB8fCB2YWx1ZVR5cGV9YDtcblxuY29uc3Qgc2NoZW1hUGxhY2hvbGRlciA9IChzY2hlbWE6IGFueSwgZnVsbEtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFtwYXJlbnQsIC4uLmtleXNdID0gZnVsbEtleS5zcGxpdCgnLicpO1xuICBjb25zdCBwcm9wZXJ0aWVzID0gc2NoZW1hLnByb3BlcnRpZXMgfHwge307XG4gIGNvbnN0IHsgZXhhbXBsZXMgfSA9IHBhcmVudCBpbiBwcm9wZXJ0aWVzID8gcHJvcGVydGllc1twYXJlbnRdIDogeyBleGFtcGxlczogW10gfTtcbiAgcmV0dXJuIGV4YW1wbGVzPy5sZW5ndGggJiYgdHlwZW9mIGV4YW1wbGVzWzBdID09PSAnb2JqZWN0JyA/IGdldChleGFtcGxlc1swXSwga2V5cy5qb2luKCcuJyksIG51bGwpIDogbnVsbDtcbn07XG5cbmNvbnN0IHByb3BlcnR5UGxhY2Vob2xkZXIgPSAoc2NoZW1hOiBhbnksIHZhbHVlVHlwZTogZ2VuZXJpY1R5cGUsIGZ1bGxLZXkgPSAnJywgcGFyZW50U2NoZW1hPzogYW55KSA9PlxuICBzY2hlbWEudHlwZSA9PT0gJ2FycmF5J1xuICAgID8gYXJyYXlQbGFjZWhvbGRlcih2YWx1ZVR5cGUpXG4gICAgOiAocGFyZW50U2NoZW1hICYmIGZ1bGxLZXk/Lmxlbmd0aCA/IHNjaGVtYVBsYWNob2xkZXIocGFyZW50U2NoZW1hLCBmdWxsS2V5KSA6IG51bGwpIHx8XG4gICAgICBkZWZhdWx0UGxhY2Vob2xkZXIoc2NoZW1hLCB2YWx1ZVR5cGUpO1xuXG5jb25zdCBwcm9wZXJ0eVR5cGVWYWx1ZToge1xuICBbdHlwZTogc3RyaW5nXTogKHZhbHVlOiBhbnksIHNjaGVtYTogZGVmaW5pdGlvbikgPT4gYW55O1xufSA9IHtcbiAgb2JqZWN0OiBzYWZlSlNPTlN0cmluZ2lmeSxcbiAgYXJyYXk6ICh2YWwsIHNjaGVtYSkgPT4ge1xuICAgIGNvbnN0IHsgaXRlbXMgfSA9IHNjaGVtYSBhcyBJRGVmaW5pdGlvbkFycmF5O1xuICAgIHJldHVybiAnJHJlZicgaW4gaXRlbXNcbiAgICAgID8gdmFsXG4gICAgICA6IEFycmF5LmlzQXJyYXkodmFsKVxuICAgICAgPyB2YWwubWFwKHZhbHVlID0+IHByb3BlcnR5VmFsdWUoaXRlbXMsIHZhbHVlKSkuam9pbihBUlJBWV9ERUxJTUlURVIpXG4gICAgICA6IHZhbDtcbiAgfSxcbiAganNvbjogdmFsID0+IHZhbCB8fCAnJyxcbiAgc3RyaW5nOiB2YWwgPT4gKGAke3ZhbH1gIHx8ICcnKS50cmltKCksXG4gIG51bWJlcjogdmFsID0+ICsoYCR7dmFsfWAgfHwgJzAnKSxcbiAgaW50ZWdlcjogdmFsID0+ICsoYCR7dmFsfWAgfHwgJzAnKSxcbiAgYm9vbGVhbjogdmFsID0+IChgJHt2YWx9YCB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnXG59O1xuXG5jb25zdCBwcm9wZXJ0eVZhbHVlID0gKHNjaGVtYTogZGVmaW5pdGlvbiwgdmFsdWU6IGFueSkgPT4ge1xuICBjb25zdCB2YWx1ZVR5cGUgPSBzY2hlbWEudHlwZVxuICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWEudHlwZSkgJiYgdHlwZW9mIHZhbHVlIGluIHByb3BlcnR5VHlwZVZhbHVlXG4gICAgICA/IHR5cGVvZiB2YWx1ZVxuICAgICAgOiAoc2NoZW1hLnR5cGUgYXMgc3RyaW5nKVxuICAgIDogJ29iamVjdCc7XG4gIHJldHVybiBwcm9wZXJ0eVR5cGVWYWx1ZVt2YWx1ZVR5cGUgaW4gcHJvcGVydHlUeXBlVmFsdWUgPyB2YWx1ZVR5cGUgOiAnc3RyaW5nJ10odmFsdWUsIHNjaGVtYSk7XG59O1xuXG5jb25zdCBwcm9wZXJ0eVZhbHVlVHlwZSA9IChzY2hlbWE6IGRlZmluaXRpb24sIHZhbHVlPzogYW55KSA9PlxuICAoc2NoZW1hLnR5cGVcbiAgICA/IEFycmF5LmlzQXJyYXkoc2NoZW1hLnR5cGUpXG4gICAgICA/IHNjaGVtYS50eXBlWzBdXG4gICAgICA6IHNjaGVtYS50eXBlID09PSAnYXJyYXknXG4gICAgICA/IHByb3BlcnR5VmFsdWVUeXBlKHsgLi4uc2NoZW1hLCB0eXBlOiBbc2NoZW1hLml0ZW1zLnR5cGUgYXMgZ2VuZXJpY1R5cGVdIH0pXG4gICAgICA6IHNjaGVtYS50eXBlXG4gICAgOiB0eXBlb2YgdmFsdWUpIGFzIGdlbmVyaWNUeXBlO1xuXG5jb25zdCBwcm9wZXJ0eVR5cGVQYXJzZVZhbHVlOiB7XG4gIFt0eXBlOiBzdHJpbmddOiAodmFsdWU6IGFueSwgc2NoZW1hOiBkZWZpbml0aW9uKSA9PiBhbnk7XG59ID0ge1xuICB1bmRlZmluZWQ6ICgpID0+IHVuZGVmaW5lZCxcbiAgb2JqZWN0OiB2YWwgPT4gc2FmZUpTT05QYXJzZSh2YWwpLFxuICBhcnJheTogKHZhbCwgc2NoZW1hKSA9PiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gc2NoZW1hIGFzIElEZWZpbml0aW9uQXJyYXk7XG4gICAgcmV0dXJuICckcmVmJyBpbiBpdGVtc1xuICAgICAgPyB2YWxcbiAgICAgIDogIXZhbCB8fCBBcnJheS5pc0FycmF5KHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHZhbC5zcGxpdChBUlJBWV9ERUxJTUlURVIpLm1hcCh2YWx1ZSA9PiBwYXJzZU5ld1ZhbHVlKGl0ZW1zLCB2YWx1ZSkpO1xuICB9LFxuICBqc29uOiB2YWwgPT4gdmFsIHx8ICcnLFxuICBzdHJpbmc6IHZhbCA9PiAoYCR7dmFsfWAgfHwgJycpLnRyaW0oKSxcbiAgbnVtYmVyOiB2YWwgPT4gKyhgJHt2YWx9YCB8fCAnMCcpLFxuICBpbnRlZ2VyOiB2YWwgPT4gKyhgJHt2YWx9YCB8fCAnMCcpLFxuICBib29sZWFuOiB2YWwgPT4gKGAke3ZhbH1gIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbn07XG5cbi8qKlxuICogQ29udmVydCB2YWx1ZSB0byB0aGUgZmluYWwgdHlwZSBpbiB0aGUgc2NoZW1hLlxuICpcbiAqIEBwYXJhbSBzY2hlbWEgRGVmaW5pdGlvbiBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gdmFsdWVcbiAqIEByZXR1cm5zIFZhbHVlIGluIHRoZSBjb3JyZWN0IGZvcm1hdC5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlTmV3VmFsdWUgPSAoc2NoZW1hOiBkZWZpbml0aW9uLCB2YWx1ZTogYW55KSA9PlxuICBzY2hlbWEudHlwZVxuICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWEudHlwZSlcbiAgICAgID8gcHJvcGVydHlUeXBlUGFyc2VWYWx1ZVt0eXBlb2YgdmFsdWVdKHZhbHVlLCBzY2hlbWEpXG4gICAgICA6IHByb3BlcnR5VHlwZVBhcnNlVmFsdWVbc2NoZW1hLnR5cGUgYXMgc3RyaW5nXSh2YWx1ZSwgc2NoZW1hKVxuICAgIDogdmFsdWU7XG5cbmNvbnN0IGlzT3BlbkRlZmF1bHQgPSAoc2NoZW1hVHlwZTogU2NoZW1hVHlwZSkgPT4gW1NjaGVtYVR5cGUuVGVybV0uaW5jbHVkZXMoc2NoZW1hVHlwZSk7XG5cbi8vIGNhbiB0aGUgcHJvcGVydHkgYmUgc2VlbiB3aGVuIHRoZSBncm91cCBpcyBjbG9zZWRcbmNvbnN0IGlzS2V5Q2xvc2VkVmlzaWJsZSA9IChrZXk6IHN0cmluZykgPT4gWyd0eXBlJywgJ2lkJywgJ0B0eXBlJywgJ0BpZCddLmluY2x1ZGVzKGtleSk7XG5cbmNvbnN0IGlzS2V5SGlkZGVuID0gKGtleTogc3RyaW5nKSA9PiBbJ3R5cGUnLCAnQHR5cGUnXS5pbmNsdWRlcyhrZXkpO1xuXG5jb25zdCBpc0tleVJlcXVpcmVkID0gKGtleTogc3RyaW5nLCBkZWY/OiBJRGVmaW5pdGlvbk9iamVjdCkgPT5cbiAgWyd0eXBlJywgJ2lkJ10uaW5jbHVkZXMoa2V5KSB8fCAoZGVmPy5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMoa2V5KTtcblxuZXhwb3J0IGNvbnN0IHByb3BlcnR5RXJyb3IgPVxuICAoZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10pID0+XG4gIChkYXRhUGF0aDogc3RyaW5nLCBub25FeHBhbmRhYmxlQXJyYXkgPSBmYWxzZSkgPT5cbiAgICBlcnJvcnMuZmluZChcbiAgICAgIGVycm9yID0+XG4gICAgICAgIChlcnJvci5kYXRhUGF0aCA9PT0gZGF0YVBhdGggfHxcbiAgICAgICAgICAobm9uRXhwYW5kYWJsZUFycmF5ICYmXG4gICAgICAgICAgICBub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aChlcnJvci5kYXRhUGF0aCEpID09PSBub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aChkYXRhUGF0aCkpKSAmJlxuICAgICAgICAoZGF0YVBhdGgubGVuZ3RoID4gMCB8fCAhaXNNaXNzaW5nUHJvcGVydHlFcnJvcihlcnJvcikpXG4gICAgKTtcblxuY29uc3QgbWlzc2luZ1Byb3BlcnR5RXJyb3JzID0gKFxuICBub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+LFxuICBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSxcbiAgcGFyZW50ID0gJydcbik6IElOb2RlUHJvcGVydHlbXSA9PiB7XG4gIGNvbnN0IGFsbEVycm9ycyA9IGVycm9ycy5maWx0ZXIoZXJyb3IgPT4gZXJyb3IuZGF0YVBhdGggPT09IGtleVRvRGF0YVBhdGgocGFyZW50KSAmJiBpc01pc3NpbmdQcm9wZXJ0eUVycm9yKGVycm9yKSk7XG4gIC8vIGNoZWNrIGZvciBub2RlIG5vdCBmb3VuZCBlcnJvcnNcbiAgY29uc3QgbWlzc2luZ05vZGUgPSBtaXNzaW5nTm9kZUVycm9ycyhhbGxFcnJvcnMpO1xuICByZXR1cm4gbWlzc2luZ05vZGUubGVuZ3RoID09PSAyXG4gICAgPyBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICAgIHNjaGVtYVR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAgICBzdWdnZXN0aW9uczogeyB0eXBlOiBkZWZhdWx0U3VnZ2VzdGlvblR5cGUgfSxcbiAgICAgICAgICBrZXk6ICcnLFxuICAgICAgICAgIGZ1bGxLZXk6IHBhcmVudCxcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGxldmVsOiAnZXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogbWlzc2luZ05vZGVFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG1pc3NpbmdOb2RlLmZpbmQoKHsgcGFyYW1zIH0pID0+IHBhcmFtcz8ubWlzc2luZ1Byb3BlcnR5ID09PSAnQGlkJylcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGhhc0Vycm9yOiB0cnVlLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogZmFsc2UsXG4gICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIoJycpXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICA6IGFsbEVycm9ycy5tYXAoZXJyb3IgPT4ge1xuICAgICAgICBjb25zdCB7IG1pc3NpbmdQcm9wZXJ0eSB9ID0gZXJyb3IucGFyYW1zITtcbiAgICAgICAgY29uc3QgZnVsbEtleSA9IHBhcmVudCA/IGAke3BhcmVudH0uJHttaXNzaW5nUHJvcGVydHl9YCA6IG1pc3NpbmdQcm9wZXJ0eTtcbiAgICAgICAgY29uc3QgbWlzc2luZ09uZU9mID0gaXNNaXNzaW5nT25lT2ZFcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaWQ6IHByb3BlcnR5SWQoKSxcbiAgICAgICAgICBzY2hlbWFUeXBlOiBub2RlLnR5cGUsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IHsgdHlwZTogZGVmYXVsdFN1Z2dlc3Rpb25UeXBlIH0sXG4gICAgICAgICAga2V5OiBtaXNzaW5nUHJvcGVydHksXG4gICAgICAgICAgZnVsbEtleSxcbiAgICAgICAgICB2YWx1ZTogJ0FkZCBmaWVsZCB0byBmaXgnLFxuICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICBlcnJvcjogZm9ybWF0RXJyb3IoZXJyb3IpLFxuICAgICAgICAgIGhhc0Vycm9yOiBtaXNzaW5nT25lT2YgPyBmYWxzZSA6IGVycm9ySGFzRXJyb3IoZXJyb3IpLFxuICAgICAgICAgIGhhc1dhcm5pbmc6IG1pc3NpbmdPbmVPZiB8fCBlcnJvckhhc1dhcm5pbmcoZXJyb3IpLFxuICAgICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcihtaXNzaW5nUHJvcGVydHkpXG4gICAgICAgIH07XG4gICAgICB9KTtcbn07XG5cbmNvbnN0IHByb3BlcnR5RnJvbU5vZGUgPVxuICAoXG4gICAgc2NoZW1hczogZGVmaW5pdGlvbnMsXG4gICAgZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10sXG4gICAgbm9kZVNjaGVtYTogZGVmaW5pdGlvbixcbiAgICBkZWVwRWRpdGFibGU6IGJvb2xlYW4sXG4gICAgcGFyZW50ID0gJycsXG4gICAgbm9kZTogYW55XG4gICkgPT5cbiAgKGtleTogc3RyaW5nKTogSU5vZGVQcm9wZXJ0eSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBub2RlW2tleV07XG4gICAgY29uc3QgZXhwYW5kYWJsZSA9IGlzRXhwYW5kYWJsZSh2YWx1ZSk7XG4gICAgY29uc3QgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgIGNvbnN0IG5vbkV4cGFuZGFibGVBcnJheSA9IGlzQXJyYXkgJiYgIWV4cGFuZGFibGU7XG4gICAgY29uc3QgZnVsbEtleSA9IEFycmF5LmlzQXJyYXkobm9kZSkgPyBgJHtwYXJlbnR9WyR7a2V5fV1gIDogW3BhcmVudCwga2V5XS5maWx0ZXIoQm9vbGVhbikuam9pbignLicpO1xuICAgIGNvbnN0IG5vZGVUeXBlID0gbm9kZS50eXBlIHx8IG5vZGVbJ0B0eXBlJ107XG4gICAgY29uc3Qgc2NoZW1hVHlwZSA9IGV4cGFuZGFibGVcbiAgICAgID8gaXNBcnJheSAmJiB2YWx1ZS5sZW5ndGhcbiAgICAgICAgPyB2YWx1ZVswXS50eXBlIHx8IHZhbHVlWzBdWydAdHlwZSddXG4gICAgICAgIDogdmFsdWUudHlwZSB8fCB2YWx1ZVsnQHR5cGUnXVxuICAgICAgOiBub2RlVHlwZTtcbiAgICBjb25zdCBzY2hlbWEgPVxuICAgICAgKHNjaGVtYXMgJiYgaXNUeXBlVmFsaWQoeyB0eXBlOiBzY2hlbWFUeXBlIH0pXG4gICAgICAgID8gZXhwYW5kYWJsZVxuICAgICAgICAgID8gc2NoZW1hc1tzY2hlbWFUeXBlXVxuICAgICAgICAgIDogc2NoZW1hc1tzY2hlbWFUeXBlXS5wcm9wZXJ0aWVzW2tleV1cbiAgICAgICAgOiBudWxsKSB8fCB7fTtcbiAgICBjb25zdCBpc0lyaSA9IGlzU2NoZW1hSXJpKHNjaGVtYSk7XG4gICAgY29uc3QgZXJyb3IgPSBwcm9wZXJ0eUVycm9yKGVycm9ycykoa2V5VG9EYXRhUGF0aChmdWxsS2V5KSwgbm9uRXhwYW5kYWJsZUFycmF5KTtcbiAgICBjb25zdCBwYXJlbnRTY2hlbWEgPSBleHBhbmRhYmxlXG4gICAgICA/IC8vIFRPRE86IGZvciBub24tYXJyYXksIHNob3VsZCBiZSBzY2hlbWEgdW5sZXNzIGxhc3QgcmVjdXJzaW9uXG4gICAgICAgIGlzQXJyYXlcbiAgICAgICAgPyBzY2hlbWFcbiAgICAgICAgOiBub2RlU2NoZW1hXG4gICAgICA6IG5vZGVTY2hlbWE7XG4gICAgY29uc3QgcHJvcGVydGllcyA9XG4gICAgICBleHBhbmRhYmxlIHx8IGlzSXJpID8gcmVjdXJzaXZlUHJvcGVydGllcyhzY2hlbWFzLCBlcnJvcnMsIHBhcmVudFNjaGVtYSwgZGVlcEVkaXRhYmxlLCBmdWxsS2V5KSh2YWx1ZSkgOiBbXTtcbiAgICBjb25zdCBpbkVycm9yID0gZXJyb3JIYXNFcnJvcihlcnJvcikgfHwgaGFzRXJyb3IocHJvcGVydGllcyk7XG4gICAgY29uc3QgaW5XYXJuaW5nID0gZXJyb3JIYXNXYXJuaW5nKGVycm9yKSB8fCBoYXNXYXJuaW5nKHByb3BlcnRpZXMpO1xuICAgIGNvbnN0IGVkaXRhYmxlID1cbiAgICAgIGlzVHlwZU5vZGUobm9kZVsnQHR5cGUnXSkgfHwgKGV4cGFuZGFibGUgJiYgaXNUeXBlTm9kZSh2YWx1ZVsnQHR5cGUnXSkpXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiAvLyBwcmV2ZW50IGVkaXRpbmcvYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIG9uIGV4aXN0aW5nIHN1Yi1ub2Rlc1xuICAgICAgICAhZGVlcEVkaXRhYmxlICYmXG4gICAgICAgICAgaXNUeXBlTm9kZShzY2hlbWFUeXBlKSAmJlxuICAgICAgICAgIChleHBhbmRhYmxlID8gdmFsdWUudHlwZSAhPT0gTm9kZVR5cGUuVGVybSA6IHBhcmVudCAmJiBub2RlLnR5cGUgIT09IE5vZGVUeXBlLlRlcm0pXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiAvLyBoYW5kbGUgSVJJXG4gICAgICAgICAgKCFzY2hlbWFUeXBlICYmIGtleSA9PT0gJ0BpZCcpIHx8IGVkaXRhYmxlS2V5KGtleSk7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gcHJvcGVydHlWYWx1ZVR5cGUoc2NoZW1hLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICBzY2hlbWFUeXBlOiBpc0lyaSA/IG51bGwgOiBzY2hlbWFUeXBlLFxuICAgICAgc2NoZW1hLFxuICAgICAga2V5LFxuICAgICAgZnVsbEtleSxcbiAgICAgIHZhbHVlOiBwcm9wZXJ0eVZhbHVlKHNjaGVtYSwgdmFsdWUpLFxuICAgICAgZWRpdGFibGU6IGluRXJyb3IgfHwgZWRpdGFibGUsXG4gICAgICBzdWdnZXN0aW9uczogZW5hYmxlU3VnZ2VzdGlvbnMobm9kZVNjaGVtYSwgbm9kZS50eXBlLCBmdWxsS2V5LCBzY2hlbWEpLFxuICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBpc0FkZFByb3BlcnR5RW5hYmxlZChub2RlLCBzY2hlbWFUeXBlLCBzY2hlbWEsIGZ1bGxLZXkpLFxuICAgICAgbmV3UHJvcGVydHk6IHt9LFxuICAgICAgbmV3RXJyb3I6IHsgbGV2ZWw6ICd3YXJuaW5nJyB9LFxuICAgICAgZXJyb3I6IGZvcm1hdEVycm9yKGVycm9yKSxcbiAgICAgIGlzSGlkZGVuOiBwYXJlbnQgJiYgaXNLZXlIaWRkZW4oa2V5KSxcbiAgICAgIGNsb3NlZFZpc2libGU6IGlzS2V5Q2xvc2VkVmlzaWJsZShrZXkpLFxuICAgICAgaGFzRXJyb3I6IGluRXJyb3IsXG4gICAgICBoYXNXYXJuaW5nOiBpbldhcm5pbmcsXG4gICAgICBpc1JlcXVpcmVkOiBpc0tleVJlcXVpcmVkKGtleSwgc2NoZW1hc1tub2RlVHlwZV0pLFxuICAgICAgaXNBcnJheSxcbiAgICAgIGlzRXhwYW5kYWJsZTogZXhwYW5kYWJsZSxcbiAgICAgIGlzT3BlbjogaXNPcGVuRGVmYXVsdChzY2hlbWFUeXBlKSxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICBwbGFjZWhvbGRlcjogcHJvcGVydHlQbGFjZWhvbGRlcihzY2hlbWEsIHZhbHVlVHlwZSwgZnVsbEtleSwgcGFyZW50U2NoZW1hKSxcbiAgICAgIGV4dGVybmFsVXJsOiBwcm9wZXJ0eUV4dGVybmFsVXJsKG5vZGUsIGtleSwgdmFsdWUpLFxuICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIoa2V5KVxuICAgIH07XG4gIH07XG5cbmV4cG9ydCBjb25zdCBzaW5nbGVQcm9wZXJ0eSA9IChzY2hlbWFzOiBkZWZpbml0aW9ucywgZXJyb3JzOiBJVmFsaWRhdGlvbkVycm9yW10sIG5vZGU6IGFueSwgZnVsbEtleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IFtfdCwgLi4ua2V5c10gPSBmdWxsS2V5LnNwbGl0KCcuJyk7XG4gIGNvbnN0IGtleSA9IGtleXMucG9wKCkhO1xuICBjb25zdCBwYXJlbnQgPSBrZXlzLmpvaW4oJy4nKTtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IHBhcmVudC5sZW5ndGggPyBnZXQobm9kZSwgcGFyZW50KSA6IG5vZGU7XG4gIGNvbnN0IHNjaGVtYVR5cGUgPSB0eXBlVG9TY2hlbWFUeXBlKHBhcmVudE5vZGUudHlwZSB8fCBwYXJlbnROb2RlWydAdHlwZSddKTtcbiAgY29uc3QgcGFyZW50U2NoZW1hID0gc2NoZW1hc1tzY2hlbWFUeXBlXTtcbiAgcmV0dXJuIHByb3BlcnR5RnJvbU5vZGUoc2NoZW1hcywgZXJyb3JzLCBwYXJlbnRTY2hlbWEsIHRydWUsIHBhcmVudCwgcGFyZW50Tm9kZSkoa2V5KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWN1cnNpdmVQcm9wZXJ0aWVzID1cbiAgKHNjaGVtYXM6IGRlZmluaXRpb25zLCBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSwgbm9kZVNjaGVtYTogZGVmaW5pdGlvbiwgZGVlcEVkaXRhYmxlOiBib29sZWFuLCBwYXJlbnQgPSAnJykgPT5cbiAgKG5vZGU6IGFueSk6IElOb2RlUHJvcGVydHlbXSA9PlxuICAgIE9iamVjdC5rZXlzKG5vZGUpXG4gICAgICAuZmlsdGVyKGtleSA9PiAhaWdub3JlS2V5cy5pbmNsdWRlcyhrZXkpKVxuICAgICAgLm1hcChwcm9wZXJ0eUZyb21Ob2RlKHNjaGVtYXMsIGVycm9ycywgbm9kZVNjaGVtYSwgZGVlcEVkaXRhYmxlLCBwYXJlbnQsIG5vZGUpKVxuICAgICAgLmNvbmNhdCguLi5taXNzaW5nUHJvcGVydHlFcnJvcnMobm9kZSwgZXJyb3JzLCBwYXJlbnQpKVxuICAgICAgLnNvcnQoc29ydFByb3BlcnRpZXMpO1xuXG5jb25zdCBmdWxsS2V5UGFydHMgPSAoZnVsbEtleTogc3RyaW5nKSA9PlxuICBmdWxsS2V5LnNwbGl0KCcuJykuZmxhdE1hcCh2YWwgPT4ge1xuICAgIGlmICh2YWwuZW5kc1dpdGgoJ10nKSkge1xuICAgICAgY29uc3QgW2tleSwgaW5kZXhdID0gdmFsLnNwbGl0KCdbJyk7XG4gICAgICByZXR1cm4gW2tleSwgaW5kZXgucmVwbGFjZSgnXScsICcnKV07XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUHJvcGVydGllcyA9IChcbiAgeyBwcm9wZXJ0aWVzIH06IFBhcnRpYWw8SU5vZGVQcm9wZXJ0eT4sXG4gIHVwZGF0ZXI6IChwcm9wOiBJTm9kZVByb3BlcnR5KSA9PiBJTm9kZVByb3BlcnR5XG4pID0+IChwcm9wZXJ0aWVzIHx8IFtdKS5tYXAocHJvcCA9PiB1cGRhdGVQcm9wZXJ0aWVzKHVwZGF0ZXIocHJvcCksIHVwZGF0ZXIpKTtcblxuZXhwb3J0IGNvbnN0IHR5cGVUb05ld1Byb3BlcnR5ID0gKFxuICBzY2hlbWFzOiBkZWZpbml0aW9ucyxcbiAgc2NoZW1hOiBkZWZpbml0aW9uLFxuICBub2RlU2NoZW1hOiBkZWZpbml0aW9uLFxuICBub2RlOiBhbnksXG4gIGZ1bGxLZXk6IHN0cmluZ1xuKTogSU5vZGVQcm9wZXJ0eSA9PiB7XG4gIGNvbnN0IGtleSA9IGZ1bGxLZXlQYXJ0cyhmdWxsS2V5KS5wb3AoKSE7XG4gIGNvbnN0IG1hcHBpbmdzOiB7XG4gICAgW2tleTogc3RyaW5nXTogKCkgPT4gSU5vZGVQcm9wZXJ0eTtcbiAgfSA9IHtcbiAgICBvYmplY3Q6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hVHlwZSwgcHJvcGVydGllcyB9ID0gc2NoZW1hUmVxdWlyZWRQcm9wZXJ0aWVzKHNjaGVtYXMsIHNjaGVtYSBhcyBJRGVmaW5pdGlvbk9iamVjdCk7XG4gICAgICBub2RlW2tleV0gPSBub2RlW2tleV0gfHwge307XG4gICAgICBub2RlW2tleV0udHlwZSA9IHNjaGVtYVR5cGU7XG4gICAgICAvLyBUT0RPOiBoYW5kbGUgbG9hZCBzY2hlbWFzIGZyb20gaHR0cCBzb3VyY2VcbiAgICAgIGlmIChzY2hlbWFUeXBlLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICByZXR1cm4gdHlwZVRvTmV3UHJvcGVydHkoc2NoZW1hcywgeyB0eXBlOiAnanNvbicgfSBhcyBhbnksIG5vZGVTY2hlbWEsIG5vZGUsIGZ1bGxLZXkpO1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogaGFuZGxlIG5vZGVTY2hlbWEgc2hvdWxkIGJlIHNjaGVtYSB1bmxlc3MgbGFzdCByZWN1cnNpb25cbiAgICAgIGNvbnN0IHByb3BzID0gcHJvcGVydGllc1xuICAgICAgICAuZmlsdGVyKHByb3AgPT4gbmVzdGluZ0VuYWJsZWQoc2NoZW1hVHlwZSwgcHJvcC5rZXkpICYmICEhcHJvcC52YWx1ZSlcbiAgICAgICAgLm1hcCh2ID0+ICh7XG4gICAgICAgICAgLi4udHlwZVRvTmV3UHJvcGVydHkoc2NoZW1hcywgdi52YWx1ZSwgbm9kZVNjaGVtYSwgbm9kZVtrZXldLCBgJHtmdWxsS2V5fS4ke3Yua2V5fWApLFxuICAgICAgICAgIGlzUmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfSkpO1xuICAgICAgY29uc3QgdmFsdWUgPSBwcm9wcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+ICh7IC4uLnByZXYsIFtjdXJyLmtleV06IGN1cnIudmFsdWUgfSksIHt9KTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgIGlzQWRkZWQ6IHRydWUsXG4gICAgICAgIHNjaGVtYTogc2NoZW1hc1tzY2hlbWFUeXBlXSxcbiAgICAgICAgc2NoZW1hVHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBmdWxsS2V5LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgZWRpdGFibGU6IGVkaXRhYmxlS2V5KGtleSksXG4gICAgICAgIGlzSGlkZGVuOiBpc0tleUhpZGRlbihrZXkpLFxuICAgICAgICBjbG9zZWRWaXNpYmxlOiBpc0tleUNsb3NlZFZpc2libGUoa2V5KSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IGVuYWJsZVN1Z2dlc3Rpb25zKG5vZGVTY2hlbWEsIHNjaGVtYVR5cGUsIGZ1bGxLZXkpLFxuICAgICAgICBwcm9wZXJ0aWVzOiBwcm9wcy5zb3J0KHNvcnRQcm9wZXJ0aWVzKSxcbiAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBpc0FkZFByb3BlcnR5RW5hYmxlZChub2RlLCBzY2hlbWFUeXBlLCBzY2hlbWFzW3NjaGVtYVR5cGVdLCBrZXkpLFxuICAgICAgICBuZXdQcm9wZXJ0eToge30sXG4gICAgICAgIG5ld0Vycm9yOiB7IGxldmVsOiAnd2FybmluZycgfSxcbiAgICAgICAgaXNSZXF1aXJlZDogaXNLZXlSZXF1aXJlZChrZXksIHNjaGVtYSBhcyBhbnkpLFxuICAgICAgICBpc0FycmF5OiBmYWxzZSxcbiAgICAgICAgaXNFeHBhbmRhYmxlOiB0cnVlLFxuICAgICAgICBpc09wZW46IGlzT3BlbkRlZmF1bHQoc2NoZW1hVHlwZSksXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKGtleSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBhcnJheTogKCkgPT4ge1xuICAgICAgY29uc3QgeyBpdGVtcyB9ID0gc2NoZW1hIGFzIElEZWZpbml0aW9uQXJyYXk7XG4gICAgICAvLyBhcnJheSBvZiBzdHJpbmcsIG51bWJlciBhbmQgYm9vbGVhblxuICAgICAgaWYgKGl0ZW1zLnR5cGUpIHtcbiAgICAgICAgcmV0dXJuIG1hcHBpbmdzLmRlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNjaGVtYVR5cGUgPSBkZWZpbml0aW9uVG9TY2hlbWFUeXBlKGl0ZW1zIGFzIElEZWZpbml0aW9uT2JqZWN0KTtcbiAgICAgIG5vZGVba2V5XSA9IG5vZGVba2V5XSB8fCBbXTtcbiAgICAgIG5vZGVba2V5XS5wdXNoKHt9KTtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gdHlwZVRvTmV3UHJvcGVydHkoc2NoZW1hcywgaXRlbXMsIHNjaGVtYXNbc2NoZW1hVHlwZV0sIG5vZGVba2V5XVswXSwgYCR7ZnVsbEtleX1bMF1gKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgIGlzQWRkZWQ6IHRydWUsXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgc2NoZW1hVHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBmdWxsS2V5LFxuICAgICAgICB2YWx1ZTogW3Byb3BlcnR5LnZhbHVlXSxcbiAgICAgICAgZWRpdGFibGU6IGVkaXRhYmxlS2V5KGtleSksXG4gICAgICAgIGlzSGlkZGVuOiBpc0tleUhpZGRlbihrZXkpLFxuICAgICAgICBjbG9zZWRWaXNpYmxlOiBpc0tleUNsb3NlZFZpc2libGUoa2V5KSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHVuZGVmaW5lZCxcbiAgICAgICAgcHJvcGVydGllczogW3Byb3BlcnR5XSxcbiAgICAgICAgbmV3UHJvcGVydHk6IHt9LFxuICAgICAgICBuZXdFcnJvcjogeyBsZXZlbDogJ3dhcm5pbmcnIH0sXG4gICAgICAgIGlzQXJyYXk6IHRydWUsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIoa2V5KVxuICAgICAgfTtcbiAgICB9LFxuICAgIGRlZmF1bHQ6ICgpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHByb3BlcnR5VmFsdWVUeXBlKHNjaGVtYSk7XG4gICAgICBjb25zdCB2YWx1ZSA9IHNjaGVtYS5kZWZhdWx0IHx8IChzY2hlbWEgYXMgYW55KS5jb25zdCB8fCB2YWx1ZVR5cGVUb0RlZmF1bHRbdmFsdWVUeXBlXTtcbiAgICAgIG5vZGVba2V5XSA9IHZhbHVlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IHByb3BlcnR5SWQoKSxcbiAgICAgICAgaXNBZGRlZDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBzY2hlbWFUeXBlOiBub2RlLnR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgZnVsbEtleSxcbiAgICAgICAgdmFsdWU6IHByb3BlcnR5VmFsdWUoc2NoZW1hLCB2YWx1ZSksXG4gICAgICAgIGVkaXRhYmxlOiBlZGl0YWJsZUtleShrZXkpLFxuICAgICAgICBpc0hpZGRlbjogaXNLZXlIaWRkZW4oa2V5KSxcbiAgICAgICAgY2xvc2VkVmlzaWJsZTogaXNLZXlDbG9zZWRWaXNpYmxlKGtleSksXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBlbmFibGVTdWdnZXN0aW9ucyhub2RlU2NoZW1hLCBub2RlLnR5cGUsIGZ1bGxLZXksIHNjaGVtYSksXG4gICAgICAgIHBsYWNlaG9sZGVyOiBwcm9wZXJ0eVBsYWNlaG9sZGVyKHNjaGVtYSwgdmFsdWVUeXBlLCBmdWxsS2V5LCBub2RlU2NoZW1hKSxcbiAgICAgICAgZXh0ZXJuYWxVcmw6IHByb3BlcnR5RXh0ZXJuYWxVcmwobm9kZSwga2V5LCB2YWx1ZSksXG4gICAgICAgIHByb3BlcnRpZXM6IFtdLFxuICAgICAgICBhZGRQcm9wZXJ0eUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcihrZXkpXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgY29uc3QgbWFwcGVkID0gIXNjaGVtYS50eXBlXG4gICAgPyBtYXBwaW5ncy5vYmplY3RcbiAgICA6IChzY2hlbWEudHlwZSBhcyBzdHJpbmcpIGluIG1hcHBpbmdzXG4gICAgPyBtYXBwaW5nc1tzY2hlbWEudHlwZSBhcyBzdHJpbmddXG4gICAgOiBtYXBwaW5ncy5kZWZhdWx0O1xuICByZXR1cm4gbWFwcGVkKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZFByb3BlcnR5ID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwgZnVsbEtleTogc3RyaW5nKSA9PiB7XG4gIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHAuZnVsbEtleSA9PT0gZnVsbEtleSkge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUCA9IGZpbmRQcm9wZXJ0eShwLnByb3BlcnRpZXMsIGZ1bGxLZXkpO1xuICAgIGlmIChjaGlsZFApIHtcbiAgICAgIHJldHVybiBjaGlsZFA7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcmVudFByb3BlcnR5ID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+IHtcbiAgY29uc3QgYWxsS2V5cyA9IHByb3BlcnR5LmZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgWy4uLm5ldyBBcnJheShwcm9wZXJ0eS5zdWdnZXN0aW9ucz8ucGFyZW50TGV2ZWwgfHwgMCldLm1hcCgoKSA9PiBhbGxLZXlzLnBvcCgpKTtcbiAgY29uc3QgcGFyZW50S2V5cyA9IGZ1bGxLZXlQYXJ0cyhhbGxLZXlzLmpvaW4oJy4nKSk7XG4gIHBhcmVudEtleXMucG9wKCk7XG4gIGNvbnN0IHBhcmVudCA9IHBhcmVudEtleXMucmVkdWNlKChwcmV2LCBjdXJyLCBjdXJySW5kZXgpOiBhbnkgPT4ge1xuICAgIGNvbnN0IHByb3AgPSBwcmV2LmZpbmQodiA9PiB2LmtleSA9PT0gY3Vycik7XG4gICAgcmV0dXJuIGN1cnJJbmRleCA9PT0gcGFyZW50S2V5cy5sZW5ndGggLSAxID8gcHJvcCB8fCAoe30gYXMgSU5vZGVQcm9wZXJ0eSkgOiBwcm9wIS5wcm9wZXJ0aWVzIHx8IFtdO1xuICB9LCBwcm9wZXJ0aWVzKSBhcyBhbnkgYXMgSU5vZGVQcm9wZXJ0eTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyZW50KSA/IHByb3BlcnR5IDogcGFyZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IG5lc3RlZFByb3BlcnR5ID0gKHsgcHJvcGVydGllcyB9OiBJTm9kZVByb3BlcnR5LCBuZXN0ZWRLZXk6IHN0cmluZykgPT5cbiAgcHJvcGVydGllcy5maW5kKCh7IGtleSB9KSA9PiBrZXkgPT09IG5lc3RlZEtleSk7XG5cbmV4cG9ydCBjb25zdCBzaWJsaW5nUHJvcGVydHkgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSwgc2libGluZ0tleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHBhcmVudCA9IHBhcmVudFByb3BlcnR5KHByb3BlcnRpZXMsIHByb3BlcnR5KTtcbiAgY29uc3QgcGFyZW50UHJvcGVydGllcyA9IHBhcmVudCA9PT0gcHJvcGVydHkgPyBwcm9wZXJ0aWVzIDogcGFyZW50LnByb3BlcnRpZXM7XG4gIHJldHVybiBwYXJlbnRQcm9wZXJ0aWVzLmZpbmQocHJvcCA9PiBwcm9wLmtleSA9PT0gc2libGluZ0tleSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ3JvdXBDaGFuZ2VkID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwga2V5OiBzdHJpbmcsIHZhbHVlPzogYW55KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyZW50S2V5cyA9IGZ1bGxLZXlQYXJ0cyhrZXkpO1xuICAgIHBhcmVudEtleXMucmVkdWNlKChwcmV2LCBjdXJyLCBjdXJySW5kZXgpID0+IHtcbiAgICAgIGlmIChjdXJySW5kZXggPT09IHBhcmVudEtleXMubGVuZ3RoIC0gMSAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJldi5zcGxpY2UoXG4gICAgICAgICAgcHJldi5maW5kSW5kZXgodiA9PiB2LmtleSA9PT0gY3VyciksXG4gICAgICAgICAgMVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHByZXYuZmluZCh2ID0+IHYua2V5ID09PSBjdXJyKSE7XG4gICAgICAgIHByb3AuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcm9wLnByb3BlcnRpZXM7XG4gICAgICB9XG4gICAgfSwgcHJvcGVydGllcyk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAvLyBpZ25vcmUgZXJyb3JcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hQcm9wZXJ0eUtleXMgPSAocHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+XG4gIHByb3BlcnR5LnByb3BlcnRpZXMubWFwKChwcm9wLCBpKSA9PiB7XG4gICAgcHJvcC5mdWxsS2V5ID0gYCR7cHJvcGVydHkuZnVsbEtleX0ke3Byb3BlcnR5LmlzQXJyYXkgPyBgWyR7aX1dYCA6IGAuJHtwcm9wLmtleX1gfWA7XG4gICAgcHJvcC5rZXkgPSBwcm9wZXJ0eS5pc0FycmF5ID8gYCR7aX1gIDogcHJvcC5rZXk7XG4gICAgcmV0dXJuIHJlZnJlc2hQcm9wZXJ0eUtleXMocHJvcCk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbkVuYWJsZWQgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBzdGFydERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdzdGFydERhdGUnKTtcbiAgY29uc3QgZW5kRGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2VuZERhdGUnKTtcbiAgcmV0dXJuICEhc3RhcnREYXRlPy52YWx1ZSAmJiAhIWVuZERhdGU/LnZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUN5Y2xlRHVyYXRpb24gPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBzdGFydERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdzdGFydERhdGUnKSE7XG4gIGNvbnN0IGVuZERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdlbmREYXRlJykhO1xuICByZXR1cm4gZGlmZkluRGF5cyhzdGFydERhdGUudmFsdWUsIGVuZERhdGUudmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUN5Y2xlU3RhcnREYXRlRW5hYmxlZCA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGNvbnN0IGN5Y2xlRHVyYXRpb24gPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdjeWNsZUR1cmF0aW9uJyk7XG4gIGNvbnN0IGVuZERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdlbmREYXRlJyk7XG4gIHJldHVybiAhIWN5Y2xlRHVyYXRpb24/LnZhbHVlICYmICEhZW5kRGF0ZT8udmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQ3ljbGVTdGFydERhdGUgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBjeWNsZUR1cmF0aW9uID0gc2libGluZ1Byb3BlcnR5KHByb3BlcnRpZXMsIHByb3BlcnR5LCAnY3ljbGVEdXJhdGlvbicpITtcbiAgY29uc3QgZW5kRGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2VuZERhdGUnKSE7XG4gIHJldHVybiBtb21lbnQoZW5kRGF0ZS52YWx1ZSkubG9jYWxlKCdlbi1nYicpLnN1YnRyYWN0KGN5Y2xlRHVyYXRpb24udmFsdWUsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG59O1xuIl19
611
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZXMtZm9ybS5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9maWxlcy9maWxlcy1mb3JtLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUM7QUFDN0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRCxPQUFPLEVBRUwsVUFBVSxFQUNWLFFBQVEsRUFDUixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFHWixnQkFBZ0IsRUFDakIsTUFBTSxzQkFBc0IsQ0FBQztBQUc5QixPQUFPLEVBRUwsd0JBQXdCLEVBQ3hCLFdBQVcsRUFDWCxzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLGVBQWUsRUFFZixpQkFBaUIsRUFDakIsbUJBQW1CLEVBQ25CLGdCQUFnQixFQUNoQixxQkFBcUIsRUFDdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVySCxNQUFNLHVCQUF1QixHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQU8sRUFBRSxjQUFpQyxFQUFFLEVBQUUsQ0FDdEcsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssTUFBTTtJQUNyQixDQUFDLENBQUMsbUNBQW1DO1FBQ25DLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztZQUNoQyxDQUFDLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxnQ0FBZ0MsWUFBWSxDQUFDLG1CQUFtQixDQUFDO3lCQUM1RixZQUFZLENBQUMsVUFBVSxDQUFDLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0I7SUFDL0csQ0FBQyxDQUFDLFFBQVEsVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7TUFDOUIsVUFBVSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO3dDQUNsRCxVQUFVLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7QUFFbEgsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUNuQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUcxQyxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBbUIsU0FBUyxDQUFDO0FBOEQvRCxNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLEtBQUssS0FBSyxXQUFXLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUM3RyxNQUFNLDBCQUEwQixHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBUSxHQUFHLEVBQUUsRUFBRSxTQUFTLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FDaEUsU0FBUyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUU7SUFDdkMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBZ0IsRUFBRSxDQUFnQixFQUFFLEVBQUU7SUFDbkUsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0tBQ3hCO0lBQ0QsSUFBSSxDQUFDLENBQUMsWUFBWSxFQUFFO1FBQ2xCLE9BQU8sQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEQ7SUFDRCxJQUFJLENBQUMsQ0FBQyxZQUFZLEVBQUU7UUFDbEIsT0FBTyxDQUFDLENBQUMsQ0FBQztLQUNYO0lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7UUFDVixPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ1g7SUFDRCxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtRQUNuQixPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ1g7SUFDRCxJQUFJLElBQUksS0FBSyxNQUFNLEVBQUU7UUFDbkIsT0FBTyxDQUFDLENBQUM7S0FDVjtJQUNELElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssTUFBTSxFQUFFO1FBQ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDWDtJQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFO1FBQzlCLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDWDtJQUNELE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUMsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBRXRCO0lBQ0YsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsRUFBRTtJQUN2QyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFO0lBQ3ZDLE9BQU8sRUFBRSxDQUFDLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxDQUFDLHlCQUF5QixlQUFlLEdBQUc7SUFDN0UsUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxzQ0FBc0MsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztDQUNoSCxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxNQUFXLEVBQUUsUUFBdUIsRUFBRSxFQUFFO0lBQzFFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsT0FBTyxHQUFHLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkgsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQ3ZELE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUU1RixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVoRyxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV0RyxNQUFNLHdCQUF3QixHQUFHLENBQUMsR0FBVyxFQUFFLEtBQVksRUFBRSxFQUFFO0lBQzdELE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztTQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNqRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxJQUFJLENBQUMsRUFBRSxVQUFVLENBQUM7U0FDL0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25CLE9BQU8sVUFBVSxDQUFDLE1BQU07UUFDdEIsQ0FBQyxDQUFDO1lBQ0U7Z0JBQ0UsSUFBSSxFQUFFO29CQUNKLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2hDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM3QixLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtxQkFDbEIsQ0FBQyxDQUFDLENBQ0osQ0FDRjtvQkFDRCxvQkFBb0IsRUFBRSxDQUFDO2lCQUN4QjthQUNGO1NBQ0Y7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyxDQUFDO0FBRUYsa0VBQWtFO0FBQ2xFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFjLEVBQUUsT0FBZSxFQUF1QyxFQUFFO0lBQ2hHLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLE9BQU8sR0FBRyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDbkYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLElBQWMsRUFBRSxPQUFlLEVBQXVDLEVBQUU7SUFDbkcsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFHLENBQUM7SUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzNHLENBQUMsQ0FBQztBQUVGLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBZSxFQUFFLEVBQUUsQ0FDeEUsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztBQUV4RSxNQUFNLGVBQWUsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFLEtBQUssRUFBcUIsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7SUFDbkIsT0FBTyxFQUFFO1FBQ1AsR0FBRyx3QkFBd0IsQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFNLENBQUM7UUFDdkUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDeEQ7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLGdCQUFnQixHQU1sQjtJQUNGLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDM0QsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUseUJBQXlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUMzRCxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztJQUNqRixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3pFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLHlCQUF5QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDekQsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUseUJBQXlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUM3RCxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsRUFBRTtRQUN6QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQztZQUMvQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUcsRUFBRSxZQUFpQyxDQUFDO1lBQ2pFLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQ25DLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRyxDQUFDO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUMzQix1Q0FBdUM7UUFDdkMsT0FBTyxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sS0FBSyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO1lBQ3RHLENBQUMsQ0FBQztnQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQ3JCLFdBQVcsRUFBRSxDQUFDO2FBQ2Y7WUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ2hCLENBQUM7SUFDRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3pCLE1BQU0sTUFBTSxHQUFJLE1BQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsTUFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEUsT0FBTztZQUNMLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7WUFDMUQsZ0NBQWdDO1lBQ2hDLE1BQU07U0FDUCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDMUIsTUFBTSxNQUFNLEdBQUksTUFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBRSxNQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxPQUFPO1lBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLHFCQUFxQjtZQUMxRCxnQ0FBZ0M7WUFDaEMsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUM5QixnQ0FBZ0M7UUFDaEMsTUFBTSxNQUFNLEdBQUksTUFBYyxDQUFDLEtBQUs7WUFDbEMsQ0FBQyxDQUFDLENBQUUsTUFBYyxDQUFDLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBRSxNQUFjLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6RixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JDLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUI7WUFDNUUsTUFBTTtTQUNQLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNkLElBQUksRUFBRSxRQUFRO1FBQ2QsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztLQUMxQixDQUFDO0NBQ0gsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FDeEIsWUFBd0IsRUFDeEIsSUFBeUMsRUFDekMsT0FBZSxFQUNmLE1BQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3pHLE9BQU8sQ0FDTCxVQUFVO1FBQ1YsQ0FBQyxNQUFNLElBQUssTUFBTSxDQUFDLElBQW9CLElBQUksZ0JBQWdCO1lBQ3pELENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBbUIsQ0FBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDO1lBQzlFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FDZixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FDckMsSUFBNEIsRUFDNUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBMEIsRUFDdkQsRUFBRSxDQUFDLG1CQUFtQixDQUFDLE1BQU8sRUFBRSxVQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFN0csTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FDbEMsSUFBNEIsRUFDNUIsVUFBc0IsRUFDdEIsTUFBa0IsRUFDbEIsT0FBTyxHQUFHLEVBQUUsRUFDWixFQUFFLENBQ0YsQ0FBQyxDQUFDLE1BQU07SUFDUixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU07SUFDeEUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBRS9DLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFbEYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRXpDLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBVyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0FBRWxELE1BQU0sV0FBVyxHQUFHLENBQUMsSUFBNEIsRUFBRSxHQUFXLEVBQUUsRUFBRSxDQUNoRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNYLENBQUMsQ0FBQztZQUNFLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakUsS0FBSyxFQUFFLE1BQU07U0FDZDtRQUNILENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssVUFBVSxDQUFDLElBQUk7WUFDbkMsQ0FBQyxDQUFDO2dCQUNFLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxrQkFBa0I7Z0JBQ25DLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixLQUFLLEVBQUUsb0JBQW9CO2FBQzVCO1lBQ0gsQ0FBQyxDQUFDLFNBQVM7SUFDYixDQUFDLENBQUMsU0FBUyxDQUFDO0FBRWhCLE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBeUIsRUFBRSxHQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FDeEUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO0lBQ3RCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3hHLENBQUMsQ0FBQztRQUNFLEdBQUcsRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3pELEtBQUssRUFBRSxjQUFjO1FBQ3JCLElBQUksRUFBRSxLQUFLO0tBQ1o7SUFDSCxDQUFDLENBQUMsU0FBUyxDQUFDO0FBRWhCLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxJQUE0QixFQUFFLEdBQVcsRUFBRSxLQUFVLEVBQUUsRUFBRSxDQUNwRixXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFXLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBRXJFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxTQUFzQixFQUFFLEVBQUUsQ0FBQyxVQUFVLFNBQVMsbUJBQW1CLENBQUM7QUFFNUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQU8sRUFBRSxTQUFzQixFQUFFLEVBQUUsQ0FDdEYsT0FBTztJQUNMLENBQUMsQ0FBQyx5QkFBeUI7SUFDM0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxNQUFNO1FBQ2xCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLG1CQUFtQixJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7QUFFN0MsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQVcsRUFBRSxPQUFlLEVBQUUsRUFBRTtJQUN4RCxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM3QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztJQUMzQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUNsRixPQUFPLFFBQVEsRUFBRSxNQUFNLElBQUksT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3RyxDQUFDLENBQUM7QUFFRixNQUFNLG1CQUFtQixHQUFHLENBQUMsTUFBVyxFQUFFLFNBQXNCLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxZQUFrQixFQUFFLEVBQUUsQ0FDcEcsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO0lBQ3JCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7SUFDN0IsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ2xGLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUU1QyxNQUFNLGlCQUFpQixHQUVuQjtJQUNGLE1BQU0sRUFBRSxpQkFBaUI7SUFDekIsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUEwQixDQUFDO1FBQzdDLE9BQU8sTUFBTSxJQUFJLEtBQUs7WUFDcEIsQ0FBQyxDQUFDLEdBQUc7WUFDTCxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7Z0JBQ3JFLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDVixDQUFDO0lBQ0QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUU7SUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRTtJQUN0QyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDakMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO0NBQzFELENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWtCLEVBQUUsS0FBVSxFQUFFLEVBQUU7SUFDdkQsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNqQyxDQUFDLENBQUMsTUFBTTtRQUNSLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUNiLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLEtBQUssSUFBSSxpQkFBaUI7Z0JBQy9ELENBQUMsQ0FBQyxPQUFPLEtBQUs7Z0JBQ2QsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxJQUFlO1lBQzNCLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDYixPQUFPLGlCQUFpQixDQUFDLFNBQVMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE1BQWtCLEVBQUUsS0FBVyxFQUFFLEVBQUUsQ0FDNUQsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxNQUFNO0lBQ1IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQ2IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztZQUMxQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTztnQkFDekIsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFtQixDQUFDLEVBQUUsQ0FBQztnQkFDNUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQ2YsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFnQixDQUFDO0FBRW5DLE1BQU0sc0JBQXNCLEdBRXhCO0lBQ0YsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLFNBQVM7SUFDMUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQztJQUNqQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckIsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQTBCLENBQUM7UUFDN0MsT0FBTyxNQUFNLElBQUksS0FBSztZQUNwQixDQUFDLENBQUMsR0FBRztZQUNMLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLEdBQUc7Z0JBQ0wsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRTtJQUN0QixNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFO0lBQ3RDLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLEdBQUcsQ0FBQztJQUNqQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLENBQUM7SUFDbEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLE1BQU07Q0FDMUQsQ0FBQztBQUVGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQWtCLEVBQUUsS0FBVSxFQUFFLEVBQUUsQ0FDOUQsTUFBTSxFQUFFLElBQUk7SUFDVixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7UUFDckQsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBRSxNQUFNLENBQUMsSUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUMvRixDQUFDLENBQUMsS0FBSyxDQUFDO0FBRVosTUFBTSxhQUFhLEdBQUcsQ0FBQyxVQUFzQixFQUFFLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFekYsb0RBQW9EO0FBQ3BELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXpGLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFckUsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFXLEVBQUUsR0FBdUIsRUFBRSxFQUFFLENBQzdELENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXRFLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FDeEIsQ0FBQyxNQUEwQixFQUFFLEVBQUUsQ0FDL0IsQ0FBQyxRQUFnQixFQUFFLGtCQUFrQixHQUFHLEtBQUssRUFBRSxFQUFFLENBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQ1QsS0FBSyxDQUFDLEVBQUUsQ0FDTixDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUTtJQUMxQixDQUFDLGtCQUFrQjtRQUNqQiwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsUUFBUyxDQUFDLEtBQUssMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxRixDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FDMUQsQ0FBQztBQUVOLE1BQU0scUJBQXFCLEdBQUcsQ0FDNUIsSUFBNEIsRUFDNUIsTUFBMEIsRUFDMUIsTUFBTSxHQUFHLEVBQUUsRUFDTSxFQUFFO0lBQ25CLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BILGtDQUFrQztJQUNsQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRCxPQUFPLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUM3QixDQUFDLENBQUM7WUFDRTtnQkFDRSxFQUFFLEVBQUUsVUFBVSxFQUFFO2dCQUNoQixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ3JCLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBcUIsRUFBRTtnQkFDNUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1AsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsS0FBSyxFQUFFO29CQUNMLEtBQUssRUFBRSxPQUFPO29CQUNkLE9BQU8sRUFBRSx1QkFBdUIsQ0FDOUIsSUFBSSxFQUNKLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsZUFBZSxLQUFLLEtBQUssQ0FBQyxDQUNwRTtpQkFDRjtnQkFDRCxRQUFRLEVBQUUsSUFBSTtnQkFDZCxVQUFVLEVBQUUsRUFBRTtnQkFDZCxrQkFBa0IsRUFBRSxLQUFLO2dCQUN6QixTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQzthQUN6QjtTQUNGO1FBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEIsTUFBTSxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFPLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1lBQzFFLE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hELE9BQU87Z0JBQ0wsRUFBRSxFQUFFLFVBQVUsRUFBRTtnQkFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNyQixXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUU7Z0JBQzVDLEdBQUcsRUFBRSxlQUFlO2dCQUNwQixPQUFPO2dCQUNQLEtBQUssRUFBRSxrQkFBa0I7Z0JBQ3pCLFFBQVEsRUFBRSxLQUFLO2dCQUNmLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDO2dCQUN6QixRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JELFVBQVUsRUFBRSxZQUFZLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQztnQkFDbEQsVUFBVSxFQUFFLEVBQUU7Z0JBQ2Qsa0JBQWtCLEVBQUUsSUFBSTtnQkFDeEIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxlQUFlLENBQUM7YUFDdEMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FDcEIsQ0FDRSxPQUFvQixFQUNwQixNQUEwQixFQUMxQixVQUFzQixFQUN0QixZQUFxQixFQUNyQixNQUFNLEdBQUcsRUFBRSxFQUNYLElBQVMsRUFDVCxFQUFFLENBQ0osQ0FBQyxHQUFXLEVBQWlCLEVBQUU7SUFDN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ2xELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BHLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sVUFBVSxHQUFHLFVBQVU7UUFDM0IsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTTtZQUN2QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDaEMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNiLE1BQU0sTUFBTSxHQUNWLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsVUFBVTtZQUNWLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztRQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xCLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDaEYsTUFBTSxZQUFZLEdBQUcsVUFBVTtRQUM3QixDQUFDLENBQUMsOERBQThEO1lBQzlELE9BQU87Z0JBQ1AsQ0FBQyxDQUFDLE1BQU07Z0JBQ1IsQ0FBQyxDQUFDLFVBQVU7UUFDZCxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQ2YsTUFBTSxVQUFVLEdBQ2QsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDOUcsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sUUFBUSxHQUNaLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLEtBQUs7UUFDUCxDQUFDLENBQUMsOERBQThEO1lBQ2hFLENBQUMsWUFBWTtnQkFDWCxVQUFVLENBQUMsVUFBVSxDQUFDO2dCQUN0QixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNyRixDQUFDLENBQUMsS0FBSztnQkFDUCxDQUFDLENBQUMsYUFBYTtvQkFDYixDQUFDLENBQUMsVUFBVSxJQUFJLEdBQUcsS0FBSyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekQsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ25ELE9BQU87UUFDTCxFQUFFLEVBQUUsVUFBVSxFQUFFO1FBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVTtRQUNyQyxNQUFNO1FBQ04sR0FBRztRQUNILE9BQU87UUFDUCxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFDbkMsUUFBUSxFQUFFLE9BQU8sSUFBSSxRQUFRO1FBQzdCLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQ3RFLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztRQUMzRSxXQUFXLEVBQUUsRUFBRTtRQUNmLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7UUFDOUIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUM7UUFDekIsUUFBUSxFQUFFLE1BQU0sSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDO1FBQ3BDLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7UUFDdEMsUUFBUSxFQUFFLE9BQU87UUFDakIsVUFBVSxFQUFFLFNBQVM7UUFDckIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE9BQU87UUFDUCxZQUFZLEVBQUUsVUFBVTtRQUN4QixNQUFNLEVBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxVQUFVO1FBQ1YsV0FBVyxFQUFFLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQztRQUMxRSxXQUFXLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUM7UUFDbEQsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7S0FDMUIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVKLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQW9CLEVBQUUsTUFBMEIsRUFBRSxJQUFTLEVBQUUsT0FBZSxFQUFFLEVBQUU7SUFDN0csTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRyxDQUFDO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzVELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDNUUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3pDLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FDOUIsQ0FBQyxPQUFvQixFQUFFLE1BQTBCLEVBQUUsVUFBc0IsRUFBRSxZQUFxQixFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUNqSCxDQUFDLElBQVMsRUFBbUIsRUFBRSxDQUM3QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztLQUNkLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN4QyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztLQUM5RSxNQUFNLENBQUMsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3RELElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUU1QixNQUFNLFlBQVksR0FBRyxDQUFDLE9BQWUsRUFBRSxFQUFFLENBQ3ZDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0lBQy9CLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNyQixNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0tBQ3RDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDLENBQUMsQ0FBQztBQUVMLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQzlCLEVBQUUsVUFBVSxFQUEwQixFQUN0QyxPQUErQyxFQUMvQyxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFFOUUsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FDL0IsT0FBb0IsRUFDcEIsTUFBa0IsRUFDbEIsVUFBc0IsRUFDdEIsSUFBUyxFQUNULE9BQWUsRUFDQSxFQUFFO0lBQ2pCLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUcsQ0FBQztJQUN6QyxNQUFNLFFBQVEsR0FFVjtRQUNGLE1BQU0sRUFBRSxHQUFHLEVBQUU7WUFDWCxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLHdCQUF3QixDQUFDLE9BQU8sRUFBRSxNQUEyQixDQUFDLENBQUM7WUFDbEcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxVQUFVLENBQUM7WUFDNUIsaUVBQWlFO1lBQ2pFLE1BQU0sS0FBSyxHQUFHLFVBQVU7aUJBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUNwRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNULEdBQUcsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3BGLFVBQVUsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQyxDQUFDO1lBQ04sTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN0RixPQUFPO2dCQUNMLEVBQUUsRUFBRSxVQUFVLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLE1BQU0sRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDO2dCQUMzQixVQUFVO2dCQUNWLEdBQUc7Z0JBQ0gsT0FBTztnQkFDUCxLQUFLO2dCQUNMLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUMxQixRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsYUFBYSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDdEMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDO2dCQUMvRCxVQUFVLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQ3RDLGtCQUFrQixFQUFFLG9CQUFvQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLEdBQUcsQ0FBQztnQkFDcEYsV0FBVyxFQUFFLEVBQUU7Z0JBQ2YsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRTtnQkFDOUIsVUFBVSxFQUFFLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBYSxDQUFDO2dCQUM3QyxPQUFPLEVBQUUsS0FBSztnQkFDZCxZQUFZLEVBQUUsSUFBSTtnQkFDbEIsTUFBTSxFQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUM7Z0JBQ2pDLFNBQVMsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDO2FBQzFCLENBQUM7UUFDSixDQUFDO1FBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUNWLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUEwQixDQUFDO1lBQzdDLHNDQUFzQztZQUN0QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ2QsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDM0I7WUFDRCxNQUFNLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQyxLQUEwQixDQUFDLENBQUM7WUFDdEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQixNQUFNLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEtBQUssQ0FBQyxDQUFDO1lBQ3ZHLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLFVBQVUsRUFBRTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTTtnQkFDTixVQUFVO2dCQUNWLEdBQUc7Z0JBQ0gsT0FBTztnQkFDUCxLQUFLLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2dCQUN2QixRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUM7Z0JBQzFCLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLENBQUM7Z0JBQ3RDLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3RCLFdBQVcsRUFBRSxFQUFFO2dCQUNmLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQzlCLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFlBQVksRUFBRSxJQUFJO2dCQUNsQixrQkFBa0IsRUFBRSxLQUFLO2dCQUN6QixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQzthQUMxQixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUM7UUFDN0YsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUNaLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUssTUFBYyxDQUFDLEtBQUssSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBQ2xCLE9BQU87Z0JBQ0wsRUFBRSxFQUFFLFVBQVUsRUFBRTtnQkFDaEIsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsTUFBTTtnQkFDTixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ3JCLEdBQUc7Z0JBQ0gsT0FBTztnQkFDUCxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7Z0JBQ25DLFFBQVEsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDO2dCQUMxQixRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQztnQkFDMUIsYUFBYSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsQ0FBQztnQkFDdEMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUM7Z0JBQ3RFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUM7Z0JBQ3hFLFdBQVcsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQztnQkFDbEQsVUFBVSxFQUFFLEVBQUU7Z0JBQ2Qsa0JBQWtCLEVBQUUsS0FBSztnQkFDekIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUM7YUFDMUIsQ0FBQztRQUNKLENBQUM7S0FDRixDQUFDO0lBQ0YsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUM5QixDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU87UUFDbEIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDZCxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDakIsQ0FBQyxDQUFFLE1BQU0sQ0FBQyxJQUFlLElBQUksUUFBUTtnQkFDckMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBYyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNyQixPQUFPLE1BQU0sRUFBRSxDQUFDO0FBQ2xCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFVBQTJCLEVBQUUsT0FBZSxFQUFFLEVBQUU7SUFDM0UsS0FBSyxNQUFNLENBQUMsSUFBSSxVQUFVLEVBQUU7UUFDMUIsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sRUFBRTtZQUN6QixPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbkQsSUFBSSxNQUFNLEVBQUU7WUFDVixPQUFPLE1BQU0sQ0FBQztTQUNmO0tBQ0Y7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFVBQTJCLEVBQUUsUUFBdUIsRUFBRSxFQUFFO0lBQ3JGLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoRixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25ELFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQU8sRUFBRTtRQUM5RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUM1QyxPQUFPLFNBQVMsS0FBSyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFLLEVBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ3RHLENBQUMsRUFBRSxVQUFVLENBQXlCLENBQUM7SUFDdkMsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNuRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBaUIsRUFBRSxTQUFpQixFQUFFLEVBQUUsQ0FDakYsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxVQUEyQixFQUFFLFFBQXVCLEVBQUUsVUFBa0IsRUFBRSxFQUFFO0lBQzFHLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7SUFDOUUsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQ2hFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFVBQTJCLEVBQUUsR0FBVyxFQUFFLEtBQVcsRUFBRSxFQUFFO0lBQ3BGLElBQUk7UUFDRixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxTQUFTLEtBQUssVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDekQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsRUFDbkMsQ0FBQyxDQUNGLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUUsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUN4QjtRQUNILENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztLQUNoQjtJQUFDLE9BQU8sSUFBSSxFQUFFO1FBQ2IsZUFBZTtLQUNoQjtBQUNILENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsUUFBdUIsRUFBRSxFQUFFLENBQzdELFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7SUFDcEYsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ2hELE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLENBQUM7QUFFTCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLFVBQTJCLEVBQUUsUUFBdUIsRUFBRSxFQUFFO0lBQ3BHLE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxVQUEyQixFQUFFLFFBQXVCLEVBQUUsRUFBRTtJQUM3RixNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUUsQ0FBQztJQUN0RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUUsQ0FBQztJQUNsRSxPQUFPLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxDQUFDLFVBQTJCLEVBQUUsUUFBdUIsRUFBRSxFQUFFO0lBQ3JHLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzdFLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sQ0FBQyxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUM7QUFDcEQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxVQUEyQixFQUFFLFFBQXVCLEVBQUUsRUFBRTtJQUM5RixNQUFNLGFBQWEsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUUsQ0FBQztJQUM5RSxNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUUsQ0FBQztJQUNsRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMxRyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjb21wbGV4aXR5ICovXG5pbXBvcnQgZ2V0IGZyb20gJ2xvZGFzaC5nZXQnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL2VuLWdiJztcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnO1xuaW1wb3J0IHsgZGlmZkluRGF5cywgaXNOdW1iZXIgfSBmcm9tICdAaGVzdGlhLWVhcnRoL3V0aWxzJztcbmltcG9ydCB7XG4gIEpTT04gYXMgSGVzdGlhSnNvbixcbiAgU2NoZW1hVHlwZSxcbiAgTm9kZVR5cGUsXG4gIGlzVHlwZU5vZGUsXG4gIGlzVHlwZVZhbGlkLFxuICBpc0V4cGFuZGFibGUsXG4gIFNpdGUsXG4gIE9yZ2FuaXNhdGlvbixcbiAgdHlwZVRvU2NoZW1hVHlwZVxufSBmcm9tICdAaGVzdGlhLWVhcnRoL3NjaGVtYSc7XG5pbXBvcnQgeyBkZWZpbml0aW9ucywgZGVmaW5pdGlvbiwgSURlZmluaXRpb25PYmplY3QsIElEZWZpbml0aW9uQXJyYXksIGdlbmVyaWNUeXBlIH0gZnJvbSAnQGhlc3RpYS1lYXJ0aC9qc29uLXNjaGVtYSc7XG5cbmltcG9ydCB7XG4gIElWYWxpZGF0aW9uRXJyb3IsXG4gIGZvcm1hdEN1c3RvbUVycm9yTWVzc2FnZSxcbiAgZm9ybWF0RXJyb3IsXG4gIGlzTWlzc2luZ1Byb3BlcnR5RXJyb3IsXG4gIGVycm9ySGFzRXJyb3IsXG4gIGVycm9ySGFzV2FybmluZyxcbiAgdmFsaWRhdGlvbkVycm9yTGV2ZWwsXG4gIG1pc3NpbmdOb2RlRXJyb3JzLFxuICBpc01pc3NpbmdPbmVPZkVycm9yLFxuICBpc01pZ3JhdGlvbkVycm9yLFxuICBtaWdyYXRpb25FcnJvck1lc3NhZ2Vcbn0gZnJvbSAnLi9maWxlcy1lcnJvci5tb2RlbCc7XG5pbXBvcnQge1xuICBzY2hlbWFSZXF1aXJlZFByb3BlcnRpZXMsXG4gIHZhbHVlVHlwZVRvRGVmYXVsdCxcbiAgZGVmaW5pdGlvblRvU2NoZW1hVHlwZSxcbiAgYXZhaWxhYmxlUHJvcGVydGllcyxcbiAgbmVzdGluZ1R5cGVFbmFibGVkLFxuICBuZXN0aW5nRW5hYmxlZCxcbiAgbGlua1R5cGVFbmFibGVkLFxuICBpc1NjaGVtYUlyaVxufSBmcm9tICcuLi9zY2hlbWEvc2NoZW1hLnNlcnZpY2UnO1xuaW1wb3J0IHsgbWF0Y2hDb3VudHJ5IH0gZnJvbSAnLi4vc2VhcmNoL3NlYXJjaC5tb2RlbCc7XG5pbXBvcnQgeyBiYXNlVXJsLCBjb2RlLCBnbG9zc2FyeUxpbmssIG1hcHNVcmwsIHNhZmVKU09OUGFyc2UsIHNhZmVKU09OU3RyaW5naWZ5LCBzY2hlbWFMaW5rIH0gZnJvbSAnLi4vY29tbW9uL3V0aWxzJztcblxuY29uc3QgbWlzc2luZ05vZGVFcnJvck1lc3NhZ2UgPSAoeyAnQHR5cGUnOiBfdCwgdHlwZSwgbmFtZSB9OiBhbnksIG1pc3NpbmdJZEVycm9yPzogSVZhbGlkYXRpb25FcnJvcikgPT5cbiAgKF90IHx8IHR5cGUpID09PSAnVGVybSdcbiAgICA/IC8vIG1pZ3JhdGVkIGZyb20gYSB2YWx1ZSB0byBhbm90aGVyXG4gICAgICBpc01pZ3JhdGlvbkVycm9yKG1pc3NpbmdJZEVycm9yKVxuICAgICAgPyBtaWdyYXRpb25FcnJvck1lc3NhZ2UobWlzc2luZ0lkRXJyb3IpXG4gICAgICA6IGAke25hbWUgPyBgVGhlIHRlcm0gXCIke25hbWV9XCJgIDogJ1RoaXMgdGVybSd9IGRvZXNuJ3QgbWF0Y2ggYSB0ZXJtIGluIHRoZSAke2dsb3NzYXJ5TGluaygnR2xvc3Nhcnkgb2YgVGVybXMnKX0uXG4gICAgICBQbGVhc2UgY2hlY2sgdGhlICR7Z2xvc3NhcnlMaW5rKCdHbG9zc2FyeScpfSBmb3IgdGhlIGNvcnJlY3QgJHtjb2RlKCdAaWQnKX0gb3IgJHtjb2RlKCduYW1lJyl9IGFuZCBzcGVsbGluZy5gXG4gICAgOiBgVGhpcyAke3NjaGVtYUxpbmsoX3QgfHwgdHlwZSl9IGRvZXMgbm90IGV4aXN0IGluIEhlc3RpYS4gSWYgeW91IGFyZSB0cnlpbmcgdG8gbGluayB0byBhbiBleGlzdGluZ1xuICAgICR7c2NoZW1hTGluayhfdCB8fCB0eXBlKX0gaW4gSGVzdGlhLCBwbGVhc2UgY2hlY2sgdGhlICR7Y29kZSgnbmFtZScpfSBvciAke2NvZGUoJ0BpZCcpfSBpcyBjb3JyZWN0LlxuICAgIElmIHlvdSBhcmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIG5ldyAke3NjaGVtYUxpbmsoX3QgfHwgdHlwZSl9LCBwbGVhc2UgaWRlbnRpZnkgaXQgd2l0aCBhbiAke2NvZGUoJ2lkJyl9IGZpZWxkLmA7XG5cbmV4cG9ydCBjb25zdCBBUlJBWV9ERUxJTUlURVIgPSAnOyc7XG5jb25zdCBpZ25vcmVLZXlzID0gWydmaWxlcGF0aCcsICdfY2FjaGUnXTtcblxuZXhwb3J0IHR5cGUgc3VnZ2VzdGlvblR5cGUgPSBOb2RlVHlwZSB8ICdzZWxlY3QnIHwgJ2RlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRTdWdnZXN0aW9uVHlwZTogc3VnZ2VzdGlvblR5cGUgPSAnZGVmYXVsdCc7XG5cbmludGVyZmFjZSBJTm9kZVByb3BlcnR5U3VnZ2VzdGlvbiB7XG4gIHR5cGU/OiBzdWdnZXN0aW9uVHlwZTtcbiAgcXVlcmllcz86IGFueVtdO1xuICB2YWx1ZXM/OiBzdHJpbmdbXTtcbiAgcGFyZW50TGV2ZWw/OiBudW1iZXI7XG4gIGlzTGlua05vZGU/OiBib29sZWFuO1xuICBpc1VuaXF1ZUtleT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTmV3UHJvcGVydHkge1xuICBuYW1lPzogc3RyaW5nO1xuICBwcm9wPzogZGVmaW5pdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRXJyb3JQcm9wZXJ0eSB7XG4gIGxldmVsPzogdmFsaWRhdGlvbkVycm9yTGV2ZWw7XG4gIG1lc3NhZ2U/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU5vZGVQcm9wZXJ0eSB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHByb3BlcnR5IHdhcyBhZGRlZCBieSB0aGUgdXNlclxuICAgKi9cbiAgaWQ6IHN0cmluZztcbiAgaXNBZGRlZD86IGJvb2xlYW47XG4gIHNjaGVtYVR5cGU6IFNjaGVtYVR5cGU7XG4gIGtleTogc3RyaW5nO1xuICBmdWxsS2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBhbnk7XG4gIGFkZFByb3BlcnR5RW5hYmxlZDogYm9vbGVhbjtcbiAgc3VnZ2VzdGlvbnM/OiBJTm9kZVByb3BlcnR5U3VnZ2VzdGlvbjtcbiAgc2NoZW1hPzogZGVmaW5pdGlvbjtcbiAgZXJyb3I/OiBJVmFsaWRhdGlvbkVycm9yO1xuICBoYXNFcnJvcj86IGJvb2xlYW47XG4gIGhhc1dhcm5pbmc/OiBib29sZWFuO1xuICBlZGl0YWJsZT86IGJvb2xlYW47XG4gIGNsb3NlZFZpc2libGU/OiBib29sZWFuO1xuICBuZXdQcm9wZXJ0eT86IElOZXdQcm9wZXJ0eTtcbiAgbmV3RXJyb3I/OiBJRXJyb3JQcm9wZXJ0eTtcbiAgaXNSZXF1aXJlZD86IGJvb2xlYW47XG4gIGlzSGlkZGVuPzogYm9vbGVhbjtcbiAgaXNBcnJheT86IGJvb2xlYW47XG4gIGlzRXhwYW5kYWJsZT86IGJvb2xlYW47XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXTtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGV4dGVybmFsVXJsPzoge1xuICAgIHVybD86IHN0cmluZztcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIC8vIGRlZmF1bHQgaXMgZXh0ZXJuYWwtbGluay1hbHRcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIHVybFBhcmFtVmFsdWU/OiBib29sZWFuO1xuICB9O1xuICAvLyBtYWtpbmcgY2hhbmdlcyBvbiB0aGUgcHJvcGVydHlcbiAgbG9hZGluZz86IGJvb2xlYW47XG4gIC8vIHVzZXIgbWFkZSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICBjaGFuZ2VkPzogYm9vbGVhbjtcbiAgZm9ybWF0dGVyOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nO1xufVxuXG5jb25zdCBzdHJpbmdWYWx1ZSA9ICh2YWx1ZTogYW55KSA9PiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyB8fCB2YWx1ZSA9PT0gbnVsbCA/ICcnIDogdmFsdWUpLnRvU3RyaW5nKCk7XG5jb25zdCBub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aCA9IChrZXk6IHN0cmluZykgPT4ga2V5LnJlcGxhY2UoL1xcW1xcZCtcXF0kLywgJycpO1xuZXhwb3J0IGNvbnN0IGtleVRvRGF0YVBhdGggPSAoa2V5OiBzdHJpbmcpID0+IChrZXk/Lmxlbmd0aCA/IGAuJHtrZXl9YCA6ICcnKTtcbmV4cG9ydCBjb25zdCBkYXRhUGF0aFRvS2V5ID0gKGRhdGFQYXRoID0gJycsIHRyaW1BcnJheSA9IGZhbHNlKSA9PlxuICB0cmltQXJyYXkgPyBub25FeHBhbmRhYmxlQXJyYXlEYXRhUGF0aChkYXRhUGF0aC5zdWJzdHJpbmcoMSkpIDogZGF0YVBhdGguc3Vic3RyaW5nKDEpO1xuZXhwb3J0IGNvbnN0IHBhcmVudEtleSA9IChrZXk6IHN0cmluZykgPT4ge1xuICBjb25zdCBrZXlzID0gKGtleS5zdGFydHNXaXRoKCcuJykgPyBrZXkuc3Vic3RyaW5nKDEpIDoga2V5KS5zcGxpdCgnLicpO1xuICBrZXlzLnBvcCgpO1xuICByZXR1cm4ga2V5cy5qb2luKCcuJyk7XG59O1xuXG4vKipcbiAqIFNvcnQgcHJvcGVydGllcyBoYXZpbmcgZXJyb3JzLCB0eXBlLCBpZCwgLi4ucHJvcGVydGllcyAoc2ltcGxlKSwgYW5kIGZpbmFsbHkgdGhlIGdyb3Vwc1xuICpcbiAqIEBwYXJhbSBhIHtJTm9kZVByb3BlcnR5fVxuICogQHBhcmFtIGIge0lOb2RlUHJvcGVydHl9XG4gKi9cbmV4cG9ydCBjb25zdCBzb3J0UHJvcGVydGllcyA9IChhOiBJTm9kZVByb3BlcnR5LCBiOiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGlmIChpc051bWJlcihhLmtleSkgJiYgaXNOdW1iZXIoYi5rZXkpKSB7XG4gICAgcmV0dXJuICthLmtleSAtICtiLmtleTtcbiAgfVxuICBpZiAoYS5pc0V4cGFuZGFibGUpIHtcbiAgICByZXR1cm4gYi5pc0V4cGFuZGFibGUgPyBhLmtleS5sb2NhbGVDb21wYXJlKGIua2V5KSA6IDE7XG4gIH1cbiAgaWYgKGIuaXNFeHBhbmRhYmxlKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmICghYS5rZXkpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgY29uc3QgYUtleSA9IGEua2V5LnJlcGxhY2UoJ0AnLCAnJyk7XG4gIGNvbnN0IGJLZXkgPSBiLmtleS5yZXBsYWNlKCdAJywgJycpO1xuICBpZiAoYUtleSA9PT0gJ3R5cGUnKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGlmIChiS2V5ID09PSAndHlwZScpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuICBpZiAoYUtleSA9PT0gJ2lkJyAmJiBiS2V5ICE9PSAndHlwZScpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cbiAgaWYgKGEuaGFzRXJyb3IgfHwgYS5oYXNXYXJuaW5nKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHJldHVybiBhLmtleS5sb2NhbGVDb21wYXJlKGIua2V5KTtcbn07XG5cbmNvbnN0IGRlZmF1bHRQcm9wZXJ0eUVycm9yOiB7XG4gIFtrZXk6IHN0cmluZ106IChlcnJvcjogYW55LCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufSA9IHtcbiAgbWF4OiAoeyBtYXggfSkgPT4gYHNob3VsZCBiZSA8PSAke21heH1gLFxuICBtaW46ICh7IG1pbiB9KSA9PiBgc2hvdWxkIGJlID49ICR7bWlufWAsXG4gIHBhdHRlcm46ICh7IHJlcXVpcmVkUGF0dGVybiB9KSA9PiBgc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCIke3JlcXVpcmVkUGF0dGVybn1cImAsXG4gIHJlcXVpcmVkOiAoX2UsIHsgc2NoZW1hVHlwZSB9KSA9PiAoc2NoZW1hVHlwZSA/IGBzaG91bGQgYmUgc2V0IG9yIGxpbmtlZCB0byBhbm90aGVyICR7c2NoZW1hVHlwZX1gIDogdW5kZWZpbmVkKVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFByb3BlcnR5RXJyb3IgPSAoZXJyb3JzOiBhbnksIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKGVycm9ycylbMF07XG4gIHJldHVybiBrZXkgaW4gZGVmYXVsdFByb3BlcnR5RXJyb3IgPyBmb3JtYXRDdXN0b21FcnJvck1lc3NhZ2UoZGVmYXVsdFByb3BlcnR5RXJyb3Jba2V5XShlcnJvcnNba2V5XSwgcHJvcGVydHkpKSA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdHRlciA9IChrZXk6IHN0cmluZykgPT4gKHZhbHVlOiBhbnkpID0+XG4gIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgPyB2YWx1ZS5iaWJsaW9ncmFwaHk/LnRpdGxlIHx8IHZhbHVlW2tleV0gfHwgdmFsdWUubmFtZSA6IHZhbHVlO1xuXG5leHBvcnQgY29uc3QgaGFzRXJyb3IgPSB2YWx1ZSA9PiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zb21lKGhhc0Vycm9yKSA6IHZhbHVlLmhhc0Vycm9yKTtcblxuZXhwb3J0IGNvbnN0IGhhc1dhcm5pbmcgPSB2YWx1ZSA9PiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5zb21lKGhhc1dhcm5pbmcpIDogdmFsdWUuaGFzV2FybmluZyk7XG5cbmNvbnN0IGNvbXBpbGVTdWdnZXN0aW9uUXVlcmllcyA9IChrZXk6IHN0cmluZywgYWxsT2Y6IGFueVtdKSA9PiB7XG4gIGNvbnN0IGNvbmRpdGlvbnMgPSAoYWxsT2YgfHwgW10pXG4gICAgLmZpbHRlcih2ID0+ICh2LmlmPy5yZXF1aXJlZCB8fCBbXSkuaW5jbHVkZXMoa2V5KSlcbiAgICAubWFwKHYgPT4gdi50aGVuPy5wcm9wZXJ0aWVzPy5ba2V5XSlcbiAgICAubWFwKHYgPT4gdj8uaXRlbXM/LnByb3BlcnRpZXMgfHwgdj8ucHJvcGVydGllcylcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY29uZGl0aW9ucy5sZW5ndGhcbiAgICA/IFtcbiAgICAgICAge1xuICAgICAgICAgIGJvb2w6IHtcbiAgICAgICAgICAgIHNob3VsZDogY29uZGl0aW9ucy5mbGF0TWFwKGNvbmQgPT5cbiAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29uZCkuZmxhdE1hcChrID0+XG4gICAgICAgICAgICAgICAgKGNvbmRba10uZW51bSB8fCBbXSkubWFwKHYgPT4gKHtcbiAgICAgICAgICAgICAgICAgIG1hdGNoOiB7IFtrXTogdiB9XG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtaW5pbXVtX3Nob3VsZF9tYXRjaDogMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIDogW107XG59O1xuXG4vLyBkZWZhdWx0IHN1Z2dlc3QgZm9yIGxpbmtpbmcgbm9kZXMgdG9nZXRoZXIgdXNpbmcgdGhlIGBpZGAgZmllbGRcbmNvbnN0IHN1Z2dlc3RMaW5rTm9kZXMgPSAodHlwZTogTm9kZVR5cGUsIGZ1bGxLZXk6IHN0cmluZyk6IElOb2RlUHJvcGVydHlTdWdnZXN0aW9uIHwgdW5kZWZpbmVkID0+IHtcbiAgY29uc3Qga2V5cyA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKTtcbiAgcmV0dXJuIGtleSA9PT0gJ2lkJyAmJiBrZXlzLmxlbmd0aCA+PSAxID8geyB0eXBlLCBpc0xpbmtOb2RlOiB0cnVlIH0gOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBzdWdnZXN0RXhpc3RpbmdOb2RlID0gKHR5cGU6IE5vZGVUeXBlLCBmdWxsS2V5OiBzdHJpbmcpOiBJTm9kZVByb3BlcnR5U3VnZ2VzdGlvbiB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGtleXMgPSBmdWxsS2V5LnNwbGl0KCcuJyk7XG4gIGNvbnN0IGtleSA9IGtleXMucG9wKCkhO1xuICByZXR1cm4ga2V5cy5sZW5ndGggPj0gMSAmJiBbJ0BpZCcsICdvcGVuTENBSWQnXS5pbmNsdWRlcyhrZXkpID8geyB0eXBlLCBpc1VuaXF1ZUtleTogJ0BpZCcgfSA6IHVuZGVmaW5lZDtcbn07XG5cbmNvbnN0IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24gPSAodHlwZTogTm9kZVR5cGUpID0+IChmdWxsS2V5OiBzdHJpbmcpID0+XG4gIHN1Z2dlc3RMaW5rTm9kZXModHlwZSwgZnVsbEtleSkgfHwgc3VnZ2VzdEV4aXN0aW5nTm9kZSh0eXBlLCBmdWxsS2V5KTtcblxuY29uc3QgdGVybVN1Z2dlc3Rpb25zID0gKHBhcmVudDogc3RyaW5nLCB7IGFsbE9mIH06IElEZWZpbml0aW9uT2JqZWN0KSA9PiAoe1xuICB0eXBlOiBOb2RlVHlwZS5UZXJtLFxuICBxdWVyaWVzOiBbXG4gICAgLi4uY29tcGlsZVN1Z2dlc3Rpb25RdWVyaWVzKG5vbkV4cGFuZGFibGVBcnJheURhdGFQYXRoKHBhcmVudCksIGFsbE9mISksXG4gICAgLi4uKFsnY291bnRyeSddLmluY2x1ZGVzKHBhcmVudCkgPyBbbWF0Y2hDb3VudHJ5XSA6IFtdKVxuICBdXG59KTtcblxuY29uc3QgdHlwZVRvU3VnZ2VzdGlvbjoge1xuICBbdHlwZSBpbiBTY2hlbWFUeXBlIHwgTm9kZVR5cGUgfCBnZW5lcmljVHlwZSB8ICdpbnRlZ2VyJ10/OiAoXG4gICAgZnVsbEtleTogc3RyaW5nLFxuICAgIHBhcmVudFNjaGVtYT86IGRlZmluaXRpb24sXG4gICAgc2NoZW1hPzogZGVmaW5pdGlvblxuICApID0+IElOb2RlUHJvcGVydHlTdWdnZXN0aW9uIHwgYW55O1xufSA9IHtcbiAgW05vZGVUeXBlLkFjdG9yXTogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5BY3RvciksXG4gIFtOb2RlVHlwZS5DeWNsZV06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuQ3ljbGUpLFxuICBbTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudF06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuSW1wYWN0QXNzZXNzbWVudCksXG4gIFtOb2RlVHlwZS5PcmdhbmlzYXRpb25dOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLk9yZ2FuaXNhdGlvbiksXG4gIFtOb2RlVHlwZS5TaXRlXTogZGVmYXVsdE5vZGVUeXBlU3VnZ2VzdGlvbihOb2RlVHlwZS5TaXRlKSxcbiAgW05vZGVUeXBlLlNvdXJjZV06IGRlZmF1bHROb2RlVHlwZVN1Z2dlc3Rpb24oTm9kZVR5cGUuU291cmNlKSxcbiAgW05vZGVUeXBlLlRlcm1dOiAoZnVsbEtleSwgcGFyZW50U2NoZW1hKSA9PiB7XG4gICAgY29uc3Qga2V5cyA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgICBjb25zdCBrZXkgPSBrZXlzLnBvcCgpITtcbiAgICByZXR1cm4gWyduYW1lJ10uaW5jbHVkZXMoa2V5KSAmJiBrZXlzLmxlbmd0aCA+PSAxXG4gICAgICA/IHRlcm1TdWdnZXN0aW9ucyhrZXlzLnBvcCgpISwgcGFyZW50U2NoZW1hIGFzIElEZWZpbml0aW9uT2JqZWN0KVxuICAgICAgOiBkZWZhdWx0Tm9kZVR5cGVTdWdnZXN0aW9uKE5vZGVUeXBlLlRlcm0pKGZ1bGxLZXkpO1xuICB9LFxuICBbU2NoZW1hVHlwZS5CaWJsaW9ncmFwaHldOiBmdWxsS2V5ID0+IHtcbiAgICBjb25zdCBrZXlzID0gZnVsbEtleS5zcGxpdCgnLicpO1xuICAgIGNvbnN0IGtleSA9IGtleXMucG9wKCkhO1xuICAgIGNvbnN0IHBhcmVudCA9IGtleXMucG9wKCkhO1xuICAgIC8vIHByZXZlbnQgcmVwbGFjaW5nIGEgdG9wLWxldmVsIHNvdXJjZVxuICAgIHJldHVybiBbJ3RpdGxlJywgJ2RvY3VtZW50RE9JJywgJ3Njb3B1cyddLmluY2x1ZGVzKGtleSkgJiYgcGFyZW50ID09PSAnYmlibGlvZ3JhcGh5JyAmJiBrZXlzLmxlbmd0aCA+PSAxXG4gICAgICA/IHtcbiAgICAgICAgICB0eXBlOiBOb2RlVHlwZS5Tb3VyY2UsXG4gICAgICAgICAgcGFyZW50TGV2ZWw6IDFcbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIH0sXG4gIG51bWJlcjogKF9hLCBfYiwgc2NoZW1hKSA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gKHNjaGVtYSBhcyBhbnkpLmNvbnN0ID8gWyhzY2hlbWEgYXMgYW55KS5jb25zdF0gOiBbXTtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogdmFsdWVzLmxlbmd0aCA+IDAgPyAnc2VsZWN0JyA6IGRlZmF1bHRTdWdnZXN0aW9uVHlwZSxcbiAgICAgIC8vIGV4Y2x1ZGUgc3VnZ2VzdGluZyBTY2hlbWFUeXBlXG4gICAgICB2YWx1ZXNcbiAgICB9O1xuICB9LFxuICBpbnRlZ2VyOiAoX2EsIF9iLCBzY2hlbWEpID0+IHtcbiAgICBjb25zdCB2YWx1ZXMgPSAoc2NoZW1hIGFzIGFueSkuY29uc3QgPyBbKHNjaGVtYSBhcyBhbnkpLmNvbnN0XSA6IFtdO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB2YWx1ZXMubGVuZ3RoID4gMCA/ICdzZWxlY3QnIDogZGVmYXVsdFN1Z2dlc3Rpb25UeXBlLFxuICAgICAgLy8gZXhjbHVkZSBzdWdnZXN0aW5nIFNjaGVtYVR5cGVcbiAgICAgIHZhbHVlc1xuICAgIH07XG4gIH0sXG4gIHN0cmluZzogKGZ1bGxLZXksIF9iLCBzY2hlbWEpID0+IHtcbiAgICAvLyBleGNsdWRlIHN1Z2dlc3RpbmcgU2NoZW1hVHlwZVxuICAgIGNvbnN0IHZhbHVlcyA9IChzY2hlbWEgYXMgYW55KS5jb25zdFxuICAgICAgPyBbKHNjaGVtYSBhcyBhbnkpLmNvbnN0XVxuICAgICAgOiAoKHNjaGVtYSBhcyBhbnkpLmVudW0gfHwgW10pLmZpbHRlcih2YWwgPT4gIU9iamVjdC52YWx1ZXMoU2NoZW1hVHlwZSkuaW5jbHVkZXModmFsKSk7XG4gICAgY29uc3Qga2V5ID0gZnVsbEtleS5zcGxpdCgnLicpLnBvcCgpO1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiB2YWx1ZXMubGVuZ3RoID4gMCAmJiBrZXkgIT09ICd0eXBlJyA/ICdzZWxlY3QnIDogZGVmYXVsdFN1Z2dlc3Rpb25UeXBlLFxuICAgICAgdmFsdWVzXG4gICAgfTtcbiAgfSxcbiAgYm9vbGVhbjogX2EgPT4gKHtcbiAgICB0eXBlOiAnc2VsZWN0JyxcbiAgICB2YWx1ZXM6IFsndHJ1ZScsICdmYWxzZSddXG4gIH0pXG59O1xuXG5jb25zdCBlbmFibGVTdWdnZXN0aW9ucyA9IChcbiAgcGFyZW50U2NoZW1hOiBkZWZpbml0aW9uLFxuICB0eXBlOiBTY2hlbWFUeXBlIHwgTm9kZVR5cGUgfCBnZW5lcmljVHlwZSxcbiAgZnVsbEtleTogc3RyaW5nLFxuICBzY2hlbWE/OiBkZWZpbml0aW9uXG4pID0+IHtcbiAgY29uc3Qgc3VnZ2VzdGlvbiA9IHR5cGUgaW4gdHlwZVRvU3VnZ2VzdGlvbiA/IHR5cGVUb1N1Z2dlc3Rpb25bdHlwZV0hKGZ1bGxLZXksIHBhcmVudFNjaGVtYSkgOiB1bmRlZmluZWQ7XG4gIHJldHVybiAoXG4gICAgc3VnZ2VzdGlvbiB8fFxuICAgIChzY2hlbWEgJiYgKHNjaGVtYS50eXBlIGFzIGdlbmVyaWNUeXBlKSBpbiB0eXBlVG9TdWdnZXN0aW9uXG4gICAgICA/IHR5cGVUb1N1Z2dlc3Rpb25bc2NoZW1hLnR5cGUgYXMgZ2VuZXJpY1R5cGVdIShmdWxsS2V5LCBwYXJlbnRTY2hlbWEsIHNjaGVtYSlcbiAgICAgIDogdW5kZWZpbmVkKVxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IG5vZGVBdmFpbGFibGVQcm9wZXJ0aWVzID0gKFxuICBub2RlOiBIZXN0aWFKc29uPFNjaGVtYVR5cGU+LFxuICB7IGZ1bGxLZXksIHNjaGVtYSwgc2NoZW1hVHlwZSB9OiBQYXJ0aWFsPElOb2RlUHJvcGVydHk+XG4pID0+IGF2YWlsYWJsZVByb3BlcnRpZXMoc2NoZW1hISwgc2NoZW1hVHlwZSEsIGZ1bGxLZXkgPyBnZXQobm9kZSwgZnVsbEtleSwge30pIDogbm9kZSwgZnVsbEtleSEubGVuZ3RoID4gMCk7XG5cbmV4cG9ydCBjb25zdCBpc0FkZFByb3BlcnR5RW5hYmxlZCA9IChcbiAgbm9kZTogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPixcbiAgc2NoZW1hVHlwZTogU2NoZW1hVHlwZSxcbiAgc2NoZW1hOiBkZWZpbml0aW9uLFxuICBmdWxsS2V5ID0gJydcbikgPT5cbiAgISFzY2hlbWEgJiZcbiAgISFPYmplY3Qua2V5cyhub2RlQXZhaWxhYmxlUHJvcGVydGllcyhub2RlLCB7IGZ1bGxLZXksIHNjaGVtYSB9KSkubGVuZ3RoICYmXG4gICghZnVsbEtleSB8fCBuZXN0aW5nVHlwZUVuYWJsZWQoc2NoZW1hVHlwZSkpO1xuXG5jb25zdCBlZGl0YWJsZUtleSA9IChrZXk6IHN0cmluZykgPT4gIVsndHlwZScsICdAdHlwZScsICd0ZXJtVHlwZSddLmluY2x1ZGVzKGtleSk7XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0eUlkID0gKCkgPT4gdXVpZHY0KCk7XG5cbmNvbnN0IGlzR2VvanNvbiA9IChzY2hlbWE6IGFueSkgPT4gc2NoZW1hLmdlb2pzb247XG5cbmNvbnN0IHByb3BlcnR5VXJsID0gKG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sIGtleTogc3RyaW5nKSA9PlxuICBbJ0BpZCcsICduYW1lJ10uaW5jbHVkZXMoa2V5KSAmJiBsaW5rVHlwZUVuYWJsZWQobm9kZVsnQHR5cGUnXSlcbiAgICA/IG5vZGVbJ0BpZCddXG4gICAgICA/IHtcbiAgICAgICAgICB1cmw6IGAke2Jhc2VVcmwoKX0vJHtub2RlWydAdHlwZSddLnRvTG93ZXJDYXNlKCl9LyR7bm9kZVsnQGlkJ119YCxcbiAgICAgICAgICB0aXRsZTogJ09wZW4nXG4gICAgICAgIH1cbiAgICAgIDogbm9kZVsnQHR5cGUnXSA9PT0gU2NoZW1hVHlwZS5UZXJtXG4gICAgICA/IHtcbiAgICAgICAgICB1cmw6IGAke2Jhc2VVcmwoKX0vZ2xvc3Nhcnk/cXVlcnk9YCxcbiAgICAgICAgICB1cmxQYXJhbVZhbHVlOiB0cnVlLFxuICAgICAgICAgIHRpdGxlOiAnU2VhcmNoIGluIEdsb3NzYXJ5J1xuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZFxuICAgIDogdW5kZWZpbmVkO1xuXG5jb25zdCBwcm9wZXJ0eU1hcHNVcmwgPSAobm9kZTogU2l0ZSB8IE9yZ2FuaXNhdGlvbiwga2V5OiBzdHJpbmcsIHZhbHVlKSA9PlxuICBbJ3R5cGUnXS5pbmNsdWRlcyhrZXkpICYmXG4gIFtTY2hlbWFUeXBlLlNpdGUudG9TdHJpbmcoKSwgU2NoZW1hVHlwZS5PcmdhbmlzYXRpb24udG9TdHJpbmcoKV0uaW5jbHVkZXMoc3RyaW5nVmFsdWUodmFsdWUpIHx8IG5vZGUudHlwZSlcbiAgICA/IHtcbiAgICAgICAgdXJsOiBtYXBzVXJsKHsgbGF0OiBub2RlLmxhdGl0dWRlLCBsbmc6IG5vZGUubG9uZ2l0dWRlIH0pLFxuICAgICAgICB0aXRsZTogJ1ZpZXcgb24gbWFwcycsXG4gICAgICAgIGljb246ICdtYXAnXG4gICAgICB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbmNvbnN0IHByb3BlcnR5RXh0ZXJuYWxVcmwgPSAobm9kZTogSGVzdGlhSnNvbjxTY2hlbWFUeXBlPiwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+XG4gIHByb3BlcnR5VXJsKG5vZGUsIGtleSkgfHwgcHJvcGVydHlNYXBzVXJsKG5vZGUgYXMgYW55LCBrZXksIHZhbHVlKTtcblxuY29uc3QgYXJyYXlQbGFjZWhvbGRlciA9ICh2YWx1ZVR5cGU6IGdlbmVyaWNUeXBlKSA9PiBgVHlwZSBhICR7dmFsdWVUeXBlfSB0aGVuIHByZXNzIEVudGVyYDtcblxuY29uc3QgZGVmYXVsdFBsYWNlaG9sZGVyID0gKHsgdHlwZSwgZXhhbXBsZXMsIGdlb2pzb24gfTogYW55LCB2YWx1ZVR5cGU6IGdlbmVyaWNUeXBlKSA9PlxuICBnZW9qc29uXG4gICAgPyAnTXVzdCBiZSBhIHZhbGlkIEdlb0pTT04nXG4gICAgOiBleGFtcGxlcz8ubGVuZ3RoXG4gICAgPyBBcnJheS5pc0FycmF5KGV4YW1wbGVzWzBdKVxuICAgICAgPyBhcnJheVBsYWNlaG9sZGVyKHZhbHVlVHlwZSlcbiAgICAgIDogZXhhbXBsZXNbMF1cbiAgICA6IGBNdXN0IGJlIG9mIHR5cGUgJHt0eXBlIHx8IHZhbHVlVHlwZX1gO1xuXG5jb25zdCBzY2hlbWFQbGFjaG9sZGVyID0gKHNjaGVtYTogYW55LCBmdWxsS2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgW3BhcmVudCwgLi4ua2V5c10gPSBmdWxsS2V5LnNwbGl0KCcuJyk7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSBzY2hlbWEucHJvcGVydGllcyB8fCB7fTtcbiAgY29uc3QgeyBleGFtcGxlcyB9ID0gcGFyZW50IGluIHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzW3BhcmVudF0gOiB7IGV4YW1wbGVzOiBbXSB9O1xuICByZXR1cm4gZXhhbXBsZXM/Lmxlbmd0aCAmJiB0eXBlb2YgZXhhbXBsZXNbMF0gPT09ICdvYmplY3QnID8gZ2V0KGV4YW1wbGVzWzBdLCBrZXlzLmpvaW4oJy4nKSwgbnVsbCkgOiBudWxsO1xufTtcblxuY29uc3QgcHJvcGVydHlQbGFjZWhvbGRlciA9IChzY2hlbWE6IGFueSwgdmFsdWVUeXBlOiBnZW5lcmljVHlwZSwgZnVsbEtleSA9ICcnLCBwYXJlbnRTY2hlbWE/OiBhbnkpID0+XG4gIHNjaGVtYS50eXBlID09PSAnYXJyYXknXG4gICAgPyBhcnJheVBsYWNlaG9sZGVyKHZhbHVlVHlwZSlcbiAgICA6IChwYXJlbnRTY2hlbWEgJiYgZnVsbEtleT8ubGVuZ3RoID8gc2NoZW1hUGxhY2hvbGRlcihwYXJlbnRTY2hlbWEsIGZ1bGxLZXkpIDogbnVsbCkgfHxcbiAgICAgIGRlZmF1bHRQbGFjZWhvbGRlcihzY2hlbWEsIHZhbHVlVHlwZSk7XG5cbmNvbnN0IHByb3BlcnR5VHlwZVZhbHVlOiB7XG4gIFt0eXBlOiBzdHJpbmddOiAodmFsdWU6IGFueSwgc2NoZW1hOiBkZWZpbml0aW9uKSA9PiBhbnk7XG59ID0ge1xuICBvYmplY3Q6IHNhZmVKU09OU3RyaW5naWZ5LFxuICBhcnJheTogKHZhbCwgc2NoZW1hKSA9PiB7XG4gICAgY29uc3QgeyBpdGVtcyB9ID0gc2NoZW1hIGFzIElEZWZpbml0aW9uQXJyYXk7XG4gICAgcmV0dXJuICckcmVmJyBpbiBpdGVtc1xuICAgICAgPyB2YWxcbiAgICAgIDogQXJyYXkuaXNBcnJheSh2YWwpXG4gICAgICA/IHZhbC5tYXAodmFsdWUgPT4gcHJvcGVydHlWYWx1ZShpdGVtcywgdmFsdWUpKS5qb2luKEFSUkFZX0RFTElNSVRFUilcbiAgICAgIDogdmFsO1xuICB9LFxuICBqc29uOiB2YWwgPT4gdmFsIHx8ICcnLFxuICBzdHJpbmc6IHZhbCA9PiAoYCR7dmFsfWAgfHwgJycpLnRyaW0oKSxcbiAgbnVtYmVyOiB2YWwgPT4gKyhgJHt2YWx9YCB8fCAnMCcpLFxuICBpbnRlZ2VyOiB2YWwgPT4gKyhgJHt2YWx9YCB8fCAnMCcpLFxuICBib29sZWFuOiB2YWwgPT4gKGAke3ZhbH1gIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbn07XG5cbmNvbnN0IHByb3BlcnR5VmFsdWUgPSAoc2NoZW1hOiBkZWZpbml0aW9uLCB2YWx1ZTogYW55KSA9PiB7XG4gIGNvbnN0IHZhbHVlVHlwZSA9IGlzR2VvanNvbihzY2hlbWEpXG4gICAgPyAnanNvbidcbiAgICA6IHNjaGVtYS50eXBlXG4gICAgPyBBcnJheS5pc0FycmF5KHNjaGVtYS50eXBlKSAmJiB0eXBlb2YgdmFsdWUgaW4gcHJvcGVydHlUeXBlVmFsdWVcbiAgICAgID8gdHlwZW9mIHZhbHVlXG4gICAgICA6IChzY2hlbWEudHlwZSBhcyBzdHJpbmcpXG4gICAgOiAnb2JqZWN0JztcbiAgcmV0dXJuIHByb3BlcnR5VHlwZVZhbHVlW3ZhbHVlVHlwZSBpbiBwcm9wZXJ0eVR5cGVWYWx1ZSA/IHZhbHVlVHlwZSA6ICdzdHJpbmcnXSh2YWx1ZSwgc2NoZW1hKTtcbn07XG5cbmNvbnN0IHByb3BlcnR5VmFsdWVUeXBlID0gKHNjaGVtYTogZGVmaW5pdGlvbiwgdmFsdWU/OiBhbnkpID0+XG4gIChpc0dlb2pzb24oc2NoZW1hKVxuICAgID8gJ2pzb24nXG4gICAgOiBzY2hlbWEudHlwZVxuICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWEudHlwZSlcbiAgICAgID8gc2NoZW1hLnR5cGVbMF1cbiAgICAgIDogc2NoZW1hLnR5cGUgPT09ICdhcnJheSdcbiAgICAgID8gcHJvcGVydHlWYWx1ZVR5cGUoeyAuLi5zY2hlbWEsIHR5cGU6IFtzY2hlbWEuaXRlbXMudHlwZSBhcyBnZW5lcmljVHlwZV0gfSlcbiAgICAgIDogc2NoZW1hLnR5cGVcbiAgICA6IHR5cGVvZiB2YWx1ZSkgYXMgZ2VuZXJpY1R5cGU7XG5cbmNvbnN0IHByb3BlcnR5VHlwZVBhcnNlVmFsdWU6IHtcbiAgW3R5cGU6IHN0cmluZ106ICh2YWx1ZTogYW55LCBzY2hlbWE6IGRlZmluaXRpb24pID0+IGFueTtcbn0gPSB7XG4gIHVuZGVmaW5lZDogKCkgPT4gdW5kZWZpbmVkLFxuICBvYmplY3Q6IHZhbCA9PiBzYWZlSlNPTlBhcnNlKHZhbCksXG4gIGFycmF5OiAodmFsLCBzY2hlbWEpID0+IHtcbiAgICBjb25zdCB7IGl0ZW1zIH0gPSBzY2hlbWEgYXMgSURlZmluaXRpb25BcnJheTtcbiAgICByZXR1cm4gJyRyZWYnIGluIGl0ZW1zXG4gICAgICA/IHZhbFxuICAgICAgOiAhdmFsIHx8IEFycmF5LmlzQXJyYXkodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdmFsLnNwbGl0KEFSUkFZX0RFTElNSVRFUikubWFwKHZhbHVlID0+IHBhcnNlTmV3VmFsdWUoaXRlbXMsIHZhbHVlKSk7XG4gIH0sXG4gIGpzb246IHZhbCA9PiB2YWwgfHwgJycsXG4gIHN0cmluZzogdmFsID0+IChgJHt2YWx9YCB8fCAnJykudHJpbSgpLFxuICBudW1iZXI6IHZhbCA9PiArKGAke3ZhbH1gIHx8ICcwJyksXG4gIGludGVnZXI6IHZhbCA9PiArKGAke3ZhbH1gIHx8ICcwJyksXG4gIGJvb2xlYW46IHZhbCA9PiAoYCR7dmFsfWAgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xufTtcblxuLyoqXG4gKiBDb252ZXJ0IHZhbHVlIHRvIHRoZSBmaW5hbCB0eXBlIGluIHRoZSBzY2hlbWEuXG4gKlxuICogQHBhcmFtIHNjaGVtYSBEZWZpbml0aW9uIG9mIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZVxuICogQHJldHVybnMgVmFsdWUgaW4gdGhlIGNvcnJlY3QgZm9ybWF0LlxuICovXG5leHBvcnQgY29uc3QgcGFyc2VOZXdWYWx1ZSA9IChzY2hlbWE6IGRlZmluaXRpb24sIHZhbHVlOiBhbnkpID0+XG4gIHNjaGVtYT8udHlwZVxuICAgID8gQXJyYXkuaXNBcnJheShzY2hlbWE/LnR5cGUpXG4gICAgICA/IHByb3BlcnR5VHlwZVBhcnNlVmFsdWVbdHlwZW9mIHZhbHVlXSh2YWx1ZSwgc2NoZW1hKVxuICAgICAgOiBwcm9wZXJ0eVR5cGVQYXJzZVZhbHVlW2lzR2VvanNvbihzY2hlbWEpID8gJ2pzb24nIDogKHNjaGVtYS50eXBlIGFzIHN0cmluZyldKHZhbHVlLCBzY2hlbWEpXG4gICAgOiB2YWx1ZTtcblxuY29uc3QgaXNPcGVuRGVmYXVsdCA9IChzY2hlbWFUeXBlOiBTY2hlbWFUeXBlKSA9PiBbU2NoZW1hVHlwZS5UZXJtXS5pbmNsdWRlcyhzY2hlbWFUeXBlKTtcblxuLy8gY2FuIHRoZSBwcm9wZXJ0eSBiZSBzZWVuIHdoZW4gdGhlIGdyb3VwIGlzIGNsb3NlZFxuY29uc3QgaXNLZXlDbG9zZWRWaXNpYmxlID0gKGtleTogc3RyaW5nKSA9PiBbJ3R5cGUnLCAnaWQnLCAnQHR5cGUnLCAnQGlkJ10uaW5jbHVkZXMoa2V5KTtcblxuY29uc3QgaXNLZXlIaWRkZW4gPSAoa2V5OiBzdHJpbmcpID0+IFsndHlwZScsICdAdHlwZSddLmluY2x1ZGVzKGtleSk7XG5cbmNvbnN0IGlzS2V5UmVxdWlyZWQgPSAoa2V5OiBzdHJpbmcsIGRlZj86IElEZWZpbml0aW9uT2JqZWN0KSA9PlxuICBbJ3R5cGUnLCAnaWQnXS5pbmNsdWRlcyhrZXkpIHx8IChkZWY/LnJlcXVpcmVkIHx8IFtdKS5pbmNsdWRlcyhrZXkpO1xuXG5leHBvcnQgY29uc3QgcHJvcGVydHlFcnJvciA9XG4gIChlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSkgPT5cbiAgKGRhdGFQYXRoOiBzdHJpbmcsIG5vbkV4cGFuZGFibGVBcnJheSA9IGZhbHNlKSA9PlxuICAgIGVycm9ycy5maW5kKFxuICAgICAgZXJyb3IgPT5cbiAgICAgICAgKGVycm9yLmRhdGFQYXRoID09PSBkYXRhUGF0aCB8fFxuICAgICAgICAgIChub25FeHBhbmRhYmxlQXJyYXkgJiZcbiAgICAgICAgICAgIG5vbkV4cGFuZGFibGVBcnJheURhdGFQYXRoKGVycm9yLmRhdGFQYXRoISkgPT09IG5vbkV4cGFuZGFibGVBcnJheURhdGFQYXRoKGRhdGFQYXRoKSkpICYmXG4gICAgICAgIChkYXRhUGF0aC5sZW5ndGggPiAwIHx8ICFpc01pc3NpbmdQcm9wZXJ0eUVycm9yKGVycm9yKSlcbiAgICApO1xuXG5jb25zdCBtaXNzaW5nUHJvcGVydHlFcnJvcnMgPSAoXG4gIG5vZGU6IEhlc3RpYUpzb248U2NoZW1hVHlwZT4sXG4gIGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdLFxuICBwYXJlbnQgPSAnJ1xuKTogSU5vZGVQcm9wZXJ0eVtdID0+IHtcbiAgY29uc3QgYWxsRXJyb3JzID0gZXJyb3JzLmZpbHRlcihlcnJvciA9PiBlcnJvci5kYXRhUGF0aCA9PT0ga2V5VG9EYXRhUGF0aChwYXJlbnQpICYmIGlzTWlzc2luZ1Byb3BlcnR5RXJyb3IoZXJyb3IpKTtcbiAgLy8gY2hlY2sgZm9yIG5vZGUgbm90IGZvdW5kIGVycm9yc1xuICBjb25zdCBtaXNzaW5nTm9kZSA9IG1pc3NpbmdOb2RlRXJyb3JzKGFsbEVycm9ycyk7XG4gIHJldHVybiBtaXNzaW5nTm9kZS5sZW5ndGggPT09IDJcbiAgICA/IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiBwcm9wZXJ0eUlkKCksXG4gICAgICAgICAgc2NoZW1hVHlwZTogbm9kZS50eXBlLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiB7IHR5cGU6IGRlZmF1bHRTdWdnZXN0aW9uVHlwZSB9LFxuICAgICAgICAgIGtleTogJycsXG4gICAgICAgICAgZnVsbEtleTogcGFyZW50LFxuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgbGV2ZWw6ICdlcnJvcicsXG4gICAgICAgICAgICBtZXNzYWdlOiBtaXNzaW5nTm9kZUVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbWlzc2luZ05vZGUuZmluZCgoeyBwYXJhbXMgfSkgPT4gcGFyYW1zPy5taXNzaW5nUHJvcGVydHkgPT09ICdAaWQnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaGFzRXJyb3I6IHRydWUsXG4gICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiBmYWxzZSxcbiAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcignJylcbiAgICAgICAgfVxuICAgICAgXVxuICAgIDogYWxsRXJyb3JzLm1hcChlcnJvciA9PiB7XG4gICAgICAgIGNvbnN0IHsgbWlzc2luZ1Byb3BlcnR5IH0gPSBlcnJvci5wYXJhbXMhO1xuICAgICAgICBjb25zdCBmdWxsS2V5ID0gcGFyZW50ID8gYCR7cGFyZW50fS4ke21pc3NpbmdQcm9wZXJ0eX1gIDogbWlzc2luZ1Byb3BlcnR5O1xuICAgICAgICBjb25zdCBtaXNzaW5nT25lT2YgPSBpc01pc3NpbmdPbmVPZkVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICAgIHNjaGVtYVR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAgICBzdWdnZXN0aW9uczogeyB0eXBlOiBkZWZhdWx0U3VnZ2VzdGlvblR5cGUgfSxcbiAgICAgICAgICBrZXk6IG1pc3NpbmdQcm9wZXJ0eSxcbiAgICAgICAgICBmdWxsS2V5LFxuICAgICAgICAgIHZhbHVlOiAnQWRkIGZpZWxkIHRvIGZpeCcsXG4gICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgIGVycm9yOiBmb3JtYXRFcnJvcihlcnJvciksXG4gICAgICAgICAgaGFzRXJyb3I6IG1pc3NpbmdPbmVPZiA/IGZhbHNlIDogZXJyb3JIYXNFcnJvcihlcnJvciksXG4gICAgICAgICAgaGFzV2FybmluZzogbWlzc2luZ09uZU9mIHx8IGVycm9ySGFzV2FybmluZyhlcnJvciksXG4gICAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgICAgYWRkUHJvcGVydHlFbmFibGVkOiB0cnVlLFxuICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKG1pc3NpbmdQcm9wZXJ0eSlcbiAgICAgICAgfTtcbiAgICAgIH0pO1xufTtcblxuY29uc3QgcHJvcGVydHlGcm9tTm9kZSA9XG4gIChcbiAgICBzY2hlbWFzOiBkZWZpbml0aW9ucyxcbiAgICBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSxcbiAgICBub2RlU2NoZW1hOiBkZWZpbml0aW9uLFxuICAgIGRlZXBFZGl0YWJsZTogYm9vbGVhbixcbiAgICBwYXJlbnQgPSAnJyxcbiAgICBub2RlOiBhbnlcbiAgKSA9PlxuICAoa2V5OiBzdHJpbmcpOiBJTm9kZVByb3BlcnR5ID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IG5vZGVba2V5XTtcbiAgICBjb25zdCBleHBhbmRhYmxlID0gaXNFeHBhbmRhYmxlKHZhbHVlKTtcbiAgICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgY29uc3Qgbm9uRXhwYW5kYWJsZUFycmF5ID0gaXNBcnJheSAmJiAhZXhwYW5kYWJsZTtcbiAgICBjb25zdCBmdWxsS2V5ID0gQXJyYXkuaXNBcnJheShub2RlKSA/IGAke3BhcmVudH1bJHtrZXl9XWAgOiBbcGFyZW50LCBrZXldLmZpbHRlcihCb29sZWFuKS5qb2luKCcuJyk7XG4gICAgY29uc3Qgbm9kZVR5cGUgPSBub2RlLnR5cGUgfHwgbm9kZVsnQHR5cGUnXTtcbiAgICBjb25zdCBzY2hlbWFUeXBlID0gZXhwYW5kYWJsZVxuICAgICAgPyBpc0FycmF5ICYmIHZhbHVlLmxlbmd0aFxuICAgICAgICA/IHZhbHVlWzBdLnR5cGUgfHwgdmFsdWVbMF1bJ0B0eXBlJ11cbiAgICAgICAgOiB2YWx1ZS50eXBlIHx8IHZhbHVlWydAdHlwZSddXG4gICAgICA6IG5vZGVUeXBlO1xuICAgIGNvbnN0IHNjaGVtYSA9XG4gICAgICAoc2NoZW1hcyAmJiBpc1R5cGVWYWxpZCh7IHR5cGU6IHNjaGVtYVR5cGUgfSlcbiAgICAgICAgPyBleHBhbmRhYmxlXG4gICAgICAgICAgPyBzY2hlbWFzW3NjaGVtYVR5cGVdXG4gICAgICAgICAgOiBzY2hlbWFzW3NjaGVtYVR5cGVdLnByb3BlcnRpZXNba2V5XVxuICAgICAgICA6IG51bGwpIHx8IHt9O1xuICAgIGNvbnN0IGlzSXJpID0gaXNTY2hlbWFJcmkoc2NoZW1hKTtcbiAgICBjb25zdCBlcnJvciA9IHByb3BlcnR5RXJyb3IoZXJyb3JzKShrZXlUb0RhdGFQYXRoKGZ1bGxLZXkpLCBub25FeHBhbmRhYmxlQXJyYXkpO1xuICAgIGNvbnN0IHBhcmVudFNjaGVtYSA9IGV4cGFuZGFibGVcbiAgICAgID8gLy8gVE9ETzogZm9yIG5vbi1hcnJheSwgc2hvdWxkIGJlIHNjaGVtYSB1bmxlc3MgbGFzdCByZWN1cnNpb25cbiAgICAgICAgaXNBcnJheVxuICAgICAgICA/IHNjaGVtYVxuICAgICAgICA6IG5vZGVTY2hlbWFcbiAgICAgIDogbm9kZVNjaGVtYTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID1cbiAgICAgIGV4cGFuZGFibGUgfHwgaXNJcmkgPyByZWN1cnNpdmVQcm9wZXJ0aWVzKHNjaGVtYXMsIGVycm9ycywgcGFyZW50U2NoZW1hLCBkZWVwRWRpdGFibGUsIGZ1bGxLZXkpKHZhbHVlKSA6IFtdO1xuICAgIGNvbnN0IGluRXJyb3IgPSBlcnJvckhhc0Vycm9yKGVycm9yKSB8fCBoYXNFcnJvcihwcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBpbldhcm5pbmcgPSBlcnJvckhhc1dhcm5pbmcoZXJyb3IpIHx8IGhhc1dhcm5pbmcocHJvcGVydGllcyk7XG4gICAgY29uc3QgZWRpdGFibGUgPVxuICAgICAgaXNUeXBlTm9kZShub2RlWydAdHlwZSddKSB8fCAoZXhwYW5kYWJsZSAmJiBpc1R5cGVOb2RlKHZhbHVlWydAdHlwZSddKSlcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IC8vIHByZXZlbnQgZWRpdGluZy9hZGRpbmcgbmV3IHByb3BlcnRpZXMgb24gZXhpc3Rpbmcgc3ViLW5vZGVzXG4gICAgICAgICFkZWVwRWRpdGFibGUgJiZcbiAgICAgICAgICBpc1R5cGVOb2RlKHNjaGVtYVR5cGUpICYmXG4gICAgICAgICAgKGV4cGFuZGFibGUgPyB2YWx1ZS50eXBlICE9PSBOb2RlVHlwZS5UZXJtIDogcGFyZW50ICYmIG5vZGUudHlwZSAhPT0gTm9kZVR5cGUuVGVybSlcbiAgICAgICAgPyBmYWxzZVxuICAgICAgICA6IC8vIGhhbmRsZSBJUklcbiAgICAgICAgICAoIXNjaGVtYVR5cGUgJiYga2V5ID09PSAnQGlkJykgfHwgZWRpdGFibGVLZXkoa2V5KTtcbiAgICBjb25zdCB2YWx1ZVR5cGUgPSBwcm9wZXJ0eVZhbHVlVHlwZShzY2hlbWEsIHZhbHVlKTtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3BlcnR5SWQoKSxcbiAgICAgIHNjaGVtYVR5cGU6IGlzSXJpID8gbnVsbCA6IHNjaGVtYVR5cGUsXG4gICAgICBzY2hlbWEsXG4gICAgICBrZXksXG4gICAgICBmdWxsS2V5LFxuICAgICAgdmFsdWU6IHByb3BlcnR5VmFsdWUoc2NoZW1hLCB2YWx1ZSksXG4gICAgICBlZGl0YWJsZTogaW5FcnJvciB8fCBlZGl0YWJsZSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBlbmFibGVTdWdnZXN0aW9ucyhub2RlU2NoZW1hLCBub2RlLnR5cGUsIGZ1bGxLZXksIHNjaGVtYSksXG4gICAgICBhZGRQcm9wZXJ0eUVuYWJsZWQ6IGlzQWRkUHJvcGVydHlFbmFibGVkKG5vZGUsIHNjaGVtYVR5cGUsIHNjaGVtYSwgZnVsbEtleSksXG4gICAgICBuZXdQcm9wZXJ0eToge30sXG4gICAgICBuZXdFcnJvcjogeyBsZXZlbDogJ3dhcm5pbmcnIH0sXG4gICAgICBlcnJvcjogZm9ybWF0RXJyb3IoZXJyb3IpLFxuICAgICAgaXNIaWRkZW46IHBhcmVudCAmJiBpc0tleUhpZGRlbihrZXkpLFxuICAgICAgY2xvc2VkVmlzaWJsZTogaXNLZXlDbG9zZWRWaXNpYmxlKGtleSksXG4gICAgICBoYXNFcnJvcjogaW5FcnJvcixcbiAgICAgIGhhc1dhcm5pbmc6IGluV2FybmluZyxcbiAgICAgIGlzUmVxdWlyZWQ6IGlzS2V5UmVxdWlyZWQoa2V5LCBzY2hlbWFzW25vZGVUeXBlXSksXG4gICAgICBpc0FycmF5LFxuICAgICAgaXNFeHBhbmRhYmxlOiBleHBhbmRhYmxlLFxuICAgICAgaXNPcGVuOiBpc09wZW5EZWZhdWx0KHNjaGVtYVR5cGUpLFxuICAgICAgcHJvcGVydGllcyxcbiAgICAgIHBsYWNlaG9sZGVyOiBwcm9wZXJ0eVBsYWNlaG9sZGVyKHNjaGVtYSwgdmFsdWVUeXBlLCBmdWxsS2V5LCBwYXJlbnRTY2hlbWEpLFxuICAgICAgZXh0ZXJuYWxVcmw6IHByb3BlcnR5RXh0ZXJuYWxVcmwobm9kZSwga2V5LCB2YWx1ZSksXG4gICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcihrZXkpXG4gICAgfTtcbiAgfTtcblxuZXhwb3J0IGNvbnN0IHNpbmdsZVByb3BlcnR5ID0gKHNjaGVtYXM6IGRlZmluaXRpb25zLCBlcnJvcnM6IElWYWxpZGF0aW9uRXJyb3JbXSwgbm9kZTogYW55LCBmdWxsS2V5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgW190LCAuLi5rZXlzXSA9IGZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgY29uc3Qga2V5ID0ga2V5cy5wb3AoKSE7XG4gIGNvbnN0IHBhcmVudCA9IGtleXMuam9pbignLicpO1xuICBjb25zdCBwYXJlbnROb2RlID0gcGFyZW50Lmxlbmd0aCA/IGdldChub2RlLCBwYXJlbnQpIDogbm9kZTtcbiAgY29uc3Qgc2NoZW1hVHlwZSA9IHR5cGVUb1NjaGVtYVR5cGUocGFyZW50Tm9kZS50eXBlIHx8IHBhcmVudE5vZGVbJ0B0eXBlJ10pO1xuICBjb25zdCBwYXJlbnRTY2hlbWEgPSBzY2hlbWFzW3NjaGVtYVR5cGVdO1xuICByZXR1cm4gcHJvcGVydHlGcm9tTm9kZShzY2hlbWFzLCBlcnJvcnMsIHBhcmVudFNjaGVtYSwgdHJ1ZSwgcGFyZW50LCBwYXJlbnROb2RlKShrZXkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlY3Vyc2l2ZVByb3BlcnRpZXMgPVxuICAoc2NoZW1hczogZGVmaW5pdGlvbnMsIGVycm9yczogSVZhbGlkYXRpb25FcnJvcltdLCBub2RlU2NoZW1hOiBkZWZpbml0aW9uLCBkZWVwRWRpdGFibGU6IGJvb2xlYW4sIHBhcmVudCA9ICcnKSA9PlxuICAobm9kZTogYW55KTogSU5vZGVQcm9wZXJ0eVtdID0+XG4gICAgT2JqZWN0LmtleXMobm9kZSlcbiAgICAgIC5maWx0ZXIoa2V5ID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKGtleSkpXG4gICAgICAubWFwKHByb3BlcnR5RnJvbU5vZGUoc2NoZW1hcywgZXJyb3JzLCBub2RlU2NoZW1hLCBkZWVwRWRpdGFibGUsIHBhcmVudCwgbm9kZSkpXG4gICAgICAuY29uY2F0KC4uLm1pc3NpbmdQcm9wZXJ0eUVycm9ycyhub2RlLCBlcnJvcnMsIHBhcmVudCkpXG4gICAgICAuc29ydChzb3J0UHJvcGVydGllcyk7XG5cbmNvbnN0IGZ1bGxLZXlQYXJ0cyA9IChmdWxsS2V5OiBzdHJpbmcpID0+XG4gIGZ1bGxLZXkuc3BsaXQoJy4nKS5mbGF0TWFwKHZhbCA9PiB7XG4gICAgaWYgKHZhbC5lbmRzV2l0aCgnXScpKSB7XG4gICAgICBjb25zdCBba2V5LCBpbmRleF0gPSB2YWwuc3BsaXQoJ1snKTtcbiAgICAgIHJldHVybiBba2V5LCBpbmRleC5yZXBsYWNlKCddJywgJycpXTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbDtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVQcm9wZXJ0aWVzID0gKFxuICB7IHByb3BlcnRpZXMgfTogUGFydGlhbDxJTm9kZVByb3BlcnR5PixcbiAgdXBkYXRlcjogKHByb3A6IElOb2RlUHJvcGVydHkpID0+IElOb2RlUHJvcGVydHlcbikgPT4gKHByb3BlcnRpZXMgfHwgW10pLm1hcChwcm9wID0+IHVwZGF0ZVByb3BlcnRpZXModXBkYXRlcihwcm9wKSwgdXBkYXRlcikpO1xuXG5leHBvcnQgY29uc3QgdHlwZVRvTmV3UHJvcGVydHkgPSAoXG4gIHNjaGVtYXM6IGRlZmluaXRpb25zLFxuICBzY2hlbWE6IGRlZmluaXRpb24sXG4gIG5vZGVTY2hlbWE6IGRlZmluaXRpb24sXG4gIG5vZGU6IGFueSxcbiAgZnVsbEtleTogc3RyaW5nXG4pOiBJTm9kZVByb3BlcnR5ID0+IHtcbiAgY29uc3Qga2V5ID0gZnVsbEtleVBhcnRzKGZ1bGxLZXkpLnBvcCgpITtcbiAgY29uc3QgbWFwcGluZ3M6IHtcbiAgICBba2V5OiBzdHJpbmddOiAoKSA9PiBJTm9kZVByb3BlcnR5O1xuICB9ID0ge1xuICAgIG9iamVjdDogKCkgPT4ge1xuICAgICAgY29uc3QgeyBzY2hlbWFUeXBlLCBwcm9wZXJ0aWVzIH0gPSBzY2hlbWFSZXF1aXJlZFByb3BlcnRpZXMoc2NoZW1hcywgc2NoZW1hIGFzIElEZWZpbml0aW9uT2JqZWN0KTtcbiAgICAgIG5vZGVba2V5XSA9IG5vZGVba2V5XSB8fCB7fTtcbiAgICAgIG5vZGVba2V5XS50eXBlID0gc2NoZW1hVHlwZTtcbiAgICAgIC8vIFRPRE86IGhhbmRsZSBub2RlU2NoZW1hIHNob3VsZCBiZSBzY2hlbWEgdW5sZXNzIGxhc3QgcmVjdXJzaW9uXG4gICAgICBjb25zdCBwcm9wcyA9IHByb3BlcnRpZXNcbiAgICAgICAgLmZpbHRlcihwcm9wID0+IG5lc3RpbmdFbmFibGVkKHNjaGVtYVR5cGUsIHByb3Aua2V5KSAmJiAhIXByb3AudmFsdWUpXG4gICAgICAgIC5tYXAodiA9PiAoe1xuICAgICAgICAgIC4uLnR5cGVUb05ld1Byb3BlcnR5KHNjaGVtYXMsIHYudmFsdWUsIG5vZGVTY2hlbWEsIG5vZGVba2V5XSwgYCR7ZnVsbEtleX0uJHt2LmtleX1gKSxcbiAgICAgICAgICBpc1JlcXVpcmVkOiB0cnVlXG4gICAgICAgIH0pKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gcHJvcHMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiAoeyAuLi5wcmV2LCBbY3Vyci5rZXldOiBjdXJyLnZhbHVlIH0pLCB7fSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICBpc0FkZGVkOiB0cnVlLFxuICAgICAgICBzY2hlbWE6IHNjaGVtYXNbc2NoZW1hVHlwZV0sXG4gICAgICAgIHNjaGVtYVR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgZnVsbEtleSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGVkaXRhYmxlOiBlZGl0YWJsZUtleShrZXkpLFxuICAgICAgICBpc0hpZGRlbjogaXNLZXlIaWRkZW4oa2V5KSxcbiAgICAgICAgY2xvc2VkVmlzaWJsZTogaXNLZXlDbG9zZWRWaXNpYmxlKGtleSksXG4gICAgICAgIHN1Z2dlc3Rpb25zOiBlbmFibGVTdWdnZXN0aW9ucyhub2RlU2NoZW1hLCBzY2hlbWFUeXBlLCBmdWxsS2V5KSxcbiAgICAgICAgcHJvcGVydGllczogcHJvcHMuc29ydChzb3J0UHJvcGVydGllcyksXG4gICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogaXNBZGRQcm9wZXJ0eUVuYWJsZWQobm9kZSwgc2NoZW1hVHlwZSwgc2NoZW1hc1tzY2hlbWFUeXBlXSwga2V5KSxcbiAgICAgICAgbmV3UHJvcGVydHk6IHt9LFxuICAgICAgICBuZXdFcnJvcjogeyBsZXZlbDogJ3dhcm5pbmcnIH0sXG4gICAgICAgIGlzUmVxdWlyZWQ6IGlzS2V5UmVxdWlyZWQoa2V5LCBzY2hlbWEgYXMgYW55KSxcbiAgICAgICAgaXNBcnJheTogZmFsc2UsXG4gICAgICAgIGlzRXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgaXNPcGVuOiBpc09wZW5EZWZhdWx0KHNjaGVtYVR5cGUpLFxuICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcihrZXkpXG4gICAgICB9O1xuICAgIH0sXG4gICAgYXJyYXk6ICgpID0+IHtcbiAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHNjaGVtYSBhcyBJRGVmaW5pdGlvbkFycmF5O1xuICAgICAgLy8gYXJyYXkgb2Ygc3RyaW5nLCBudW1iZXIgYW5kIGJvb2xlYW5cbiAgICAgIGlmIChpdGVtcy50eXBlKSB7XG4gICAgICAgIHJldHVybiBtYXBwaW5ncy5kZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBzY2hlbWFUeXBlID0gZGVmaW5pdGlvblRvU2NoZW1hVHlwZShpdGVtcyBhcyBJRGVmaW5pdGlvbk9iamVjdCk7XG4gICAgICBub2RlW2tleV0gPSBub2RlW2tleV0gfHwgW107XG4gICAgICBub2RlW2tleV0ucHVzaCh7fSk7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IHR5cGVUb05ld1Byb3BlcnR5KHNjaGVtYXMsIGl0ZW1zLCBzY2hlbWFzW3NjaGVtYVR5cGVdLCBub2RlW2tleV1bMF0sIGAke2Z1bGxLZXl9WzBdYCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICBpc0FkZGVkOiB0cnVlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHNjaGVtYVR5cGUsXG4gICAgICAgIGtleSxcbiAgICAgICAgZnVsbEtleSxcbiAgICAgICAgdmFsdWU6IFtwcm9wZXJ0eS52YWx1ZV0sXG4gICAgICAgIGVkaXRhYmxlOiBlZGl0YWJsZUtleShrZXkpLFxuICAgICAgICBpc0hpZGRlbjogaXNLZXlIaWRkZW4oa2V5KSxcbiAgICAgICAgY2xvc2VkVmlzaWJsZTogaXNLZXlDbG9zZWRWaXNpYmxlKGtleSksXG4gICAgICAgIHN1Z2dlc3Rpb25zOiB1bmRlZmluZWQsXG4gICAgICAgIHByb3BlcnRpZXM6IFtwcm9wZXJ0eV0sXG4gICAgICAgIG5ld1Byb3BlcnR5OiB7fSxcbiAgICAgICAgbmV3RXJyb3I6IHsgbGV2ZWw6ICd3YXJuaW5nJyB9LFxuICAgICAgICBpc0FycmF5OiB0cnVlLFxuICAgICAgICBpc0V4cGFuZGFibGU6IHRydWUsXG4gICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKGtleSlcbiAgICAgIH07XG4gICAgfSxcbiAgICBnZW9qc29uOiAoKSA9PiB0eXBlVG9OZXdQcm9wZXJ0eShzY2hlbWFzLCB7IHR5cGU6ICdqc29uJyB9IGFzIGFueSwgbm9kZVNjaGVtYSwgbm9kZSwgZnVsbEtleSksXG4gICAgZGVmYXVsdDogKCkgPT4ge1xuICAgICAgY29uc3QgdmFsdWVUeXBlID0gcHJvcGVydHlWYWx1ZVR5cGUoc2NoZW1hKTtcbiAgICAgIGNvbnN0IHZhbHVlID0gc2NoZW1hLmRlZmF1bHQgfHwgKHNjaGVtYSBhcyBhbnkpLmNvbnN0IHx8IHZhbHVlVHlwZVRvRGVmYXVsdFt2YWx1ZVR5cGVdO1xuICAgICAgbm9kZVtrZXldID0gdmFsdWU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogcHJvcGVydHlJZCgpLFxuICAgICAgICBpc0FkZGVkOiB0cnVlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHNjaGVtYVR5cGU6IG5vZGUudHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBmdWxsS2V5LFxuICAgICAgICB2YWx1ZTogcHJvcGVydHlWYWx1ZShzY2hlbWEsIHZhbHVlKSxcbiAgICAgICAgZWRpdGFibGU6IGVkaXRhYmxlS2V5KGtleSksXG4gICAgICAgIGlzSGlkZGVuOiBpc0tleUhpZGRlbihrZXkpLFxuICAgICAgICBjbG9zZWRWaXNpYmxlOiBpc0tleUNsb3NlZFZpc2libGUoa2V5KSxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IGVuYWJsZVN1Z2dlc3Rpb25zKG5vZGVTY2hlbWEsIG5vZGUudHlwZSwgZnVsbEtleSwgc2NoZW1hKSxcbiAgICAgICAgcGxhY2Vob2xkZXI6IHByb3BlcnR5UGxhY2Vob2xkZXIoc2NoZW1hLCB2YWx1ZVR5cGUsIGZ1bGxLZXksIG5vZGVTY2hlbWEpLFxuICAgICAgICBleHRlcm5hbFVybDogcHJvcGVydHlFeHRlcm5hbFVybChub2RlLCBrZXksIHZhbHVlKSxcbiAgICAgICAgcHJvcGVydGllczogW10sXG4gICAgICAgIGFkZFByb3BlcnR5RW5hYmxlZDogZmFsc2UsXG4gICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyKGtleSlcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICBjb25zdCBtYXBwZWQgPSBpc0dlb2pzb24oc2NoZW1hKVxuICAgID8gbWFwcGluZ3MuZ2VvanNvblxuICAgIDogIXNjaGVtYS50eXBlXG4gICAgPyBtYXBwaW5ncy5vYmplY3RcbiAgICA6IChzY2hlbWEudHlwZSBhcyBzdHJpbmcpIGluIG1hcHBpbmdzXG4gICAgPyBtYXBwaW5nc1tzY2hlbWEudHlwZSBhcyBzdHJpbmddXG4gICAgOiBtYXBwaW5ncy5kZWZhdWx0O1xuICByZXR1cm4gbWFwcGVkKCk7XG59O1xuXG5leHBvcnQgY29uc3QgZmluZFByb3BlcnR5ID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwgZnVsbEtleTogc3RyaW5nKSA9PiB7XG4gIGZvciAoY29uc3QgcCBvZiBwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKHAuZnVsbEtleSA9PT0gZnVsbEtleSkge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUCA9IGZpbmRQcm9wZXJ0eShwLnByb3BlcnRpZXMsIGZ1bGxLZXkpO1xuICAgIGlmIChjaGlsZFApIHtcbiAgICAgIHJldHVybiBjaGlsZFA7XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcmVudFByb3BlcnR5ID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwgcHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+IHtcbiAgY29uc3QgYWxsS2V5cyA9IHByb3BlcnR5LmZ1bGxLZXkuc3BsaXQoJy4nKTtcbiAgWy4uLm5ldyBBcnJheShwcm9wZXJ0eS5zdWdnZXN0aW9ucz8ucGFyZW50TGV2ZWwgfHwgMCldLm1hcCgoKSA9PiBhbGxLZXlzLnBvcCgpKTtcbiAgY29uc3QgcGFyZW50S2V5cyA9IGZ1bGxLZXlQYXJ0cyhhbGxLZXlzLmpvaW4oJy4nKSk7XG4gIHBhcmVudEtleXMucG9wKCk7XG4gIGNvbnN0IHBhcmVudCA9IHBhcmVudEtleXMucmVkdWNlKChwcmV2LCBjdXJyLCBjdXJySW5kZXgpOiBhbnkgPT4ge1xuICAgIGNvbnN0IHByb3AgPSBwcmV2LmZpbmQodiA9PiB2LmtleSA9PT0gY3Vycik7XG4gICAgcmV0dXJuIGN1cnJJbmRleCA9PT0gcGFyZW50S2V5cy5sZW5ndGggLSAxID8gcHJvcCB8fCAoe30gYXMgSU5vZGVQcm9wZXJ0eSkgOiBwcm9wIS5wcm9wZXJ0aWVzIHx8IFtdO1xuICB9LCBwcm9wZXJ0aWVzKSBhcyBhbnkgYXMgSU5vZGVQcm9wZXJ0eTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGFyZW50KSA/IHByb3BlcnR5IDogcGFyZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IG5lc3RlZFByb3BlcnR5ID0gKHsgcHJvcGVydGllcyB9OiBJTm9kZVByb3BlcnR5LCBuZXN0ZWRLZXk6IHN0cmluZykgPT5cbiAgcHJvcGVydGllcy5maW5kKCh7IGtleSB9KSA9PiBrZXkgPT09IG5lc3RlZEtleSk7XG5cbmV4cG9ydCBjb25zdCBzaWJsaW5nUHJvcGVydHkgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSwgc2libGluZ0tleTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IHBhcmVudCA9IHBhcmVudFByb3BlcnR5KHByb3BlcnRpZXMsIHByb3BlcnR5KTtcbiAgY29uc3QgcGFyZW50UHJvcGVydGllcyA9IHBhcmVudCA9PT0gcHJvcGVydHkgPyBwcm9wZXJ0aWVzIDogcGFyZW50LnByb3BlcnRpZXM7XG4gIHJldHVybiBwYXJlbnRQcm9wZXJ0aWVzLmZpbmQocHJvcCA9PiBwcm9wLmtleSA9PT0gc2libGluZ0tleSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ3JvdXBDaGFuZ2VkID0gKHByb3BlcnRpZXM6IElOb2RlUHJvcGVydHlbXSwga2V5OiBzdHJpbmcsIHZhbHVlPzogYW55KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyZW50S2V5cyA9IGZ1bGxLZXlQYXJ0cyhrZXkpO1xuICAgIHBhcmVudEtleXMucmVkdWNlKChwcmV2LCBjdXJyLCBjdXJySW5kZXgpID0+IHtcbiAgICAgIGlmIChjdXJySW5kZXggPT09IHBhcmVudEtleXMubGVuZ3RoIC0gMSAmJiB2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcHJldi5zcGxpY2UoXG4gICAgICAgICAgcHJldi5maW5kSW5kZXgodiA9PiB2LmtleSA9PT0gY3VyciksXG4gICAgICAgICAgMVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvcCA9IHByZXYuZmluZCh2ID0+IHYua2V5ID09PSBjdXJyKSE7XG4gICAgICAgIHByb3AuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcm9wLnByb3BlcnRpZXM7XG4gICAgICB9XG4gICAgfSwgcHJvcGVydGllcyk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAvLyBpZ25vcmUgZXJyb3JcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlZnJlc2hQcm9wZXJ0eUtleXMgPSAocHJvcGVydHk6IElOb2RlUHJvcGVydHkpID0+XG4gIHByb3BlcnR5LnByb3BlcnRpZXMubWFwKChwcm9wLCBpKSA9PiB7XG4gICAgcHJvcC5mdWxsS2V5ID0gYCR7cHJvcGVydHkuZnVsbEtleX0ke3Byb3BlcnR5LmlzQXJyYXkgPyBgWyR7aX1dYCA6IGAuJHtwcm9wLmtleX1gfWA7XG4gICAgcHJvcC5rZXkgPSBwcm9wZXJ0eS5pc0FycmF5ID8gYCR7aX1gIDogcHJvcC5rZXk7XG4gICAgcmV0dXJuIHJlZnJlc2hQcm9wZXJ0eUtleXMocHJvcCk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQ3ljbGVEdXJhdGlvbkVuYWJsZWQgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBzdGFydERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdzdGFydERhdGUnKTtcbiAgY29uc3QgZW5kRGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2VuZERhdGUnKTtcbiAgcmV0dXJuICEhc3RhcnREYXRlPy52YWx1ZSAmJiAhIWVuZERhdGU/LnZhbHVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUN5Y2xlRHVyYXRpb24gPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBzdGFydERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdzdGFydERhdGUnKSE7XG4gIGNvbnN0IGVuZERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdlbmREYXRlJykhO1xuICByZXR1cm4gZGlmZkluRGF5cyhzdGFydERhdGUudmFsdWUsIGVuZERhdGUudmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNhbGN1bGF0ZUN5Y2xlU3RhcnREYXRlRW5hYmxlZCA9IChwcm9wZXJ0aWVzOiBJTm9kZVByb3BlcnR5W10sIHByb3BlcnR5OiBJTm9kZVByb3BlcnR5KSA9PiB7XG4gIGNvbnN0IGN5Y2xlRHVyYXRpb24gPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdjeWNsZUR1cmF0aW9uJyk7XG4gIGNvbnN0IGVuZERhdGUgPSBzaWJsaW5nUHJvcGVydHkocHJvcGVydGllcywgcHJvcGVydHksICdlbmREYXRlJyk7XG4gIHJldHVybiAhIWN5Y2xlRHVyYXRpb24/LnZhbHVlICYmICEhZW5kRGF0ZT8udmFsdWU7XG59O1xuXG5leHBvcnQgY29uc3QgY2FsY3VsYXRlQ3ljbGVTdGFydERhdGUgPSAocHJvcGVydGllczogSU5vZGVQcm9wZXJ0eVtdLCBwcm9wZXJ0eTogSU5vZGVQcm9wZXJ0eSkgPT4ge1xuICBjb25zdCBjeWNsZUR1cmF0aW9uID0gc2libGluZ1Byb3BlcnR5KHByb3BlcnRpZXMsIHByb3BlcnR5LCAnY3ljbGVEdXJhdGlvbicpITtcbiAgY29uc3QgZW5kRGF0ZSA9IHNpYmxpbmdQcm9wZXJ0eShwcm9wZXJ0aWVzLCBwcm9wZXJ0eSwgJ2VuZERhdGUnKSE7XG4gIHJldHVybiBtb21lbnQoZW5kRGF0ZS52YWx1ZSkubG9jYWxlKCdlbi1nYicpLnN1YnRyYWN0KGN5Y2xlRHVyYXRpb24udmFsdWUsICdkYXlzJykuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG59O1xuIl19