@sbb-esta/lyne-elements-experimental 3.0.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/custom-elements.json +1055 -1070
  2. package/development/core/datetime/date-helper.js +1 -1
  3. package/development/core/timetable/access-leg-helper.js +1 -1
  4. package/development/differenceInMinutes-D5Nj8Stc.js +1 -1
  5. package/development/format-BQfaa1ZT.js +1 -1
  6. package/development/journey-summary/journey-summary.component.js +1 -1
  7. package/development/pearl-chain/pearl-chain.component.js +1 -1
  8. package/development/pearl-chain-time/pearl-chain-time.component.js +1 -1
  9. package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +1 -1
  10. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +1 -1
  11. package/development/seat-reservation/common/mapper/mapper.js +1 -1
  12. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +3 -3
  13. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -1
  14. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +6 -6
  15. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
  16. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +6 -6
  17. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +1 -1
  18. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +1 -1
  19. package/development/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-coach → seat-reservation-navigation-coach}/seat-reservation-navigation-coach.component.d.ts +3 -3
  20. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -0
  21. package/development/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-coach → seat-reservation-navigation-coach}/seat-reservation-navigation-coach.component.js +10 -6
  22. package/development/seat-reservation/seat-reservation-navigation-coach.d.ts.map +1 -0
  23. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -0
  24. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +123 -0
  25. package/development/seat-reservation/seat-reservation-navigation-services.d.ts.map +1 -0
  26. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +1 -1
  27. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +3 -3
  28. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +1 -0
  29. package/development/seat-reservation/{seat-reservation/seat-reservation-scoped → seat-reservation-scoped}/seat-reservation-scoped.component.js +1 -1
  30. package/{seat-reservation → development}/seat-reservation/seat-reservation-scoped.d.ts.map +1 -1
  31. package/development/seat-reservation/seat-reservation.d.ts +0 -1
  32. package/development/seat-reservation/seat-reservation.d.ts.map +1 -1
  33. package/development/seat-reservation/seat-reservation.js +1 -3
  34. package/development/seat-reservation.d.ts +3 -1
  35. package/development/seat-reservation.d.ts.map +1 -1
  36. package/development/seat-reservation.js +3 -3
  37. package/development/timetable-duration/timetable-duration.component.js +1 -1
  38. package/development/timetable-row/timetable-row.component.js +1 -1
  39. package/index.d.ts +3 -3
  40. package/index.js +3 -3
  41. package/package.json +15 -20
  42. package/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +3 -3
  43. package/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -1
  44. package/seat-reservation/seat-reservation/seat-reservation-base-element.js +20 -20
  45. package/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
  46. package/seat-reservation/seat-reservation/seat-reservation.component.js +5 -5
  47. package/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-coach → seat-reservation-navigation-coach}/seat-reservation-navigation-coach.component.d.ts +3 -3
  48. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -0
  49. package/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-coach → seat-reservation-navigation-coach}/seat-reservation-navigation-coach.component.js +9 -5
  50. package/seat-reservation/seat-reservation-navigation-coach.d.ts.map +1 -0
  51. package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -0
  52. package/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-services → seat-reservation-navigation-services}/seat-reservation-navigation-services.component.js +2 -2
  53. package/seat-reservation/seat-reservation-navigation-services.d.ts.map +1 -0
  54. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +1 -1
  55. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +2 -2
  56. package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +1 -0
  57. package/seat-reservation/seat-reservation-scoped.d.ts.map +1 -0
  58. package/seat-reservation/seat-reservation.d.ts +0 -1
  59. package/seat-reservation/seat-reservation.d.ts.map +1 -1
  60. package/seat-reservation/seat-reservation.js +0 -2
  61. package/seat-reservation.d.ts +3 -1
  62. package/seat-reservation.d.ts.map +1 -1
  63. package/seat-reservation.js +12 -12
  64. package/development/seat-reservation/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +0 -1
  65. package/development/seat-reservation/seat-reservation/seat-reservation-scoped.d.ts.map +0 -1
  66. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +0 -1
  67. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts.map +0 -1
  68. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +0 -1
  69. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +0 -122
  70. package/development/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts.map +0 -1
  71. package/development/seat-reservation/seat-reservation-navigation.d.ts +0 -6
  72. package/development/seat-reservation/seat-reservation-navigation.d.ts.map +0 -1
  73. package/development/seat-reservation/seat-reservation-navigation.js +0 -7
  74. package/seat-reservation/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +0 -1
  75. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +0 -1
  76. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-coach.d.ts.map +0 -1
  77. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +0 -1
  78. package/seat-reservation/seat-reservation-navigation/seat-reservation-navigation-services.d.ts.map +0 -1
  79. package/seat-reservation/seat-reservation-navigation.d.ts +0 -6
  80. package/seat-reservation/seat-reservation-navigation.d.ts.map +0 -1
  81. package/seat-reservation/seat-reservation-navigation.js +0 -6
  82. /package/development/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-coach.d.ts → seat-reservation-navigation-coach.d.ts} +0 -0
  83. /package/development/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-coach.js → seat-reservation-navigation-coach.js} +0 -0
  84. /package/development/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-services → seat-reservation-navigation-services}/seat-reservation-navigation-services.component.d.ts +0 -0
  85. /package/development/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-services.d.ts → seat-reservation-navigation-services.d.ts} +0 -0
  86. /package/development/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-services.js → seat-reservation-navigation-services.js} +0 -0
  87. /package/development/seat-reservation/{seat-reservation/seat-reservation-scoped → seat-reservation-scoped}/seat-reservation-scoped.component.d.ts +0 -0
  88. /package/development/seat-reservation/{seat-reservation/seat-reservation-scoped.d.ts → seat-reservation-scoped.d.ts} +0 -0
  89. /package/development/seat-reservation/{seat-reservation/seat-reservation-scoped.js → seat-reservation-scoped.js} +0 -0
  90. /package/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-coach.d.ts → seat-reservation-navigation-coach.d.ts} +0 -0
  91. /package/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-coach.js → seat-reservation-navigation-coach.js} +0 -0
  92. /package/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-services → seat-reservation-navigation-services}/seat-reservation-navigation-services.component.d.ts +0 -0
  93. /package/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-services.d.ts → seat-reservation-navigation-services.d.ts} +0 -0
  94. /package/seat-reservation/{seat-reservation-navigation/seat-reservation-navigation-services.js → seat-reservation-navigation-services.js} +0 -0
  95. /package/seat-reservation/{seat-reservation/seat-reservation-scoped → seat-reservation-scoped}/seat-reservation-scoped.component.d.ts +0 -0
  96. /package/seat-reservation/{seat-reservation/seat-reservation-scoped → seat-reservation-scoped}/seat-reservation-scoped.component.js +0 -0
  97. /package/seat-reservation/{seat-reservation/seat-reservation-scoped.d.ts → seat-reservation-scoped.d.ts} +0 -0
  98. /package/seat-reservation/{seat-reservation/seat-reservation-scoped.js → seat-reservation-scoped.js} +0 -0
@@ -101,7 +101,7 @@ let SeatReservationBaseElement = (() => {
101
101
  set seatReservation(value) {
102
102
  __privateSet(this, _seatReservation_accessor_storage, value);
103
103
  }
104
- /** The seat resvervation navigation can be toggled by this property */
104
+ /** The seat reservation navigation can be toggled by this property */
105
105
  get hasNavigation() {
106
106
  return __privateGet(this, _hasNavigation_accessor_storage);
107
107
  }
@@ -549,7 +549,7 @@ let SeatReservationBaseElement = (() => {
549
549
  if (this.maxReservations && this.selectedSeatReservationPlaces.length > this.maxReservations) {
550
550
  this._resetAllPlaceSelections(placeSelection);
551
551
  }
552
- this.dispatchEvent(new CustomEvent("selectedPlaces", {
552
+ this.dispatchEvent(new CustomEvent("selectedplaces", {
553
553
  bubbles: true,
554
554
  composed: true,
555
555
  detail: this.selectedSeatReservationPlaces
@@ -572,7 +572,7 @@ let SeatReservationBaseElement = (() => {
572
572
  this.focusedCoachIndex = -1;
573
573
  const coachSelection = this._getSeatReservationCoachSelection(this.selectedCoachIndex);
574
574
  if (coachSelection) {
575
- this.dispatchEvent(new CustomEvent("selectedCoach", {
575
+ this.dispatchEvent(new CustomEvent("selectedcoach", {
576
576
  bubbles: true,
577
577
  composed: true,
578
578
  detail: coachSelection
@@ -690,11 +690,11 @@ let SeatReservationBaseElement = (() => {
690
690
  } }, metadata: _metadata }, _focusedCoachIndex_initializers, _focusedCoachIndex_extraInitializers);
691
691
  if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
692
692
  })(), _a.events = {
693
- selectedPlaces: "selectedPlaces",
694
- selectedCoach: "selectedCoach"
693
+ selectedplaces: "selectedplaces",
694
+ selectedcoach: "selectedcoach"
695
695
  }, _a;
696
696
  })();
697
697
  export {
698
698
  SeatReservationBaseElement
699
699
  };
700
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi1iYXNlLWVsZW1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uL3NlYXQtcmVzZXJ2YXRpb24tYmFzZS1lbGVtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgdHlwZSBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7XG4gIG1hcENvYWNoSW5mb3NUb0NvYWNoU2VsZWN0aW9uLFxuICBtYXBQbGFjZUFuZENvYWNoVG9TZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbixcbiAgbWFwUGxhY2VJbmZvc1RvUGxhY2VTZWxlY3Rpb24sXG59IGZyb20gJy4uL2NvbW1vbi9tYXBwZXIuanMnO1xuaW1wb3J0IHR5cGUge1xuICBDb2FjaEl0ZW0sXG4gIEVsZW1lbnREaW1lbnNpb24sXG4gIEVsZW1lbnRQb3NpdGlvbixcbiAgUGxhY2UsXG4gIFBsYWNlU2VsZWN0aW9uLFxuICBTZWF0UmVzZXJ2YXRpb24sXG4gIFNlYXRSZXNlcnZhdGlvbkNvYWNoU2VsZWN0aW9uLFxuICBTZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbixcbn0gZnJvbSAnLi4vY29tbW9uLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiU2VhdFJlc2VydmF0aW9uUGxhY2VDb250cm9sRWxlbWVudCB9IGZyb20gJy4uL3NlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC9zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wuY29tcG9uZW50LmpzJztcblxuaW1wb3J0IHR5cGUgeyBTYmJTZWF0UmVzZXJ2YXRpb25TY29wZWRFbGVtZW50IH0gZnJvbSAnLi9zZWF0LXJlc2VydmF0aW9uLXNjb3BlZC9zZWF0LXJlc2VydmF0aW9uLXNjb3BlZC5jb21wb25lbnQuanMnO1xuXG5lbnVtIFNjcm9sbERpcmVjdGlvbiB7XG4gIHJpZ2h0ID0gJ3JpZ2h0JyxcbiAgbGVmdCA9ICdsZWZ0Jyxcbn1cblxuaW50ZXJmYWNlIENvYWNoU2Nyb2xsVHJpZ2dlclBvaW50IHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG59XG5cbmV4cG9ydCB0eXBlIFNlYXRSZXNlcnZhdGlvblNlbGVjdGVkUGxhY2VzRXZlbnREZXRhaWxzID0gU2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb25bXTtcblxuZXhwb3J0IGNsYXNzIFNlYXRSZXNlcnZhdGlvbkJhc2VFbGVtZW50IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIHNlbGVjdGVkUGxhY2VzOiAnc2VsZWN0ZWRQbGFjZXMnLFxuICAgIHNlbGVjdGVkQ29hY2g6ICdzZWxlY3RlZENvYWNoJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogVGhlIHNlYXQgcmVzZXJ2YXRpb24gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIGFsbCBjb2FjaGVzIGFuZCBwbGFjZXMgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2VhdC1yZXNlcnZhdGlvbicsIHR5cGU6IE9iamVjdCB9KVxuICBwdWJsaWMgYWNjZXNzb3Igc2VhdFJlc2VydmF0aW9uOiBTZWF0UmVzZXJ2YXRpb24gPSBudWxsITtcblxuICAvKiogVGhlIHNlYXQgcmVzdmVydmF0aW9uIG5hdmlnYXRpb24gY2FuIGJlIHRvZ2dsZWQgYnkgdGhpcyBwcm9wZXJ0eSAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaGFzLW5hdmlnYXRpb24nLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBoYXNOYXZpZ2F0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogVGhlIHNlYXQgcmVzZXJ2YXRpb24gYXJlYSBpcyBhbGlnbmVkIHZlcnRpY2FsbHkgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FsaWduLXZlcnRpY2FsJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYWxpZ25WZXJ0aWNhbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBUaGUgc2VhdCByZXNlcnZhdGlvbiBhcmVhJ3MgYmFzZSBncmlkIHNpemUgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Jhc2UtZ3JpZC1zaXplJywgdHlwZTogTnVtYmVyIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBiYXNlR3JpZFNpemU6IG51bWJlciA9IDE2O1xuXG4gIC8qKiBUaGUgc2VhdCByZXNlcnZhdGlvbiBhcmVhJ3Mgd2lkdGggKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2hlaWdodCcsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgaGVpZ2h0OiBudW1iZXIgPSBudWxsITtcblxuICAvKiogTWF4aW1hbCBudW1iZXIgb2YgcG9zc2libGUgY2xpY2thYmxlIHNlYXRzICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdtYXgtcmVzZXJ2YXRpb25zJywgdHlwZTogTnVtYmVyIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBtYXhSZXNlcnZhdGlvbnM6IG51bWJlciA9IG51bGwhO1xuXG4gIC8qKiBBbnkgY2xpY2sgZnVuY3Rpb25hbGl0eSBpcyBwcmV2ZW50ZWQgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3ByZXZlbnQtcGxhY2UtY2xpY2snLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwcmV2ZW50UGxhY2VDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBzdGF0ZSgpIHByb3RlY3RlZCBhY2Nlc3NvciBzZWxlY3RlZENvYWNoSW5kZXg6IG51bWJlciA9IC0xO1xuICBAc3RhdGUoKSBwcm90ZWN0ZWQgYWNjZXNzb3IgZm9jdXNlZENvYWNoSW5kZXg6IG51bWJlciA9IC0xO1xuXG4gIHByb3RlY3RlZCBjb2FjaEJvcmRlclBhZGRpbmcgPSA2O1xuICBwcm90ZWN0ZWQgY29hY2hCb3JkZXJPZmZzZXQgPSB0aGlzLmNvYWNoQm9yZGVyUGFkZGluZyAvIHRoaXMuYmFzZUdyaWRTaXplO1xuICBwcm90ZWN0ZWQgY3VyclNjcm9sbERpcmVjdGlvbjogU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLnJpZ2h0O1xuICBwcm90ZWN0ZWQgbWF4Q2FsY0NvYWNoc1dpZHRoOiBudW1iZXIgPSAwO1xuICBwcm90ZWN0ZWQgc2Nyb2xsQ29hY2hzQXJlYVdpZHRoOiBudW1iZXIgPSAwO1xuICBwcm90ZWN0ZWQgdHJpZ2dlckNvYWNoUG9zaXRpb25zQ29sbGVjdGlvbjogQ29hY2hTY3JvbGxUcmlnZ2VyUG9pbnRbXSA9IFtdO1xuICBwcm90ZWN0ZWQgZmlyc3RUYWJFbGVtZW50OiBIVE1MRWxlbWVudCA9IG51bGwhO1xuICBwcm90ZWN0ZWQgbGFzdFRhYkVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbnVsbCE7XG4gIHByb3RlY3RlZCBjb2FjaFNjcm9sbEFyZWE6IEhUTUxFbGVtZW50ID0gbnVsbCE7XG4gIHByb3RlY3RlZCBjdXJyU2VsZWN0ZWRQbGFjZTogUGxhY2UgfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIGN1cnJTZWxlY3RlZFBsYWNlRWxlbWVudElkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJvdGVjdGVkIGN1cnJTZWxlY3RlZENvYWNoSW5kZXg6IG51bWJlciA9IC0xO1xuICBwcm90ZWN0ZWQgcHJldmVudENvYWNoU2Nyb2xsQnlQbGFjZUNsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBzZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlczogU2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb25bXSA9IFtdO1xuICBwcm90ZWN0ZWQgc2VhdFJlc2VydmF0aW9uV2l0aG91dE5hdmlnYXRpb25IYXNGb2N1cyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgaXNDb2FjaEdyaWRGb2N1c2FibGUgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzQXV0b1Njcm9sbGluZyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgaXNLZXlib2FyZE5hdmlnYXRpb24gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cyA9IHtcbiAgICBBcnJvd0xlZnQ6ICdBcnJvd0xlZnQnLFxuICAgIEFycm93UmlnaHQ6ICdBcnJvd1JpZ2h0JyxcbiAgICBBcnJvd1VwOiAnQXJyb3dVcCcsXG4gICAgQXJyb3dEb3duOiAnQXJyb3dEb3duJyxcbiAgICBUYWI6ICdUYWInLFxuICAgIEVudGVyOiAnRW50ZXInLFxuICB9IGFzIGNvbnN0O1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2VhdFJlc2VydmF0aW9uJykpIHtcbiAgICAgIHRoaXMuX2luaXRTZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2Jhc2VHcmlkU2l6ZScpKSB7XG4gICAgICB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0ID0gdGhpcy5jb2FjaEJvcmRlclBhZGRpbmcgLyB0aGlzLmJhc2VHcmlkU2l6ZTtcbiAgICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyaWQtc2l6ZScsIGAke3RoaXMuYmFzZUdyaWRTaXplfXB4YCk7XG5cbiAgICAgIGlmICh0aGlzLmFsaWduVmVydGljYWwpIHtcbiAgICAgICAgdGhpcy5fc2V0VmVydGljYWxBbGlnbm1lbnRPZmZzZXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgaGVpZ2h0IGlzIHVzZWQsIHRoZSBiYXNlR3JpZFNpemUgbXVzdCBiZSByZWNhbGN1bGF0ZWRcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdoZWlnaHQnKSAmJiAhIXRoaXMuaGVpZ2h0KSB7XG4gICAgICBpZiAodGhpcy5zZWF0UmVzZXJ2YXRpb24uY29hY2hJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5iYXNlR3JpZFNpemUgPSB0aGlzLmhlaWdodCAvIHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXNbMF0uZGltZW5zaW9uLmg7XG4gICAgICAgIHRoaXMuY29hY2hCb3JkZXJPZmZzZXQgPSB0aGlzLmNvYWNoQm9yZGVyUGFkZGluZyAvIHRoaXMuYmFzZUdyaWRTaXplO1xuICAgICAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmlkLXNpemUnLCBgJHt0aGlzLmJhc2VHcmlkU2l6ZX1weGApO1xuXG4gICAgICAgIGlmICh0aGlzLmFsaWduVmVydGljYWwpIHtcbiAgICAgICAgICB0aGlzLl9zZXRWZXJ0aWNhbEFsaWdubWVudE9mZnNldCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnYWxpZ25WZXJ0aWNhbCcpICYmIHRoaXMuYWxpZ25WZXJ0aWNhbCkge1xuICAgICAgdGhpcy5fc2V0VmVydGljYWxBbGlnbm1lbnRPZmZzZXQoKTtcbiAgICB9XG4gIH1cblxuICAvKiBJbml0IHNjcm9sbCBldmVudCBoYW5kbGluZyBmb3IgY29hY2ggbmF2aWdhdGlvbiAqL1xuICBwcm90ZWN0ZWQgaW5pdE5hdmlnYXRpb25TZWxlY3Rpb25CeVNjcm9sbEV2ZW50KCk6IHZvaWQge1xuICAgIHRoaXMuZmlyc3RUYWJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgnZmlyc3QtdGFiLWVsZW1lbnQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLmxhc3RUYWJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgnbGFzdC10YWItZWxlbWVudCcpIGFzIEhUTUxFbGVtZW50O1xuICAgIHRoaXMuY29hY2hTY3JvbGxBcmVhID0gdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZCgnc2JiLXNyX19wYXJlbnQtYXJlYScpIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKHRoaXMuY29hY2hTY3JvbGxBcmVhKSB7XG4gICAgICBsZXQgY3VyckNhbGNUcmlnZ2VyUG9zID0gMDtcbiAgICAgIHRoaXMuc2Nyb2xsQ29hY2hzQXJlYVdpZHRoID0gdGhpcy5jb2FjaFNjcm9sbEFyZWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG5cbiAgICAgIC8vIFByZWNhbGN1bGF0ZSB0cmlnZ2VyIHNjcm9sbCBwb3NpdGlvbiBhcnJheSBkZXBlbmRzIGZyb20gY29hY2ggd2lkdGhcbiAgICAgIHRoaXMudHJpZ2dlckNvYWNoUG9zaXRpb25zQ29sbGVjdGlvbiA9IHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXMubWFwKChjb2FjaCkgPT4ge1xuICAgICAgICBjb25zdCBzdGFydFBvc1ggPSBjdXJyQ2FsY1RyaWdnZXJQb3M7XG4gICAgICAgIGNvbnN0IGNvYWNoV2lkdGggPSB0aGlzLmdldENhbGN1bGF0ZWREaW1lbnNpb24oY29hY2guZGltZW5zaW9uKS53O1xuICAgICAgICBjdXJyQ2FsY1RyaWdnZXJQb3MgKz0gY29hY2hXaWR0aDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogc3RhcnRQb3NYLFxuICAgICAgICAgIGVuZDogY3VyckNhbGNUcmlnZ2VyUG9zLFxuICAgICAgICAgIHdpZHRoOiBjb2FjaFdpZHRoLFxuICAgICAgICB9IGFzIENvYWNoU2Nyb2xsVHJpZ2dlclBvaW50O1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFNldCBtYXhpbXVtIGNhbGN1bGF0ZWQgY29hY2ggd2lkdGhcbiAgICAgIHRoaXMubWF4Q2FsY0NvYWNoc1dpZHRoID0gY3VyckNhbGNUcmlnZ2VyUG9zO1xuXG4gICAgICAvLyBBdCB0aGUgZW5kIG9mIGEgc2Nyb2xsIEV2ZW50cyB0byBhIGNvYWNoLCB0aGUgcmVhY2hlZCB3YWdvbiBpcyBtYXJrZWQgYXMgc2VsZWN0ZWRcbiAgICAgIHRoaXMuY29hY2hTY3JvbGxBcmVhLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbGVuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgZmluZFNjcm9sbENvYWNoSW5kZXggPSB0aGlzLmlzQXV0b1Njcm9sbGluZ1xuICAgICAgICAgID8gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4XG4gICAgICAgICAgOiB0aGlzLl9nZXRDb2FjaEluZGV4QnlTY3JvbGxUcmlnZ2VyUG9zaXRpb24oKTtcbiAgICAgICAgaWYgKHRoaXMuX2lzU2Nyb2xsYWJsZVRvU2VsZWN0ZWRDb2FjaCgpKSB7XG4gICAgICAgICAgdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4ID0gZmluZFNjcm9sbENvYWNoSW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4ID1cbiAgICAgICAgICAgIGZpbmRTY3JvbGxDb2FjaEluZGV4IDwgdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4XG4gICAgICAgICAgICAgID8gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4XG4gICAgICAgICAgICAgIDogZmluZFNjcm9sbENvYWNoSW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnByZXZlbnRDb2FjaFNjcm9sbEJ5UGxhY2VDbGljayA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTZWxlY3RlZENvYWNoKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmhhc05hdmlnYXRpb24pIHtcbiAgICAgICAgICB0aGlzLnByZXNlbGVjdFBsYWNlSW5Db2FjaCgpO1xuICAgICAgICAgIHRoaXMuaXNBdXRvU2Nyb2xsaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBEdXJpbmcgaW5pdGlhbGl6YXRpb24gd2UgY2hlY2sgdmVydGljYWwgYWxpZ25tZW50IG1vZGUuIEluIFZlcnRpY2FsIG1vZGUgd2UgaGF2ZSB0byBzZXQgdGhlIHZlcnRpY2FsIG9mZnNldCBtYW51YWwgZm9yIHRoZSBzZWF0IHJlc2VydmF0aW9uIGFyZWEsXG4gICAgICAvLyBiZWNhdXNlIHdlIHJvdGF0ZSB0aGUgZW50aXJlIGNvbXBvbmVudCBieSA5MCBkZWdyZWVzIGFuZCB0cmFuc2Zvcm0gdGhlIG9yaWdpbiBwb2ludCB0byB0b3AgbGVmdC5cbiAgICAgIGlmICh0aGlzLmFsaWduVmVydGljYWwpIHtcbiAgICAgICAgdGhpcy5fc2V0VmVydGljYWxBbGlnbm1lbnRPZmZzZXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSWYgbm8gbmF2aWdhdGlvbiBleGlzdHMgKHByb3BlcnR5IHNldHRpbmcgLT4gaGFzTmF2aWdhdGlvbikgYW5kIGEgdGFibGUgY29hY2ggZ2V0cyB0aGUgZm9jdXMsXG4gICAqIHRoZSBmaXJzdCBwbGFjZSBpbiB0aGUgY29hY2ggbXVzdCBiZSBhdXRvbWF0aWNhbGx5IHByZXNlbGVjdGVkIHRvIGNvbnRyb2wgdGhlIHBsYWNlIG5hdmlnYXRpb24gdmlhIGtleWJvYXJkXG4gICAqXG4gICAqIEBwYXJhbSBmb2N1c0NvYWNoSW5kZXhcbiAgICovXG4gIHByb3RlY3RlZCBvbkZvY3VzVGFibGVDb2FjaEFuZFByZXNlbGVjdFBsYWNlKGZvY3VzQ29hY2hJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlYXRSZXNlcnZhdGlvbldpdGhvdXROYXZpZ2F0aW9uSGFzRm9jdXMgJiYgIXRoaXMuaGFzTmF2aWdhdGlvbikge1xuICAgICAgdGhpcy5zZWF0UmVzZXJ2YXRpb25XaXRob3V0TmF2aWdhdGlvbkhhc0ZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCA9XG4gICAgICAgIGZvY3VzQ29hY2hJbmRleCA9PT0gMFxuICAgICAgICAgID8gdGhpcy5nZXROZXh0QXZhaWxhYmxlQ29hY2hJbmRleCgtMSlcbiAgICAgICAgICA6IHRoaXMuZ2V0UHJldkF2YWlsYWJsZUNvYWNoSW5kZXgoZm9jdXNDb2FjaEluZGV4KTtcbiAgICAgIHRoaXMucHJlc2VsZWN0UGxhY2VJbkNvYWNoKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2F0aW9uIG9mIEtleWJvYXJkIGV2ZW50IGhhbmRsaW5nIHRvIG5hdmlnYXRpb24gYmV0d2VlbiBlYWNoIHBsYWNlcyBpbnNpZGUgYSBzZWxlY3RlZCBjb2FjaCBieSB1c2luZyBbYXJyb3ddIGtleXMuXG4gICAqIFdpdGggdGhlIFtUQUJdIGtleSB0aGUgdXNlciBuYXZpZ2F0aW9uIGdvZXMgdG8gdGhlIG5leHQgY29hY2ggbmF2aWdhdGlvbiBlbGVtZW50IGFuZCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBsYWNlIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQuXG4gICAqL1xuICBwcm90ZWN0ZWQgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXNzZWRLZXkgPSBldmVudC5rZXk7XG5cbiAgICAvLyBJZiBhbnkgcGxhY2UgaXMgc2VsZWN0ZWQgYW5kIFRBQiBLZXkgY29tYmluYXRpb24gaXN0IHByZXNzZWQsXG4gICAgLy8gdGhlbiB3ZSBoYW5kbGUgdGhlIG5leHQgb3IgcHJldmlvdXMgY29hY2ggc2VsZWN0aW9uXG4gICAgaWYgKHRoaXMuY3VyclNlbGVjdGVkUGxhY2UpIHtcbiAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRlQ29hY2hOYXZpZ2F0aW9uQnlLZXlib2FyZCgnUFJFVl9UQUInKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAocHJlc3NlZEtleSA9PT0gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuVGFiKSB7XG4gICAgICAgIHRoaXMuX25hdmlnYXRlQ29hY2hOYXZpZ2F0aW9uQnlLZXlib2FyZCgnTkVYVF9UQUInKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIGEgY2hvYWNoIGlzIHNlbGVjdGVkIGFuZCB0aGUgYXJyb3cga2V5IGlzIHByZXNzZWRcbiAgICBpZiAodGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4ICE9PSAtMSAmJiBpc0Fycm93S2V5T3JQYWdlS2V5c1ByZXNzZWQoZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBzd2l0Y2ggKHByZXNzZWRLZXkpIHtcbiAgICAgICAgY2FzZSB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd0xlZnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgcHJlc3NlZExlZnRLZXlNYXBwaW5nOiBzdHJpbmcgPSB0aGlzLmFsaWduVmVydGljYWxcbiAgICAgICAgICAgICAgPyB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd0Rvd25cbiAgICAgICAgICAgICAgOiBwcmVzc2VkS2V5O1xuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVUb1BsYWNlQnlLZXlib2FyZChwcmVzc2VkTGVmdEtleU1hcHBpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd1JpZ2h0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXNzZWRSaWdodEtleU1hcHBpbmc6IHN0cmluZyA9IHRoaXMuYWxpZ25WZXJ0aWNhbFxuICAgICAgICAgICAgICA/IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93VXBcbiAgICAgICAgICAgICAgOiBwcmVzc2VkS2V5O1xuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVUb1BsYWNlQnlLZXlib2FyZChwcmVzc2VkUmlnaHRLZXlNYXBwaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dVcDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBwcmVzc2VkVXBLZXlNYXBwaW5nOiBzdHJpbmcgPSB0aGlzLmFsaWduVmVydGljYWxcbiAgICAgICAgICAgICAgPyB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd0xlZnRcbiAgICAgICAgICAgICAgOiBwcmVzc2VkS2V5O1xuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVUb1BsYWNlQnlLZXlib2FyZChwcmVzc2VkVXBLZXlNYXBwaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dEb3duOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXNzZWREb3duS2V5TWFwcGluZzogc3RyaW5nID0gdGhpcy5hbGlnblZlcnRpY2FsXG4gICAgICAgICAgICAgID8gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dSaWdodFxuICAgICAgICAgICAgICA6IHByZXNzZWRLZXk7XG4gICAgICAgICAgICB0aGlzLl9uYXZpZ2F0ZVRvUGxhY2VCeUtleWJvYXJkKHByZXNzZWREb3duS2V5TWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgcGxhY2UgaW5zaWRlIHRoZSBjb2FjaCBpZiBuYXZpZ2F0ZWQgdmlhIGtleWJvYXJkLFxuICAgKiBvdGhlcndpc2UgdGhlIGNvYWNoIGdyaWQgaXMgc2VsZWN0ZWQgKG5lY2Vzc2FyeSBmb3IgU2NyZWVuUmVhZGVyKVxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXNlbGVjdFBsYWNlSW5Db2FjaCgpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZXN0UGxhY2UgPSB0aGlzLl9nZXRDbG9zZXN0UGxhY2VCeUtleURpcmVjdGlvbigpO1xuICAgIC8vSWYgY2xvc2VzdFBsYWNlIGV4aXN0LCB3ZSBoYXZlIHRvIHVuZm9jdXMgcHJldmlvdXNlIGZvY3VzZWQgcGxhY2VcbiAgICBpZiAoY2xvc2VzdFBsYWNlKSB7XG4gICAgICB0aGlzLnVuZm9jdXNQbGFjZUVsZW1lbnQoKTtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHdoZW4ga2V5Ym9hcmQgbmF2aWdhdGlvbiBpcyB1c2VkIGFuZCBjb2FjaGVzIGFyZSBzY3JvbGxlZCBieSBhdXRvIHNjcm9sbGluZyxcbiAgICAvLyB0aGVuIHdlIGNhbiBzZXQgdGhlIGZvY3VzIG9uIHRoZSBmaXJzdCBwbGFjZSBpbiB0aGUgY29hY2guXG4gICAgaWYgKHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb24gJiYgdGhpcy5pc0F1dG9TY3JvbGxpbmcpIHtcbiAgICAgIGlmIChjbG9zZXN0UGxhY2UpIHtcbiAgICAgICAgdGhpcy5mb2N1c1BsYWNlRWxlbWVudChjbG9zZXN0UGxhY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBJbiBjYXNlcyB3aGVyZSB0aGUgcHJlc2VsZWN0aW9uIGZ1bmN0aW9uIGlzIHRyaWdnZXJlZCBieSBub3JtYWwgY2xpY2tpbmcgb3IgdmlhIHNjcmVlbnJlYWRlciB2aWEgdGFiLFxuICAgIC8vIHdlIG9ubHkgZm9jdXMgdGhlIHRhYmxlIHdpdGhvdXQgZGlyZWN0bHkgZm9jdXNpbmcgdGhlIHBsYWNlLlxuICAgIGVsc2Uge1xuICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGN1cnJTZWxlY3RlZFBsYWNlIGhlcmUgZm9yIGZ1cnRoZXIgY29ycmVjdCBmdW5jdGlvbmluZyBuYXZpZ2F0aW9uIHZpYSB0YWIuXG4gICAgICB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlID0gY2xvc2VzdFBsYWNlO1xuICAgICAgdGhpcy5fc2V0Rm9jdXNUb1NlbGVjdGVkQ29hY2hHcmlkKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNjcm9sbFRvU2VsZWN0ZWROYXZDb2FjaChzZWxlY3RlZE5hdkNvYWNoSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChzZWxlY3RlZE5hdkNvYWNoSW5kZXggIT09IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCkge1xuICAgICAgdGhpcy5pc0F1dG9TY3JvbGxpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5pc0NvYWNoR3JpZEZvY3VzYWJsZSA9IHRydWU7XG4gICAgICB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggPSBzZWxlY3RlZE5hdkNvYWNoSW5kZXg7XG4gICAgICB0aGlzLl9zZXRTY3JvbGxEaXJlY3Rpb25CeUNvYWNoSW5kZXgoKTtcblxuICAgICAgY29uc3Qgc2Nyb2xsVG9Db2FjaFBvc1ggPSB0aGlzLl9nZXRDb2FjaFNjcm9sbFBvc2l0aW9uWCgpO1xuICAgICAgY29uc3QgaXNTZWxlY3RlZENvYWNoSW5kZXhTY3JvbGxhYmxlID1cbiAgICAgICAgdGhpcy5zZWxlY3RlZENvYWNoSW5kZXggIT09IC0xIHx8IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCA+IDA7XG5cbiAgICAgIC8vIENoZWNrcyB3aGV0aGVyIHRoZSBjdXJyZW50IHNjcm9sbCBwb3NpdGlvbiBhbGxvd3Mgc2Nyb2xsaW5nIHRvIHRoZSBuZXh0IHdhZ29uIG9yIG5vdFxuICAgICAgaWYgKGlzU2VsZWN0ZWRDb2FjaEluZGV4U2Nyb2xsYWJsZSAmJiB0aGlzLl9pc1Njcm9sbGFibGVUb1NlbGVjdGVkQ29hY2goKSkge1xuICAgICAgICB0aGlzLmNvYWNoU2Nyb2xsQXJlYS5zY3JvbGxUbyh7XG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IHNjcm9sbFRvQ29hY2hQb3NYLFxuICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTZWxlY3RlZENvYWNoKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG5ldyBTY3JvbGxEaXJlY3Rpb24gYnkgdGhlIG5ldyBnaXZlbiB0YXJnZXQgY29hY2ggaW5kZXguXG4gICAqL1xuICBwcml2YXRlIF9zZXRTY3JvbGxEaXJlY3Rpb25CeUNvYWNoSW5kZXgoKTogdm9pZCB7XG4gICAgdGhpcy5jdXJyU2Nyb2xsRGlyZWN0aW9uID1cbiAgICAgIHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCA+IHRoaXMuc2VsZWN0ZWRDb2FjaEluZGV4XG4gICAgICAgID8gU2Nyb2xsRGlyZWN0aW9uLnJpZ2h0XG4gICAgICAgIDogU2Nyb2xsRGlyZWN0aW9uLmxlZnQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2Nyb2xsIHN0YXJ0IG9yIGVuZCBwb3NpdGlvbiBYIGZyb20gdGhlIHNlbGVjdGVkIGNvYWNoLlxuICAgKiBJbiBjYXNlIHRoZSB1c2VyIGlzIGN1cnJldG5seSBuYXZpZ2F0ZSB0aHJvdWdodCBwbGFjZXMgYnkga2V5Ym9hcmQgYW5kIGdvZXMgdG8gcHJldmlvdXMgY29hY2gsXG4gICAqIHRoZW4gd2UgcmV0dXJuIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhlIGNvYWNoIHRvIGdldCBjbG9zdGVzdCBuZXh0IHNjcm9sbCBwb3NpdGlvbiBvZiB0aGUgbmV4dCBmb2N1cyBwbGFjZS5cbiAgICogQHJldHVybnMgbnVtYmVyXG4gICAqL1xuICBwcml2YXRlIF9nZXRDb2FjaFNjcm9sbFBvc2l0aW9uWCgpOiBudW1iZXIge1xuICAgIGNvbnN0IGNvYWNoVHJpZ2dlclBvaW50ID0gdGhpcy50cmlnZ2VyQ29hY2hQb3NpdGlvbnNDb2xsZWN0aW9uW3RoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleF07XG4gICAgY29uc3QgaXNGb2N1c1BsYWNlRnJvbVByZXZpb3VzQ29hY2hQb3NpdGlvbiA9XG4gICAgICB0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uICYmXG4gICAgICB0aGlzLmN1cnJTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5sZWZ0ICYmXG4gICAgICBjb2FjaFRyaWdnZXJQb2ludC53aWR0aCA+IHRoaXMuc2Nyb2xsQ29hY2hzQXJlYVdpZHRoO1xuICAgIHJldHVybiBpc0ZvY3VzUGxhY2VGcm9tUHJldmlvdXNDb2FjaFBvc2l0aW9uXG4gICAgICA/IGNvYWNoVHJpZ2dlclBvaW50LmVuZCAtIHRoaXMuc2Nyb2xsQ29hY2hzQXJlYVdpZHRoXG4gICAgICA6IGNvYWNoVHJpZ2dlclBvaW50LnN0YXJ0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGZvY3VzIG9uIHRoZSBIVE1MIHRhYmxlIChncmlkKSBjYXB0aW9uIGVsZW1lbnQgc28gdGhhdCB0aGUgaGVhZGluZyBpcyByZWFkIG91dCB3aGVuIHVzaW5nIGEgU2NyZWVuUmVhZGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0Rm9jdXNUb1NlbGVjdGVkQ29hY2hHcmlkKCk6IHZvaWQge1xuICAgIC8vIFdoZW4gdGhlIHVzZXIgcGVyZm9ybXMgYW4gYWN0aW9uIHRoYXQgYWZmZWN0cyB0aGUgY29hY2ggbmF2aWdhdGlvbiwgdGhlbiB0aGUgbmF2aWdhdGVkIHRhYmxlIGlzIGZvY3VzYWJsZS5cbiAgICBpZiAodGhpcy5pc0NvYWNoR3JpZEZvY3VzYWJsZSkge1xuICAgICAgdGhpcy5pc0NvYWNoR3JpZEZvY3VzYWJsZSA9IGZhbHNlO1xuICAgICAgY29uc3QgY29hY2hUYWJsZUNhcHRpb25FbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAnI3NiYi1zci1jb2FjaC1jYXB0aW9uLScgKyB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXgsXG4gICAgICApIGFzIEhUTUxUYWJsZUNhcHRpb25FbGVtZW50O1xuICAgICAgaWYgKGNvYWNoVGFibGVDYXB0aW9uRWxlbWVudCkge1xuICAgICAgICBjb2FjaFRhYmxlQ2FwdGlvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjdXJyZW50IHNjcm9sbGVkIHBvc2l0aW9uIGNhbiBiZSB1c2VkIHRvIHNjcm9sbCB0byB0aGUgc2VsZWN0ZWQgd2Fnb25cbiAgICogQHJldHVybnMgYm9vbGVhblxuICAgKi9cbiAgcHJpdmF0ZSBfaXNTY3JvbGxhYmxlVG9TZWxlY3RlZENvYWNoKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJTY3JvbGxQb3NYID0gdGhpcy5jb2FjaFNjcm9sbEFyZWEuc2Nyb2xsTGVmdDtcbiAgICBjb25zdCBjb2FjaFNjcm9sbFdpbmRvd1dpZHRoID0gdGhpcy5jb2FjaFNjcm9sbEFyZWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgY29uc3QgbWF4U2Nyb2xsV2lkdGhBcmVhID0gdGhpcy5tYXhDYWxjQ29hY2hzV2lkdGggLSBjb2FjaFNjcm9sbFdpbmRvd1dpZHRoO1xuICAgIGNvbnN0IGN1cnJDb2FjaFRyaWdnZXIgPSB0aGlzLnRyaWdnZXJDb2FjaFBvc2l0aW9uc0NvbGxlY3Rpb25bdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4XTtcbiAgICBjb25zdCBpc1Njcm9sbFBvc1NhbWVUb0N1cnJDb2FjaFBvcyA9XG4gICAgICBjdXJyU2Nyb2xsUG9zWCA9PT0gdGhpcy50cmlnZ2VyQ29hY2hQb3NpdGlvbnNDb2xsZWN0aW9uW3RoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleF0uc3RhcnQ7XG5cbiAgICByZXR1cm4gKFxuICAgICAgKGN1cnJTY3JvbGxQb3NYIDwgbWF4U2Nyb2xsV2lkdGhBcmVhIHx8IGN1cnJTY3JvbGxQb3NYID4gY3VyckNvYWNoVHJpZ2dlci5zdGFydCkgJiZcbiAgICAgICFpc1Njcm9sbFBvc1NhbWVUb0N1cnJDb2FjaFBvc1xuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29hY2ggaW5kZXggd2hpY2ggaXMgY3VycmVudGx5IHZpc2libGUgaW4gdGhlIHNjcm9sbCBhcmVhXG4gICAqIEByZXR1cm5zIG51bWJlclxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Q29hY2hJbmRleEJ5U2Nyb2xsVHJpZ2dlclBvc2l0aW9uKCk6IG51bWJlciB7XG4gICAgY29uc3Qgc2Nyb2xsT2Zmc2V0WCA9IHRoaXMuY29hY2hTY3JvbGxBcmVhLnNjcm9sbExlZnQgKyB0aGlzLnNjcm9sbENvYWNoc0FyZWFXaWR0aCAvIDI7XG4gICAgcmV0dXJuIHRoaXMudHJpZ2dlckNvYWNoUG9zaXRpb25zQ29sbGVjdGlvbi5maW5kSW5kZXgoXG4gICAgICAoY29hY2hUcmlnZ2VyKSA9PiBzY3JvbGxPZmZzZXRYID49IGNvYWNoVHJpZ2dlci5zdGFydCAmJiBzY3JvbGxPZmZzZXRYIDw9IGNvYWNoVHJpZ2dlci5lbmQsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGZpcnN0IHBsYWNlIG9mIGN1cnJlbnQgc2VsZWN0ZWQgY29hY2ggYnkgdGFibGUgY2VsbCBjb29yZGluYXRlIDAtMCBpZC5cbiAgICogQHJldHVybnMgUGxhY2Ugb3IgbnVsbFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RQbGFjZUluU2VsZWNlZENvYWNoKCk6IFBsYWNlIHwgbnVsbCB7XG4gICAgbGV0IGZpcnN0UGxhY2U6IFBsYWNlIHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3QgY29hY2ggPSB0aGlzLnNlYXRSZXNlcnZhdGlvbj8uY29hY2hJdGVtc1t0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXhdO1xuICAgIGNvbnN0IGZpcnN0Q2VsbElkID0gJ2NlbGwtJyArIHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCArICctMC0wJztcbiAgICBjb25zdCBwbGFjZU51bWJlciA9XG4gICAgICB0aGlzLnNoYWRvd1Jvb3RcbiAgICAgICAgPy5xdWVyeVNlbGVjdG9yPFNiYlNlYXRSZXNlcnZhdGlvblNjb3BlZEVsZW1lbnQ+KFwiW2NlbGwtaWQ9J1wiICsgZmlyc3RDZWxsSWQgKyBcIiddXCIpXG4gICAgICAgID8ucXVlcnlTZWxlY3RvcjxTYmJTZWF0UmVzZXJ2YXRpb25QbGFjZUNvbnRyb2xFbGVtZW50Pignc2JiLXNlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbCcpXG4gICAgICAgID8uZ2V0QXR0cmlidXRlKCd0ZXh0JykgfHwgbnVsbDtcblxuICAgIGlmIChjb2FjaCAmJiBwbGFjZU51bWJlcikge1xuICAgICAgZmlyc3RQbGFjZSA9IGNvYWNoLnBsYWNlcz8uZmluZCgocGxhY2UpID0+IHBsYWNlLm51bWJlciA9PT0gcGxhY2VOdW1iZXIpIHx8IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmaXJzdFBsYWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvIGdldCB0aGUgY29ycmVjdCBjbG9zZXN0IHBsYWNlIG9mIGN1cnJlbnQgcHJlc3NlZCBrZXkgYW5kIHRoZSBjdXJyZW50IHNlbGVjdGVkIHBsYWNlLFxuICAgKiB3ZSBoYXZlIHRvIGludmVzdGlnYXRlIHRoZSBjb29yZGluYXRlcyBvZiBlYWNoIHBsYWNlIHRvIGZpbmQgdGhlIGNsb3Nlc3QgcGxhY2Ugb2YgdGhlIGN1cnJTZWxlY3RlZFBsYWNlRWxlbWVudElkLlxuICAgKiBAcGFyYW0gcHJlc3NlZEtleVxuICAgKiBAcmV0dXJucyBQbGFjZSBvciBudWxsXG4gICAqL1xuICBwcml2YXRlIF9nZXRDbG9zZXN0UGxhY2VCeUtleURpcmVjdGlvbihwcmVzc2VkS2V5Pzogc3RyaW5nKTogUGxhY2UgfCBudWxsIHtcbiAgICBjb25zdCBjb2FjaCA9IHRoaXMuc2VhdFJlc2VydmF0aW9uPy5jb2FjaEl0ZW1zW3RoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleF07XG4gICAgbGV0IGNsb3Nlc3RQbGFjZSA9IG51bGw7XG4gICAgaWYgKGNvYWNoLnBsYWNlcykge1xuICAgICAgLy9JZiBubyBwbGFjZSBzZXQsIHRoZW4gd2VuIHVzZSBpbml0aWFsIHRoZSBsZWZ0LXRvcCBwbGFjZSBvbiB0aGUgY29hY2hcbiAgICAgIGlmICghdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZUVsZW1lbnRJZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0Rmlyc3RQbGFjZUluU2VsZWNlZENvYWNoKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgcGxhY2Ugb2YgY29hY2gucGxhY2VzKSB7XG4gICAgICAgICAgICAvLyBJZiBrZXkgcHJlc3NlZCwgdGhlbiB3ZSB0cnkgdG8gZmluZCB0aGUgcGxhY2Ugb2YgdGhlIGN1cnJlbnQgY3VyclNjcm9sbERpcmVjdGlvblxuICAgICAgICAgICAgaWYgKCFwcmVzc2VkS2V5KSB7XG4gICAgICAgICAgICAgIC8vRmluZCBwbGFjZSBmcm9tIHRoZSBsZWZ0IHNpZGUgb2YgY29hY2ggYnkgeSBjb29yZGluYXRlLiBDdXJyZW50IGN1cnJTY3JvbGxEaXJlY3Rpb24gaXMgUklHSFQpXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5yaWdodCAmJlxuICAgICAgICAgICAgICAgIHBsYWNlLnBvc2l0aW9uLnkgPT09IHRoaXMuY3VyclNlbGVjdGVkUGxhY2U/LnBvc2l0aW9uLnkgJiZcbiAgICAgICAgICAgICAgICAoIWNsb3Nlc3RQbGFjZSB8fCBwbGFjZS5wb3NpdGlvbi54IDwgY2xvc2VzdFBsYWNlLnBvc2l0aW9uLngpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNsb3Nlc3RQbGFjZSA9IHBsYWNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vRmluZCBwbGFjZSBmcm9tIHRoZSByaWdodCBzaWRlIG9mIGNvYWNoIGJ5IHkgY29vcmRpbmF0ZS4gQ3VycmVudCBjdXJyU2Nyb2xsRGlyZWN0aW9uIGlzIExFRlRcbiAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24ubGVmdCAmJlxuICAgICAgICAgICAgICAgIHBsYWNlLnBvc2l0aW9uLnkgPT09IHRoaXMuY3VyclNlbGVjdGVkUGxhY2U/LnBvc2l0aW9uLnkgJiZcbiAgICAgICAgICAgICAgICAoIWNsb3Nlc3RQbGFjZSB8fCBwbGFjZS5wb3NpdGlvbi54ID4gY2xvc2VzdFBsYWNlLnBvc2l0aW9uLngpXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNsb3Nlc3RQbGFjZSA9IHBsYWNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBpZiAocGxhY2UubnVtYmVyICE9PSB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlPy5udW1iZXIpIHtcbiAgICAgICAgICAgICAgICAvL0tleSBbUmlnaHRdIG5hdmlnYXRpb24sIHdlIGNoZWNrIHRoZSBwbGFjZSBjb29yZGluYXRlcyBvZiB0aGUgeC1heGlzIHRvIGdldCB0aGUgc21hbGxlc3QgbGFyZ2VyIHggcGxhY2UgY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBsYWNlXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgcHJlc3NlZEtleSA9PT0gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dSaWdodCAmJlxuICAgICAgICAgICAgICAgICAgKHBsYWNlLnBvc2l0aW9uLnkgPT09IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueSB8fFxuICAgICAgICAgICAgICAgICAgICBwbGFjZS5wb3NpdGlvbi55ID09PSB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlLnBvc2l0aW9uLnkgLSAxKSAmJlxuICAgICAgICAgICAgICAgICAgcGxhY2UucG9zaXRpb24ueCA+IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueCAmJlxuICAgICAgICAgICAgICAgICAgKCFjbG9zZXN0UGxhY2UgfHwgcGxhY2UucG9zaXRpb24ueCA8IGNsb3Nlc3RQbGFjZS5wb3NpdGlvbi54KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY2xvc2VzdFBsYWNlID0gcGxhY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vS2V5IFtEb3duXSBuYXZpZ2F0aW9uLCB3ZSBjaGVjayB0aGUgcGxhY2UgY29vcmRpbmF0ZXMgb2YgdGhlIHktYXhpcyB0byBnZXQgdGhlIHNtYWxsZXN0IGxhcmdlciB5IHBsYWNlIGNvb3JkaW5hdGUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwbGFjZVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgcHJlc3NlZEtleSA9PT0gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dEb3duICYmXG4gICAgICAgICAgICAgICAgICAocGxhY2UucG9zaXRpb24ueCA9PT0gdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZS5wb3NpdGlvbi54IHx8XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlLnBvc2l0aW9uLnggPT09IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueCArIDEpICYmXG4gICAgICAgICAgICAgICAgICBwbGFjZS5wb3NpdGlvbi55ID4gdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZS5wb3NpdGlvbi55ICYmXG4gICAgICAgICAgICAgICAgICAoIWNsb3Nlc3RQbGFjZSB8fCBwbGFjZS5wb3NpdGlvbi55IDwgY2xvc2VzdFBsYWNlLnBvc2l0aW9uLnkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjbG9zZXN0UGxhY2UgPSBwbGFjZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy9LZXkgW0xlZnRdIG5hdmlnYXRpb24sIHdlIGNoZWNrIHRoZSBwbGFjZSBjb29yZGluYXRlcyBvZiB0aGUgeC1heGlzIHRvIGdldCB0aGUgZ3JlYXRlc3Qgc21hbGxlciB4IHBsYWNlIGNvb3JkaW5hdGUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwbGFjZVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICAgcHJlc3NlZEtleSA9PT0gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dMZWZ0ICYmXG4gICAgICAgICAgICAgICAgICAocGxhY2UucG9zaXRpb24ueSA9PT0gdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZS5wb3NpdGlvbi55IHx8XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlLnBvc2l0aW9uLnkgPT09IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueSArIDEpICYmXG4gICAgICAgICAgICAgICAgICBwbGFjZS5wb3NpdGlvbi54IDwgdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZS5wb3NpdGlvbi54ICYmXG4gICAgICAgICAgICAgICAgICAoIWNsb3Nlc3RQbGFjZSB8fCBwbGFjZS5wb3NpdGlvbi54ID4gY2xvc2VzdFBsYWNlLnBvc2l0aW9uLngpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjbG9zZXN0UGxhY2UgPSBwbGFjZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy9LZXkgW1VwXSBuYXZpZ2F0aW9uLCB3ZSBjaGVjayB0aGUgcGxhY2UgY29vcmRpbmF0ZXMgb2YgdGhlIHktYXhpcyB0byBnZXQgdGhlIGdyZWF0ZXN0IHNtYWxsZXIgeSBwbGFjZSBjb29yZGluYXRlIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGxhY2VcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgIHByZXNzZWRLZXkgPT09IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93VXAgJiZcbiAgICAgICAgICAgICAgICAgIChwbGFjZS5wb3NpdGlvbi54ID09PSB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlLnBvc2l0aW9uLnggfHxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2UucG9zaXRpb24ueCA9PT0gdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZS5wb3NpdGlvbi54IC0gMSkgJiZcbiAgICAgICAgICAgICAgICAgIHBsYWNlLnBvc2l0aW9uLnkgPCB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlPy5wb3NpdGlvbi55ICYmXG4gICAgICAgICAgICAgICAgICAoIWNsb3Nlc3RQbGFjZSB8fCBwbGFjZS5wb3NpdGlvbi55ID4gY2xvc2VzdFBsYWNlLnBvc2l0aW9uLnkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjbG9zZXN0UGxhY2UgPSBwbGFjZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNsb3Nlc3RQbGFjZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBmb2N1c1BsYWNlRWxlbWVudChwbGFjZTogUGxhY2UgfCBudWxsLCBjb2FjaEluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy51bmZvY3VzUGxhY2VFbGVtZW50KCk7XG4gICAgaWYgKHBsYWNlKSB7XG4gICAgICB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlID0gcGxhY2U7XG4gICAgICBpZiAoY29hY2hJbmRleCkge1xuICAgICAgICB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggPSBjb2FjaEluZGV4O1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXRDdXJyU2VsZWN0ZWRQbGFjZUVsZW1lbnRJZChwbGFjZSk7XG5cbiAgICAgIGNvbnN0IHNlbGVjdGVkUGxhY2VFbGVtZW50ID0gdGhpcy5fZ2V0UGxhY2VIdG1sRWxlbWVudCgpO1xuICAgICAgaWYgKHNlbGVjdGVkUGxhY2VFbGVtZW50KSB7XG4gICAgICAgIHNlbGVjdGVkUGxhY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgna2V5Zm9jdXMnLCAnZm9jdXMnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdW5mb2N1c1BsYWNlRWxlbWVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFBsYWNlRWxlbWVudCA9IHRoaXMuX2dldFBsYWNlSHRtbEVsZW1lbnQoKTtcbiAgICBpZiAoc2VsZWN0ZWRQbGFjZUVsZW1lbnQpIHtcbiAgICAgIHNlbGVjdGVkUGxhY2VFbGVtZW50LnNldEF0dHJpYnV0ZSgna2V5Zm9jdXMnLCAndW5mb2N1cycpO1xuICAgICAgdGhpcy5fc2V0Q3VyclNlbGVjdGVkUGxhY2VFbGVtZW50SWQobnVsbCk7XG4gICAgICB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihcbiAgICBlbGVtZW50RGltZW5zaW9uOiBFbGVtZW50RGltZW5zaW9uLFxuICAgIGNvYWNoRGltZW5zaW9uPzogRWxlbWVudERpbWVuc2lvbixcbiAgICBpc09yaWdpbkhlaWdodD86IGJvb2xlYW4sXG4gICAgaXNTdHJldGNoSGVpZ2h0PzogYm9vbGVhbixcbiAgKTogRWxlbWVudERpbWVuc2lvbiB7XG4gICAgaWYgKGNvYWNoRGltZW5zaW9uICYmICFpc09yaWdpbkhlaWdodCkge1xuICAgICAgZWxlbWVudERpbWVuc2lvbi5oICs9IHRoaXMuY29hY2hCb3JkZXJPZmZzZXQgKiAyO1xuICAgIH1cblxuICAgIGlmIChpc1N0cmV0Y2hIZWlnaHQpIHtcbiAgICAgIGVsZW1lbnREaW1lbnNpb24uaCArPSB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB3OiB0aGlzLmJhc2VHcmlkU2l6ZSAqIGVsZW1lbnREaW1lbnNpb24udyxcbiAgICAgIGg6IHRoaXMuYmFzZUdyaWRTaXplICogZWxlbWVudERpbWVuc2lvbi5oLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FsY3VsYXRlZFBvc2l0aW9uKFxuICAgIGVsZW1lbnRQb3NpdGlvbjogRWxlbWVudFBvc2l0aW9uLFxuICAgIGVsZW1lbnREaW1lbnNpb24/OiBFbGVtZW50RGltZW5zaW9uLFxuICAgIGNvYWNoRGltZW5zaW9uPzogRWxlbWVudERpbWVuc2lvbixcbiAgICBpc09yaWdpbkhlaWdodD86IGJvb2xlYW4sXG4gICk6IEVsZW1lbnRQb3NpdGlvbiB7XG4gICAgaWYgKGNvYWNoRGltZW5zaW9uICYmIGVsZW1lbnREaW1lbnNpb24pIHtcbiAgICAgIGNvbnN0IGVuZFBvc0hlaWdodCA9IGlzT3JpZ2luSGVpZ2h0XG4gICAgICAgID8gY29hY2hEaW1lbnNpb24uaFxuICAgICAgICA6IGNvYWNoRGltZW5zaW9uLmggKyB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0O1xuICAgICAgLy9JZiB0aGUgb3JpZ2luYWwgZWxlbWVudCBpcyBwb3NpdGlvbmVkIGF0IHRoZSB0b3Agb3IgYm90dG9tIG9mIHRoZSBjb2FjaCwgd2UgbmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgWSBjb29yZGluYXRlIHdpdGggdGhlIGFkZGl0aW9uYWwgYm9yZGVyIHBhZGRpbmdcbiAgICAgIGlmIChlbGVtZW50UG9zaXRpb24ueSA9PT0gMCkge1xuICAgICAgICBlbGVtZW50UG9zaXRpb24ueSAtPSB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50UG9zaXRpb24ueSArIGVsZW1lbnREaW1lbnNpb24uaCA9PT0gZW5kUG9zSGVpZ2h0KSB7XG4gICAgICAgIGVsZW1lbnRQb3NpdGlvbi55ICs9IHRoaXMuY29hY2hCb3JkZXJPZmZzZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IHRoaXMuYmFzZUdyaWRTaXplICogZWxlbWVudFBvc2l0aW9uLngsXG4gICAgICB5OiB0aGlzLmJhc2VHcmlkU2l6ZSAqIGVsZW1lbnRQb3NpdGlvbi55LFxuICAgICAgejogZWxlbWVudFBvc2l0aW9uLnosXG4gICAgfTtcbiAgfVxuXG4gIC8vIEhhbmRsaW5nIGZvciBUYWIgbmF2aWdhdGlvbiBpZiBhbiBwbGFjZSBpcyBzZWxlY3RlZCBpbnNpZGUgdGhlIGNvYWNoLlxuICAvLyBUaGlzIGNvbnRyb2xzIHRoZSBmb2N1c2VkIGNvYWNoIGZyb20gdGhlIGN1cnJlbnQgc2VsZWN0ZWQgY29hY2guXG4gIHByaXZhdGUgX25hdmlnYXRlQ29hY2hOYXZpZ2F0aW9uQnlLZXlib2FyZCh0YWJEaXJlY3Rpb246IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJGb2N1c0luZGV4ID1cbiAgICAgIHRoaXMuZm9jdXNlZENvYWNoSW5kZXggPT09IC0xXG4gICAgICAgID8gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4ID09PSAtMVxuICAgICAgICAgID8gMFxuICAgICAgICAgIDogdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4XG4gICAgICAgIDogdGhpcy5mb2N1c2VkQ29hY2hJbmRleDtcbiAgICAvLyBDaGVjayBuZXh0IG9yIHByZXYgdGFiIGlzIHByZXNzZWQsIHRoZW4gd2UgbmVlZCB0byBmaW5kIHRoZSBuZXh0IGF2YWlsYWJsZSBjb2FjaCBpbmRleCB0aGF0IHNob3VsZCByZWNlaXZlIHRoZSBmb2N1c1xuICAgIGNvbnN0IG5ld0ZvY3VzYWJsZUluZGV4OiBudW1iZXIgPVxuICAgICAgdGFiRGlyZWN0aW9uID09PSAnTkVYVF9UQUInXG4gICAgICAgID8gdGhpcy5nZXROZXh0QXZhaWxhYmxlQ29hY2hJbmRleChjdXJyRm9jdXNJbmRleClcbiAgICAgICAgOiB0aGlzLmdldFByZXZBdmFpbGFibGVDb2FjaEluZGV4KGN1cnJGb2N1c0luZGV4KTtcblxuICAgIC8vIElmIHRoZSBjdXJyRm9jdXNJbmRleCBlcXVhbHMgdGhlIG5ld0ZvY3VzYWJsZUluZGV4IHRoZW4gd2UgaGF2ZSByZWFjaGVkIHRoZSBmaXJzdCBvciBsYXN0IHRhYmFibGUgbmF2aWdhdGlvbiBjb2FjaCBFbGVtZW50IGFuZCB3ZSBoYXZlIHRvIHRoZSBzZXQgdGhlIGZvY3VzIG1hbnVhbCB0byB0aGUgZmlyc3RUYWJFbGVtZW50IG9yIGxhc3RUYWJFbGVtZW50LlxuICAgIGlmIChjdXJyRm9jdXNJbmRleCA9PT0gbmV3Rm9jdXNhYmxlSW5kZXgpIHtcbiAgICAgIHRoaXMudW5mb2N1c1BsYWNlRWxlbWVudCgpO1xuICAgICAgdGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPSAtMTtcbiAgICAgIHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCA9IC0xO1xuICAgICAgdGhpcy5zZWF0UmVzZXJ2YXRpb25XaXRob3V0TmF2aWdhdGlvbkhhc0ZvY3VzID0gZmFsc2U7XG5cbiAgICAgIGlmICh0YWJEaXJlY3Rpb24gPT09ICdORVhUX1RBQicpIHRoaXMubGFzdFRhYkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIGVsc2UgdGhpcy5maXJzdFRhYkVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc05hdmlnYXRpb24pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGxhY2VFbGVtZW50ID0gdGhpcy5fZ2V0UGxhY2VIdG1sRWxlbWVudCgpO1xuICAgICAgY29uc3QgcGxhY2VJbkNvYWNoSGFzRm9jdXMgPSBzZWxlY3RlZFBsYWNlRWxlbWVudFxuICAgICAgICA/IHNlbGVjdGVkUGxhY2VFbGVtZW50LmdldEF0dHJpYnV0ZSgna2V5Zm9jdXMnKSA9PT0gJ2ZvY3VzJ1xuICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAvLyBJZiB3ZSB0YWIgYmFjayAoUFJFVl9UQUIpIGFuZCB0aGUgZm9jdXMgaXMgY3VycmVudGx5IG9uIHBsYWNlLFxuICAgICAgLy8gd2UgcmVtb3ZlIHRoZSBzZWxlY3RlZCBzdGF0ZSBmcm9tIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgbmF2aWdhdGlvbiBjb2FjaCBhbmQgb25seSBzZXQgdGhlIGZvY3VzIHN0YXR1cyB0byBpdFxuICAgICAgaWYgKHRhYkRpcmVjdGlvbiA9PT0gJ1BSRVZfVEFCJyAmJiB0aGlzLnNlbGVjdGVkQ29hY2hJbmRleCA9PT0gY3VyckZvY3VzSW5kZXgpIHtcbiAgICAgICAgaWYgKHBsYWNlSW5Db2FjaEhhc0ZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c2VkQ29hY2hJbmRleCA9IGN1cnJGb2N1c0luZGV4O1xuICAgICAgICAgIHRoaXMudW5mb2N1c1BsYWNlRWxlbWVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZENvYWNoSW5kZXggPSBuZXdGb2N1c2FibGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gT25seSBzZXRzIHRoZSBmb2N1cyBvbiB0aGUgbmV3IG5hdmlnYXRpb24gY29hY2hcbiAgICAgIGVsc2UgaWYgKG5ld0ZvY3VzYWJsZUluZGV4ICE9PSB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29hY2hJbmRleCA9IG5ld0ZvY3VzYWJsZUluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkQ29hY2hJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ29hY2hJbmRleCA9IG5ld0ZvY3VzYWJsZUluZGV4O1xuICAgICAgICAvLyBJZiBhbnkgcGxhY2Ugd2FzIGZvY3VzZWQgaW4gY29hY2gsIHNvIHdlIHNldCBmb2N1c2VkIGFnYWluXG4gICAgICAgIGlmIChwbGFjZUluQ29hY2hIYXNGb2N1cykge1xuICAgICAgICAgIHRoaXMuZm9jdXNQbGFjZUVsZW1lbnQodGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbm8gcGxhY2Ugd2FzIHNlbGVjdGVkLCB0aGVuIHdlIHNlbGVjdCB0aGUgY29hY2ggZ3JpZFxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLmlzQ29hY2hHcmlkRm9jdXNhYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9zZXRGb2N1c1RvU2VsZWN0ZWRDb2FjaEdyaWQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiBubyBuYXZpZ2F0aW9uIGV4aXN0LCB3ZSBzY3JvbGwgZGlyZWN0bHkgdG8gdGhlIG5leHQgdGFiYWJsZSBjb2FjaFxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGVkTmF2Q29hY2gobmV3Rm9jdXNhYmxlSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hdmlnYXRlVG9QbGFjZUJ5S2V5Ym9hcmQocHJlc3NlZEtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2ZW50Q29hY2hTY3JvbGxCeVBsYWNlQ2xpY2sgPSBmYWxzZTtcbiAgICB0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLmZvY3VzZWRDb2FjaEluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5mb2N1c2VkQ29hY2hJbmRleCA9IC0xO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5wcmV2ZW50UGxhY2VDbGljaykge1xuICAgICAgY29uc3QgZmluZENsb3Nlc3RQbGFjZSA9IHRoaXMuX2dldENsb3Nlc3RQbGFjZUJ5S2V5RGlyZWN0aW9uKHByZXNzZWRLZXkpO1xuICAgICAgaWYgKGZpbmRDbG9zZXN0UGxhY2UpIHtcbiAgICAgICAgdGhpcy5mb2N1c1BsYWNlRWxlbWVudChmaW5kQ2xvc2VzdFBsYWNlKTtcbiAgICAgIH1cbiAgICAgIC8vIE5vIGNsb3Nlc3QgcGxhY2UgZm91bmQgYnkga2V5IG5hdmlnYXRpb25cbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJlc3NlZEtleSA9PT0gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dSaWdodCB8fFxuICAgICAgICAgIHByZXNzZWRLZXkgPT09IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93TGVmdCB8fFxuICAgICAgICAgICh0aGlzLmFsaWduVmVydGljYWwgJiZcbiAgICAgICAgICAgIChwcmVzc2VkS2V5ID09PSB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd1VwIHx8XG4gICAgICAgICAgICAgIHByZXNzZWRLZXkgPT09IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93RG93bikpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIENoZWNrIHRoZSBjdXJyZW50IHByZXNzZWQga2V5IHRvIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgY29hY2ggaW5kZXhcbiAgICAgICAgICBjb25zdCBuZXdTZWxlY3RlZENvYWNoSW5kZXggPVxuICAgICAgICAgICAgcHJlc3NlZEtleSA9PT0gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dSaWdodFxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0TmV4dEF2YWlsYWJsZUNvYWNoSW5kZXgoKVxuICAgICAgICAgICAgICA6IHRoaXMuZ2V0UHJldkF2YWlsYWJsZUNvYWNoSW5kZXgoKTtcblxuICAgICAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZE5hdkNvYWNoKG5ld1NlbGVjdGVkQ29hY2hJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TmV4dEF2YWlsYWJsZUNvYWNoSW5kZXgoY3VycmVudEluZGV4PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gY3VycmVudEluZGV4ID8/IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleDtcbiAgICByZXR1cm4gc3RhcnRJbmRleCA8IHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXMubGVuZ3RoIC0gMSA/IHN0YXJ0SW5kZXggKyAxIDogc3RhcnRJbmRleDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRQcmV2QXZhaWxhYmxlQ29hY2hJbmRleChjdXJyZW50SW5kZXg/OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBjdXJyZW50SW5kZXggPz8gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4O1xuICAgIHJldHVybiBzdGFydEluZGV4ID4gMCA/IHN0YXJ0SW5kZXggLSAxIDogc3RhcnRJbmRleDtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVTZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcyhwbGFjZVNlbGVjdGlvbjogUGxhY2VTZWxlY3Rpb24pOiB2b2lkIHtcbiAgICAvLyBBZGQgc2VsZWN0ZWQgcGxhY2UgdG8gc2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXNcbiAgICBpZiAocGxhY2VTZWxlY3Rpb24uc3RhdGUgPT09ICdTRUxFQ1RFRCcpIHtcbiAgICAgIGNvbnN0IHNlYXRSZXNlcnZhdGlvblNlbGVjdGlvbiA9IHRoaXMuX2dldFNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKHBsYWNlU2VsZWN0aW9uKTtcbiAgICAgIGlmIChzZWF0UmVzZXJ2YXRpb25TZWxlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcy5wdXNoKHNlYXRSZXNlcnZhdGlvblNlbGVjdGlvbik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFJlbW92ZSBzZWxlY3RlZCBwbGFjZSBmcm9tIHNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzID0gdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcy5maWx0ZXIoXG4gICAgICAgIChfc2VsZWN0ZWRQbGFjZSkgPT4gX3NlbGVjdGVkUGxhY2UuaWQgIT09IHBsYWNlU2VsZWN0aW9uLmlkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDaGVja3Mgd2hldGhlciBtYXhSZXNlcnZhdGlvbiBpcyBhY3RpdmF0ZWQgYW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWxlY3RlZCBwbGFjZXMgaXMgcmVhY2hlZFxuICAgIGlmICh0aGlzLm1heFJlc2VydmF0aW9ucyAmJiB0aGlzLnNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzLmxlbmd0aCA+IHRoaXMubWF4UmVzZXJ2YXRpb25zKSB7XG4gICAgICB0aGlzLl9yZXNldEFsbFBsYWNlU2VsZWN0aW9ucyhwbGFjZVNlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQEB0eXBlIHtDdXN0b21FdmVudDxTZWF0UmVzZXJ2YXRpb25TZWxlY3RlZFBsYWNlc0V2ZW50RGV0YWlscz59XG4gICAgICogRW1pdHMgd2hlbiBhIHBsYWNlIHdhcyBzZWxlY3RlZCBhbmQgcmV0dXJucyBhIFBsYWNlIGFycmF5IHdpdGggYWxsIHNlbGVjdGVkIHBsYWNlcy5cbiAgICAgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NlbGVjdGVkUGxhY2VzJywge1xuICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgZGV0YWlsOiB0aGlzLnNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVDdXJyZW50U2VsZWN0ZWRQbGFjZUluQ29hY2gocGxhY2VTZWxlY3Rpb246IFBsYWNlU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgY29hY2hJbmRleCA9IHBsYWNlU2VsZWN0aW9uLmNvYWNoSW5kZXg7XG4gICAgY29uc3QgcGxhY2UgPSB0aGlzLnNlYXRSZXNlcnZhdGlvbi5jb2FjaEl0ZW1zW2NvYWNoSW5kZXhdLnBsYWNlcz8uZmluZChcbiAgICAgIChwbGFjZSkgPT4gcGxhY2UubnVtYmVyID09IHBsYWNlU2VsZWN0aW9uLm51bWJlcixcbiAgICApO1xuXG4gICAgaWYgKCFwbGFjZSkgcmV0dXJuO1xuICAgIHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCA9IGNvYWNoSW5kZXg7XG4gICAgdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSA9IHBsYWNlO1xuICAgIGlmICh0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggIT09IHRoaXMuc2VsZWN0ZWRDb2FjaEluZGV4KSB7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTZWxlY3RlZENvYWNoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fc2V0Q3VyclNlbGVjdGVkUGxhY2VFbGVtZW50SWQocGxhY2UpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUN1cnJlbnRTZWxlY3RlZENvYWNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRDb2FjaEluZGV4ID0gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4O1xuICAgIHRoaXMuZm9jdXNlZENvYWNoSW5kZXggPSAtMTtcbiAgICBjb25zdCBjb2FjaFNlbGVjdGlvbiA9IHRoaXMuX2dldFNlYXRSZXNlcnZhdGlvbkNvYWNoU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWRDb2FjaEluZGV4KTtcbiAgICBpZiAoY29hY2hTZWxlY3Rpb24pIHtcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0N1c3RvbUV2ZW50PFNlYXRSZXNlcnZhdGlvbkNvYWNoU2VsZWN0aW9uPn1cbiAgICAgICAqIEVtaXRzIHdoZW4gYSBjb2FjaCB3YXMgc2VsZWN0ZWQgYW5kIHJldHVybnMgYSBDb2FjaFNlbGVjdGlvblxuICAgICAgICovXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudCgnc2VsZWN0ZWRDb2FjaCcsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDogY29hY2hTZWxlY3Rpb24sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6YXRpb24gb2YgU2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24gQXJyYXkgYmFzZWQgb24gdGhlIHRyYW5zZmVycmVkIHBsYWNlc1xuICAgKiB0aGF0IGhhdmUgdGhlIHN0YXRlIFNFTEVDVEVEIHdpdGhpbiB0aGUgc2VhdFJlc2VydmF0aW9uIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXMubWFwKChjb2FjaDogQ29hY2hJdGVtLCBjb2FjaEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvYWNoLnBsYWNlc1xuICAgICAgICA/LmZpbHRlcigocGxhY2UpID0+IHBsYWNlLnN0YXRlID09PSAnU0VMRUNURUQnKVxuICAgICAgICA/LmZvckVhY2goKHBsYWNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJlc2VsZWN0ZWRQbGFjZVNlbGVjdGlvbjogUGxhY2VTZWxlY3Rpb24gPSBtYXBQbGFjZUluZm9zVG9QbGFjZVNlbGVjdGlvbihcbiAgICAgICAgICAgIHBsYWNlLFxuICAgICAgICAgICAgY29hY2hJbmRleCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uOiBTZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbiB8IG51bGwgPVxuICAgICAgICAgICAgdGhpcy5fZ2V0U2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24ocHJlc2VsZWN0ZWRQbGFjZVNlbGVjdGlvbik7XG4gICAgICAgICAgaWYgKHNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcy5wdXNoKHNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsIHNlbGVjdGVkIHBsYWNlcyB3aWxsIGJlIHJlc2V0IG9yIHRoZSBjdXJyZW50U2VsZWN0ZWRQbGFjZSB3YXMgZ2l2ZW4sIHRoZW4gd2UgcmVzZXQgYWxsIGV4Y2VwdCBjdXJyZW50U2VsZWN0ZWRQbGFjZVxuICAgKiBAcGFyYW0gY3VyclNlbGVjdGVkUGxhY2VcbiAgICovXG4gIHByaXZhdGUgX3Jlc2V0QWxsUGxhY2VTZWxlY3Rpb25zKGN1cnJTZWxlY3RlZFBsYWNlPzogUGxhY2VTZWxlY3Rpb24pOiB2b2lkIHtcbiAgICAvL0ZpbmQgYWxsIHBsYWNlcyB0byBiZSBuZWVkZWQgdW5zZWxlY3RcbiAgICBmb3IgKGNvbnN0IHBsYWNlU2VsZWN0aW9uIG9mIHRoaXMuc2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXMpIHtcbiAgICAgIGlmICghY3VyclNlbGVjdGVkUGxhY2UgfHwgY3VyclNlbGVjdGVkUGxhY2UuaWQgIT09IHBsYWNlU2VsZWN0aW9uLmlkKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQocGxhY2VTZWxlY3Rpb24uaWQpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBwbGFjZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdGF0ZScsICdGUkVFJyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vUmVtb3ZlcyBhbGwgc2VsZWN0ZWQgcGxhY2VzIGV4Y2VwdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBsYWNlXG4gICAgaWYgKGN1cnJTZWxlY3RlZFBsYWNlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzID0gdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcy5maWx0ZXIoXG4gICAgICAgIChfc2VsZWN0ZWRQbGFjZSkgPT4gX3NlbGVjdGVkUGxhY2UuaWQgPT09IGN1cnJTZWxlY3RlZFBsYWNlLmlkLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKFxuICAgIGN1cnJTZWxlY3RlZFBsYWNlOiBQbGFjZVNlbGVjdGlvbixcbiAgKTogU2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24gfCBudWxsIHtcbiAgICBjb25zdCBjb2FjaCA9IHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXNbY3VyclNlbGVjdGVkUGxhY2UuY29hY2hJbmRleF07XG4gICAgY29uc3QgcGxhY2UgPSBjb2FjaC5wbGFjZXM/LmZpbmQoKHBsYWNlKSA9PiBwbGFjZS5udW1iZXIgPT09IGN1cnJTZWxlY3RlZFBsYWNlLm51bWJlcik7XG5cbiAgICByZXR1cm4gcGxhY2VcbiAgICAgID8gbWFwUGxhY2VBbmRDb2FjaFRvU2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24ocGxhY2UsIGNvYWNoLCBjdXJyU2VsZWN0ZWRQbGFjZS5jb2FjaEluZGV4KVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2VhdFJlc2VydmF0aW9uQ29hY2hTZWxlY3Rpb24oXG4gICAgY29hY2hJbmRleDogbnVtYmVyLFxuICApOiBTZWF0UmVzZXJ2YXRpb25Db2FjaFNlbGVjdGlvbiB8IG51bGwge1xuICAgIGlmICghdGhpcy5zZWF0UmVzZXJ2YXRpb24uY29hY2hJdGVtc1tjb2FjaEluZGV4XSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb2FjaCA9IHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXNbY29hY2hJbmRleF07XG4gICAgcmV0dXJuIG1hcENvYWNoSW5mb3NUb0NvYWNoU2VsZWN0aW9uKGNvYWNoSW5kZXgsIGNvYWNoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldEN1cnJTZWxlY3RlZFBsYWNlRWxlbWVudElkKHBsYWNlOiBQbGFjZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAocGxhY2UpIHtcbiAgICAgIHRoaXMuY3VyclNlbGVjdGVkUGxhY2VFbGVtZW50SWQgPVxuICAgICAgICAnc2VhdC1yZXNlcnZhdGlvbl9fcGxhY2UtYnV0dG9uLScgKyB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggKyAnLScgKyBwbGFjZS5udW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VyclNlbGVjdGVkUGxhY2VFbGVtZW50SWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIHBsYWNlIEhUTUwgZWxlbWVudCBieSBnaXZlbiBwbGFjZU51bWJlciBhbmQgY29hY2hJbmRleC5cbiAgICogSWYgYm90aCBkb2VzbnQgZXhpc3QsIHdlIHRyeSB0byByZXR1cm4gdGhlIHBsYWNlIEhUTUwgZWxlbWVudCBieSB0aGUgX2N1cnJlbnRTZWxlY3RlZFBsYWNlRWxlbWVudElkXG4gICAqIEBwYXJhbSBwbGFjZU51bWJlciBvcHRpb25hbCBhcyBzdHJpbmdcbiAgICogQHBhcmFtIGNvYWNoSW5kZXggb3B0aW9uYWwgYXMgc3RyaW5nXG4gICAqIEByZXR1cm5zIEhUTUxFbGVtZW50IG9yIG51bGxcbiAgICovXG4gIHByaXZhdGUgX2dldFBsYWNlSHRtbEVsZW1lbnQocGxhY2VOdW1iZXI/OiBzdHJpbmcsIGNvYWNoSW5kZXg/OiBudW1iZXIpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IGN1cnJDb2FjaEluZGV4ID0gY29hY2hJbmRleCA/IGNvYWNoSW5kZXggOiB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXg7XG4gICAgY29uc3QgY29hY2hQbGFjZU51bWJlcklkID0gcGxhY2VOdW1iZXJcbiAgICAgID8gJ3NlYXQtcmVzZXJ2YXRpb25fX3BsYWNlLWJ1dHRvbi0nICsgY3VyckNvYWNoSW5kZXggKyAnLScgKyBwbGFjZU51bWJlclxuICAgICAgOiB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlRWxlbWVudElkO1xuICAgIHJldHVybiBjb2FjaFBsYWNlTnVtYmVySWQgPyB0aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKGNvYWNoUGxhY2VOdW1iZXJJZCkgfHwgbnVsbCA6IG51bGw7XG4gIH1cblxuICAvL1NldCB0aGUgdmVydGljYWwgb2Zmc2V0XG4gIHByaXZhdGUgX3NldFZlcnRpY2FsQWxpZ25tZW50T2Zmc2V0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VhdFJlc2VydmF0aW9uV3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcuc2JiLXNyX193cmFwcGVyJyxcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoc2VhdFJlc2VydmF0aW9uV3JhcHBlckVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgc2VhdFJlc2VydmF0aW9uVmVydGljYWxPZmZzZXQgPVxuICAgICAgICAgIHNlYXRSZXNlcnZhdGlvbldyYXBwZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi12ZXJ0aWNhbC1vZmZzZXQnLFxuICAgICAgICAgIGAke3NlYXRSZXNlcnZhdGlvblZlcnRpY2FsT2Zmc2V0fXB4YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNjcm9sbERpcmVjdGlvbiIsInBsYWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBd0JBLElBQUs7QUFBQSxDQUFMLFNBQUtBLGtCQUFlO0FBQ2xCQSxtQkFBQSxPQUFBLElBQUE7QUFDQUEsbUJBQUEsTUFBQSxJQUFBO0FBQ0YsR0FISyxvQkFBQSxrQkFBZSxDQUFBLEVBQUE7SUFhUCw4QkFBMEIsTUFBQTs7b0JBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbkMsU0FBQSxtQkFBbUMsWUFBVTtBQUFBOztBQVF4RDtBQUtBO0FBS0E7QUFLQTtBQUtBO0FBS0E7QUFLQTtBQUVTO0FBQ0E7QUFqQ08seUJBQUEsbUNBQUEsa0JBQUEsTUFBQSwrQkFBbUMsSUFBSztBQUt4Qyx5QkFBQSxrQ0FBQSxrQkFBQSxNQUFBLGtDQUFBLEdBQUEsa0JBQUEsTUFBQSw2QkFBeUIsSUFBSTtBQUs3Qix5QkFBQSxrQ0FBQSxrQkFBQSxNQUFBLGdDQUFBLEdBQUEsa0JBQUEsTUFBQSw2QkFBeUIsS0FBSztBQUs5Qix5QkFBQSxpQ0FBQSxrQkFBQSxNQUFBLGdDQUFBLEdBQUEsa0JBQUEsTUFBQSw0QkFBdUIsRUFBRTtBQUt6Qix5QkFBQSwyQkFBQSxrQkFBQSxNQUFBLCtCQUFBLEdBQUEsa0JBQUEsTUFBQSxzQkFBaUIsSUFBSztBQUt0Qix5QkFBQSxvQ0FBQSxrQkFBQSxNQUFBLHlCQUFBLEdBQUEsa0JBQUEsTUFBQSwrQkFBMEIsSUFBSztBQUsvQix5QkFBQSxzQ0FBQSxrQkFBQSxNQUFBLGtDQUFBLEdB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
700
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi1iYXNlLWVsZW1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uL3NlYXQtcmVzZXJ2YXRpb24tYmFzZS1lbGVtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvYTExeS5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgTGl0RWxlbWVudCwgdHlwZSBQcm9wZXJ0eVZhbHVlcyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7XG4gIG1hcENvYWNoSW5mb3NUb0NvYWNoU2VsZWN0aW9uLFxuICBtYXBQbGFjZUFuZENvYWNoVG9TZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbixcbiAgbWFwUGxhY2VJbmZvc1RvUGxhY2VTZWxlY3Rpb24sXG59IGZyb20gJy4uL2NvbW1vbi9tYXBwZXIuanMnO1xuaW1wb3J0IHR5cGUge1xuICBDb2FjaEl0ZW0sXG4gIEVsZW1lbnREaW1lbnNpb24sXG4gIEVsZW1lbnRQb3NpdGlvbixcbiAgUGxhY2UsXG4gIFBsYWNlU2VsZWN0aW9uLFxuICBTZWF0UmVzZXJ2YXRpb24sXG4gIFNlYXRSZXNlcnZhdGlvbkNvYWNoU2VsZWN0aW9uLFxuICBTZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbixcbn0gZnJvbSAnLi4vY29tbW9uLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiU2VhdFJlc2VydmF0aW9uUGxhY2VDb250cm9sRWxlbWVudCB9IGZyb20gJy4uL3NlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC9zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wuY29tcG9uZW50LmpzJztcbmltcG9ydCB0eXBlIHsgU2JiU2VhdFJlc2VydmF0aW9uU2NvcGVkRWxlbWVudCB9IGZyb20gJy4uL3NlYXQtcmVzZXJ2YXRpb24tc2NvcGVkL3NlYXQtcmVzZXJ2YXRpb24tc2NvcGVkLmNvbXBvbmVudC5qcyc7XG5cbmVudW0gU2Nyb2xsRGlyZWN0aW9uIHtcbiAgcmlnaHQgPSAncmlnaHQnLFxuICBsZWZ0ID0gJ2xlZnQnLFxufVxuXG5pbnRlcmZhY2UgQ29hY2hTY3JvbGxUcmlnZ2VyUG9pbnQge1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbiAgd2lkdGg6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgU2VhdFJlc2VydmF0aW9uU2VsZWN0ZWRQbGFjZXNFdmVudERldGFpbHMgPSBTZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbltdO1xuXG5leHBvcnQgY2xhc3MgU2VhdFJlc2VydmF0aW9uQmFzZUVsZW1lbnQgZXh0ZW5kcyBMaXRFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgc2VsZWN0ZWRwbGFjZXM6ICdzZWxlY3RlZHBsYWNlcycsXG4gICAgc2VsZWN0ZWRjb2FjaDogJ3NlbGVjdGVkY29hY2gnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKiBUaGUgc2VhdCByZXNlcnZhdGlvbiBvYmplY3Qgd2hpY2ggY29udGFpbnMgYWxsIGNvYWNoZXMgYW5kIHBsYWNlcyAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdzZWF0LXJlc2VydmF0aW9uJywgdHlwZTogT2JqZWN0IH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBzZWF0UmVzZXJ2YXRpb246IFNlYXRSZXNlcnZhdGlvbiA9IG51bGwhO1xuXG4gIC8qKiBUaGUgc2VhdCByZXNlcnZhdGlvbiBuYXZpZ2F0aW9uIGNhbiBiZSB0b2dnbGVkIGJ5IHRoaXMgcHJvcGVydHkgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2hhcy1uYXZpZ2F0aW9uJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgaGFzTmF2aWdhdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqIFRoZSBzZWF0IHJlc2VydmF0aW9uIGFyZWEgaXMgYWxpZ25lZCB2ZXJ0aWNhbGx5ICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhbGlnbi12ZXJ0aWNhbCcsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGFsaWduVmVydGljYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhlIHNlYXQgcmVzZXJ2YXRpb24gYXJlYSdzIGJhc2UgZ3JpZCBzaXplICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdiYXNlLWdyaWQtc2l6ZScsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgYmFzZUdyaWRTaXplOiBudW1iZXIgPSAxNjtcblxuICAvKiogVGhlIHNlYXQgcmVzZXJ2YXRpb24gYXJlYSdzIHdpZHRoICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoZWlnaHQnLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIGhlaWdodDogbnVtYmVyID0gbnVsbCE7XG5cbiAgLyoqIE1heGltYWwgbnVtYmVyIG9mIHBvc3NpYmxlIGNsaWNrYWJsZSBzZWF0cyAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnbWF4LXJlc2VydmF0aW9ucycsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbWF4UmVzZXJ2YXRpb25zOiBudW1iZXIgPSBudWxsITtcblxuICAvKiogQW55IGNsaWNrIGZ1bmN0aW9uYWxpdHkgaXMgcHJldmVudGVkICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwcmV2ZW50LXBsYWNlLWNsaWNrJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgcHJldmVudFBsYWNlQ2xpY2s6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAc3RhdGUoKSBwcm90ZWN0ZWQgYWNjZXNzb3Igc2VsZWN0ZWRDb2FjaEluZGV4OiBudW1iZXIgPSAtMTtcbiAgQHN0YXRlKCkgcHJvdGVjdGVkIGFjY2Vzc29yIGZvY3VzZWRDb2FjaEluZGV4OiBudW1iZXIgPSAtMTtcblxuICBwcm90ZWN0ZWQgY29hY2hCb3JkZXJQYWRkaW5nID0gNjtcbiAgcHJvdGVjdGVkIGNvYWNoQm9yZGVyT2Zmc2V0ID0gdGhpcy5jb2FjaEJvcmRlclBhZGRpbmcgLyB0aGlzLmJhc2VHcmlkU2l6ZTtcbiAgcHJvdGVjdGVkIGN1cnJTY3JvbGxEaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbiA9IFNjcm9sbERpcmVjdGlvbi5yaWdodDtcbiAgcHJvdGVjdGVkIG1heENhbGNDb2FjaHNXaWR0aDogbnVtYmVyID0gMDtcbiAgcHJvdGVjdGVkIHNjcm9sbENvYWNoc0FyZWFXaWR0aDogbnVtYmVyID0gMDtcbiAgcHJvdGVjdGVkIHRyaWdnZXJDb2FjaFBvc2l0aW9uc0NvbGxlY3Rpb246IENvYWNoU2Nyb2xsVHJpZ2dlclBvaW50W10gPSBbXTtcbiAgcHJvdGVjdGVkIGZpcnN0VGFiRWxlbWVudDogSFRNTEVsZW1lbnQgPSBudWxsITtcbiAgcHJvdGVjdGVkIGxhc3RUYWJFbGVtZW50OiBIVE1MRWxlbWVudCA9IG51bGwhO1xuICBwcm90ZWN0ZWQgY29hY2hTY3JvbGxBcmVhOiBIVE1MRWxlbWVudCA9IG51bGwhO1xuICBwcm90ZWN0ZWQgY3VyclNlbGVjdGVkUGxhY2U6IFBsYWNlIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBjdXJyU2VsZWN0ZWRQbGFjZUVsZW1lbnRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBjdXJyU2VsZWN0ZWRDb2FjaEluZGV4OiBudW1iZXIgPSAtMTtcbiAgcHJvdGVjdGVkIHByZXZlbnRDb2FjaFNjcm9sbEJ5UGxhY2VDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXM6IFNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uW10gPSBbXTtcbiAgcHJvdGVjdGVkIHNlYXRSZXNlcnZhdGlvbldpdGhvdXROYXZpZ2F0aW9uSGFzRm9jdXMgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzQ29hY2hHcmlkRm9jdXNhYmxlID0gZmFsc2U7XG4gIHByb3RlY3RlZCBpc0F1dG9TY3JvbGxpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzS2V5Ym9hcmROYXZpZ2F0aW9uID0gZmFsc2U7XG4gIHByb3RlY3RlZCBrZXlib2FyZE5hdmlnYXRpb25FdmVudHMgPSB7XG4gICAgQXJyb3dMZWZ0OiAnQXJyb3dMZWZ0JyxcbiAgICBBcnJvd1JpZ2h0OiAnQXJyb3dSaWdodCcsXG4gICAgQXJyb3dVcDogJ0Fycm93VXAnLFxuICAgIEFycm93RG93bjogJ0Fycm93RG93bicsXG4gICAgVGFiOiAnVGFiJyxcbiAgICBFbnRlcjogJ0VudGVyJyxcbiAgfSBhcyBjb25zdDtcblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3NlYXRSZXNlcnZhdGlvbicpKSB7XG4gICAgICB0aGlzLl9pbml0U2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdiYXNlR3JpZFNpemUnKSkge1xuICAgICAgdGhpcy5jb2FjaEJvcmRlck9mZnNldCA9IHRoaXMuY29hY2hCb3JkZXJQYWRkaW5nIC8gdGhpcy5iYXNlR3JpZFNpemU7XG4gICAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmlkLXNpemUnLCBgJHt0aGlzLmJhc2VHcmlkU2l6ZX1weGApO1xuXG4gICAgICBpZiAodGhpcy5hbGlnblZlcnRpY2FsKSB7XG4gICAgICAgIHRoaXMuX3NldFZlcnRpY2FsQWxpZ25tZW50T2Zmc2V0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGhlaWdodCBpcyB1c2VkLCB0aGUgYmFzZUdyaWRTaXplIG11c3QgYmUgcmVjYWxjdWxhdGVkXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnaGVpZ2h0JykgJiYgISF0aGlzLmhlaWdodCkge1xuICAgICAgaWYgKHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuYmFzZUdyaWRTaXplID0gdGhpcy5oZWlnaHQgLyB0aGlzLnNlYXRSZXNlcnZhdGlvbi5jb2FjaEl0ZW1zWzBdLmRpbWVuc2lvbi5oO1xuICAgICAgICB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0ID0gdGhpcy5jb2FjaEJvcmRlclBhZGRpbmcgLyB0aGlzLmJhc2VHcmlkU2l6ZTtcbiAgICAgICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JpZC1zaXplJywgYCR7dGhpcy5iYXNlR3JpZFNpemV9cHhgKTtcblxuICAgICAgICBpZiAodGhpcy5hbGlnblZlcnRpY2FsKSB7XG4gICAgICAgICAgdGhpcy5fc2V0VmVydGljYWxBbGlnbm1lbnRPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2FsaWduVmVydGljYWwnKSAmJiB0aGlzLmFsaWduVmVydGljYWwpIHtcbiAgICAgIHRoaXMuX3NldFZlcnRpY2FsQWxpZ25tZW50T2Zmc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgLyogSW5pdCBzY3JvbGwgZXZlbnQgaGFuZGxpbmcgZm9yIGNvYWNoIG5hdmlnYXRpb24gKi9cbiAgcHJvdGVjdGVkIGluaXROYXZpZ2F0aW9uU2VsZWN0aW9uQnlTY3JvbGxFdmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmZpcnN0VGFiRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoJ2ZpcnN0LXRhYi1lbGVtZW50JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5sYXN0VGFiRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoJ2xhc3QtdGFiLWVsZW1lbnQnKSBhcyBIVE1MRWxlbWVudDtcbiAgICB0aGlzLmNvYWNoU2Nyb2xsQXJlYSA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoJ3NiYi1zcl9fcGFyZW50LWFyZWEnKSBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmICh0aGlzLmNvYWNoU2Nyb2xsQXJlYSkge1xuICAgICAgbGV0IGN1cnJDYWxjVHJpZ2dlclBvcyA9IDA7XG4gICAgICB0aGlzLnNjcm9sbENvYWNoc0FyZWFXaWR0aCA9IHRoaXMuY29hY2hTY3JvbGxBcmVhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuXG4gICAgICAvLyBQcmVjYWxjdWxhdGUgdHJpZ2dlciBzY3JvbGwgcG9zaXRpb24gYXJyYXkgZGVwZW5kcyBmcm9tIGNvYWNoIHdpZHRoXG4gICAgICB0aGlzLnRyaWdnZXJDb2FjaFBvc2l0aW9uc0NvbGxlY3Rpb24gPSB0aGlzLnNlYXRSZXNlcnZhdGlvbi5jb2FjaEl0ZW1zLm1hcCgoY29hY2gpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRQb3NYID0gY3VyckNhbGNUcmlnZ2VyUG9zO1xuICAgICAgICBjb25zdCBjb2FjaFdpZHRoID0gdGhpcy5nZXRDYWxjdWxhdGVkRGltZW5zaW9uKGNvYWNoLmRpbWVuc2lvbikudztcbiAgICAgICAgY3VyckNhbGNUcmlnZ2VyUG9zICs9IGNvYWNoV2lkdGg7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IHN0YXJ0UG9zWCxcbiAgICAgICAgICBlbmQ6IGN1cnJDYWxjVHJpZ2dlclBvcyxcbiAgICAgICAgICB3aWR0aDogY29hY2hXaWR0aCxcbiAgICAgICAgfSBhcyBDb2FjaFNjcm9sbFRyaWdnZXJQb2ludDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTZXQgbWF4aW11bSBjYWxjdWxhdGVkIGNvYWNoIHdpZHRoXG4gICAgICB0aGlzLm1heENhbGNDb2FjaHNXaWR0aCA9IGN1cnJDYWxjVHJpZ2dlclBvcztcblxuICAgICAgLy8gQXQgdGhlIGVuZCBvZiBhIHNjcm9sbCBFdmVudHMgdG8gYSBjb2FjaCwgdGhlIHJlYWNoZWQgd2Fnb24gaXMgbWFya2VkIGFzIHNlbGVjdGVkXG4gICAgICB0aGlzLmNvYWNoU2Nyb2xsQXJlYS5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGxlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbmRTY3JvbGxDb2FjaEluZGV4ID0gdGhpcy5pc0F1dG9TY3JvbGxpbmdcbiAgICAgICAgICA/IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleFxuICAgICAgICAgIDogdGhpcy5fZ2V0Q29hY2hJbmRleEJ5U2Nyb2xsVHJpZ2dlclBvc2l0aW9uKCk7XG4gICAgICAgIGlmICh0aGlzLl9pc1Njcm9sbGFibGVUb1NlbGVjdGVkQ29hY2goKSkge1xuICAgICAgICAgIHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCA9IGZpbmRTY3JvbGxDb2FjaEluZGV4O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCA9XG4gICAgICAgICAgICBmaW5kU2Nyb2xsQ29hY2hJbmRleCA8IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleFxuICAgICAgICAgICAgICA/IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleFxuICAgICAgICAgICAgICA6IGZpbmRTY3JvbGxDb2FjaEluZGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmV2ZW50Q29hY2hTY3JvbGxCeVBsYWNlQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50U2VsZWN0ZWRDb2FjaCgpO1xuXG4gICAgICAgIGlmICghdGhpcy5oYXNOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgdGhpcy5wcmVzZWxlY3RQbGFjZUluQ29hY2goKTtcbiAgICAgICAgICB0aGlzLmlzQXV0b1Njcm9sbGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gRHVyaW5nIGluaXRpYWxpemF0aW9uLCB3ZSBjaGVjayB2ZXJ0aWNhbCBhbGlnbm1lbnQgbW9kZS4gSW4gVmVydGljYWwgbW9kZSB3ZSBoYXZlIHRvIHNldCB0aGUgdmVydGljYWwgb2Zmc2V0IG1hbnVhbCBmb3IgdGhlIHNlYXQgcmVzZXJ2YXRpb24gYXJlYSxcbiAgICAgIC8vIGJlY2F1c2Ugd2Ugcm90YXRlIHRoZSBlbnRpcmUgY29tcG9uZW50IGJ5IDkwIGRlZ3JlZXMgYW5kIHRyYW5zZm9ybSB0aGUgb3JpZ2luIHBvaW50IHRvIHRvcCBsZWZ0LlxuICAgICAgaWYgKHRoaXMuYWxpZ25WZXJ0aWNhbCkge1xuICAgICAgICB0aGlzLl9zZXRWZXJ0aWNhbEFsaWdubWVudE9mZnNldCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBubyBuYXZpZ2F0aW9uIGV4aXN0cyAocHJvcGVydHkgc2V0dGluZyAtPiBoYXNOYXZpZ2F0aW9uKSBhbmQgYSB0YWJsZSBjb2FjaCBnZXRzIHRoZSBmb2N1cyxcbiAgICogdGhlIGZpcnN0IHBsYWNlIGluIHRoZSBjb2FjaCBtdXN0IGJlIGF1dG9tYXRpY2FsbHkgcHJlc2VsZWN0ZWQgdG8gY29udHJvbCB0aGUgcGxhY2UgbmF2aWdhdGlvbiB2aWEga2V5Ym9hcmRcbiAgICpcbiAgICogQHBhcmFtIGZvY3VzQ29hY2hJbmRleFxuICAgKi9cbiAgcHJvdGVjdGVkIG9uRm9jdXNUYWJsZUNvYWNoQW5kUHJlc2VsZWN0UGxhY2UoZm9jdXNDb2FjaEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VhdFJlc2VydmF0aW9uV2l0aG91dE5hdmlnYXRpb25IYXNGb2N1cyAmJiAhdGhpcy5oYXNOYXZpZ2F0aW9uKSB7XG4gICAgICB0aGlzLnNlYXRSZXNlcnZhdGlvbldpdGhvdXROYXZpZ2F0aW9uSGFzRm9jdXMgPSB0cnVlO1xuICAgICAgdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4ID1cbiAgICAgICAgZm9jdXNDb2FjaEluZGV4ID09PSAwXG4gICAgICAgICAgPyB0aGlzLmdldE5leHRBdmFpbGFibGVDb2FjaEluZGV4KC0xKVxuICAgICAgICAgIDogdGhpcy5nZXRQcmV2QXZhaWxhYmxlQ29hY2hJbmRleChmb2N1c0NvYWNoSW5kZXgpO1xuICAgICAgdGhpcy5wcmVzZWxlY3RQbGFjZUluQ29hY2goKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGlzYXRpb24gb2YgS2V5Ym9hcmQgZXZlbnQgaGFuZGxpbmcgdG8gbmF2aWdhdGlvbiBiZXR3ZWVuIGVhY2ggcGxhY2VzIGluc2lkZSBhIHNlbGVjdGVkIGNvYWNoIGJ5IHVzaW5nIFthcnJvd10ga2V5cy5cbiAgICogV2l0aCB0aGUgW1RBQl0ga2V5IHRoZSB1c2VyIG5hdmlnYXRpb24gZ29lcyB0byB0aGUgbmV4dCBjb2FjaCBuYXZpZ2F0aW9uIGVsZW1lbnQgYW5kIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGxhY2UgaXMgYXV0b21hdGljYWxseSByZXNldC5cbiAgICovXG4gIHByb3RlY3RlZCBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgcHJlc3NlZEtleSA9IGV2ZW50LmtleTtcblxuICAgIC8vIElmIGFueSBwbGFjZSBpcyBzZWxlY3RlZCBhbmQgVEFCIEtleSBjb21iaW5hdGlvbiBpc3QgcHJlc3NlZCxcbiAgICAvLyB0aGVuIHdlIGhhbmRsZSB0aGUgbmV4dCBvciBwcmV2aW91cyBjb2FjaCBzZWxlY3Rpb25cbiAgICBpZiAodGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSkge1xuICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGV2ZW50LmtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGVDb2FjaE5hdmlnYXRpb25CeUtleWJvYXJkKCdQUkVWX1RBQicpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChwcmVzc2VkS2V5ID09PSB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5UYWIpIHtcbiAgICAgICAgdGhpcy5fbmF2aWdhdGVDb2FjaE5hdmlnYXRpb25CeUtleWJvYXJkKCdORVhUX1RBQicpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgaWYgYSBjb2FjaCBpcyBzZWxlY3RlZCBhbmQgdGhlIGFycm93IGtleSBpcyBwcmVzc2VkXG4gICAgaWYgKHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCAhPT0gLTEgJiYgaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkKGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgc3dpdGNoIChwcmVzc2VkS2V5KSB7XG4gICAgICAgIGNhc2UgdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dMZWZ0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXNzZWRMZWZ0S2V5TWFwcGluZzogc3RyaW5nID0gdGhpcy5hbGlnblZlcnRpY2FsXG4gICAgICAgICAgICAgID8gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dEb3duXG4gICAgICAgICAgICAgIDogcHJlc3NlZEtleTtcbiAgICAgICAgICAgIHRoaXMuX25hdmlnYXRlVG9QbGFjZUJ5S2V5Ym9hcmQocHJlc3NlZExlZnRLZXlNYXBwaW5nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dSaWdodDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBwcmVzc2VkUmlnaHRLZXlNYXBwaW5nOiBzdHJpbmcgPSB0aGlzLmFsaWduVmVydGljYWxcbiAgICAgICAgICAgICAgPyB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd1VwXG4gICAgICAgICAgICAgIDogcHJlc3NlZEtleTtcbiAgICAgICAgICAgIHRoaXMuX25hdmlnYXRlVG9QbGFjZUJ5S2V5Ym9hcmQocHJlc3NlZFJpZ2h0S2V5TWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93VXA6XG4gICAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgcHJlc3NlZFVwS2V5TWFwcGluZzogc3RyaW5nID0gdGhpcy5hbGlnblZlcnRpY2FsXG4gICAgICAgICAgICAgID8gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dMZWZ0XG4gICAgICAgICAgICAgIDogcHJlc3NlZEtleTtcbiAgICAgICAgICAgIHRoaXMuX25hdmlnYXRlVG9QbGFjZUJ5S2V5Ym9hcmQocHJlc3NlZFVwS2V5TWFwcGluZyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93RG93bjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBwcmVzc2VkRG93bktleU1hcHBpbmc6IHN0cmluZyA9IHRoaXMuYWxpZ25WZXJ0aWNhbFxuICAgICAgICAgICAgICA/IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93UmlnaHRcbiAgICAgICAgICAgICAgOiBwcmVzc2VkS2V5O1xuICAgICAgICAgICAgdGhpcy5fbmF2aWdhdGVUb1BsYWNlQnlLZXlib2FyZChwcmVzc2VkRG93bktleU1hcHBpbmcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyBhIHBsYWNlIGluc2lkZSB0aGUgY29hY2ggaWYgbmF2aWdhdGVkIHZpYSBrZXlib2FyZCxcbiAgICogb3RoZXJ3aXNlIHRoZSBjb2FjaCBncmlkIGlzIHNlbGVjdGVkIChuZWNlc3NhcnkgZm9yIFNjcmVlblJlYWRlcilcbiAgICovXG4gIHByb3RlY3RlZCBwcmVzZWxlY3RQbGFjZUluQ29hY2goKTogdm9pZCB7XG4gICAgY29uc3QgY2xvc2VzdFBsYWNlID0gdGhpcy5fZ2V0Q2xvc2VzdFBsYWNlQnlLZXlEaXJlY3Rpb24oKTtcbiAgICAvL0lmIGNsb3Nlc3RQbGFjZSBleGlzdCwgd2UgaGF2ZSB0byB1bmZvY3VzIHByZXZpb3VzZSBmb2N1c2VkIHBsYWNlXG4gICAgaWYgKGNsb3Nlc3RQbGFjZSkge1xuICAgICAgdGhpcy51bmZvY3VzUGxhY2VFbGVtZW50KCk7XG4gICAgfVxuXG4gICAgLy8gT25seSB3aGVuIGtleWJvYXJkIG5hdmlnYXRpb24gaXMgdXNlZCBhbmQgY29hY2hlcyBhcmUgc2Nyb2xsZWQgYnkgYXV0byBzY3JvbGxpbmcsXG4gICAgLy8gdGhlbiB3ZSBjYW4gc2V0IHRoZSBmb2N1cyBvbiB0aGUgZmlyc3QgcGxhY2UgaW4gdGhlIGNvYWNoLlxuICAgIGlmICh0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uICYmIHRoaXMuaXNBdXRvU2Nyb2xsaW5nKSB7XG4gICAgICBpZiAoY2xvc2VzdFBsYWNlKSB7XG4gICAgICAgIHRoaXMuZm9jdXNQbGFjZUVsZW1lbnQoY2xvc2VzdFBsYWNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSW4gY2FzZXMgd2hlcmUgdGhlIHByZXNlbGVjdGlvbiBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgYnkgbm9ybWFsIGNsaWNraW5nIG9yIHZpYSBzY3JlZW5yZWFkZXIgdmlhIHRhYixcbiAgICAvLyB3ZSBvbmx5IGZvY3VzIHRoZSB0YWJsZSB3aXRob3V0IGRpcmVjdGx5IGZvY3VzaW5nIHRoZSBwbGFjZS5cbiAgICBlbHNlIHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBjdXJyU2VsZWN0ZWRQbGFjZSBoZXJlIGZvciBmdXJ0aGVyIGNvcnJlY3QgZnVuY3Rpb25pbmcgbmF2aWdhdGlvbiB2aWEgdGFiLlxuICAgICAgdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSA9IGNsb3Nlc3RQbGFjZTtcbiAgICAgIHRoaXMuX3NldEZvY3VzVG9TZWxlY3RlZENvYWNoR3JpZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzY3JvbGxUb1NlbGVjdGVkTmF2Q29hY2goc2VsZWN0ZWROYXZDb2FjaEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoc2VsZWN0ZWROYXZDb2FjaEluZGV4ICE9PSB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXgpIHtcbiAgICAgIHRoaXMuaXNBdXRvU2Nyb2xsaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNDb2FjaEdyaWRGb2N1c2FibGUgPSB0cnVlO1xuICAgICAgdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4ID0gc2VsZWN0ZWROYXZDb2FjaEluZGV4O1xuICAgICAgdGhpcy5fc2V0U2Nyb2xsRGlyZWN0aW9uQnlDb2FjaEluZGV4KCk7XG5cbiAgICAgIGNvbnN0IHNjcm9sbFRvQ29hY2hQb3NYID0gdGhpcy5fZ2V0Q29hY2hTY3JvbGxQb3NpdGlvblgoKTtcbiAgICAgIGNvbnN0IGlzU2VsZWN0ZWRDb2FjaEluZGV4U2Nyb2xsYWJsZSA9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2FjaEluZGV4ICE9PSAtMSB8fCB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggPiAwO1xuXG4gICAgICAvLyBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gYWxsb3dzIHNjcm9sbGluZyB0byB0aGUgbmV4dCB3YWdvbiBvciBub3RcbiAgICAgIGlmIChpc1NlbGVjdGVkQ29hY2hJbmRleFNjcm9sbGFibGUgJiYgdGhpcy5faXNTY3JvbGxhYmxlVG9TZWxlY3RlZENvYWNoKCkpIHtcbiAgICAgICAgdGhpcy5jb2FjaFNjcm9sbEFyZWEuc2Nyb2xsVG8oe1xuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICBsZWZ0OiBzY3JvbGxUb0NvYWNoUG9zWCxcbiAgICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50U2VsZWN0ZWRDb2FjaCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBuZXcgU2Nyb2xsRGlyZWN0aW9uIGJ5IHRoZSBuZXcgZ2l2ZW4gdGFyZ2V0IGNvYWNoIGluZGV4LlxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0U2Nyb2xsRGlyZWN0aW9uQnlDb2FjaEluZGV4KCk6IHZvaWQge1xuICAgIHRoaXMuY3VyclNjcm9sbERpcmVjdGlvbiA9XG4gICAgICB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggPiB0aGlzLnNlbGVjdGVkQ29hY2hJbmRleFxuICAgICAgICA/IFNjcm9sbERpcmVjdGlvbi5yaWdodFxuICAgICAgICA6IFNjcm9sbERpcmVjdGlvbi5sZWZ0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNjcm9sbCBzdGFydCBvciBlbmQgcG9zaXRpb24gWCBmcm9tIHRoZSBzZWxlY3RlZCBjb2FjaC5cbiAgICogSW4gY2FzZSB0aGUgdXNlciBpcyBjdXJyZXRubHkgbmF2aWdhdGUgdGhyb3VnaHQgcGxhY2VzIGJ5IGtleWJvYXJkIGFuZCBnb2VzIHRvIHByZXZpb3VzIGNvYWNoLFxuICAgKiB0aGVuIHdlIHJldHVybiB0aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBjb2FjaCB0byBnZXQgY2xvc3Rlc3QgbmV4dCBzY3JvbGwgcG9zaXRpb24gb2YgdGhlIG5leHQgZm9jdXMgcGxhY2UuXG4gICAqIEByZXR1cm5zIG51bWJlclxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Q29hY2hTY3JvbGxQb3NpdGlvblgoKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb2FjaFRyaWdnZXJQb2ludCA9IHRoaXMudHJpZ2dlckNvYWNoUG9zaXRpb25zQ29sbGVjdGlvblt0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXhdO1xuICAgIGNvbnN0IGlzRm9jdXNQbGFjZUZyb21QcmV2aW91c0NvYWNoUG9zaXRpb24gPVxuICAgICAgdGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbiAmJlxuICAgICAgdGhpcy5jdXJyU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24ubGVmdCAmJlxuICAgICAgY29hY2hUcmlnZ2VyUG9pbnQud2lkdGggPiB0aGlzLnNjcm9sbENvYWNoc0FyZWFXaWR0aDtcbiAgICByZXR1cm4gaXNGb2N1c1BsYWNlRnJvbVByZXZpb3VzQ29hY2hQb3NpdGlvblxuICAgICAgPyBjb2FjaFRyaWdnZXJQb2ludC5lbmQgLSB0aGlzLnNjcm9sbENvYWNoc0FyZWFXaWR0aFxuICAgICAgOiBjb2FjaFRyaWdnZXJQb2ludC5zdGFydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBmb2N1cyBvbiB0aGUgSFRNTCB0YWJsZSAoZ3JpZCkgY2FwdGlvbiBlbGVtZW50IHNvIHRoYXQgdGhlIGhlYWRpbmcgaXMgcmVhZCBvdXQgd2hlbiB1c2luZyBhIFNjcmVlblJlYWRlci5cbiAgICovXG4gIHByaXZhdGUgX3NldEZvY3VzVG9TZWxlY3RlZENvYWNoR3JpZCgpOiB2b2lkIHtcbiAgICAvLyBXaGVuIHRoZSB1c2VyIHBlcmZvcm1zIGFuIGFjdGlvbiB0aGF0IGFmZmVjdHMgdGhlIGNvYWNoIG5hdmlnYXRpb24sIHRoZW4gdGhlIG5hdmlnYXRlZCB0YWJsZSBpcyBmb2N1c2FibGUuXG4gICAgaWYgKHRoaXMuaXNDb2FjaEdyaWRGb2N1c2FibGUpIHtcbiAgICAgIHRoaXMuaXNDb2FjaEdyaWRGb2N1c2FibGUgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGNvYWNoVGFibGVDYXB0aW9uRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJyNzYmItc3ItY29hY2gtY2FwdGlvbi0nICsgdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4LFxuICAgICAgKSBhcyBIVE1MVGFibGVDYXB0aW9uRWxlbWVudDtcbiAgICAgIGlmIChjb2FjaFRhYmxlQ2FwdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgY29hY2hUYWJsZUNhcHRpb25FbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgY3VycmVudCBzY3JvbGxlZCBwb3NpdGlvbiBjYW4gYmUgdXNlZCB0byBzY3JvbGwgdG8gdGhlIHNlbGVjdGVkIHdhZ29uXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cbiAgICovXG4gIHByaXZhdGUgX2lzU2Nyb2xsYWJsZVRvU2VsZWN0ZWRDb2FjaCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyU2Nyb2xsUG9zWCA9IHRoaXMuY29hY2hTY3JvbGxBcmVhLnNjcm9sbExlZnQ7XG4gICAgY29uc3QgY29hY2hTY3JvbGxXaW5kb3dXaWR0aCA9IHRoaXMuY29hY2hTY3JvbGxBcmVhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIGNvbnN0IG1heFNjcm9sbFdpZHRoQXJlYSA9IHRoaXMubWF4Q2FsY0NvYWNoc1dpZHRoIC0gY29hY2hTY3JvbGxXaW5kb3dXaWR0aDtcbiAgICBjb25zdCBjdXJyQ29hY2hUcmlnZ2VyID0gdGhpcy50cmlnZ2VyQ29hY2hQb3NpdGlvbnNDb2xsZWN0aW9uW3RoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleF07XG4gICAgY29uc3QgaXNTY3JvbGxQb3NTYW1lVG9DdXJyQ29hY2hQb3MgPVxuICAgICAgY3VyclNjcm9sbFBvc1ggPT09IHRoaXMudHJpZ2dlckNvYWNoUG9zaXRpb25zQ29sbGVjdGlvblt0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXhdLnN0YXJ0O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIChjdXJyU2Nyb2xsUG9zWCA8IG1heFNjcm9sbFdpZHRoQXJlYSB8fCBjdXJyU2Nyb2xsUG9zWCA+IGN1cnJDb2FjaFRyaWdnZXIuc3RhcnQpICYmXG4gICAgICAhaXNTY3JvbGxQb3NTYW1lVG9DdXJyQ29hY2hQb3NcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGNvYWNoIGluZGV4IHdoaWNoIGlzIGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSBzY3JvbGwgYXJlYVxuICAgKiBAcmV0dXJucyBudW1iZXJcbiAgICovXG4gIHByaXZhdGUgX2dldENvYWNoSW5kZXhCeVNjcm9sbFRyaWdnZXJQb3NpdGlvbigpOiBudW1iZXIge1xuICAgIGNvbnN0IHNjcm9sbE9mZnNldFggPSB0aGlzLmNvYWNoU2Nyb2xsQXJlYS5zY3JvbGxMZWZ0ICsgdGhpcy5zY3JvbGxDb2FjaHNBcmVhV2lkdGggLyAyO1xuICAgIHJldHVybiB0aGlzLnRyaWdnZXJDb2FjaFBvc2l0aW9uc0NvbGxlY3Rpb24uZmluZEluZGV4KFxuICAgICAgKGNvYWNoVHJpZ2dlcikgPT4gc2Nyb2xsT2Zmc2V0WCA+PSBjb2FjaFRyaWdnZXIuc3RhcnQgJiYgc2Nyb2xsT2Zmc2V0WCA8PSBjb2FjaFRyaWdnZXIuZW5kLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmaXJzdCBwbGFjZSBvZiBjdXJyZW50IHNlbGVjdGVkIGNvYWNoIGJ5IHRhYmxlIGNlbGwgY29vcmRpbmF0ZSAwLTAgaWQuXG4gICAqIEByZXR1cm5zIFBsYWNlIG9yIG51bGxcbiAgICovXG4gIHByaXZhdGUgX2dldEZpcnN0UGxhY2VJblNlbGVjZWRDb2FjaCgpOiBQbGFjZSB8IG51bGwge1xuICAgIGxldCBmaXJzdFBsYWNlOiBQbGFjZSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IGNvYWNoID0gdGhpcy5zZWF0UmVzZXJ2YXRpb24/LmNvYWNoSXRlbXNbdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4XTtcbiAgICBjb25zdCBmaXJzdENlbGxJZCA9ICdjZWxsLScgKyB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggKyAnLTAtMCc7XG4gICAgY29uc3QgcGxhY2VOdW1iZXIgPVxuICAgICAgdGhpcy5zaGFkb3dSb290XG4gICAgICAgID8ucXVlcnlTZWxlY3RvcjxTYmJTZWF0UmVzZXJ2YXRpb25TY29wZWRFbGVtZW50PihcIltjZWxsLWlkPSdcIiArIGZpcnN0Q2VsbElkICsgXCInXVwiKVxuICAgICAgICA/LnF1ZXJ5U2VsZWN0b3I8U2JiU2VhdFJlc2VydmF0aW9uUGxhY2VDb250cm9sRWxlbWVudD4oJ3NiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wnKVxuICAgICAgICA/LmdldEF0dHJpYnV0ZSgndGV4dCcpIHx8IG51bGw7XG5cbiAgICBpZiAoY29hY2ggJiYgcGxhY2VOdW1iZXIpIHtcbiAgICAgIGZpcnN0UGxhY2UgPSBjb2FjaC5wbGFjZXM/LmZpbmQoKHBsYWNlKSA9PiBwbGFjZS5udW1iZXIgPT09IHBsYWNlTnVtYmVyKSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmlyc3RQbGFjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUbyBnZXQgdGhlIGNvcnJlY3QgY2xvc2VzdCBwbGFjZSBvZiBjdXJyZW50IHByZXNzZWQga2V5IGFuZCB0aGUgY3VycmVudCBzZWxlY3RlZCBwbGFjZSxcbiAgICogd2UgaGF2ZSB0byBpbnZlc3RpZ2F0ZSB0aGUgY29vcmRpbmF0ZXMgb2YgZWFjaCBwbGFjZSB0byBmaW5kIHRoZSBjbG9zZXN0IHBsYWNlIG9mIHRoZSBjdXJyU2VsZWN0ZWRQbGFjZUVsZW1lbnRJZC5cbiAgICogQHBhcmFtIHByZXNzZWRLZXlcbiAgICogQHJldHVybnMgUGxhY2Ugb3IgbnVsbFxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Q2xvc2VzdFBsYWNlQnlLZXlEaXJlY3Rpb24ocHJlc3NlZEtleT86IHN0cmluZyk6IFBsYWNlIHwgbnVsbCB7XG4gICAgY29uc3QgY29hY2ggPSB0aGlzLnNlYXRSZXNlcnZhdGlvbj8uY29hY2hJdGVtc1t0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXhdO1xuICAgIGxldCBjbG9zZXN0UGxhY2UgPSBudWxsO1xuICAgIGlmIChjb2FjaC5wbGFjZXMpIHtcbiAgICAgIC8vIElmIG5vIHBsYWNlIHNldCwgdGhlbiB3ZSB1c2UgaW5pdGlhbCB0aGUgbGVmdC10b3AgcGxhY2Ugb24gdGhlIGNvYWNoXG4gICAgICBpZiAoIXRoaXMuY3VyclNlbGVjdGVkUGxhY2VFbGVtZW50SWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEZpcnN0UGxhY2VJblNlbGVjZWRDb2FjaCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuY3VyclNlbGVjdGVkUGxhY2UpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBsYWNlIG9mIGNvYWNoLnBsYWNlcykge1xuICAgICAgICAgICAgLy8gSWYga2V5IHByZXNzZWQsIHRoZW4gd2UgdHJ5IHRvIGZpbmQgdGhlIHBsYWNlIG9mIHRoZSBjdXJyZW50IGN1cnJTY3JvbGxEaXJlY3Rpb25cbiAgICAgICAgICAgIGlmICghcHJlc3NlZEtleSkge1xuICAgICAgICAgICAgICAvL0ZpbmQgcGxhY2UgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIGNvYWNoIGJ5IHkgY29vcmRpbmF0ZS4gQ3VycmVudCBjdXJyU2Nyb2xsRGlyZWN0aW9uIGlzIFJJR0hUKVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24ucmlnaHQgJiZcbiAgICAgICAgICAgICAgICBwbGFjZS5wb3NpdGlvbi55ID09PSB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlPy5wb3NpdGlvbi55ICYmXG4gICAgICAgICAgICAgICAgKCFjbG9zZXN0UGxhY2UgfHwgcGxhY2UucG9zaXRpb24ueCA8IGNsb3Nlc3RQbGFjZS5wb3NpdGlvbi54KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjbG9zZXN0UGxhY2UgPSBwbGFjZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvL0ZpbmQgcGxhY2UgZnJvbSB0aGUgcmlnaHQgc2lkZSBvZiBjb2FjaCBieSB5IGNvb3JkaW5hdGUuIEN1cnJlbnQgY3VyclNjcm9sbERpcmVjdGlvbiBpcyBMRUZUXG4gICAgICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuY3VyclNjcm9sbERpcmVjdGlvbiA9PT0gU2Nyb2xsRGlyZWN0aW9uLmxlZnQgJiZcbiAgICAgICAgICAgICAgICBwbGFjZS5wb3NpdGlvbi55ID09PSB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlPy5wb3NpdGlvbi55ICYmXG4gICAgICAgICAgICAgICAgKCFjbG9zZXN0UGxhY2UgfHwgcGxhY2UucG9zaXRpb24ueCA+IGNsb3Nlc3RQbGFjZS5wb3NpdGlvbi54KVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjbG9zZXN0UGxhY2UgPSBwbGFjZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHBsYWNlLm51bWJlciAhPT0gdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZT8ubnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgLy9LZXkgW1JpZ2h0XSBuYXZpZ2F0aW9uLCB3ZSBjaGVjayB0aGUgcGxhY2UgY29vcmRpbmF0ZXMgb2YgdGhlIHgtYXhpcyB0byBnZXQgdGhlIHNtYWxsZXN0IGxhcmdlciB4IHBsYWNlIGNvb3JkaW5hdGUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBwbGFjZVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHByZXNzZWRLZXkgPT09IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93UmlnaHQgJiZcbiAgICAgICAgICAgICAgICAgIChwbGFjZS5wb3NpdGlvbi55ID09PSB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlLnBvc2l0aW9uLnkgfHxcbiAgICAgICAgICAgICAgICAgICAgcGxhY2UucG9zaXRpb24ueSA9PT0gdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZS5wb3NpdGlvbi55IC0gMSkgJiZcbiAgICAgICAgICAgICAgICAgIHBsYWNlLnBvc2l0aW9uLnggPiB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlLnBvc2l0aW9uLnggJiZcbiAgICAgICAgICAgICAgICAgICghY2xvc2VzdFBsYWNlIHx8IHBsYWNlLnBvc2l0aW9uLnggPCBjbG9zZXN0UGxhY2UucG9zaXRpb24ueClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNsb3Nlc3RQbGFjZSA9IHBsYWNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL0tleSBbRG93bl0gbmF2aWdhdGlvbiwgd2UgY2hlY2sgdGhlIHBsYWNlIGNvb3JkaW5hdGVzIG9mIHRoZSB5LWF4aXMgdG8gZ2V0IHRoZSBzbWFsbGVzdCBsYXJnZXIgeSBwbGFjZSBjb29yZGluYXRlIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGxhY2VcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgIHByZXNzZWRLZXkgPT09IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93RG93biAmJlxuICAgICAgICAgICAgICAgICAgKHBsYWNlLnBvc2l0aW9uLnggPT09IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueCB8fFxuICAgICAgICAgICAgICAgICAgICBwbGFjZS5wb3NpdGlvbi54ID09PSB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlLnBvc2l0aW9uLnggKyAxKSAmJlxuICAgICAgICAgICAgICAgICAgcGxhY2UucG9zaXRpb24ueSA+IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueSAmJlxuICAgICAgICAgICAgICAgICAgKCFjbG9zZXN0UGxhY2UgfHwgcGxhY2UucG9zaXRpb24ueSA8IGNsb3Nlc3RQbGFjZS5wb3NpdGlvbi55KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY2xvc2VzdFBsYWNlID0gcGxhY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vS2V5IFtMZWZ0XSBuYXZpZ2F0aW9uLCB3ZSBjaGVjayB0aGUgcGxhY2UgY29vcmRpbmF0ZXMgb2YgdGhlIHgtYXhpcyB0byBnZXQgdGhlIGdyZWF0ZXN0IHNtYWxsZXIgeCBwbGFjZSBjb29yZGluYXRlIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcGxhY2VcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgIHByZXNzZWRLZXkgPT09IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93TGVmdCAmJlxuICAgICAgICAgICAgICAgICAgKHBsYWNlLnBvc2l0aW9uLnkgPT09IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueSB8fFxuICAgICAgICAgICAgICAgICAgICBwbGFjZS5wb3NpdGlvbi55ID09PSB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlLnBvc2l0aW9uLnkgKyAxKSAmJlxuICAgICAgICAgICAgICAgICAgcGxhY2UucG9zaXRpb24ueCA8IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueCAmJlxuICAgICAgICAgICAgICAgICAgKCFjbG9zZXN0UGxhY2UgfHwgcGxhY2UucG9zaXRpb24ueCA+IGNsb3Nlc3RQbGFjZS5wb3NpdGlvbi54KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY2xvc2VzdFBsYWNlID0gcGxhY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vS2V5IFtVcF0gbmF2aWdhdGlvbiwgd2UgY2hlY2sgdGhlIHBsYWNlIGNvb3JkaW5hdGVzIG9mIHRoZSB5LWF4aXMgdG8gZ2V0IHRoZSBncmVhdGVzdCBzbWFsbGVyIHkgcGxhY2UgY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBsYWNlXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICBwcmVzc2VkS2V5ID09PSB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd1VwICYmXG4gICAgICAgICAgICAgICAgICAocGxhY2UucG9zaXRpb24ueCA9PT0gdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZS5wb3NpdGlvbi54IHx8XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlLnBvc2l0aW9uLnggPT09IHRoaXMuY3VyclNlbGVjdGVkUGxhY2UucG9zaXRpb24ueCAtIDEpICYmXG4gICAgICAgICAgICAgICAgICBwbGFjZS5wb3NpdGlvbi55IDwgdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZT8ucG9zaXRpb24ueSAmJlxuICAgICAgICAgICAgICAgICAgKCFjbG9zZXN0UGxhY2UgfHwgcGxhY2UucG9zaXRpb24ueSA+IGNsb3Nlc3RQbGFjZS5wb3NpdGlvbi55KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY2xvc2VzdFBsYWNlID0gcGxhY2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjbG9zZXN0UGxhY2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9jdXNQbGFjZUVsZW1lbnQocGxhY2U6IFBsYWNlIHwgbnVsbCwgY29hY2hJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudW5mb2N1c1BsYWNlRWxlbWVudCgpO1xuICAgIGlmIChwbGFjZSkge1xuICAgICAgdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSA9IHBsYWNlO1xuICAgICAgaWYgKGNvYWNoSW5kZXgpIHtcbiAgICAgICAgdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4ID0gY29hY2hJbmRleDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2V0Q3VyclNlbGVjdGVkUGxhY2VFbGVtZW50SWQocGxhY2UpO1xuXG4gICAgICBjb25zdCBzZWxlY3RlZFBsYWNlRWxlbWVudCA9IHRoaXMuX2dldFBsYWNlSHRtbEVsZW1lbnQoKTtcbiAgICAgIGlmIChzZWxlY3RlZFBsYWNlRWxlbWVudCkge1xuICAgICAgICBzZWxlY3RlZFBsYWNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2tleWZvY3VzJywgJ2ZvY3VzJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVuZm9jdXNQbGFjZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRQbGFjZUVsZW1lbnQgPSB0aGlzLl9nZXRQbGFjZUh0bWxFbGVtZW50KCk7XG4gICAgaWYgKHNlbGVjdGVkUGxhY2VFbGVtZW50KSB7XG4gICAgICBzZWxlY3RlZFBsYWNlRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2tleWZvY3VzJywgJ3VuZm9jdXMnKTtcbiAgICAgIHRoaXMuX3NldEN1cnJTZWxlY3RlZFBsYWNlRWxlbWVudElkKG51bGwpO1xuICAgICAgdGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldENhbGN1bGF0ZWREaW1lbnNpb24oXG4gICAgZWxlbWVudERpbWVuc2lvbjogRWxlbWVudERpbWVuc2lvbixcbiAgICBjb2FjaERpbWVuc2lvbj86IEVsZW1lbnREaW1lbnNpb24sXG4gICAgaXNPcmlnaW5IZWlnaHQ/OiBib29sZWFuLFxuICAgIGlzU3RyZXRjaEhlaWdodD86IGJvb2xlYW4sXG4gICk6IEVsZW1lbnREaW1lbnNpb24ge1xuICAgIGlmIChjb2FjaERpbWVuc2lvbiAmJiAhaXNPcmlnaW5IZWlnaHQpIHtcbiAgICAgIGVsZW1lbnREaW1lbnNpb24uaCArPSB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0ICogMjtcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJldGNoSGVpZ2h0KSB7XG4gICAgICBlbGVtZW50RGltZW5zaW9uLmggKz0gdGhpcy5jb2FjaEJvcmRlck9mZnNldDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdzogdGhpcy5iYXNlR3JpZFNpemUgKiBlbGVtZW50RGltZW5zaW9uLncsXG4gICAgICBoOiB0aGlzLmJhc2VHcmlkU2l6ZSAqIGVsZW1lbnREaW1lbnNpb24uaCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldENhbGN1bGF0ZWRQb3NpdGlvbihcbiAgICBlbGVtZW50UG9zaXRpb246IEVsZW1lbnRQb3NpdGlvbixcbiAgICBlbGVtZW50RGltZW5zaW9uPzogRWxlbWVudERpbWVuc2lvbixcbiAgICBjb2FjaERpbWVuc2lvbj86IEVsZW1lbnREaW1lbnNpb24sXG4gICAgaXNPcmlnaW5IZWlnaHQ/OiBib29sZWFuLFxuICApOiBFbGVtZW50UG9zaXRpb24ge1xuICAgIGlmIChjb2FjaERpbWVuc2lvbiAmJiBlbGVtZW50RGltZW5zaW9uKSB7XG4gICAgICBjb25zdCBlbmRQb3NIZWlnaHQgPSBpc09yaWdpbkhlaWdodFxuICAgICAgICA/IGNvYWNoRGltZW5zaW9uLmhcbiAgICAgICAgOiBjb2FjaERpbWVuc2lvbi5oICsgdGhpcy5jb2FjaEJvcmRlck9mZnNldDtcbiAgICAgIC8vSWYgdGhlIG9yaWdpbmFsIGVsZW1lbnQgaXMgcG9zaXRpb25lZCBhdCB0aGUgdG9wIG9yIGJvdHRvbSBvZiB0aGUgY29hY2gsIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUgdGhlIFkgY29vcmRpbmF0ZSB3aXRoIHRoZSBhZGRpdGlvbmFsIGJvcmRlciBwYWRkaW5nXG4gICAgICBpZiAoZWxlbWVudFBvc2l0aW9uLnkgPT09IDApIHtcbiAgICAgICAgZWxlbWVudFBvc2l0aW9uLnkgLT0gdGhpcy5jb2FjaEJvcmRlck9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudFBvc2l0aW9uLnkgKyBlbGVtZW50RGltZW5zaW9uLmggPT09IGVuZFBvc0hlaWdodCkge1xuICAgICAgICBlbGVtZW50UG9zaXRpb24ueSArPSB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB4OiB0aGlzLmJhc2VHcmlkU2l6ZSAqIGVsZW1lbnRQb3NpdGlvbi54LFxuICAgICAgeTogdGhpcy5iYXNlR3JpZFNpemUgKiBlbGVtZW50UG9zaXRpb24ueSxcbiAgICAgIHo6IGVsZW1lbnRQb3NpdGlvbi56LFxuICAgIH07XG4gIH1cblxuICAvLyBIYW5kbGluZyBmb3IgVGFiIG5hdmlnYXRpb24gaWYgYW4gcGxhY2UgaXMgc2VsZWN0ZWQgaW5zaWRlIHRoZSBjb2FjaC5cbiAgLy8gVGhpcyBjb250cm9scyB0aGUgZm9jdXNlZCBjb2FjaCBmcm9tIHRoZSBjdXJyZW50IHNlbGVjdGVkIGNvYWNoLlxuICBwcml2YXRlIF9uYXZpZ2F0ZUNvYWNoTmF2aWdhdGlvbkJ5S2V5Ym9hcmQodGFiRGlyZWN0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyRm9jdXNJbmRleCA9XG4gICAgICB0aGlzLmZvY3VzZWRDb2FjaEluZGV4ID09PSAtMVxuICAgICAgICA/IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCA9PT0gLTFcbiAgICAgICAgICA/IDBcbiAgICAgICAgICA6IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleFxuICAgICAgICA6IHRoaXMuZm9jdXNlZENvYWNoSW5kZXg7XG4gICAgLy8gQ2hlY2sgbmV4dCBvciBwcmV2IHRhYiBpcyBwcmVzc2VkLCB0aGVuIHdlIG5lZWQgdG8gZmluZCB0aGUgbmV4dCBhdmFpbGFibGUgY29hY2ggaW5kZXggdGhhdCBzaG91bGQgcmVjZWl2ZSB0aGUgZm9jdXNcbiAgICBjb25zdCBuZXdGb2N1c2FibGVJbmRleDogbnVtYmVyID1cbiAgICAgIHRhYkRpcmVjdGlvbiA9PT0gJ05FWFRfVEFCJ1xuICAgICAgICA/IHRoaXMuZ2V0TmV4dEF2YWlsYWJsZUNvYWNoSW5kZXgoY3VyckZvY3VzSW5kZXgpXG4gICAgICAgIDogdGhpcy5nZXRQcmV2QXZhaWxhYmxlQ29hY2hJbmRleChjdXJyRm9jdXNJbmRleCk7XG5cbiAgICAvLyBJZiB0aGUgY3VyckZvY3VzSW5kZXggZXF1YWxzIHRoZSBuZXdGb2N1c2FibGVJbmRleCB0aGVuIHdlIGhhdmUgcmVhY2hlZCB0aGUgZmlyc3Qgb3IgbGFzdCB0YWJhYmxlIG5hdmlnYXRpb24gY29hY2ggRWxlbWVudCBhbmQgd2UgaGF2ZSB0byB0aGUgc2V0IHRoZSBmb2N1cyBtYW51YWwgdG8gdGhlIGZpcnN0VGFiRWxlbWVudCBvciBsYXN0VGFiRWxlbWVudC5cbiAgICBpZiAoY3VyckZvY3VzSW5kZXggPT09IG5ld0ZvY3VzYWJsZUluZGV4KSB7XG4gICAgICB0aGlzLnVuZm9jdXNQbGFjZUVsZW1lbnQoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2FjaEluZGV4ID0gLTE7XG4gICAgICB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggPSAtMTtcbiAgICAgIHRoaXMuc2VhdFJlc2VydmF0aW9uV2l0aG91dE5hdmlnYXRpb25IYXNGb2N1cyA9IGZhbHNlO1xuXG4gICAgICBpZiAodGFiRGlyZWN0aW9uID09PSAnTkVYVF9UQUInKSB0aGlzLmxhc3RUYWJFbGVtZW50LmZvY3VzKCk7XG4gICAgICBlbHNlIHRoaXMuZmlyc3RUYWJFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5oYXNOYXZpZ2F0aW9uKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZFBsYWNlRWxlbWVudCA9IHRoaXMuX2dldFBsYWNlSHRtbEVsZW1lbnQoKTtcbiAgICAgIGNvbnN0IHBsYWNlSW5Db2FjaEhhc0ZvY3VzID0gc2VsZWN0ZWRQbGFjZUVsZW1lbnRcbiAgICAgICAgPyBzZWxlY3RlZFBsYWNlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2tleWZvY3VzJykgPT09ICdmb2N1cydcbiAgICAgICAgOiBmYWxzZTtcblxuICAgICAgLy8gSWYgd2UgdGFiIGJhY2sgKFBSRVZfVEFCKSBhbmQgdGhlIGZvY3VzIGlzIGN1cnJlbnRseSBvbiBwbGFjZSxcbiAgICAgIC8vIHdlIHJlbW92ZSB0aGUgc2VsZWN0ZWQgc3RhdGUgZnJvbSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG5hdmlnYXRpb24gY29hY2ggYW5kIG9ubHkgc2V0IHRoZSBmb2N1cyBzdGF0dXMgdG8gaXRcbiAgICAgIGlmICh0YWJEaXJlY3Rpb24gPT09ICdQUkVWX1RBQicgJiYgdGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPT09IGN1cnJGb2N1c0luZGV4KSB7XG4gICAgICAgIGlmIChwbGFjZUluQ29hY2hIYXNGb2N1cykge1xuICAgICAgICAgIHRoaXMuZm9jdXNlZENvYWNoSW5kZXggPSBjdXJyRm9jdXNJbmRleDtcbiAgICAgICAgICB0aGlzLnVuZm9jdXNQbGFjZUVsZW1lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZvY3VzZWRDb2FjaEluZGV4ID0gbmV3Rm9jdXNhYmxlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIE9ubHkgc2V0cyB0aGUgZm9jdXMgb24gdGhlIG5ldyBuYXZpZ2F0aW9uIGNvYWNoXG4gICAgICBlbHNlIGlmIChuZXdGb2N1c2FibGVJbmRleCAhPT0gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4KSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZENvYWNoSW5kZXggPSBuZXdGb2N1c2FibGVJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZENvYWNoSW5kZXggPSAtMTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPSBuZXdGb2N1c2FibGVJbmRleDtcbiAgICAgICAgLy8gSWYgYW55IHBsYWNlIHdhcyBmb2N1c2VkIGluIGNvYWNoLCBzbyB3ZSBzZXQgZm9jdXNlZCBhZ2FpblxuICAgICAgICBpZiAocGxhY2VJbkNvYWNoSGFzRm9jdXMpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzUGxhY2VFbGVtZW50KHRoaXMuY3VyclNlbGVjdGVkUGxhY2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG5vIHBsYWNlIHdhcyBzZWxlY3RlZCwgdGhlbiB3ZSBzZWxlY3QgdGhlIGNvYWNoIGdyaWRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdGhpcy5pc0NvYWNoR3JpZEZvY3VzYWJsZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fc2V0Rm9jdXNUb1NlbGVjdGVkQ29hY2hHcmlkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgbm8gbmF2aWdhdGlvbiBleGlzdCwgd2Ugc2Nyb2xsIGRpcmVjdGx5IHRvIHRoZSBuZXh0IHRhYmFibGUgY29hY2hcbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZE5hdkNvYWNoKG5ld0ZvY3VzYWJsZUluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9uYXZpZ2F0ZVRvUGxhY2VCeUtleWJvYXJkKHByZXNzZWRLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucHJldmVudENvYWNoU2Nyb2xsQnlQbGFjZUNsaWNrID0gZmFsc2U7XG4gICAgdGhpcy5pc0tleWJvYXJkTmF2aWdhdGlvbiA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5mb2N1c2VkQ29hY2hJbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuZm9jdXNlZENvYWNoSW5kZXggPSAtMTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucHJldmVudFBsYWNlQ2xpY2spIHtcbiAgICAgIGNvbnN0IGZpbmRDbG9zZXN0UGxhY2UgPSB0aGlzLl9nZXRDbG9zZXN0UGxhY2VCeUtleURpcmVjdGlvbihwcmVzc2VkS2V5KTtcbiAgICAgIGlmIChmaW5kQ2xvc2VzdFBsYWNlKSB7XG4gICAgICAgIHRoaXMuZm9jdXNQbGFjZUVsZW1lbnQoZmluZENsb3Nlc3RQbGFjZSk7XG4gICAgICB9XG4gICAgICAvLyBObyBjbG9zZXN0IHBsYWNlIGZvdW5kIGJ5IGtleSBuYXZpZ2F0aW9uXG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHByZXNzZWRLZXkgPT09IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93UmlnaHQgfHxcbiAgICAgICAgICBwcmVzc2VkS2V5ID09PSB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd0xlZnQgfHxcbiAgICAgICAgICAodGhpcy5hbGlnblZlcnRpY2FsICYmXG4gICAgICAgICAgICAocHJlc3NlZEtleSA9PT0gdGhpcy5rZXlib2FyZE5hdmlnYXRpb25FdmVudHMuQXJyb3dVcCB8fFxuICAgICAgICAgICAgICBwcmVzc2VkS2V5ID09PSB0aGlzLmtleWJvYXJkTmF2aWdhdGlvbkV2ZW50cy5BcnJvd0Rvd24pKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDaGVjayB0aGUgY3VycmVudCBwcmVzc2VkIGtleSB0byBnZXQgdGhlIG5leHQgYXZhaWxhYmxlIGNvYWNoIGluZGV4XG4gICAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWRDb2FjaEluZGV4ID1cbiAgICAgICAgICAgIHByZXNzZWRLZXkgPT09IHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uRXZlbnRzLkFycm93UmlnaHRcbiAgICAgICAgICAgICAgPyB0aGlzLmdldE5leHRBdmFpbGFibGVDb2FjaEluZGV4KClcbiAgICAgICAgICAgICAgOiB0aGlzLmdldFByZXZBdmFpbGFibGVDb2FjaEluZGV4KCk7XG5cbiAgICAgICAgICB0aGlzLnNjcm9sbFRvU2VsZWN0ZWROYXZDb2FjaChuZXdTZWxlY3RlZENvYWNoSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldE5leHRBdmFpbGFibGVDb2FjaEluZGV4KGN1cnJlbnRJbmRleD86IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IGN1cnJlbnRJbmRleCA/PyB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXg7XG4gICAgcmV0dXJuIHN0YXJ0SW5kZXggPCB0aGlzLnNlYXRSZXNlcnZhdGlvbi5jb2FjaEl0ZW1zLmxlbmd0aCAtIDEgPyBzdGFydEluZGV4ICsgMSA6IHN0YXJ0SW5kZXg7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0UHJldkF2YWlsYWJsZUNvYWNoSW5kZXgoY3VycmVudEluZGV4PzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdGFydEluZGV4ID0gY3VycmVudEluZGV4ID8/IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleDtcbiAgICByZXR1cm4gc3RhcnRJbmRleCA+IDAgPyBzdGFydEluZGV4IC0gMSA6IHN0YXJ0SW5kZXg7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXMocGxhY2VTZWxlY3Rpb246IFBsYWNlU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgLy8gQWRkIHNlbGVjdGVkIHBsYWNlIHRvIHNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzXG4gICAgaWYgKHBsYWNlU2VsZWN0aW9uLnN0YXRlID09PSAnU0VMRUNURUQnKSB7XG4gICAgICBjb25zdCBzZWF0UmVzZXJ2YXRpb25TZWxlY3Rpb24gPSB0aGlzLl9nZXRTZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbihwbGFjZVNlbGVjdGlvbik7XG4gICAgICBpZiAoc2VhdFJlc2VydmF0aW9uU2VsZWN0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXMucHVzaChzZWF0UmVzZXJ2YXRpb25TZWxlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBSZW1vdmUgc2VsZWN0ZWQgcGxhY2UgZnJvbSBzZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlc1xuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcyA9IHRoaXMuc2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXMuZmlsdGVyKFxuICAgICAgICAoX3NlbGVjdGVkUGxhY2UpID0+IF9zZWxlY3RlZFBsYWNlLmlkICE9PSBwbGFjZVNlbGVjdGlvbi5pZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2tzIHdoZXRoZXIgbWF4UmVzZXJ2YXRpb24gaXMgYWN0aXZhdGVkIGFuZCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2VsZWN0ZWQgcGxhY2VzIGlzIHJlYWNoZWRcbiAgICBpZiAodGhpcy5tYXhSZXNlcnZhdGlvbnMgJiYgdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcy5sZW5ndGggPiB0aGlzLm1heFJlc2VydmF0aW9ucykge1xuICAgICAgdGhpcy5fcmVzZXRBbGxQbGFjZVNlbGVjdGlvbnMocGxhY2VTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBAdHlwZSB7Q3VzdG9tRXZlbnQ8U2VhdFJlc2VydmF0aW9uU2VsZWN0ZWRQbGFjZXNFdmVudERldGFpbHM+fVxuICAgICAqIEVtaXRzIHdoZW4gYSBwbGFjZSB3YXMgc2VsZWN0ZWQgYW5kIHJldHVybnMgYSBQbGFjZSBhcnJheSB3aXRoIGFsbCBzZWxlY3RlZCBwbGFjZXMuXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50PFNlYXRSZXNlcnZhdGlvblNlbGVjdGVkUGxhY2VzRXZlbnREZXRhaWxzPignc2VsZWN0ZWRwbGFjZXMnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICBkZXRhaWw6IHRoaXMuc2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXMsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZUN1cnJlbnRTZWxlY3RlZFBsYWNlSW5Db2FjaChwbGFjZVNlbGVjdGlvbjogUGxhY2VTZWxlY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBjb2FjaEluZGV4ID0gcGxhY2VTZWxlY3Rpb24uY29hY2hJbmRleDtcbiAgICBjb25zdCBwbGFjZSA9IHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXNbY29hY2hJbmRleF0ucGxhY2VzPy5maW5kKFxuICAgICAgKHBsYWNlKSA9PiBwbGFjZS5udW1iZXIgPT0gcGxhY2VTZWxlY3Rpb24ubnVtYmVyLFxuICAgICk7XG5cbiAgICBpZiAoIXBsYWNlKSByZXR1cm47XG4gICAgdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4ID0gY29hY2hJbmRleDtcbiAgICB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlID0gcGxhY2U7XG4gICAgaWYgKHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCAhPT0gdGhpcy5zZWxlY3RlZENvYWNoSW5kZXgpIHtcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudFNlbGVjdGVkQ29hY2goKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRDdXJyU2VsZWN0ZWRQbGFjZUVsZW1lbnRJZChwbGFjZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlQ3VycmVudFNlbGVjdGVkQ29hY2goKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPSB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXg7XG4gICAgdGhpcy5mb2N1c2VkQ29hY2hJbmRleCA9IC0xO1xuICAgIGNvbnN0IGNvYWNoU2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VhdFJlc2VydmF0aW9uQ29hY2hTZWxlY3Rpb24odGhpcy5zZWxlY3RlZENvYWNoSW5kZXgpO1xuICAgIGlmIChjb2FjaFNlbGVjdGlvbikge1xuICAgICAgLyoqXG4gICAgICAgKiBAdHlwZSB7Q3VzdG9tRXZlbnQ8U2VhdFJlc2VydmF0aW9uQ29hY2hTZWxlY3Rpb24+fVxuICAgICAgICogRW1pdHMgd2hlbiBhIGNvYWNoIHdhcyBzZWxlY3RlZCBhbmQgcmV0dXJucyBhIENvYWNoU2VsZWN0aW9uXG4gICAgICAgKi9cbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IEN1c3RvbUV2ZW50PFNlYXRSZXNlcnZhdGlvbkNvYWNoU2VsZWN0aW9uPignc2VsZWN0ZWRjb2FjaCcsIHtcbiAgICAgICAgICBidWJibGVzOiB0cnVlLFxuICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgICAgIGRldGFpbDogY29hY2hTZWxlY3Rpb24sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6YXRpb24gb2YgU2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24gQXJyYXkgYmFzZWQgb24gdGhlIHRyYW5zZmVycmVkIHBsYWNlc1xuICAgKiB0aGF0IGhhdmUgdGhlIHN0YXRlIFNFTEVDVEVEIHdpdGhpbiB0aGUgc2VhdFJlc2VydmF0aW9uIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBfaW5pdFNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXMubWFwKChjb2FjaDogQ29hY2hJdGVtLCBjb2FjaEluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvYWNoLnBsYWNlc1xuICAgICAgICA/LmZpbHRlcigocGxhY2UpID0+IHBsYWNlLnN0YXRlID09PSAnU0VMRUNURUQnKVxuICAgICAgICA/LmZvckVhY2goKHBsYWNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJlc2VsZWN0ZWRQbGFjZVNlbGVjdGlvbjogUGxhY2VTZWxlY3Rpb24gPSBtYXBQbGFjZUluZm9zVG9QbGFjZVNlbGVjdGlvbihcbiAgICAgICAgICAgIHBsYWNlLFxuICAgICAgICAgICAgY29hY2hJbmRleCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uOiBTZWF0UmVzZXJ2YXRpb25QbGFjZVNlbGVjdGlvbiB8IG51bGwgPVxuICAgICAgICAgICAgdGhpcy5fZ2V0U2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24ocHJlc2VsZWN0ZWRQbGFjZVNlbGVjdGlvbik7XG4gICAgICAgICAgaWYgKHNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcy5wdXNoKHNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWxsIHNlbGVjdGVkIHBsYWNlcyB3aWxsIGJlIHJlc2V0IG9yIHRoZSBjdXJyZW50U2VsZWN0ZWRQbGFjZSB3YXMgZ2l2ZW4sIHRoZW4gd2UgcmVzZXQgYWxsIGV4Y2VwdCBjdXJyZW50U2VsZWN0ZWRQbGFjZVxuICAgKiBAcGFyYW0gY3VyclNlbGVjdGVkUGxhY2VcbiAgICovXG4gIHByaXZhdGUgX3Jlc2V0QWxsUGxhY2VTZWxlY3Rpb25zKGN1cnJTZWxlY3RlZFBsYWNlPzogUGxhY2VTZWxlY3Rpb24pOiB2b2lkIHtcbiAgICAvL0ZpbmQgYWxsIHBsYWNlcyB0byBiZSBuZWVkZWQgdW5zZWxlY3RcbiAgICBmb3IgKGNvbnN0IHBsYWNlU2VsZWN0aW9uIG9mIHRoaXMuc2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXMpIHtcbiAgICAgIGlmICghY3VyclNlbGVjdGVkUGxhY2UgfHwgY3VyclNlbGVjdGVkUGxhY2UuaWQgIT09IHBsYWNlU2VsZWN0aW9uLmlkKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQocGxhY2VTZWxlY3Rpb24uaWQpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBwbGFjZUVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdGF0ZScsICdGUkVFJyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vUmVtb3ZlcyBhbGwgc2VsZWN0ZWQgcGxhY2VzIGV4Y2VwdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHBsYWNlXG4gICAgaWYgKGN1cnJTZWxlY3RlZFBsYWNlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzID0gdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcy5maWx0ZXIoXG4gICAgICAgIChfc2VsZWN0ZWRQbGFjZSkgPT4gX3NlbGVjdGVkUGxhY2UuaWQgPT09IGN1cnJTZWxlY3RlZFBsYWNlLmlkLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFNlYXRSZXNlcnZhdGlvblBsYWNlcyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFNlYXRSZXNlcnZhdGlvblBsYWNlU2VsZWN0aW9uKFxuICAgIGN1cnJTZWxlY3RlZFBsYWNlOiBQbGFjZVNlbGVjdGlvbixcbiAgKTogU2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24gfCBudWxsIHtcbiAgICBjb25zdCBjb2FjaCA9IHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXNbY3VyclNlbGVjdGVkUGxhY2UuY29hY2hJbmRleF07XG4gICAgY29uc3QgcGxhY2UgPSBjb2FjaC5wbGFjZXM/LmZpbmQoKHBsYWNlKSA9PiBwbGFjZS5udW1iZXIgPT09IGN1cnJTZWxlY3RlZFBsYWNlLm51bWJlcik7XG5cbiAgICByZXR1cm4gcGxhY2VcbiAgICAgID8gbWFwUGxhY2VBbmRDb2FjaFRvU2VhdFJlc2VydmF0aW9uUGxhY2VTZWxlY3Rpb24ocGxhY2UsIGNvYWNoLCBjdXJyU2VsZWN0ZWRQbGFjZS5jb2FjaEluZGV4KVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U2VhdFJlc2VydmF0aW9uQ29hY2hTZWxlY3Rpb24oXG4gICAgY29hY2hJbmRleDogbnVtYmVyLFxuICApOiBTZWF0UmVzZXJ2YXRpb25Db2FjaFNlbGVjdGlvbiB8IG51bGwge1xuICAgIGlmICghdGhpcy5zZWF0UmVzZXJ2YXRpb24uY29hY2hJdGVtc1tjb2FjaEluZGV4XSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBjb2FjaCA9IHRoaXMuc2VhdFJlc2VydmF0aW9uLmNvYWNoSXRlbXNbY29hY2hJbmRleF07XG4gICAgcmV0dXJuIG1hcENvYWNoSW5mb3NUb0NvYWNoU2VsZWN0aW9uKGNvYWNoSW5kZXgsIGNvYWNoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldEN1cnJTZWxlY3RlZFBsYWNlRWxlbWVudElkKHBsYWNlOiBQbGFjZSB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAocGxhY2UpIHtcbiAgICAgIHRoaXMuY3VyclNlbGVjdGVkUGxhY2VFbGVtZW50SWQgPVxuICAgICAgICAnc2VhdC1yZXNlcnZhdGlvbl9fcGxhY2UtYnV0dG9uLScgKyB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXggKyAnLScgKyBwbGFjZS5udW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VyclNlbGVjdGVkUGxhY2VFbGVtZW50SWQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIHBsYWNlIEhUTUwgZWxlbWVudCBieSBnaXZlbiBwbGFjZU51bWJlciBhbmQgY29hY2hJbmRleC5cbiAgICogSWYgYm90aCBkb2VzbnQgZXhpc3QsIHdlIHRyeSB0byByZXR1cm4gdGhlIHBsYWNlIEhUTUwgZWxlbWVudCBieSB0aGUgX2N1cnJlbnRTZWxlY3RlZFBsYWNlRWxlbWVudElkXG4gICAqIEBwYXJhbSBwbGFjZU51bWJlciBvcHRpb25hbCBhcyBzdHJpbmdcbiAgICogQHBhcmFtIGNvYWNoSW5kZXggb3B0aW9uYWwgYXMgc3RyaW5nXG4gICAqIEByZXR1cm5zIEhUTUxFbGVtZW50IG9yIG51bGxcbiAgICovXG4gIHByaXZhdGUgX2dldFBsYWNlSHRtbEVsZW1lbnQocGxhY2VOdW1iZXI/OiBzdHJpbmcsIGNvYWNoSW5kZXg/OiBudW1iZXIpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IGN1cnJDb2FjaEluZGV4ID0gY29hY2hJbmRleCA/IGNvYWNoSW5kZXggOiB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXg7XG4gICAgY29uc3QgY29hY2hQbGFjZU51bWJlcklkID0gcGxhY2VOdW1iZXJcbiAgICAgID8gJ3NlYXQtcmVzZXJ2YXRpb25fX3BsYWNlLWJ1dHRvbi0nICsgY3VyckNvYWNoSW5kZXggKyAnLScgKyBwbGFjZU51bWJlclxuICAgICAgOiB0aGlzLmN1cnJTZWxlY3RlZFBsYWNlRWxlbWVudElkO1xuICAgIHJldHVybiBjb2FjaFBsYWNlTnVtYmVySWQgPyB0aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKGNvYWNoUGxhY2VOdW1iZXJJZCkgfHwgbnVsbCA6IG51bGw7XG4gIH1cblxuICAvL1NldCB0aGUgdmVydGljYWwgb2Zmc2V0XG4gIHByaXZhdGUgX3NldFZlcnRpY2FsQWxpZ25tZW50T2Zmc2V0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2VhdFJlc2VydmF0aW9uV3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICcuc2JiLXNyX193cmFwcGVyJyxcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBpZiAoc2VhdFJlc2VydmF0aW9uV3JhcHBlckVsZW1lbnQpIHtcbiAgICAgICAgY29uc3Qgc2VhdFJlc2VydmF0aW9uVmVydGljYWxPZmZzZXQgPVxuICAgICAgICAgIHNlYXRSZXNlcnZhdGlvbldyYXBwZXJFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgICAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi12ZXJ0aWNhbC1vZmZzZXQnLFxuICAgICAgICAgIGAke3NlYXRSZXNlcnZhdGlvblZlcnRpY2FsT2Zmc2V0fXB4YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlNjcm9sbERpcmVjdGlvbiIsInBsYWNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBdUJBLElBQUs7QUFBQSxDQUFMLFNBQUtBLGtCQUFlO0FBQ2xCQSxtQkFBQSxPQUFBLElBQUE7QUFDQUEsbUJBQUEsTUFBQSxJQUFBO0FBQ0YsR0FISyxvQkFBQSxrQkFBZSxDQUFBLEVBQUE7SUFhUCw4QkFBMEIsTUFBQTs7b0JBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBbkMsU0FBQSxtQkFBbUMsWUFBVTtBQUFBOztBQVF4RDtBQUtBO0FBS0E7QUFLQTtBQUtBO0FBS0E7QUFLQTtBQUVTO0FBQ0E7QUFqQ08seUJBQUEsbUNBQUEsa0JBQUEsTUFBQSwrQkFBbUMsSUFBSztBQUt4Qyx5QkFBQSxrQ0FBQSxrQkFBQSxNQUFBLGtDQUFBLEdBQUEsa0JBQUEsTUFBQSw2QkFBeUIsSUFBSTtBQUs3Qix5QkFBQSxrQ0FBQSxrQkFBQSxNQUFBLGdDQUFBLEdBQUEsa0JBQUEsTUFBQSw2QkFBeUIsS0FBSztBQUs5Qix5QkFBQSxpQ0FBQSxrQkFBQSxNQUFBLGdDQUFBLEdBQUEsa0JBQUEsTUFBQSw0QkFBdUIsRUFBRTtBQUt6Qix5QkFBQSwyQkFBQSxrQkFBQSxNQUFBLCtCQUFBLEdBQUEsa0JBQUEsTUFBQSxzQkFBaUIsSUFBSztBQUt0Qix5QkFBQSxvQ0FBQSxrQkFBQSxNQUFB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
@@ -1 +1 @@
1
- {"version":3,"file":"seat-reservation.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements-experimental/seat-reservation/seat-reservation/seat-reservation.component.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAM1E,OAAO,KAAK,EAMV,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAGhF,OAAO,+CAA+C,CAAC;AACvD,OAAO,6BAA6B,CAAC;AACrC,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,qEAAqE,CAAC;AAC7E,OAAO,8BAA8B,CAAC;AAEtC;;GAEG;AACH,qBAEM,yBAA0B,SAAQ,0BAA0B;IAChE,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD,wEAAwE;IACxE,SACyB,eAAe,EAAE,eAAe,CAAS;IAElE,sEAAsE;IACtE,SAEyB,aAAa,EAAE,OAAO,CAAQ;IAEvD,kGAAkG;IAClG,SAEyB,aAAa,EAAE,OAAO,CAAS;IAExD,iDAAiD;IACjD,SAEyB,eAAe,EAAE,MAAM,CAAS;IAEzD,2CAA2C;IAC3C,SAEyB,iBAAiB,EAAE,OAAO,CAAS;IAE5D,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAE9C,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,2BAA2B,CAAkB;cAElC,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAgBzD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAK3D,MAAM,IAAI,cAAc,GAAG,IAAI;IAKlD,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,uCAAuC;IAwC/C,OAAO,CAAC,iBAAiB;IAqCzB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,wBAAwB;IA+BhC,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,wBAAwB;IA2ChC,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,yBAAyB;IA2EjC,OAAO,CAAC,4BAA4B;IA0CpC,OAAO,CAAC,2BAA2B;IAyCnC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,yBAAyB;IAuBjC,OAAO,CAAC,8BAA8B;CAyBvC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,sBAAsB,EAAE,yBAAyB,CAAC;KACnD;CACF"}
1
+ {"version":3,"file":"seat-reservation.component.d.ts","sourceRoot":"","sources":["../../../../../src/elements-experimental/seat-reservation/seat-reservation/seat-reservation.component.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAM1E,OAAO,KAAK,EAMV,eAAe,EAChB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAGhF,OAAO,+CAA+C,CAAC;AACvD,OAAO,6BAA6B,CAAC;AACrC,OAAO,gCAAgC,CAAC;AACxC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yCAAyC,CAAC;AACjD,OAAO,+BAA+B,CAAC;AAEvC;;GAEG;AACH,qBAEM,yBAA0B,SAAQ,0BAA0B;IAChE,OAAuB,MAAM,EAAE,cAAc,CAAS;IAEtD,wEAAwE;IACxE,SACyB,eAAe,EAAE,eAAe,CAAS;IAElE,sEAAsE;IACtE,SAEyB,aAAa,EAAE,OAAO,CAAQ;IAEvD,kGAAkG;IAClG,SAEyB,aAAa,EAAE,OAAO,CAAS;IAExD,iDAAiD;IACjD,SAEyB,eAAe,EAAE,MAAM,CAAS;IAEzD,2CAA2C;IAC3C,SAEyB,iBAAiB,EAAE,OAAO,CAAS;IAE5D,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,oBAAoB,CAAC,CAAiB;IAE9C,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,2BAA2B,CAAkB;cAElC,UAAU,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAgBzD,YAAY,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;cAK3D,MAAM,IAAI,cAAc,GAAG,IAAI;IAKlD,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,uCAAuC;IAwC/C,OAAO,CAAC,iBAAiB;IAqCzB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,mBAAmB;IA0B3B,OAAO,CAAC,wBAAwB;IA+BhC,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,wBAAwB;IA4ChC,OAAO,CAAC,6BAA6B;IA0BrC,OAAO,CAAC,yBAAyB;IA2EjC,OAAO,CAAC,4BAA4B;IA0CpC,OAAO,CAAC,2BAA2B;IAyCnC;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,yBAAyB;IAuBjC,OAAO,CAAC,8BAA8B;CAyBvC;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAE7B,sBAAsB,EAAE,yBAAyB,CAAC;KACnD;CACF"}